OSDN Git Service

PR c++/48424
[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 void record_unknown_type (tree, const char *);
78 static tree builtin_function_1 (tree, tree, bool);
79 static tree build_library_fn_1 (tree, enum tree_code, tree);
80 static int member_function_or_else (tree, tree, enum overload_flags);
81 static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
82                             int);
83 static void check_for_uninitialized_const_var (tree);
84 static hashval_t typename_hash (const void *);
85 static int typename_compare (const void *, const void *);
86 static tree local_variable_p_walkfn (tree *, int *, void *);
87 static tree record_builtin_java_type (const char *, int);
88 static const char *tag_name (enum tag_types);
89 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
90 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
91 static void maybe_deduce_size_from_array_init (tree, tree);
92 static void layout_var_decl (tree);
93 static tree check_initializer (tree, tree, int, tree *);
94 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
95 static void save_function_data (tree);
96 static void copy_type_enum (tree , tree);
97 static void check_function_type (tree, tree);
98 static void finish_constructor_body (void);
99 static void begin_destructor_body (void);
100 static void finish_destructor_body (void);
101 static void record_key_method_defined (tree);
102 static tree create_array_type_for_decl (tree, tree, tree);
103 static tree get_atexit_node (void);
104 static tree get_dso_handle_node (void);
105 static tree start_cleanup_fn (void);
106 static void end_cleanup_fn (void);
107 static tree cp_make_fname_decl (location_t, tree, int);
108 static void initialize_predefined_identifiers (void);
109 static tree check_special_function_return_type
110         (special_function_kind, tree, tree);
111 static tree push_cp_library_fn (enum tree_code, tree);
112 static tree build_cp_library_fn (tree, enum tree_code, tree);
113 static void store_parm_decls (tree);
114 static void initialize_local_var (tree, tree);
115 static void expand_static_init (tree, tree);
116
117 /* The following symbols are subsumed in the cp_global_trees array, and
118    listed here individually for documentation purposes.
119
120    C++ extensions
121         tree wchar_decl_node;
122
123         tree vtable_entry_type;
124         tree delta_type_node;
125         tree __t_desc_type_node;
126
127         tree class_type_node;
128         tree unknown_type_node;
129
130    Array type `vtable_entry_type[]'
131
132         tree vtbl_type_node;
133         tree vtbl_ptr_type_node;
134
135    Namespaces,
136
137         tree std_node;
138         tree abi_node;
139
140    A FUNCTION_DECL which can call `abort'.  Not necessarily the
141    one that the user will declare, but sufficient to be called
142    by routines that want to abort the program.
143
144         tree abort_fndecl;
145
146    The FUNCTION_DECL for the default `::operator delete'.
147
148         tree global_delete_fndecl;
149
150    Used by RTTI
151         tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
152         tree tinfo_var_id;  */
153
154 tree cp_global_trees[CPTI_MAX];
155
156 /* Indicates that there is a type value in some namespace, although
157    that is not necessarily in scope at the moment.  */
158
159 tree global_type_node;
160
161 /* The node that holds the "name" of the global scope.  */
162 tree global_scope_name;
163
164 #define local_names cp_function_chain->x_local_names
165
166 /* A list of objects which have constructors or destructors
167    which reside in the global scope.  The decl is stored in
168    the TREE_VALUE slot and the initializer is stored
169    in the TREE_PURPOSE slot.  */
170 tree static_aggregates;
171
172 /* -- end of C++ */
173
174 /* A node for the integer constant 2.  */
175
176 tree integer_two_node;
177
178 /* Used only for jumps to as-yet undefined labels, since jumps to
179    defined labels can have their validity checked immediately.  */
180
181 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
182   struct named_label_use_entry *next;
183   /* The binding level to which this entry is *currently* attached.
184      This is initially the binding level in which the goto appeared,
185      but is modified as scopes are closed.  */
186   struct cp_binding_level *binding_level;
187   /* The head of the names list that was current when the goto appeared,
188      or the inner scope popped.  These are the decls that will *not* be
189      skipped when jumping to the label.  */
190   tree names_in_scope;
191   /* The location of the goto, for error reporting.  */
192   location_t o_goto_locus;
193   /* True if an OpenMP structured block scope has been closed since
194      the goto appeared.  This means that the branch from the label will
195      illegally exit an OpenMP scope.  */
196   bool in_omp_scope;
197 };
198
199 /* A list of all LABEL_DECLs in the function that have names.  Here so
200    we can clear out their names' definitions at the end of the
201    function, and so we can check the validity of jumps to these labels.  */
202
203 struct GTY(()) named_label_entry {
204   /* The decl itself.  */
205   tree label_decl;
206
207   /* The binding level to which the label is *currently* attached.
208      This is initially set to the binding level in which the label
209      is defined, but is modified as scopes are closed.  */
210   struct cp_binding_level *binding_level;
211   /* The head of the names list that was current when the label was
212      defined, or the inner scope popped.  These are the decls that will
213      be skipped when jumping to the label.  */
214   tree names_in_scope;
215   /* A vector of all decls from all binding levels that would be
216      crossed by a backward branch to the label.  */
217   VEC(tree,gc) *bad_decls;
218
219   /* A list of uses of the label, before the label is defined.  */
220   struct named_label_use_entry *uses;
221
222   /* The following bits are set after the label is defined, and are
223      updated as scopes are popped.  They indicate that a backward jump
224      to the label will illegally enter a scope of the given flavor.  */
225   bool in_try_scope;
226   bool in_catch_scope;
227   bool in_omp_scope;
228 };
229
230 #define named_labels cp_function_chain->x_named_labels
231 \f
232 /* The number of function bodies which we are currently processing.
233    (Zero if we are at namespace scope, one inside the body of a
234    function, two inside the body of a function in a local class, etc.)  */
235 int function_depth;
236
237 /* To avoid unwanted recursion, finish_function defers all mark_used calls
238    encountered during its execution until it finishes.  */
239 bool defer_mark_used_calls;
240 VEC(tree, gc) *deferred_mark_used_calls;
241
242 /* States indicating how grokdeclarator() should handle declspecs marked
243    with __attribute__((deprecated)).  An object declared as
244    __attribute__((deprecated)) suppresses warnings of uses of other
245    deprecated items.  */
246 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
247
248 \f
249 /* A list of VAR_DECLs whose type was incomplete at the time the
250    variable was declared.  */
251
252 typedef struct GTY(()) incomplete_var_d {
253   tree decl;
254   tree incomplete_type;
255 } incomplete_var;
256
257 DEF_VEC_O(incomplete_var);
258 DEF_VEC_ALLOC_O(incomplete_var,gc);
259
260 static GTY(()) VEC(incomplete_var,gc) *incomplete_vars;
261 \f
262 /* Returns the kind of template specialization we are currently
263    processing, given that it's declaration contained N_CLASS_SCOPES
264    explicit scope qualifications.  */
265
266 tmpl_spec_kind
267 current_tmpl_spec_kind (int n_class_scopes)
268 {
269   int n_template_parm_scopes = 0;
270   int seen_specialization_p = 0;
271   int innermost_specialization_p = 0;
272   struct cp_binding_level *b;
273
274   /* Scan through the template parameter scopes.  */
275   for (b = current_binding_level;
276        b->kind == sk_template_parms;
277        b = b->level_chain)
278     {
279       /* If we see a specialization scope inside a parameter scope,
280          then something is wrong.  That corresponds to a declaration
281          like:
282
283             template <class T> template <> ...
284
285          which is always invalid since [temp.expl.spec] forbids the
286          specialization of a class member template if the enclosing
287          class templates are not explicitly specialized as well.  */
288       if (b->explicit_spec_p)
289         {
290           if (n_template_parm_scopes == 0)
291             innermost_specialization_p = 1;
292           else
293             seen_specialization_p = 1;
294         }
295       else if (seen_specialization_p == 1)
296         return tsk_invalid_member_spec;
297
298       ++n_template_parm_scopes;
299     }
300
301   /* Handle explicit instantiations.  */
302   if (processing_explicit_instantiation)
303     {
304       if (n_template_parm_scopes != 0)
305         /* We've seen a template parameter list during an explicit
306            instantiation.  For example:
307
308              template <class T> template void f(int);
309
310            This is erroneous.  */
311         return tsk_invalid_expl_inst;
312       else
313         return tsk_expl_inst;
314     }
315
316   if (n_template_parm_scopes < n_class_scopes)
317     /* We've not seen enough template headers to match all the
318        specialized classes present.  For example:
319
320          template <class T> void R<T>::S<T>::f(int);
321
322        This is invalid; there needs to be one set of template
323        parameters for each class.  */
324     return tsk_insufficient_parms;
325   else if (n_template_parm_scopes == n_class_scopes)
326     /* We're processing a non-template declaration (even though it may
327        be a member of a template class.)  For example:
328
329          template <class T> void S<T>::f(int);
330
331        The `class T' matches the `S<T>', leaving no template headers
332        corresponding to the `f'.  */
333     return tsk_none;
334   else if (n_template_parm_scopes > n_class_scopes + 1)
335     /* We've got too many template headers.  For example:
336
337          template <> template <class T> void f (T);
338
339        There need to be more enclosing classes.  */
340     return tsk_excessive_parms;
341   else
342     /* This must be a template.  It's of the form:
343
344          template <class T> template <class U> void S<T>::f(U);
345
346        This is a specialization if the innermost level was a
347        specialization; otherwise it's just a definition of the
348        template.  */
349     return innermost_specialization_p ? tsk_expl_spec : tsk_template;
350 }
351
352 /* Exit the current scope.  */
353
354 void
355 finish_scope (void)
356 {
357   poplevel (0, 0, 0);
358 }
359
360 /* When a label goes out of scope, check to see if that label was used
361    in a valid manner, and issue any appropriate warnings or errors.  */
362
363 static void
364 pop_label (tree label, tree old_value)
365 {
366   if (!processing_template_decl)
367     {
368       if (DECL_INITIAL (label) == NULL_TREE)
369         {
370           location_t location;
371
372           error ("label %q+D used but not defined", label);
373           location = input_location; /* FIXME want (input_filename, (line)0) */
374           /* Avoid crashing later.  */
375           define_label (location, DECL_NAME (label));
376         }
377       else 
378         warn_for_unused_label (label);
379     }
380
381   SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
382 }
383
384 /* At the end of a function, all labels declared within the function
385    go out of scope.  BLOCK is the top-level block for the
386    function.  */
387
388 static int
389 pop_labels_1 (void **slot, void *data)
390 {
391   struct named_label_entry *ent = (struct named_label_entry *) *slot;
392   tree block = (tree) data;
393
394   pop_label (ent->label_decl, NULL_TREE);
395
396   /* Put the labels into the "variables" of the top-level block,
397      so debugger can see them.  */
398   DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
399   BLOCK_VARS (block) = ent->label_decl;
400
401   htab_clear_slot (named_labels, slot);
402
403   return 1;
404 }
405
406 static void
407 pop_labels (tree block)
408 {
409   if (named_labels)
410     {
411       htab_traverse (named_labels, pop_labels_1, block);
412       named_labels = NULL;
413     }
414 }
415
416 /* At the end of a block with local labels, restore the outer definition.  */
417
418 static void
419 pop_local_label (tree label, tree old_value)
420 {
421   struct named_label_entry dummy;
422   void **slot;
423
424   pop_label (label, old_value);
425
426   dummy.label_decl = label;
427   slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
428   htab_clear_slot (named_labels, slot);
429 }
430
431 /* The following two routines are used to interface to Objective-C++.
432    The binding level is purposely treated as an opaque type.  */
433
434 void *
435 objc_get_current_scope (void)
436 {
437   return current_binding_level;
438 }
439
440 /* The following routine is used by the NeXT-style SJLJ exceptions;
441    variables get marked 'volatile' so as to not be clobbered by
442    _setjmp()/_longjmp() calls.  All variables in the current scope,
443    as well as parent scopes up to (but not including) ENCLOSING_BLK
444    shall be thusly marked.  */
445
446 void
447 objc_mark_locals_volatile (void *enclosing_blk)
448 {
449   struct cp_binding_level *scope;
450
451   for (scope = current_binding_level;
452        scope && scope != enclosing_blk;
453        scope = scope->level_chain)
454     {
455       tree decl;
456
457       for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
458         objc_volatilize_decl (decl);
459
460       /* Do not climb up past the current function.  */
461       if (scope->kind == sk_function_parms)
462         break;
463     }
464 }
465
466 /* Update data for defined and undefined labels when leaving a scope.  */
467
468 static int
469 poplevel_named_label_1 (void **slot, void *data)
470 {
471   struct named_label_entry *ent = (struct named_label_entry *) *slot;
472   struct cp_binding_level *bl = (struct cp_binding_level *) data;
473   struct cp_binding_level *obl = bl->level_chain;
474
475   if (ent->binding_level == bl)
476     {
477       tree decl;
478
479       /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
480          TREE_LISTs representing OVERLOADs, so be careful.  */
481       for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
482                                                      ? DECL_CHAIN (decl)
483                                                      : TREE_CHAIN (decl)))
484         if (decl_jump_unsafe (decl))
485           VEC_safe_push (tree, gc, ent->bad_decls, decl);
486
487       ent->binding_level = obl;
488       ent->names_in_scope = obl->names;
489       switch (bl->kind)
490         {
491         case sk_try:
492           ent->in_try_scope = true;
493           break;
494         case sk_catch:
495           ent->in_catch_scope = true;
496           break;
497         case sk_omp:
498           ent->in_omp_scope = true;
499           break;
500         default:
501           break;
502         }
503     }
504   else if (ent->uses)
505     {
506       struct named_label_use_entry *use;
507
508       for (use = ent->uses; use ; use = use->next)
509         if (use->binding_level == bl)
510           {
511             use->binding_level = obl;
512             use->names_in_scope = obl->names;
513             if (bl->kind == sk_omp)
514               use->in_omp_scope = true;
515           }
516     }
517
518   return 1;
519 }
520
521 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
522    when errors were reported, except for -Werror-unused-but-set-*.  */
523 static int unused_but_set_errorcount;
524
525 /* Exit a binding level.
526    Pop the level off, and restore the state of the identifier-decl mappings
527    that were in effect when this level was entered.
528
529    If KEEP == 1, this level had explicit declarations, so
530    and create a "block" (a BLOCK node) for the level
531    to record its declarations and subblocks for symbol table output.
532
533    If FUNCTIONBODY is nonzero, this level is the body of a function,
534    so create a block as if KEEP were set and also clear out all
535    label names.
536
537    If REVERSE is nonzero, reverse the order of decls before putting
538    them into the BLOCK.  */
539
540 tree
541 poplevel (int keep, int reverse, int functionbody)
542 {
543   tree link;
544   /* The chain of decls was accumulated in reverse order.
545      Put it into forward order, just for cleanliness.  */
546   tree decls;
547   tree subblocks;
548   tree block;
549   tree decl;
550   int leaving_for_scope;
551   scope_kind kind;
552   unsigned ix;
553   cp_label_binding *label_bind;
554
555   timevar_start (TV_NAME_LOOKUP);
556  restart:
557
558   block = NULL_TREE;
559
560   gcc_assert (current_binding_level->kind != sk_class);
561
562   if (current_binding_level->kind == sk_cleanup)
563     functionbody = 0;
564   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
565
566   gcc_assert (!VEC_length(cp_class_binding,
567                           current_binding_level->class_shadowed));
568
569   /* We used to use KEEP == 2 to indicate that the new block should go
570      at the beginning of the list of blocks at this binding level,
571      rather than the end.  This hack is no longer used.  */
572   gcc_assert (keep == 0 || keep == 1);
573
574   if (current_binding_level->keep)
575     keep = 1;
576
577   /* Any uses of undefined labels, and any defined labels, now operate
578      under constraints of next binding contour.  */
579   if (cfun && !functionbody && named_labels)
580     htab_traverse (named_labels, poplevel_named_label_1,
581                    current_binding_level);
582
583   /* Get the decls in the order they were written.
584      Usually current_binding_level->names is in reverse order.
585      But parameter decls were previously put in forward order.  */
586
587   if (reverse)
588     current_binding_level->names
589       = decls = nreverse (current_binding_level->names);
590   else
591     decls = current_binding_level->names;
592
593   /* If there were any declarations or structure tags in that level,
594      or if this level is a function body,
595      create a BLOCK to record them for the life of this function.  */
596   block = NULL_TREE;
597   if (keep == 1 || functionbody)
598     block = make_node (BLOCK);
599   if (block != NULL_TREE)
600     {
601       BLOCK_VARS (block) = decls;
602       BLOCK_SUBBLOCKS (block) = subblocks;
603     }
604
605   /* In each subblock, record that this is its superior.  */
606   if (keep >= 0)
607     for (link = subblocks; link; link = BLOCK_CHAIN (link))
608       BLOCK_SUPERCONTEXT (link) = block;
609
610   /* We still support the old for-scope rules, whereby the variables
611      in a for-init statement were in scope after the for-statement
612      ended.  We only use the new rules if flag_new_for_scope is
613      nonzero.  */
614   leaving_for_scope
615     = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
616
617   /* Before we remove the declarations first check for unused variables.  */
618   if ((warn_unused_variable || warn_unused_but_set_variable)
619       && !processing_template_decl)
620     for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
621       if (TREE_CODE (decl) == VAR_DECL
622           && (! TREE_USED (decl) || !DECL_READ_P (decl))
623           && ! DECL_IN_SYSTEM_HEADER (decl)
624           && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
625         {
626           if (! TREE_USED (decl))
627             warning (OPT_Wunused_variable, "unused variable %q+D", decl);
628           else if (DECL_CONTEXT (decl) == current_function_decl
629                    && TREE_TYPE (decl) != error_mark_node
630                    && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
631                    && errorcount == unused_but_set_errorcount
632                    && (!CLASS_TYPE_P (TREE_TYPE (decl))
633                        || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
634             {
635               warning (OPT_Wunused_but_set_variable,
636                        "variable %q+D set but not used", decl); 
637               unused_but_set_errorcount = errorcount;
638             }
639         }
640
641   /* Remove declarations for all the DECLs in this level.  */
642   for (link = decls; link; link = TREE_CHAIN (link))
643     {
644       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
645           && DECL_NAME (link))
646         {
647           tree name = DECL_NAME (link);
648           cxx_binding *ob;
649           tree ns_binding;
650
651           ob = outer_binding (name,
652                               IDENTIFIER_BINDING (name),
653                               /*class_p=*/true);
654           if (!ob)
655             ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
656           else
657             ns_binding = NULL_TREE;
658
659           if (ob && ob->scope == current_binding_level->level_chain)
660             /* We have something like:
661
662                  int i;
663                  for (int i; ;);
664
665                and we are leaving the `for' scope.  There's no reason to
666                keep the binding of the inner `i' in this case.  */
667             pop_binding (name, link);
668           else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
669                    || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
670             /* Here, we have something like:
671
672                  typedef int I;
673
674                  void f () {
675                    for (int I; ;);
676                  }
677
678                We must pop the for-scope binding so we know what's a
679                type and what isn't.  */
680             pop_binding (name, link);
681           else
682             {
683               /* Mark this VAR_DECL as dead so that we can tell we left it
684                  there only for backward compatibility.  */
685               DECL_DEAD_FOR_LOCAL (link) = 1;
686
687               /* Keep track of what should have happened when we
688                  popped the binding.  */
689               if (ob && ob->value)
690                 {
691                   SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
692                   DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
693                 }
694
695               /* Add it to the list of dead variables in the next
696                  outermost binding to that we can remove these when we
697                  leave that binding.  */
698               VEC_safe_push (tree, gc,
699                              current_binding_level->level_chain->dead_vars_from_for,
700                              link);
701
702               /* Although we don't pop the cxx_binding, we do clear
703                  its SCOPE since the scope is going away now.  */
704               IDENTIFIER_BINDING (name)->scope
705                 = current_binding_level->level_chain;
706             }
707         }
708       else
709         {
710           tree name;
711
712           /* Remove the binding.  */
713           decl = link;
714
715           if (TREE_CODE (decl) == TREE_LIST)
716             decl = TREE_VALUE (decl);
717           name = decl;
718
719           if (TREE_CODE (name) == OVERLOAD)
720             name = OVL_FUNCTION (name);
721
722           gcc_assert (DECL_P (name));
723           pop_binding (DECL_NAME (name), decl);
724         }
725     }
726
727   /* Remove declarations for any `for' variables from inner scopes
728      that we kept around.  */
729   FOR_EACH_VEC_ELT_REVERSE (tree, current_binding_level->dead_vars_from_for,
730                             ix, decl)
731     pop_binding (DECL_NAME (decl), decl);
732
733   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
734   for (link = current_binding_level->type_shadowed;
735        link; link = TREE_CHAIN (link))
736     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
737
738   /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
739   FOR_EACH_VEC_ELT_REVERSE (cp_label_binding,
740                             current_binding_level->shadowed_labels,
741                             ix, label_bind)
742     pop_local_label (label_bind->label, label_bind->prev_value);
743
744   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
745      list if a `using' declaration put them there.  The debugging
746      back ends won't understand OVERLOAD, so we remove them here.
747      Because the BLOCK_VARS are (temporarily) shared with
748      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
749      popped all the bindings.  */
750   if (block)
751     {
752       tree* d;
753
754       for (d = &BLOCK_VARS (block); *d; )
755         {
756           if (TREE_CODE (*d) == TREE_LIST)
757             *d = TREE_CHAIN (*d);
758           else
759             d = &DECL_CHAIN (*d);
760         }
761     }
762
763   /* If the level being exited is the top level of a function,
764      check over all the labels.  */
765   if (functionbody)
766     {
767       /* Since this is the top level block of a function, the vars are
768          the function's parameters.  Don't leave them in the BLOCK
769          because they are found in the FUNCTION_DECL instead.  */
770       BLOCK_VARS (block) = 0;
771       pop_labels (block);
772     }
773
774   kind = current_binding_level->kind;
775   if (kind == sk_cleanup)
776     {
777       tree stmt;
778
779       /* If this is a temporary binding created for a cleanup, then we'll
780          have pushed a statement list level.  Pop that, create a new
781          BIND_EXPR for the block, and insert it into the stream.  */
782       stmt = pop_stmt_list (current_binding_level->statement_list);
783       stmt = c_build_bind_expr (input_location, block, stmt);
784       add_stmt (stmt);
785     }
786
787   leave_scope ();
788   if (functionbody)
789     {
790       /* The current function is being defined, so its DECL_INITIAL
791          should be error_mark_node.  */
792       gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
793       DECL_INITIAL (current_function_decl) = block;
794     }
795   else if (block)
796     current_binding_level->blocks
797       = block_chainon (current_binding_level->blocks, block);
798
799   /* If we did not make a block for the level just exited,
800      any blocks made for inner levels
801      (since they cannot be recorded as subblocks in that level)
802      must be carried forward so they will later become subblocks
803      of something else.  */
804   else if (subblocks)
805     current_binding_level->blocks
806       = block_chainon (current_binding_level->blocks, subblocks);
807
808   /* Each and every BLOCK node created here in `poplevel' is important
809      (e.g. for proper debugging information) so if we created one
810      earlier, mark it as "used".  */
811   if (block)
812     TREE_USED (block) = 1;
813
814   /* All temporary bindings created for cleanups are popped silently.  */
815   if (kind == sk_cleanup)
816     goto restart;
817
818   timevar_stop (TV_NAME_LOOKUP);
819   return block;
820 }
821
822 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
823    itself, calling F for each.  The DATA is passed to F as well.  */
824
825 static int
826 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
827 {
828   int result = 0;
829   tree current = NAMESPACE_LEVEL (name_space)->namespaces;
830
831   result |= (*f) (name_space, data);
832
833   for (; current; current = DECL_CHAIN (current))
834     result |= walk_namespaces_r (current, f, data);
835
836   return result;
837 }
838
839 /* Walk all the namespaces, calling F for each.  The DATA is passed to
840    F as well.  */
841
842 int
843 walk_namespaces (walk_namespaces_fn f, void* data)
844 {
845   return walk_namespaces_r (global_namespace, f, data);
846 }
847
848 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
849    DATA is non-NULL, this is the last time we will call
850    wrapup_global_declarations for this NAMESPACE.  */
851
852 int
853 wrapup_globals_for_namespace (tree name_space, void* data)
854 {
855   struct cp_binding_level *level = NAMESPACE_LEVEL (name_space);
856   VEC(tree,gc) *statics = level->static_decls;
857   tree *vec = VEC_address (tree, statics);
858   int len = VEC_length (tree, statics);
859   int last_time = (data != 0);
860
861   if (last_time)
862     {
863       check_global_declarations (vec, len);
864       emit_debug_global_declarations (vec, len);
865       return 0;
866     }
867
868   /* Write out any globals that need to be output.  */
869   return wrapup_global_declarations (vec, len);
870 }
871
872 \f
873 /* In C++, you don't have to write `struct S' to refer to `S'; you
874    can just use `S'.  We accomplish this by creating a TYPE_DECL as
875    if the user had written `typedef struct S S'.  Create and return
876    the TYPE_DECL for TYPE.  */
877
878 tree
879 create_implicit_typedef (tree name, tree type)
880 {
881   tree decl;
882
883   decl = build_decl (input_location, TYPE_DECL, name, type);
884   DECL_ARTIFICIAL (decl) = 1;
885   /* There are other implicit type declarations, like the one *within*
886      a class that allows you to write `S::S'.  We must distinguish
887      amongst these.  */
888   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
889   TYPE_NAME (type) = decl;
890   TYPE_STUB_DECL (type) = decl;
891
892   return decl;
893 }
894
895 /* Remember a local name for name-mangling purposes.  */
896
897 static void
898 push_local_name (tree decl)
899 {
900   size_t i, nelts;
901   tree t, name;
902
903   timevar_start (TV_NAME_LOOKUP);
904
905   name = DECL_NAME (decl);
906
907   nelts = VEC_length (tree, local_names);
908   for (i = 0; i < nelts; i++)
909     {
910       t = VEC_index (tree, local_names, i);
911       if (DECL_NAME (t) == name)
912         {
913           if (!DECL_LANG_SPECIFIC (decl))
914             retrofit_lang_decl (decl);
915           DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
916           if (DECL_LANG_SPECIFIC (t))
917             DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
918           else
919             DECL_DISCRIMINATOR (decl) = 1;
920
921           VEC_replace (tree, local_names, i, decl);
922           timevar_stop (TV_NAME_LOOKUP);
923           return;
924         }
925     }
926
927   VEC_safe_push (tree, gc, local_names, decl);
928   timevar_stop (TV_NAME_LOOKUP);
929 }
930 \f
931 /* Subroutine of duplicate_decls: return truthvalue of whether
932    or not types of these decls match.
933
934    For C++, we must compare the parameter list so that `int' can match
935    `int&' in a parameter position, but `int&' is not confused with
936    `const int&'.  */
937
938 int
939 decls_match (tree newdecl, tree olddecl)
940 {
941   int types_match;
942
943   if (newdecl == olddecl)
944     return 1;
945
946   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
947     /* If the two DECLs are not even the same kind of thing, we're not
948        interested in their types.  */
949     return 0;
950
951   if (TREE_CODE (newdecl) == FUNCTION_DECL)
952     {
953       tree f1 = TREE_TYPE (newdecl);
954       tree f2 = TREE_TYPE (olddecl);
955       tree p1 = TYPE_ARG_TYPES (f1);
956       tree p2 = TYPE_ARG_TYPES (f2);
957
958       /* Specializations of different templates are different functions
959          even if they have the same type.  */
960       tree t1 = (DECL_USE_TEMPLATE (newdecl)
961                  ? DECL_TI_TEMPLATE (newdecl)
962                  : NULL_TREE);
963       tree t2 = (DECL_USE_TEMPLATE (olddecl)
964                  ? DECL_TI_TEMPLATE (olddecl)
965                  : NULL_TREE);
966       if (t1 != t2)
967         return 0;
968
969       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
970           && ! (DECL_EXTERN_C_P (newdecl)
971                 && DECL_EXTERN_C_P (olddecl)))
972         return 0;
973
974 #ifdef NO_IMPLICIT_EXTERN_C
975       /* A new declaration doesn't match a built-in one unless it
976          is also extern "C".  */
977       if (DECL_IS_BUILTIN (olddecl)
978           && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
979         return 0;
980 #endif
981
982       if (TREE_CODE (f1) != TREE_CODE (f2))
983         return 0;
984
985       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
986         {
987           if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
988               && (DECL_BUILT_IN (olddecl)
989 #ifndef NO_IMPLICIT_EXTERN_C
990                   || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
991                   || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
992 #endif
993               ))
994             {
995               types_match = self_promoting_args_p (p1);
996               if (p1 == void_list_node)
997                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
998             }
999 #ifndef NO_IMPLICIT_EXTERN_C
1000           else if (!prototype_p (f1)
1001                    && (DECL_EXTERN_C_P (olddecl)
1002                        && DECL_IN_SYSTEM_HEADER (olddecl)
1003                        && !DECL_CLASS_SCOPE_P (olddecl))
1004                    && (DECL_EXTERN_C_P (newdecl)
1005                        && DECL_IN_SYSTEM_HEADER (newdecl)
1006                        && !DECL_CLASS_SCOPE_P (newdecl)))
1007             {
1008               types_match = self_promoting_args_p (p2);
1009               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1010             }
1011 #endif
1012           else
1013             types_match =
1014               compparms (p1, p2)
1015               && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1016                   || comp_type_attributes (TREE_TYPE (newdecl),
1017                                            TREE_TYPE (olddecl)) != 0);
1018         }
1019       else
1020         types_match = 0;
1021     }
1022   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1023     {
1024       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1025           != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1026         return 0;
1027
1028       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1029                                 DECL_TEMPLATE_PARMS (olddecl)))
1030         return 0;
1031
1032       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1033         types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1034                                    TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1035       else
1036         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1037                                    DECL_TEMPLATE_RESULT (newdecl));
1038     }
1039   else
1040     {
1041       /* Need to check scope for variable declaration (VAR_DECL).
1042          For typedef (TYPE_DECL), scope is ignored.  */
1043       if (TREE_CODE (newdecl) == VAR_DECL
1044           && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1045           /* [dcl.link]
1046              Two declarations for an object with C language linkage
1047              with the same name (ignoring the namespace that qualify
1048              it) that appear in different namespace scopes refer to
1049              the same object.  */
1050           && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1051         return 0;
1052
1053       if (TREE_TYPE (newdecl) == error_mark_node)
1054         types_match = TREE_TYPE (olddecl) == error_mark_node;
1055       else if (TREE_TYPE (olddecl) == NULL_TREE)
1056         types_match = TREE_TYPE (newdecl) == NULL_TREE;
1057       else if (TREE_TYPE (newdecl) == NULL_TREE)
1058         types_match = 0;
1059       else
1060         types_match = comptypes (TREE_TYPE (newdecl),
1061                                  TREE_TYPE (olddecl),
1062                                  COMPARE_REDECLARATION);
1063     }
1064
1065   return types_match;
1066 }
1067
1068 /* If NEWDECL is `static' and an `extern' was seen previously,
1069    warn about it.  OLDDECL is the previous declaration.
1070
1071    Note that this does not apply to the C++ case of declaring
1072    a variable `extern const' and then later `const'.
1073
1074    Don't complain about built-in functions, since they are beyond
1075    the user's control.  */
1076
1077 void
1078 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1079 {
1080   if (TREE_CODE (newdecl) == TYPE_DECL
1081       || TREE_CODE (newdecl) == TEMPLATE_DECL
1082       || TREE_CODE (newdecl) == CONST_DECL
1083       || TREE_CODE (newdecl) == NAMESPACE_DECL)
1084     return;
1085
1086   /* Don't get confused by static member functions; that's a different
1087      use of `static'.  */
1088   if (TREE_CODE (newdecl) == FUNCTION_DECL
1089       && DECL_STATIC_FUNCTION_P (newdecl))
1090     return;
1091
1092   /* If the old declaration was `static', or the new one isn't, then
1093      everything is OK.  */
1094   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1095     return;
1096
1097   /* It's OK to declare a builtin function as `static'.  */
1098   if (TREE_CODE (olddecl) == FUNCTION_DECL
1099       && DECL_ARTIFICIAL (olddecl))
1100     return;
1101
1102   permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1103   permerror (input_location, "previous declaration of %q+D", olddecl);
1104 }
1105
1106 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1107    function templates.  If their exception specifications do not
1108    match, issue a diagnostic.  */
1109
1110 static void
1111 check_redeclaration_exception_specification (tree new_decl,
1112                                              tree old_decl)
1113 {
1114   tree new_type;
1115   tree old_type;
1116   tree new_exceptions;
1117   tree old_exceptions;
1118
1119   new_type = TREE_TYPE (new_decl);
1120   new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1121   old_type = TREE_TYPE (old_decl);
1122   old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1123
1124   /* [except.spec]
1125
1126      If any declaration of a function has an exception-specification,
1127      all declarations, including the definition and an explicit
1128      specialization, of that function shall have an
1129      exception-specification with the same set of type-ids.  */
1130   if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1131       && ! DECL_IS_BUILTIN (old_decl)
1132       && flag_exceptions
1133       && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1134     {
1135       error ("declaration of %qF has a different exception specifier",
1136              new_decl);
1137       error ("from previous declaration %q+F", old_decl);
1138     }
1139 }
1140
1141 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1142    Otherwise issue diagnostics.  */
1143
1144 static bool
1145 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1146 {
1147   old_decl = STRIP_TEMPLATE (old_decl);
1148   new_decl = STRIP_TEMPLATE (new_decl);
1149   if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1150       || !VAR_OR_FUNCTION_DECL_P (new_decl))
1151     return true;
1152   if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1153       == DECL_DECLARED_CONSTEXPR_P (new_decl))
1154     return true;
1155   if (TREE_CODE (old_decl) == FUNCTION_DECL && DECL_BUILT_IN (old_decl))
1156     {
1157       /* Hide a built-in declaration.  */
1158       DECL_DECLARED_CONSTEXPR_P (old_decl)
1159         = DECL_DECLARED_CONSTEXPR_P (new_decl);
1160       return true;
1161     }
1162   error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1163   error ("from previous declaration %q+D", old_decl);
1164   return false;
1165 }
1166
1167 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)                   \
1168                           && lookup_attribute ("gnu_inline",            \
1169                                                DECL_ATTRIBUTES (fn)))
1170
1171 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1172    If the redeclaration is invalid, a diagnostic is issued, and the
1173    error_mark_node is returned.  Otherwise, OLDDECL is returned.
1174
1175    If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1176    returned.
1177
1178    NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend.  */
1179
1180 tree
1181 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1182 {
1183   unsigned olddecl_uid = DECL_UID (olddecl);
1184   int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1185   int new_defines_function = 0;
1186   tree new_template_info;
1187
1188   if (newdecl == olddecl)
1189     return olddecl;
1190
1191   types_match = decls_match (newdecl, olddecl);
1192
1193   /* If either the type of the new decl or the type of the old decl is an
1194      error_mark_node, then that implies that we have already issued an
1195      error (earlier) for some bogus type specification, and in that case,
1196      it is rather pointless to harass the user with yet more error message
1197      about the same declaration, so just pretend the types match here.  */
1198   if (TREE_TYPE (newdecl) == error_mark_node
1199       || TREE_TYPE (olddecl) == error_mark_node)
1200     return error_mark_node;
1201
1202   if (DECL_P (olddecl)
1203       && TREE_CODE (newdecl) == FUNCTION_DECL
1204       && TREE_CODE (olddecl) == FUNCTION_DECL
1205       && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1206     {
1207       if (DECL_DECLARED_INLINE_P (newdecl)
1208           && DECL_UNINLINABLE (newdecl)
1209           && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1210         /* Already warned elsewhere.  */;
1211       else if (DECL_DECLARED_INLINE_P (olddecl)
1212                && DECL_UNINLINABLE (olddecl)
1213                && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1214         /* Already warned.  */;
1215       else if (DECL_DECLARED_INLINE_P (newdecl)
1216                && DECL_UNINLINABLE (olddecl)
1217                && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1218         {
1219           warning (OPT_Wattributes, "function %q+D redeclared as inline",
1220                    newdecl);
1221           warning (OPT_Wattributes, "previous declaration of %q+D "
1222                    "with attribute noinline", olddecl);
1223         }
1224       else if (DECL_DECLARED_INLINE_P (olddecl)
1225                && DECL_UNINLINABLE (newdecl)
1226                && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1227         {
1228           warning (OPT_Wattributes, "function %q+D redeclared with "
1229                    "attribute noinline", newdecl);
1230           warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1231                    olddecl);
1232         }
1233     }
1234
1235   /* Check for redeclaration and other discrepancies.  */
1236   if (TREE_CODE (olddecl) == FUNCTION_DECL
1237       && DECL_ARTIFICIAL (olddecl))
1238     {
1239       gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1240       if (TREE_CODE (newdecl) != FUNCTION_DECL)
1241         {
1242           /* Avoid warnings redeclaring built-ins which have not been
1243              explicitly declared.  */
1244           if (DECL_ANTICIPATED (olddecl))
1245             return NULL_TREE;
1246
1247           /* If you declare a built-in or predefined function name as static,
1248              the old definition is overridden, but optionally warn this was a
1249              bad choice of name.  */
1250           if (! TREE_PUBLIC (newdecl))
1251             {
1252               warning (OPT_Wshadow, 
1253                        DECL_BUILT_IN (olddecl)
1254                        ? G_("shadowing built-in function %q#D")
1255                        : G_("shadowing library function %q#D"), olddecl);
1256               /* Discard the old built-in function.  */
1257               return NULL_TREE;
1258             }
1259           /* If the built-in is not ansi, then programs can override
1260              it even globally without an error.  */
1261           else if (! DECL_BUILT_IN (olddecl))
1262             warning (0, "library function %q#D redeclared as non-function %q#D",
1263                      olddecl, newdecl);
1264           else
1265             {
1266               error ("declaration of %q#D", newdecl);
1267               error ("conflicts with built-in declaration %q#D",
1268                      olddecl);
1269             }
1270           return NULL_TREE;
1271         }
1272       else if (!types_match)
1273         {
1274           /* Avoid warnings redeclaring built-ins which have not been
1275              explicitly declared.  */
1276           if (DECL_ANTICIPATED (olddecl))
1277             {
1278               /* Deal with fileptr_type_node.  FILE type is not known
1279                  at the time we create the builtins.  */
1280               tree t1, t2;
1281
1282               for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1283                    t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1284                    t1 || t2;
1285                    t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1286                 if (!t1 || !t2)
1287                   break;
1288                 else if (TREE_VALUE (t2) == fileptr_type_node)
1289                   {
1290                     tree t = TREE_VALUE (t1);
1291
1292                     if (TREE_CODE (t) == POINTER_TYPE
1293                         && TYPE_NAME (TREE_TYPE (t))
1294                         && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1295                            == get_identifier ("FILE")
1296                         && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1297                       {
1298                         tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1299
1300                         TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1301                           = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1302                         types_match = decls_match (newdecl, olddecl);
1303                         if (types_match)
1304                           return duplicate_decls (newdecl, olddecl,
1305                                                   newdecl_is_friend);
1306                         TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1307                       }
1308                   }
1309                 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1310                   break;
1311             }
1312           else if ((DECL_EXTERN_C_P (newdecl)
1313                     && DECL_EXTERN_C_P (olddecl))
1314                    || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1315                                  TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1316             {
1317               /* A near match; override the builtin.  */
1318
1319               if (TREE_PUBLIC (newdecl))
1320                 {
1321                   warning (0, "new declaration %q#D", newdecl);
1322                   warning (0, "ambiguates built-in declaration %q#D",
1323                            olddecl);
1324                 }
1325               else
1326                 warning (OPT_Wshadow, 
1327                          DECL_BUILT_IN (olddecl)
1328                          ? G_("shadowing built-in function %q#D")
1329                          : G_("shadowing library function %q#D"), olddecl);
1330             }
1331           else
1332             /* Discard the old built-in function.  */
1333             return NULL_TREE;
1334
1335           /* Replace the old RTL to avoid problems with inlining.  */
1336           COPY_DECL_RTL (newdecl, olddecl);
1337         }
1338       /* Even if the types match, prefer the new declarations type for
1339          built-ins which have not been explicitly declared, for
1340          exception lists, etc...  */
1341       else if (DECL_IS_BUILTIN (olddecl))
1342         {
1343           tree type = TREE_TYPE (newdecl);
1344           tree attribs = (*targetm.merge_type_attributes)
1345             (TREE_TYPE (olddecl), type);
1346
1347           type = cp_build_type_attribute_variant (type, attribs);
1348           TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1349         }
1350
1351       /* If a function is explicitly declared "throw ()", propagate that to
1352          the corresponding builtin.  */
1353       if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1354           && DECL_ANTICIPATED (olddecl)
1355           && TREE_NOTHROW (newdecl)
1356           && !TREE_NOTHROW (olddecl)
1357           && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != NULL_TREE
1358           && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != olddecl
1359           && types_match)
1360         TREE_NOTHROW (built_in_decls [DECL_FUNCTION_CODE (olddecl)]) = 1;
1361
1362       /* Whether or not the builtin can throw exceptions has no
1363          bearing on this declarator.  */
1364       TREE_NOTHROW (olddecl) = 0;
1365
1366       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1367         {
1368           /* If a builtin function is redeclared as `static', merge
1369              the declarations, but make the original one static.  */
1370           DECL_THIS_STATIC (olddecl) = 1;
1371           TREE_PUBLIC (olddecl) = 0;
1372
1373           /* Make the old declaration consistent with the new one so
1374              that all remnants of the builtin-ness of this function
1375              will be banished.  */
1376           SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1377           COPY_DECL_RTL (newdecl, olddecl);
1378         }
1379     }
1380   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1381     {
1382       /* C++ Standard, 3.3, clause 4:
1383          "[Note: a namespace name or a class template name must be unique
1384          in its declarative region (7.3.2, clause 14). ]"  */
1385       if (TREE_CODE (olddecl) != NAMESPACE_DECL
1386           && TREE_CODE (newdecl) != NAMESPACE_DECL
1387           && (TREE_CODE (olddecl) != TEMPLATE_DECL
1388               || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1389           && (TREE_CODE (newdecl) != TEMPLATE_DECL
1390               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1391         {
1392           if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1393                && TREE_CODE (newdecl) != TYPE_DECL)
1394               || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1395                   && TREE_CODE (olddecl) != TYPE_DECL))
1396             {
1397               /* We do nothing special here, because C++ does such nasty
1398                  things with TYPE_DECLs.  Instead, just let the TYPE_DECL
1399                  get shadowed, and know that if we need to find a TYPE_DECL
1400                  for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1401                  slot of the identifier.  */
1402               return NULL_TREE;
1403             }
1404             
1405             if ((TREE_CODE (newdecl) == FUNCTION_DECL
1406                  && DECL_FUNCTION_TEMPLATE_P (olddecl))
1407                 || (TREE_CODE (olddecl) == FUNCTION_DECL
1408                     && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1409               return NULL_TREE;
1410         }
1411
1412       error ("%q#D redeclared as different kind of symbol", newdecl);
1413       if (TREE_CODE (olddecl) == TREE_LIST)
1414         olddecl = TREE_VALUE (olddecl);
1415       error ("previous declaration of %q+#D", olddecl);
1416
1417       return error_mark_node;
1418     }
1419   else if (!types_match)
1420     {
1421       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1422         /* These are certainly not duplicate declarations; they're
1423            from different scopes.  */
1424         return NULL_TREE;
1425
1426       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1427         {
1428           /* The name of a class template may not be declared to refer to
1429              any other template, class, function, object, namespace, value,
1430              or type in the same scope.  */
1431           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1432               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1433             {
1434               error ("declaration of template %q#D", newdecl);
1435               error ("conflicts with previous declaration %q+#D", olddecl);
1436             }
1437           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1438                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1439                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1440                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1441                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1442                                            DECL_TEMPLATE_PARMS (olddecl))
1443                    /* Template functions can be disambiguated by
1444                       return type.  */
1445                    && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1446                                    TREE_TYPE (TREE_TYPE (olddecl))))
1447             {
1448               error ("new declaration %q#D", newdecl);
1449               error ("ambiguates old declaration %q+#D", olddecl);
1450             }
1451           return NULL_TREE;
1452         }
1453       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1454         {
1455           if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1456             {
1457               error ("declaration of C function %q#D conflicts with",
1458                      newdecl);
1459               error ("previous declaration %q+#D here", olddecl);
1460               return NULL_TREE;
1461             }
1462           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1463                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1464             {
1465               error ("new declaration %q#D", newdecl);
1466               error ("ambiguates old declaration %q+#D", olddecl);
1467               return error_mark_node;
1468             }
1469           else
1470             return NULL_TREE;
1471         }
1472       else
1473         {
1474           error ("conflicting declaration %q#D", newdecl);
1475           error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1476           return error_mark_node;
1477         }
1478     }
1479   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1480             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1481                  && (!DECL_TEMPLATE_INFO (newdecl)
1482                      || (DECL_TI_TEMPLATE (newdecl)
1483                          != DECL_TI_TEMPLATE (olddecl))))
1484                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1485                     && (!DECL_TEMPLATE_INFO (olddecl)
1486                         || (DECL_TI_TEMPLATE (olddecl)
1487                             != DECL_TI_TEMPLATE (newdecl))))))
1488     /* It's OK to have a template specialization and a non-template
1489        with the same type, or to have specializations of two
1490        different templates with the same type.  Note that if one is a
1491        specialization, and the other is an instantiation of the same
1492        template, that we do not exit at this point.  That situation
1493        can occur if we instantiate a template class, and then
1494        specialize one of its methods.  This situation is valid, but
1495        the declarations must be merged in the usual way.  */
1496     return NULL_TREE;
1497   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1498            && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1499                 && !DECL_USE_TEMPLATE (newdecl))
1500                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1501                    && !DECL_USE_TEMPLATE (olddecl))))
1502     /* One of the declarations is a template instantiation, and the
1503        other is not a template at all.  That's OK.  */
1504     return NULL_TREE;
1505   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1506     {
1507       /* In [namespace.alias] we have:
1508
1509            In a declarative region, a namespace-alias-definition can be
1510            used to redefine a namespace-alias declared in that declarative
1511            region to refer only to the namespace to which it already
1512            refers.
1513
1514          Therefore, if we encounter a second alias directive for the same
1515          alias, we can just ignore the second directive.  */
1516       if (DECL_NAMESPACE_ALIAS (newdecl)
1517           && (DECL_NAMESPACE_ALIAS (newdecl)
1518               == DECL_NAMESPACE_ALIAS (olddecl)))
1519         return olddecl;
1520       /* [namespace.alias]
1521
1522          A namespace-name or namespace-alias shall not be declared as
1523          the name of any other entity in the same declarative region.
1524          A namespace-name defined at global scope shall not be
1525          declared as the name of any other entity in any global scope
1526          of the program.  */
1527       error ("declaration of namespace %qD conflicts with", newdecl);
1528       error ("previous declaration of namespace %q+D here", olddecl);
1529       return error_mark_node;
1530     }
1531   else
1532     {
1533       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1534       if (errmsg)
1535         {
1536           error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1537           if (DECL_NAME (olddecl) != NULL_TREE)
1538             error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1539                          ? "%q+#D previously defined here"
1540                          : "%q+#D previously declared here", olddecl);
1541           return error_mark_node;
1542         }
1543       else if (TREE_CODE (olddecl) == FUNCTION_DECL
1544                && DECL_INITIAL (olddecl) != NULL_TREE
1545                && !prototype_p (TREE_TYPE (olddecl))
1546                && prototype_p (TREE_TYPE (newdecl)))
1547         {
1548           /* Prototype decl follows defn w/o prototype.  */
1549           warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1550           warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1551                       "follows non-prototype definition here");
1552         }
1553       else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1554                 || TREE_CODE (olddecl) == VAR_DECL)
1555                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1556         {
1557           /* [dcl.link]
1558              If two declarations of the same function or object
1559              specify different linkage-specifications ..., the program
1560              is ill-formed.... Except for functions with C++ linkage,
1561              a function declaration without a linkage specification
1562              shall not precede the first linkage specification for
1563              that function.  A function can be declared without a
1564              linkage specification after an explicit linkage
1565              specification has been seen; the linkage explicitly
1566              specified in the earlier declaration is not affected by
1567              such a function declaration.
1568
1569              DR 563 raises the question why the restrictions on
1570              functions should not also apply to objects.  Older
1571              versions of G++ silently ignore the linkage-specification
1572              for this example:
1573
1574                namespace N { 
1575                  extern int i;
1576                  extern "C" int i;
1577                }
1578
1579              which is clearly wrong.  Therefore, we now treat objects
1580              like functions.  */
1581           if (current_lang_depth () == 0)
1582             {
1583               /* There is no explicit linkage-specification, so we use
1584                  the linkage from the previous declaration.  */
1585               if (!DECL_LANG_SPECIFIC (newdecl))
1586                 retrofit_lang_decl (newdecl);
1587               SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1588             }
1589           else
1590             {
1591               error ("previous declaration of %q+#D with %qL linkage",
1592                      olddecl, DECL_LANGUAGE (olddecl));
1593               error ("conflicts with new declaration with %qL linkage",
1594                      DECL_LANGUAGE (newdecl));
1595             }
1596         }
1597
1598       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1599         ;
1600       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1601         {
1602           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1603           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1604           int i = 1;
1605
1606           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1607             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1608
1609           for (; t1 && t1 != void_list_node;
1610                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1611             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1612               {
1613                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1614                                            TREE_PURPOSE (t2)))
1615                   {
1616                     permerror (input_location, "default argument given for parameter %d of %q#D",
1617                                i, newdecl);
1618                     permerror (input_location, "after previous specification in %q+#D", olddecl);
1619                   }
1620                 else
1621                   {
1622                     error ("default argument given for parameter %d of %q#D",
1623                            i, newdecl);
1624                     error ("after previous specification in %q+#D",
1625                                  olddecl);
1626                   }
1627               }
1628         }
1629     }
1630
1631   /* Do not merge an implicit typedef with an explicit one.  In:
1632
1633        class A;
1634        ...
1635        typedef class A A __attribute__ ((foo));
1636
1637      the attribute should apply only to the typedef.  */
1638   if (TREE_CODE (olddecl) == TYPE_DECL
1639       && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1640           || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1641     return NULL_TREE;
1642
1643   /* If new decl is `static' and an `extern' was seen previously,
1644      warn about it.  */
1645   warn_extern_redeclared_static (newdecl, olddecl);
1646
1647   if (!validate_constexpr_redeclaration (olddecl, newdecl))
1648     return error_mark_node;
1649
1650   /* We have committed to returning 1 at this point.  */
1651   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1652     {
1653       /* Now that functions must hold information normally held
1654          by field decls, there is extra work to do so that
1655          declaration information does not get destroyed during
1656          definition.  */
1657       if (DECL_VINDEX (olddecl))
1658         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1659       if (DECL_CONTEXT (olddecl))
1660         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1661       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1662       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1663       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1664       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1665       DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1666       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1667       if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1668         SET_OVERLOADED_OPERATOR_CODE
1669           (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1670       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1671
1672       /* Optionally warn about more than one declaration for the same
1673          name, but don't warn about a function declaration followed by a
1674          definition.  */
1675       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1676           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1677           /* Don't warn about extern decl followed by definition.  */
1678           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1679           /* Don't warn about friends, let add_friend take care of it.  */
1680           && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
1681         {
1682           warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1683           warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1684         }
1685
1686       if (DECL_DELETED_FN (newdecl))
1687         {
1688           error ("deleted definition of %qD", newdecl);
1689           error ("after previous declaration %q+D", olddecl);
1690         }
1691       DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1692     }
1693
1694   /* Deal with C++: must preserve virtual function table size.  */
1695   if (TREE_CODE (olddecl) == TYPE_DECL)
1696     {
1697       tree newtype = TREE_TYPE (newdecl);
1698       tree oldtype = TREE_TYPE (olddecl);
1699
1700       if (newtype != error_mark_node && oldtype != error_mark_node
1701           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1702         CLASSTYPE_FRIEND_CLASSES (newtype)
1703           = CLASSTYPE_FRIEND_CLASSES (oldtype);
1704
1705       DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1706     }
1707
1708   /* Copy all the DECL_... slots specified in the new decl
1709      except for any that we copy here from the old type.  */
1710   DECL_ATTRIBUTES (newdecl)
1711     = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1712
1713   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1714     {
1715       tree old_result;
1716       tree new_result;
1717       old_result = DECL_TEMPLATE_RESULT (olddecl);
1718       new_result = DECL_TEMPLATE_RESULT (newdecl);
1719       TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1720       DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1721         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1722                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1723
1724       DECL_ATTRIBUTES (old_result)
1725         = (*targetm.merge_decl_attributes) (old_result, new_result);
1726
1727       if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1728         {
1729           if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1730               && DECL_INITIAL (new_result))
1731             {
1732               if (DECL_INITIAL (old_result))
1733                 DECL_UNINLINABLE (old_result) = 1;
1734               else
1735                 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1736               DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1737               DECL_NOT_REALLY_EXTERN (old_result)
1738                 = DECL_NOT_REALLY_EXTERN (new_result);
1739               DECL_INTERFACE_KNOWN (old_result)
1740                 = DECL_INTERFACE_KNOWN (new_result);
1741               DECL_DECLARED_INLINE_P (old_result)
1742                 = DECL_DECLARED_INLINE_P (new_result);
1743               DECL_DISREGARD_INLINE_LIMITS (old_result)
1744                 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1745
1746             }
1747           else
1748             {
1749               DECL_DECLARED_INLINE_P (old_result)
1750                 |= DECL_DECLARED_INLINE_P (new_result);
1751               DECL_DISREGARD_INLINE_LIMITS (old_result)
1752                 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1753               check_redeclaration_exception_specification (newdecl, olddecl);
1754             }
1755         }
1756
1757       /* If the new declaration is a definition, update the file and
1758          line information on the declaration, and also make
1759          the old declaration the same definition.  */
1760       if (DECL_INITIAL (new_result) != NULL_TREE)
1761         {
1762           DECL_SOURCE_LOCATION (olddecl)
1763             = DECL_SOURCE_LOCATION (old_result)
1764             = DECL_SOURCE_LOCATION (newdecl);
1765           DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1766           if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1767             {
1768               tree parm;
1769               DECL_ARGUMENTS (old_result)
1770                 = DECL_ARGUMENTS (new_result);
1771               for (parm = DECL_ARGUMENTS (old_result); parm;
1772                    parm = DECL_CHAIN (parm))
1773                 DECL_CONTEXT (parm) = old_result;
1774             }
1775         }
1776
1777       return olddecl;
1778     }
1779
1780   if (types_match)
1781     {
1782       /* Automatically handles default parameters.  */
1783       tree oldtype = TREE_TYPE (olddecl);
1784       tree newtype;
1785
1786       /* Merge the data types specified in the two decls.  */
1787       newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1788
1789       /* If merge_types produces a non-typedef type, just use the old type.  */
1790       if (TREE_CODE (newdecl) == TYPE_DECL
1791           && newtype == DECL_ORIGINAL_TYPE (newdecl))
1792         newtype = oldtype;
1793
1794       if (TREE_CODE (newdecl) == VAR_DECL)
1795         {
1796           DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1797           DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1798           DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1799             |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1800           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1801             |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1802
1803           /* Merge the threadprivate attribute from OLDDECL into NEWDECL.  */
1804           if (DECL_LANG_SPECIFIC (olddecl)
1805               && CP_DECL_THREADPRIVATE_P (olddecl))
1806             {
1807               /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed.  */
1808               if (!DECL_LANG_SPECIFIC (newdecl))
1809                 retrofit_lang_decl (newdecl);
1810
1811               DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1812               CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1813             }
1814         }
1815
1816       /* Do this after calling `merge_types' so that default
1817          parameters don't confuse us.  */
1818       else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1819         check_redeclaration_exception_specification (newdecl, olddecl);
1820       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1821
1822       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1823         check_default_args (newdecl);
1824
1825       /* Lay the type out, unless already done.  */
1826       if (! same_type_p (newtype, oldtype)
1827           && TREE_TYPE (newdecl) != error_mark_node
1828           && !(processing_template_decl && uses_template_parms (newdecl)))
1829         layout_type (TREE_TYPE (newdecl));
1830
1831       if ((TREE_CODE (newdecl) == VAR_DECL
1832            || TREE_CODE (newdecl) == PARM_DECL
1833            || TREE_CODE (newdecl) == RESULT_DECL
1834            || TREE_CODE (newdecl) == FIELD_DECL
1835            || TREE_CODE (newdecl) == TYPE_DECL)
1836           && !(processing_template_decl && uses_template_parms (newdecl)))
1837         layout_decl (newdecl, 0);
1838
1839       /* Merge the type qualifiers.  */
1840       if (TREE_READONLY (newdecl))
1841         TREE_READONLY (olddecl) = 1;
1842       if (TREE_THIS_VOLATILE (newdecl))
1843         TREE_THIS_VOLATILE (olddecl) = 1;
1844       if (TREE_NOTHROW (newdecl))
1845         TREE_NOTHROW (olddecl) = 1;
1846
1847       /* Merge deprecatedness.  */
1848       if (TREE_DEPRECATED (newdecl))
1849         TREE_DEPRECATED (olddecl) = 1;
1850
1851       /* Preserve function specific target and optimization options */
1852       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1853         {
1854           if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1855               && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1856             DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1857               = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1858
1859           if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1860               && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1861             DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1862               = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1863         }
1864
1865       /* Merge the initialization information.  */
1866       if (DECL_INITIAL (newdecl) == NULL_TREE
1867           && DECL_INITIAL (olddecl) != NULL_TREE)
1868         {
1869           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1870           DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1871           if (TREE_CODE (newdecl) == FUNCTION_DECL)
1872             {
1873               DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1874               DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1875             }
1876         }
1877
1878       /* Merge the section attribute.
1879          We want to issue an error if the sections conflict but that must be
1880          done later in decl_attributes since we are called before attributes
1881          are assigned.  */
1882       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1883         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1884
1885       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1886         {
1887           DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1888             |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1889           DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1890           TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1891           TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1892           DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1893           DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1894           DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1895           TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1896           DECL_LOOPING_CONST_OR_PURE_P (newdecl) 
1897             |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
1898           /* Keep the old RTL.  */
1899           COPY_DECL_RTL (olddecl, newdecl);
1900         }
1901       else if (TREE_CODE (newdecl) == VAR_DECL
1902                && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1903         {
1904           /* Keep the old RTL.  We cannot keep the old RTL if the old
1905              declaration was for an incomplete object and the new
1906              declaration is not since many attributes of the RTL will
1907              change.  */
1908           COPY_DECL_RTL (olddecl, newdecl);
1909         }
1910     }
1911   /* If cannot merge, then use the new type and qualifiers,
1912      and don't preserve the old rtl.  */
1913   else
1914     {
1915       /* Clean out any memory we had of the old declaration.  */
1916       tree oldstatic = value_member (olddecl, static_aggregates);
1917       if (oldstatic)
1918         TREE_VALUE (oldstatic) = error_mark_node;
1919
1920       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1921       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1922       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1923       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1924     }
1925
1926   /* Merge the storage class information.  */
1927   merge_weak (newdecl, olddecl);
1928
1929   if (DECL_ONE_ONLY (olddecl))
1930     DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
1931
1932   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1933   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1934   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1935   if (! DECL_EXTERNAL (olddecl))
1936     DECL_EXTERNAL (newdecl) = 0;
1937
1938   new_template_info = NULL_TREE;
1939   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1940     {
1941       bool new_redefines_gnu_inline = false;
1942
1943       if (new_defines_function
1944           && ((DECL_INTERFACE_KNOWN (olddecl)
1945                && TREE_CODE (olddecl) == FUNCTION_DECL)
1946               || (TREE_CODE (olddecl) == TEMPLATE_DECL
1947                   && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1948                       == FUNCTION_DECL))))
1949         {
1950           tree fn = olddecl;
1951
1952           if (TREE_CODE (fn) == TEMPLATE_DECL)
1953             fn = DECL_TEMPLATE_RESULT (olddecl);
1954
1955           new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
1956         }
1957
1958       if (!new_redefines_gnu_inline)
1959         {
1960           DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1961           DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1962           DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1963         }
1964       DECL_TEMPLATE_INSTANTIATED (newdecl)
1965         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1966       DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
1967
1968       /* If the OLDDECL is an instantiation and/or specialization,
1969          then the NEWDECL must be too.  But, it may not yet be marked
1970          as such if the caller has created NEWDECL, but has not yet
1971          figured out that it is a redeclaration.  */
1972       if (!DECL_USE_TEMPLATE (newdecl))
1973         DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
1974
1975       /* Don't really know how much of the language-specific
1976          values we should copy from old to new.  */
1977       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1978       DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1979       DECL_INITIALIZED_IN_CLASS_P (newdecl)
1980         |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1981
1982       if (LANG_DECL_HAS_MIN (newdecl))
1983         {
1984           DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
1985             DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
1986           if (DECL_TEMPLATE_INFO (newdecl))
1987             new_template_info = DECL_TEMPLATE_INFO (newdecl);
1988           DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1989         }
1990       /* Only functions have these fields.  */
1991       if (TREE_CODE (newdecl) == FUNCTION_DECL
1992           || DECL_FUNCTION_TEMPLATE_P (newdecl))
1993         {
1994           DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1995           olddecl_friend = DECL_FRIEND_P (olddecl);
1996           hidden_friend = (DECL_ANTICIPATED (olddecl)
1997                            && DECL_HIDDEN_FRIEND_P (olddecl)
1998                            && newdecl_is_friend);
1999           DECL_BEFRIENDING_CLASSES (newdecl)
2000             = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2001                        DECL_BEFRIENDING_CLASSES (olddecl));
2002           /* DECL_THUNKS is only valid for virtual functions,
2003              otherwise it is a DECL_FRIEND_CONTEXT.  */
2004           if (DECL_VIRTUAL_P (newdecl))
2005             DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
2006         }
2007       /* Only variables have this field.  */
2008       else if (TREE_CODE (newdecl) == VAR_DECL
2009                && VAR_HAD_UNKNOWN_BOUND (olddecl))
2010         SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2011     }
2012
2013   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2014     {
2015       tree parm;
2016
2017       /* Merge parameter attributes. */
2018       tree oldarg, newarg;
2019       for (oldarg = DECL_ARGUMENTS(olddecl), 
2020                newarg = DECL_ARGUMENTS(newdecl);
2021            oldarg && newarg;
2022            oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2023           DECL_ATTRIBUTES (newarg)
2024               = (*targetm.merge_decl_attributes) (oldarg, newarg);
2025           DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2026       }
2027       
2028       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2029           && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2030         {
2031           /* If newdecl is not a specialization, then it is not a
2032              template-related function at all.  And that means that we
2033              should have exited above, returning 0.  */
2034           gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2035
2036           if (DECL_ODR_USED (olddecl))
2037             /* From [temp.expl.spec]:
2038
2039                If a template, a member template or the member of a class
2040                template is explicitly specialized then that
2041                specialization shall be declared before the first use of
2042                that specialization that would cause an implicit
2043                instantiation to take place, in every translation unit in
2044                which such a use occurs.  */
2045             error ("explicit specialization of %qD after first use",
2046                       olddecl);
2047
2048           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2049
2050           /* Don't propagate visibility from the template to the
2051              specialization here.  We'll do that in determine_visibility if
2052              appropriate.  */
2053           DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2054
2055           /* [temp.expl.spec/14] We don't inline explicit specialization
2056              just because the primary template says so.  */
2057
2058           /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2059              the always_inline attribute.  */
2060           if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2061               && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2062             {
2063               if (DECL_DECLARED_INLINE_P (newdecl))
2064                 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2065               else
2066                 DECL_ATTRIBUTES (newdecl)
2067                   = remove_attribute ("always_inline",
2068                                       DECL_ATTRIBUTES (newdecl));
2069             }
2070         }
2071       else if (new_defines_function && DECL_INITIAL (olddecl))
2072         {
2073           /* Never inline re-defined extern inline functions.
2074              FIXME: this could be better handled by keeping both
2075              function as separate declarations.  */
2076           DECL_UNINLINABLE (newdecl) = 1;
2077         }
2078       else
2079         {
2080           if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2081             DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2082
2083           DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2084
2085           DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2086             = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2087
2088           DECL_DISREGARD_INLINE_LIMITS (newdecl)
2089             = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2090             = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2091                || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2092         }
2093
2094       /* Preserve abstractness on cloned [cd]tors.  */
2095       DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2096
2097       /* Update newdecl's parms to point at olddecl.  */
2098       for (parm = DECL_ARGUMENTS (newdecl); parm;
2099            parm = DECL_CHAIN (parm))
2100         DECL_CONTEXT (parm) = olddecl;
2101
2102       if (! types_match)
2103         {
2104           SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2105           COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2106           COPY_DECL_RTL (newdecl, olddecl);
2107         }
2108       if (! types_match || new_defines_function)
2109         {
2110           /* These need to be copied so that the names are available.
2111              Note that if the types do match, we'll preserve inline
2112              info and other bits, but if not, we won't.  */
2113           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2114           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2115         }
2116       if (new_defines_function)
2117         /* If defining a function declared with other language
2118            linkage, use the previously declared language linkage.  */
2119         SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2120       else if (types_match)
2121         {
2122           /* If redeclaring a builtin function, and not a definition,
2123              it stays built in.  */
2124           if (DECL_BUILT_IN (olddecl))
2125             {
2126               DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2127               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2128               /* If we're keeping the built-in definition, keep the rtl,
2129                  regardless of declaration matches.  */
2130               COPY_DECL_RTL (olddecl, newdecl);
2131             }
2132
2133           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2134           /* Don't clear out the arguments if we're just redeclaring a
2135              function.  */
2136           if (DECL_ARGUMENTS (olddecl))
2137             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2138         }
2139     }
2140   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2141     NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2142
2143   /* Now preserve various other info from the definition.  */
2144   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2145   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2146   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2147   COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2148
2149   /* Warn about conflicting visibility specifications.  */
2150   if (DECL_VISIBILITY_SPECIFIED (olddecl)
2151       && DECL_VISIBILITY_SPECIFIED (newdecl)
2152       && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2153     {
2154       warning_at (input_location, OPT_Wattributes,
2155                   "%q+D: visibility attribute ignored because it", newdecl);
2156       warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2157                   "conflicts with previous declaration here");
2158     }
2159   /* Choose the declaration which specified visibility.  */
2160   if (DECL_VISIBILITY_SPECIFIED (olddecl))
2161     {
2162       DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2163       DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2164     }
2165   /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2166      so keep this behavior.  */
2167   if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2168     {
2169       SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2170       DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2171     }
2172   /* Likewise for DECL_USER_ALIGN and DECL_PACKED.  */
2173   DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2174   if (TREE_CODE (newdecl) == FIELD_DECL)
2175     DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2176
2177   /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2178      with that from NEWDECL below.  */
2179   if (DECL_LANG_SPECIFIC (olddecl))
2180     {
2181       gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2182                   != DECL_LANG_SPECIFIC (newdecl));
2183       ggc_free (DECL_LANG_SPECIFIC (olddecl));
2184     }
2185
2186   /* Merge the USED information.  */
2187   if (TREE_USED (olddecl))
2188     TREE_USED (newdecl) = 1;
2189   else if (TREE_USED (newdecl))
2190     TREE_USED (olddecl) = 1;
2191   if (TREE_CODE (newdecl) == VAR_DECL)
2192     {
2193       if (DECL_READ_P (olddecl))
2194         DECL_READ_P (newdecl) = 1;
2195       else if (DECL_READ_P (newdecl))
2196         DECL_READ_P (olddecl) = 1;
2197     }
2198   if (DECL_PRESERVE_P (olddecl))
2199     DECL_PRESERVE_P (newdecl) = 1;
2200   else if (DECL_PRESERVE_P (newdecl))
2201     DECL_PRESERVE_P (olddecl) = 1;
2202
2203   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2204     {
2205       int function_size;
2206
2207       function_size = sizeof (struct tree_decl_common);
2208
2209       memcpy ((char *) olddecl + sizeof (struct tree_common),
2210               (char *) newdecl + sizeof (struct tree_common),
2211               function_size - sizeof (struct tree_common));
2212
2213       memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2214               (char *) newdecl + sizeof (struct tree_decl_common),
2215               sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2216       if (new_template_info)
2217         /* If newdecl is a template instantiation, it is possible that
2218            the following sequence of events has occurred:
2219
2220            o A friend function was declared in a class template.  The
2221            class template was instantiated.
2222
2223            o The instantiation of the friend declaration was
2224            recorded on the instantiation list, and is newdecl.
2225
2226            o Later, however, instantiate_class_template called pushdecl
2227            on the newdecl to perform name injection.  But, pushdecl in
2228            turn called duplicate_decls when it discovered that another
2229            declaration of a global function with the same name already
2230            existed.
2231
2232            o Here, in duplicate_decls, we decided to clobber newdecl.
2233
2234            If we're going to do that, we'd better make sure that
2235            olddecl, and not newdecl, is on the list of
2236            instantiations so that if we try to do the instantiation
2237            again we won't get the clobbered declaration.  */
2238         reregister_specialization (newdecl,
2239                                    new_template_info,
2240                                    olddecl);
2241     }
2242   else
2243     {
2244       size_t size = tree_code_size (TREE_CODE (olddecl));
2245       memcpy ((char *) olddecl + sizeof (struct tree_common),
2246               (char *) newdecl + sizeof (struct tree_common),
2247               sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2248       switch (TREE_CODE (olddecl))
2249         {
2250         case LABEL_DECL:
2251         case VAR_DECL:
2252         case RESULT_DECL:
2253         case PARM_DECL:
2254         case FIELD_DECL:
2255         case TYPE_DECL:
2256         case CONST_DECL:
2257           {
2258             memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2259                     (char *) newdecl + sizeof (struct tree_decl_common),
2260                     size - sizeof (struct tree_decl_common)
2261                     + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2262           }
2263           break;
2264         default:
2265           memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2266                   (char *) newdecl + sizeof (struct tree_decl_common),
2267                   sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2268                   + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2269           break;
2270         }
2271     }
2272   DECL_UID (olddecl) = olddecl_uid;
2273   if (olddecl_friend)
2274     DECL_FRIEND_P (olddecl) = 1;
2275   if (hidden_friend)
2276     {
2277       DECL_ANTICIPATED (olddecl) = 1;
2278       DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2279     }
2280
2281   /* NEWDECL contains the merged attribute lists.
2282      Update OLDDECL to be the same.  */
2283   DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2284
2285   /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2286     so that encode_section_info has a chance to look at the new decl
2287     flags and attributes.  */
2288   if (DECL_RTL_SET_P (olddecl)
2289       && (TREE_CODE (olddecl) == FUNCTION_DECL
2290           || (TREE_CODE (olddecl) == VAR_DECL
2291               && TREE_STATIC (olddecl))))
2292     make_decl_rtl (olddecl);
2293
2294   /* The NEWDECL will no longer be needed.  Because every out-of-class
2295      declaration of a member results in a call to duplicate_decls,
2296      freeing these nodes represents in a significant savings.  */
2297   ggc_free (newdecl);
2298
2299   return olddecl;
2300 }
2301 \f
2302 /* Return zero if the declaration NEWDECL is valid
2303    when the declaration OLDDECL (assumed to be for the same name)
2304    has already been seen.
2305    Otherwise return an error message format string with a %s
2306    where the identifier should go.  */
2307
2308 static const char *
2309 redeclaration_error_message (tree newdecl, tree olddecl)
2310 {
2311   if (TREE_CODE (newdecl) == TYPE_DECL)
2312     {
2313       /* Because C++ can put things into name space for free,
2314          constructs like "typedef struct foo { ... } foo"
2315          would look like an erroneous redeclaration.  */
2316       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2317         return NULL;
2318       else
2319         return G_("redefinition of %q#D");
2320     }
2321   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2322     {
2323       /* If this is a pure function, its olddecl will actually be
2324          the original initialization to `0' (which we force to call
2325          abort()).  Don't complain about redefinition in this case.  */
2326       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2327           && DECL_INITIAL (olddecl) == NULL_TREE)
2328         return NULL;
2329
2330       /* If both functions come from different namespaces, this is not
2331          a redeclaration - this is a conflict with a used function.  */
2332       if (DECL_NAMESPACE_SCOPE_P (olddecl)
2333           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2334           && ! decls_match (olddecl, newdecl))
2335         return G_("%qD conflicts with used function");
2336
2337       /* We'll complain about linkage mismatches in
2338          warn_extern_redeclared_static.  */
2339
2340       /* Defining the same name twice is no good.  */
2341       if (DECL_INITIAL (olddecl) != NULL_TREE
2342           && DECL_INITIAL (newdecl) != NULL_TREE)
2343         {
2344           if (DECL_NAME (olddecl) == NULL_TREE)
2345             return G_("%q#D not declared in class");
2346           else if (!GNU_INLINE_P (olddecl)
2347                    || GNU_INLINE_P (newdecl))
2348             return G_("redefinition of %q#D");
2349         }
2350
2351       if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2352         {
2353           bool olda = GNU_INLINE_P (olddecl);
2354           bool newa = GNU_INLINE_P (newdecl);
2355
2356           if (olda != newa)
2357             {
2358               if (newa)
2359                 return G_("%q+D redeclared inline with "
2360                           "%<gnu_inline%> attribute");
2361               else
2362                 return G_("%q+D redeclared inline without "
2363                           "%<gnu_inline%> attribute");
2364             }
2365         }
2366
2367       return NULL;
2368     }
2369   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2370     {
2371       tree nt, ot;
2372
2373       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2374         {
2375           if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2376               && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2377             return G_("redefinition of %q#D");
2378           return NULL;
2379         }
2380
2381       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2382           || (DECL_TEMPLATE_RESULT (newdecl)
2383               == DECL_TEMPLATE_RESULT (olddecl)))
2384         return NULL;
2385
2386       nt = DECL_TEMPLATE_RESULT (newdecl);
2387       if (DECL_TEMPLATE_INFO (nt))
2388         nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2389       ot = DECL_TEMPLATE_RESULT (olddecl);
2390       if (DECL_TEMPLATE_INFO (ot))
2391         ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2392       if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2393           && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2394         return G_("redefinition of %q#D");
2395
2396       if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2397         {
2398           bool olda = GNU_INLINE_P (ot);
2399           bool newa = GNU_INLINE_P (nt);
2400
2401           if (olda != newa)
2402             {
2403               if (newa)
2404                 return G_("%q+D redeclared inline with "
2405                           "%<gnu_inline%> attribute");
2406               else
2407                 return G_("%q+D redeclared inline without "
2408                           "%<gnu_inline%> attribute");
2409             }
2410         }
2411
2412       /* Core issue #226 (C++0x): 
2413            
2414            If a friend function template declaration specifies a
2415            default template-argument, that declaration shall be a
2416            definition and shall be the only declaration of the
2417            function template in the translation unit.  */
2418       if ((cxx_dialect != cxx98) 
2419           && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2420           && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl), 
2421                                        /*is_primary=*/1, /*is_partial=*/0,
2422                                        /*is_friend_decl=*/2))
2423         return G_("redeclaration of friend %q#D "
2424                   "may not have default template arguments");
2425
2426       return NULL;
2427     }
2428   else if (TREE_CODE (newdecl) == VAR_DECL
2429            && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2430            && (! DECL_LANG_SPECIFIC (olddecl)
2431                || ! CP_DECL_THREADPRIVATE_P (olddecl)
2432                || DECL_THREAD_LOCAL_P (newdecl)))
2433     {
2434       /* Only variables can be thread-local, and all declarations must
2435          agree on this property.  */
2436       if (DECL_THREAD_LOCAL_P (newdecl))
2437         return G_("thread-local declaration of %q#D follows "
2438                   "non-thread-local declaration");
2439       else
2440         return G_("non-thread-local declaration of %q#D follows "
2441                   "thread-local declaration");
2442     }
2443   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2444     {
2445       /* The objects have been declared at namespace scope.  If either
2446          is a member of an anonymous union, then this is an invalid
2447          redeclaration.  For example:
2448
2449            int i;
2450            union { int i; };
2451
2452            is invalid.  */
2453       if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2454           || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
2455         return G_("redeclaration of %q#D");
2456       /* If at least one declaration is a reference, there is no
2457          conflict.  For example:
2458
2459            int i = 3;
2460            extern int i;
2461
2462          is valid.  */
2463       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2464         return NULL;
2465       /* Reject two definitions.  */
2466       return G_("redefinition of %q#D");
2467     }
2468   else
2469     {
2470       /* Objects declared with block scope:  */
2471       /* Reject two definitions, and reject a definition
2472          together with an external reference.  */
2473       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2474         return G_("redeclaration of %q#D");
2475       return NULL;
2476     }
2477 }
2478 \f
2479 /* Hash and equality functions for the named_label table.  */
2480
2481 static hashval_t
2482 named_label_entry_hash (const void *data)
2483 {
2484   const struct named_label_entry *ent = (const struct named_label_entry *) data;
2485   return DECL_UID (ent->label_decl);
2486 }
2487
2488 static int
2489 named_label_entry_eq (const void *a, const void *b)
2490 {
2491   const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2492   const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2493   return ent_a->label_decl == ent_b->label_decl;
2494 }
2495
2496 /* Create a new label, named ID.  */
2497
2498 static tree
2499 make_label_decl (tree id, int local_p)
2500 {
2501   struct named_label_entry *ent;
2502   void **slot;
2503   tree decl;
2504
2505   decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2506
2507   DECL_CONTEXT (decl) = current_function_decl;
2508   DECL_MODE (decl) = VOIDmode;
2509   C_DECLARED_LABEL_FLAG (decl) = local_p;
2510
2511   /* Say where one reference is to the label, for the sake of the
2512      error if it is not defined.  */
2513   DECL_SOURCE_LOCATION (decl) = input_location;
2514
2515   /* Record the fact that this identifier is bound to this label.  */
2516   SET_IDENTIFIER_LABEL_VALUE (id, decl);
2517
2518   /* Create the label htab for the function on demand.  */
2519   if (!named_labels)
2520     named_labels = htab_create_ggc (13, named_label_entry_hash,
2521                                     named_label_entry_eq, NULL);
2522
2523   /* Record this label on the list of labels used in this function.
2524      We do this before calling make_label_decl so that we get the
2525      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
2526   ent = ggc_alloc_cleared_named_label_entry ();
2527   ent->label_decl = decl;
2528
2529   slot = htab_find_slot (named_labels, ent, INSERT);
2530   gcc_assert (*slot == NULL);
2531   *slot = ent;
2532
2533   return decl;
2534 }
2535
2536 /* Look for a label named ID in the current function.  If one cannot
2537    be found, create one.  (We keep track of used, but undefined,
2538    labels, and complain about them at the end of a function.)  */
2539
2540 static tree
2541 lookup_label_1 (tree id)
2542 {
2543   tree decl;
2544
2545   /* You can't use labels at global scope.  */
2546   if (current_function_decl == NULL_TREE)
2547     {
2548       error ("label %qE referenced outside of any function", id);
2549       return NULL_TREE;
2550     }
2551
2552   /* See if we've already got this label.  */
2553   decl = IDENTIFIER_LABEL_VALUE (id);
2554   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2555     return decl;
2556
2557   decl = make_label_decl (id, /*local_p=*/0);
2558   return decl;
2559 }
2560
2561 /* Wrapper for lookup_label_1.  */
2562
2563 tree
2564 lookup_label (tree id)
2565 {
2566   tree ret;
2567   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2568   ret = lookup_label_1 (id);
2569   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2570   return ret;
2571 }
2572
2573 /* Declare a local label named ID.  */
2574
2575 tree
2576 declare_local_label (tree id)
2577 {
2578   tree decl;
2579   cp_label_binding *bind;
2580
2581   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2582      this scope we can restore the old value of IDENTIFIER_TYPE_VALUE.  */
2583   bind = VEC_safe_push (cp_label_binding, gc,
2584                         current_binding_level->shadowed_labels, NULL);
2585   bind->prev_value = IDENTIFIER_LABEL_VALUE (id);
2586
2587   decl = make_label_decl (id, /*local_p=*/1);
2588   bind->label = decl;
2589
2590   return decl;
2591 }
2592
2593 /* Returns nonzero if it is ill-formed to jump past the declaration of
2594    DECL.  Returns 2 if it's also a real problem.  */
2595
2596 static int
2597 decl_jump_unsafe (tree decl)
2598 {
2599   /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2600      with automatic storage duration is not in scope to a point where it is
2601      in scope is ill-formed unless the variable has scalar type, class type
2602      with a trivial default constructor and a trivial destructor, a
2603      cv-qualified version of one of these types, or an array of one of the
2604      preceding types and is declared without an initializer (8.5).  */
2605   tree type = TREE_TYPE (decl);
2606
2607   if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2608       || type == error_mark_node)
2609     return 0;
2610
2611   type = strip_array_types (type);
2612
2613   if (type_has_nontrivial_default_init (TREE_TYPE (decl))
2614       || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2615     return 2;
2616
2617   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2618     return 1;
2619
2620   return 0;
2621 }
2622
2623 /* A subroutine of check_previous_goto_1 to identify a branch to the user.  */
2624
2625 static void
2626 identify_goto (tree decl, const location_t *locus)
2627 {
2628   if (decl)
2629     permerror (input_location, "jump to label %qD", decl);
2630   else
2631     permerror (input_location, "jump to case label");
2632   if (locus)
2633     permerror (*locus, "  from here");
2634 }
2635
2636 /* Check that a single previously seen jump to a newly defined label
2637    is OK.  DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2638    the jump context; NAMES are the names in scope in LEVEL at the jump
2639    context; LOCUS is the source position of the jump or 0.  Returns
2640    true if all is well.  */
2641
2642 static bool
2643 check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2644                        bool exited_omp, const location_t *locus)
2645 {
2646   struct cp_binding_level *b;
2647   bool identified = false, saw_eh = false, saw_omp = false;
2648
2649   if (exited_omp)
2650     {
2651       identify_goto (decl, locus);
2652       error ("  exits OpenMP structured block");
2653       identified = saw_omp = true;
2654     }
2655
2656   for (b = current_binding_level; b ; b = b->level_chain)
2657     {
2658       tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2659
2660       for (new_decls = b->names; new_decls != old_decls;
2661            new_decls = DECL_CHAIN (new_decls))
2662         {
2663           int problem = decl_jump_unsafe (new_decls);
2664           if (! problem)
2665             continue;
2666
2667           if (!identified)
2668             {
2669               identify_goto (decl, locus);
2670               identified = true;
2671             }
2672           if (problem > 1)
2673             error ("  crosses initialization of %q+#D", new_decls);
2674           else
2675             permerror (input_location, "  enters scope of %q+#D which has "
2676                        "non-trivial destructor", new_decls);
2677         }
2678
2679       if (b == level)
2680         break;
2681       if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2682         {
2683           if (!identified)
2684             {
2685               identify_goto (decl, locus);
2686               identified = true;
2687             }
2688           if (b->kind == sk_try)
2689             error ("  enters try block");
2690           else
2691             error ("  enters catch block");
2692           saw_eh = true;
2693         }
2694       if (b->kind == sk_omp && !saw_omp)
2695         {
2696           if (!identified)
2697             {
2698               identify_goto (decl, locus);
2699               identified = true;
2700             }
2701           error ("  enters OpenMP structured block");
2702           saw_omp = true;
2703         }
2704     }
2705
2706   return !identified;
2707 }
2708
2709 static void
2710 check_previous_goto (tree decl, struct named_label_use_entry *use)
2711 {
2712   check_previous_goto_1 (decl, use->binding_level,
2713                          use->names_in_scope, use->in_omp_scope,
2714                          &use->o_goto_locus);
2715 }
2716
2717 static bool
2718 check_switch_goto (struct cp_binding_level* level)
2719 {
2720   return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2721 }
2722
2723 /* Check that a new jump to a label DECL is OK.  Called by
2724    finish_goto_stmt.  */
2725
2726 void
2727 check_goto (tree decl)
2728 {
2729   struct named_label_entry *ent, dummy;
2730   bool saw_catch = false, identified = false;
2731   tree bad;
2732   unsigned ix;
2733
2734   /* We can't know where a computed goto is jumping.
2735      So we assume that it's OK.  */
2736   if (TREE_CODE (decl) != LABEL_DECL)
2737     return;
2738
2739   /* We didn't record any information about this label when we created it,
2740      and there's not much point since it's trivial to analyze as a return.  */
2741   if (decl == cdtor_label)
2742     return;
2743
2744   dummy.label_decl = decl;
2745   ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2746   gcc_assert (ent != NULL);
2747
2748   /* If the label hasn't been defined yet, defer checking.  */
2749   if (! DECL_INITIAL (decl))
2750     {
2751       struct named_label_use_entry *new_use;
2752
2753       /* Don't bother creating another use if the last goto had the
2754          same data, and will therefore create the same set of errors.  */
2755       if (ent->uses
2756           && ent->uses->names_in_scope == current_binding_level->names)
2757         return;
2758
2759       new_use = ggc_alloc_named_label_use_entry ();
2760       new_use->binding_level = current_binding_level;
2761       new_use->names_in_scope = current_binding_level->names;
2762       new_use->o_goto_locus = input_location;
2763       new_use->in_omp_scope = false;
2764
2765       new_use->next = ent->uses;
2766       ent->uses = new_use;
2767       return;
2768     }
2769
2770   if (ent->in_try_scope || ent->in_catch_scope
2771       || ent->in_omp_scope || !VEC_empty (tree, ent->bad_decls))
2772     {
2773       permerror (input_location, "jump to label %q+D", decl);
2774       permerror (input_location, "  from here");
2775       identified = true;
2776     }
2777
2778   FOR_EACH_VEC_ELT (tree, ent->bad_decls, ix, bad)
2779     {
2780       int u = decl_jump_unsafe (bad);
2781
2782       if (u > 1 && DECL_ARTIFICIAL (bad))
2783         {
2784           /* Can't skip init of __exception_info.  */
2785           error_at (DECL_SOURCE_LOCATION (bad), "  enters catch block");
2786           saw_catch = true;
2787         }
2788       else if (u > 1)
2789         error ("  skips initialization of %q+#D", bad);
2790       else
2791         permerror (input_location, "  enters scope of %q+#D which has "
2792                    "non-trivial destructor", bad);
2793     }
2794
2795   if (ent->in_try_scope)
2796     error ("  enters try block");
2797   else if (ent->in_catch_scope && !saw_catch)
2798     error ("  enters catch block");
2799
2800   if (ent->in_omp_scope)
2801     error ("  enters OpenMP structured block");
2802   else if (flag_openmp)
2803     {
2804       struct cp_binding_level *b;
2805       for (b = current_binding_level; b ; b = b->level_chain)
2806         {
2807           if (b == ent->binding_level)
2808             break;
2809           if (b->kind == sk_omp)
2810             {
2811               if (!identified)
2812                 {
2813                   permerror (input_location, "jump to label %q+D", decl);
2814                   permerror (input_location, "  from here");
2815                   identified = true;
2816                 }
2817               error ("  exits OpenMP structured block");
2818               break;
2819             }
2820         }
2821     }
2822 }
2823
2824 /* Check that a return is ok wrt OpenMP structured blocks.
2825    Called by finish_return_stmt.  Returns true if all is well.  */
2826
2827 bool
2828 check_omp_return (void)
2829 {
2830   struct cp_binding_level *b;
2831   for (b = current_binding_level; b ; b = b->level_chain)
2832     if (b->kind == sk_omp)
2833       {
2834         error ("invalid exit from OpenMP structured block");
2835         return false;
2836       }
2837     else if (b->kind == sk_function_parms)
2838       break;
2839   return true;
2840 }
2841
2842 /* Define a label, specifying the location in the source file.
2843    Return the LABEL_DECL node for the label.  */
2844
2845 static tree
2846 define_label_1 (location_t location, tree name)
2847 {
2848   struct named_label_entry *ent, dummy;
2849   struct cp_binding_level *p;
2850   tree decl;
2851
2852   decl = lookup_label (name);
2853
2854   dummy.label_decl = decl;
2855   ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2856   gcc_assert (ent != NULL);
2857
2858   /* After labels, make any new cleanups in the function go into their
2859      own new (temporary) binding contour.  */
2860   for (p = current_binding_level;
2861        p->kind != sk_function_parms;
2862        p = p->level_chain)
2863     p->more_cleanups_ok = 0;
2864
2865   if (name == get_identifier ("wchar_t"))
2866     permerror (input_location, "label named wchar_t");
2867
2868   if (DECL_INITIAL (decl) != NULL_TREE)
2869     {
2870       error ("duplicate label %qD", decl);
2871       return error_mark_node;
2872     }
2873   else
2874     {
2875       struct named_label_use_entry *use;
2876
2877       /* Mark label as having been defined.  */
2878       DECL_INITIAL (decl) = error_mark_node;
2879       /* Say where in the source.  */
2880       DECL_SOURCE_LOCATION (decl) = location;
2881
2882       ent->binding_level = current_binding_level;
2883       ent->names_in_scope = current_binding_level->names;
2884
2885       for (use = ent->uses; use ; use = use->next)
2886         check_previous_goto (decl, use);
2887       ent->uses = NULL;
2888     }
2889
2890   return decl;
2891 }
2892
2893 /* Wrapper for define_label_1.  */
2894
2895 tree
2896 define_label (location_t location, tree name)
2897 {
2898   tree ret;
2899   timevar_start (TV_NAME_LOOKUP);
2900   ret = define_label_1 (location, name);
2901   timevar_stop (TV_NAME_LOOKUP);
2902   return ret;
2903 }
2904
2905
2906 struct cp_switch
2907 {
2908   struct cp_binding_level *level;
2909   struct cp_switch *next;
2910   /* The SWITCH_STMT being built.  */
2911   tree switch_stmt;
2912   /* A splay-tree mapping the low element of a case range to the high
2913      element, or NULL_TREE if there is no high element.  Used to
2914      determine whether or not a new case label duplicates an old case
2915      label.  We need a tree, rather than simply a hash table, because
2916      of the GNU case range extension.  */
2917   splay_tree cases;
2918 };
2919
2920 /* A stack of the currently active switch statements.  The innermost
2921    switch statement is on the top of the stack.  There is no need to
2922    mark the stack for garbage collection because it is only active
2923    during the processing of the body of a function, and we never
2924    collect at that point.  */
2925
2926 static struct cp_switch *switch_stack;
2927
2928 /* Called right after a switch-statement condition is parsed.
2929    SWITCH_STMT is the switch statement being parsed.  */
2930
2931 void
2932 push_switch (tree switch_stmt)
2933 {
2934   struct cp_switch *p = XNEW (struct cp_switch);
2935   p->level = current_binding_level;
2936   p->next = switch_stack;
2937   p->switch_stmt = switch_stmt;
2938   p->cases = splay_tree_new (case_compare, NULL, NULL);
2939   switch_stack = p;
2940 }
2941
2942 void
2943 pop_switch (void)
2944 {
2945   struct cp_switch *cs = switch_stack;
2946   location_t switch_location;
2947
2948   /* Emit warnings as needed.  */
2949   switch_location = EXPR_LOC_OR_HERE (cs->switch_stmt);
2950   if (!processing_template_decl)
2951     c_do_switch_warnings (cs->cases, switch_location,
2952                           SWITCH_STMT_TYPE (cs->switch_stmt),
2953                           SWITCH_STMT_COND (cs->switch_stmt));
2954
2955   splay_tree_delete (cs->cases);
2956   switch_stack = switch_stack->next;
2957   free (cs);
2958 }
2959
2960 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
2961    condition.  Note that if TYPE and VALUE are already integral we don't
2962    really do the conversion because the language-independent
2963    warning/optimization code will work better that way.  */
2964
2965 static tree
2966 case_conversion (tree type, tree value)
2967 {
2968   if (value == NULL_TREE)
2969     return value;
2970
2971   if (cxx_dialect >= cxx0x
2972       && (SCOPED_ENUM_P (type)
2973           || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
2974     {
2975       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2976         type = type_promotes_to (type);
2977       value = perform_implicit_conversion (type, value, tf_warning_or_error);
2978     }
2979   return cxx_constant_value (value);
2980 }
2981
2982 /* Note that we've seen a definition of a case label, and complain if this
2983    is a bad place for one.  */
2984
2985 tree
2986 finish_case_label (location_t loc, tree low_value, tree high_value)
2987 {
2988   tree cond, r;
2989   struct cp_binding_level *p;
2990   tree type;
2991
2992   if (processing_template_decl)
2993     {
2994       tree label;
2995
2996       /* For templates, just add the case label; we'll do semantic
2997          analysis at instantiation-time.  */
2998       label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
2999       return add_stmt (build_case_label (low_value, high_value, label));
3000     }
3001
3002   /* Find the condition on which this switch statement depends.  */
3003   cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3004   if (cond && TREE_CODE (cond) == TREE_LIST)
3005     cond = TREE_VALUE (cond);
3006
3007   if (!check_switch_goto (switch_stack->level))
3008     return error_mark_node;
3009
3010   type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3011
3012   low_value = case_conversion (type, low_value);
3013   high_value = case_conversion (type, high_value);
3014
3015   r = c_add_case_label (loc, switch_stack->cases, cond, type,
3016                         low_value, high_value);
3017
3018   /* After labels, make any new cleanups in the function go into their
3019      own new (temporary) binding contour.  */
3020   for (p = current_binding_level;
3021        p->kind != sk_function_parms;
3022        p = p->level_chain)
3023     p->more_cleanups_ok = 0;
3024
3025   return r;
3026 }
3027 \f
3028 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
3029
3030 static hashval_t
3031 typename_hash (const void* k)
3032 {
3033   hashval_t hash;
3034   const_tree const t = (const_tree) k;
3035
3036   hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3037           ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
3038
3039   return hash;
3040 }
3041
3042 typedef struct typename_info {
3043   tree scope;
3044   tree name;
3045   tree template_id;
3046   bool enum_p;
3047   bool class_p;
3048 } typename_info;
3049
3050 /* Compare two TYPENAME_TYPEs.  K1 is really of type `tree', K2 is
3051    really of type `typename_info*'  */
3052
3053 static int
3054 typename_compare (const void * k1, const void * k2)
3055 {
3056   const_tree const t1 = (const_tree) k1;
3057   const typename_info *const t2 = (const typename_info *) k2;
3058
3059   return (DECL_NAME (TYPE_NAME (t1)) == t2->name
3060           && TYPE_CONTEXT (t1) == t2->scope
3061           && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3062           && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3063           && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3064 }
3065
3066 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
3067    the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3068
3069    Returns the new TYPENAME_TYPE.  */
3070
3071 static GTY ((param_is (union tree_node))) htab_t typename_htab;
3072
3073 static tree
3074 build_typename_type (tree context, tree name, tree fullname,
3075                      enum tag_types tag_type)
3076 {
3077   tree t;
3078   tree d;
3079   typename_info ti;
3080   void **e;
3081   hashval_t hash;
3082
3083   if (typename_htab == NULL)
3084     typename_htab = htab_create_ggc (61, &typename_hash,
3085                                      &typename_compare, NULL);
3086
3087   ti.scope = FROB_CONTEXT (context);
3088   ti.name = name;
3089   ti.template_id = fullname;
3090   ti.enum_p = tag_type == enum_type;
3091   ti.class_p = (tag_type == class_type
3092                 || tag_type == record_type
3093                 || tag_type == union_type);
3094   hash =  (htab_hash_pointer (ti.scope)
3095            ^ htab_hash_pointer (ti.name));
3096
3097   /* See if we already have this type.  */
3098   e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
3099   if (*e)
3100     t = (tree) *e;
3101   else
3102     {
3103       /* Build the TYPENAME_TYPE.  */
3104       t = cxx_make_type (TYPENAME_TYPE);
3105       TYPE_CONTEXT (t) = ti.scope;
3106       TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3107       TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3108       TYPENAME_IS_CLASS_P (t) = ti.class_p;
3109
3110       /* Build the corresponding TYPE_DECL.  */
3111       d = build_decl (input_location, TYPE_DECL, name, t);
3112       TYPE_NAME (TREE_TYPE (d)) = d;
3113       TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3114       DECL_CONTEXT (d) = FROB_CONTEXT (context);
3115       DECL_ARTIFICIAL (d) = 1;
3116
3117       /* Store it in the hash table.  */
3118       *e = t;
3119
3120       /* TYPENAME_TYPEs must always be compared structurally, because
3121          they may or may not resolve down to another type depending on
3122          the currently open classes. */
3123       SET_TYPE_STRUCTURAL_EQUALITY (t);
3124     }
3125
3126   return t;
3127 }
3128
3129 /* Resolve `typename CONTEXT::NAME'.  TAG_TYPE indicates the tag
3130    provided to name the type.  Returns an appropriate type, unless an
3131    error occurs, in which case error_mark_node is returned.  If we
3132    locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3133    return that, rather than the _TYPE it corresponds to, in other
3134    cases we look through the type decl.  If TF_ERROR is set, complain
3135    about errors, otherwise be quiet.  */
3136
3137 tree
3138 make_typename_type (tree context, tree name, enum tag_types tag_type,
3139                     tsubst_flags_t complain)
3140 {
3141   tree fullname;
3142   tree t;
3143   bool want_template;
3144
3145   if (name == error_mark_node
3146       || context == NULL_TREE
3147       || context == error_mark_node)
3148     return error_mark_node;
3149
3150   if (TYPE_P (name))
3151     {
3152       if (!(TYPE_LANG_SPECIFIC (name)
3153             && (CLASSTYPE_IS_TEMPLATE (name)
3154                 || CLASSTYPE_USE_TEMPLATE (name))))
3155         name = TYPE_IDENTIFIER (name);
3156       else
3157         /* Create a TEMPLATE_ID_EXPR for the type.  */
3158         name = build_nt (TEMPLATE_ID_EXPR,
3159                          CLASSTYPE_TI_TEMPLATE (name),
3160                          CLASSTYPE_TI_ARGS (name));
3161     }
3162   else if (TREE_CODE (name) == TYPE_DECL)
3163     name = DECL_NAME (name);
3164
3165   fullname = name;
3166
3167   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3168     {
3169       name = TREE_OPERAND (name, 0);
3170       if (TREE_CODE (name) == TEMPLATE_DECL)
3171         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3172       else if (TREE_CODE (name) == OVERLOAD)
3173         {
3174           error ("%qD is not a type", name);
3175           return error_mark_node;
3176         }
3177     }
3178   if (TREE_CODE (name) == TEMPLATE_DECL)
3179     {
3180       error ("%qD used without template parameters", name);
3181       return error_mark_node;
3182     }
3183   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3184   gcc_assert (TYPE_P (context));
3185
3186   if (!MAYBE_CLASS_TYPE_P (context))
3187     {
3188       if (complain & tf_error)
3189         error ("%q#T is not a class", context);
3190       return error_mark_node;
3191     }
3192   
3193   /* When the CONTEXT is a dependent type,  NAME could refer to a
3194      dependent base class of CONTEXT.  But look inside it anyway
3195      if CONTEXT is a currently open scope, in case it refers to a
3196      member of the current instantiation or a non-dependent base;
3197      lookup will stop when we hit a dependent base.  */
3198   if (!dependent_scope_p (context))
3199     /* We should only set WANT_TYPE when we're a nested typename type.
3200        Then we can give better diagnostics if we find a non-type.  */
3201     t = lookup_field (context, name, 2, /*want_type=*/true);
3202   else
3203     t = NULL_TREE;
3204
3205   if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3206     return build_typename_type (context, name, fullname, tag_type);
3207
3208   want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3209   
3210   if (!t)
3211     {
3212       if (complain & tf_error)
3213         error (want_template ? "no class template named %q#T in %q#T"
3214                : "no type named %q#T in %q#T", name, context);
3215       return error_mark_node;
3216     }
3217   
3218   /* Pull out the template from an injected-class-name (or multiple).  */
3219   if (want_template)
3220     t = maybe_get_template_decl_from_type_decl (t);
3221
3222   if (TREE_CODE (t) == TREE_LIST)
3223     {
3224       if (complain & tf_error)
3225         {
3226           error ("lookup of %qT in %qT is ambiguous", name, context);
3227           print_candidates (t);
3228         }
3229       return error_mark_node;
3230     }
3231
3232   if (want_template && !DECL_CLASS_TEMPLATE_P (t))
3233     {
3234       if (complain & tf_error)
3235         error ("%<typename %T::%D%> names %q#T, which is not a class template",
3236                context, name, t);
3237       return error_mark_node;
3238     }
3239   if (!want_template && TREE_CODE (t) != TYPE_DECL)
3240     {
3241       if (complain & tf_error)
3242         error ("%<typename %T::%D%> names %q#T, which is not a type",
3243                context, name, t);
3244       return error_mark_node;
3245     }
3246   
3247   if (complain & tf_error)
3248     perform_or_defer_access_check (TYPE_BINFO (context), t, t);
3249
3250   /* If we are currently parsing a template and if T is a typedef accessed
3251      through CONTEXT then we need to remember and check access of T at
3252      template instantiation time.  */
3253   add_typedef_to_current_template_for_access_check (t, context, input_location);
3254
3255   if (want_template)
3256     return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3257                                   NULL_TREE, context,
3258                                   /*entering_scope=*/0,
3259                                   tf_warning_or_error | tf_user);
3260   
3261   if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3262     t = TREE_TYPE (t);
3263   
3264   return t;
3265 }
3266
3267 /* Resolve `CONTEXT::template NAME'.  Returns a TEMPLATE_DECL if the name
3268    can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3269    in which case error_mark_node is returned.
3270
3271    If PARM_LIST is non-NULL, also make sure that the template parameter
3272    list of TEMPLATE_DECL matches.
3273
3274    If COMPLAIN zero, don't complain about any errors that occur.  */
3275
3276 tree
3277 make_unbound_class_template (tree context, tree name, tree parm_list,
3278                              tsubst_flags_t complain)
3279 {
3280   tree t;
3281   tree d;
3282
3283   if (TYPE_P (name))
3284     name = TYPE_IDENTIFIER (name);
3285   else if (DECL_P (name))
3286     name = DECL_NAME (name);
3287   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3288
3289   if (!dependent_type_p (context)
3290       || currently_open_class (context))
3291     {
3292       tree tmpl = NULL_TREE;
3293
3294       if (MAYBE_CLASS_TYPE_P (context))
3295         tmpl = lookup_field (context, name, 0, false);
3296
3297       if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3298         tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3299
3300       if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
3301         {
3302           if (complain & tf_error)
3303             error ("no class template named %q#T in %q#T", name, context);
3304           return error_mark_node;
3305         }
3306
3307       if (parm_list
3308           && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3309         {
3310           if (complain & tf_error)
3311             {
3312               error ("template parameters do not match template");
3313               error ("%q+D declared here", tmpl);
3314             }
3315           return error_mark_node;
3316         }
3317
3318       if (complain & tf_error)
3319         perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
3320
3321       return tmpl;
3322     }
3323
3324   /* Build the UNBOUND_CLASS_TEMPLATE.  */
3325   t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3326   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3327   TREE_TYPE (t) = NULL_TREE;
3328   SET_TYPE_STRUCTURAL_EQUALITY (t);
3329
3330   /* Build the corresponding TEMPLATE_DECL.  */
3331   d = build_decl (input_location, TEMPLATE_DECL, name, t);
3332   TYPE_NAME (TREE_TYPE (d)) = d;
3333   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3334   DECL_CONTEXT (d) = FROB_CONTEXT (context);
3335   DECL_ARTIFICIAL (d) = 1;
3336   DECL_TEMPLATE_PARMS (d) = parm_list;
3337
3338   return t;
3339 }
3340
3341 \f
3342
3343 /* Push the declarations of builtin types into the namespace.
3344    RID_INDEX is the index of the builtin type in the array
3345    RID_POINTERS.  NAME is the name used when looking up the builtin
3346    type.  TYPE is the _TYPE node for the builtin type.  */
3347
3348 void
3349 record_builtin_type (enum rid rid_index,
3350                      const char* name,
3351                      tree type)
3352 {
3353   tree rname = NULL_TREE, tname = NULL_TREE;
3354   tree tdecl = NULL_TREE;
3355
3356   if ((int) rid_index < (int) RID_MAX)
3357     rname = ridpointers[(int) rid_index];
3358   if (name)
3359     tname = get_identifier (name);
3360
3361   /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3362      eliminated.  Built-in types should not be looked up name; their
3363      names are keywords that the parser can recognize.  However, there
3364      is code in c-common.c that uses identifier_global_value to look
3365      up built-in types by name.  */
3366   if (tname)
3367     {
3368       tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3369       DECL_ARTIFICIAL (tdecl) = 1;
3370       SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3371     }
3372   if (rname)
3373     {
3374       if (!tdecl)
3375         {
3376           tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3377           DECL_ARTIFICIAL (tdecl) = 1;
3378         }
3379       SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3380     }
3381
3382   if (!TYPE_NAME (type))
3383     TYPE_NAME (type) = tdecl;
3384
3385   if (tdecl)
3386     debug_hooks->type_decl (tdecl, 0);
3387 }
3388
3389 /* Record one of the standard Java types.
3390  * Declare it as having the given NAME.
3391  * If SIZE > 0, it is the size of one of the integral types;
3392  * otherwise it is the negative of the size of one of the other types.  */
3393
3394 static tree
3395 record_builtin_java_type (const char* name, int size)
3396 {
3397   tree type, decl;
3398   if (size > 0)
3399     {
3400       type = build_nonstandard_integer_type (size, 0);
3401       type = build_distinct_type_copy (type);
3402     }
3403   else if (size > -32)
3404     {
3405       tree stype;
3406       /* "__java_char" or ""__java_boolean".  */
3407       type = build_nonstandard_integer_type (-size, 1);
3408       type = build_distinct_type_copy (type);
3409       /* Get the signed type cached and attached to the unsigned type,
3410          so it doesn't get garbage-collected at "random" times,
3411          causing potential codegen differences out of different UIDs
3412          and different alias set numbers.  */
3413       stype = build_nonstandard_integer_type (-size, 0);
3414       stype = build_distinct_type_copy (stype);
3415       TREE_CHAIN (type) = stype;
3416       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3417     }
3418   else
3419     { /* "__java_float" or ""__java_double".  */
3420       type = make_node (REAL_TYPE);
3421       TYPE_PRECISION (type) = - size;
3422       layout_type (type);
3423     }
3424   record_builtin_type (RID_MAX, name, type);
3425   decl = TYPE_NAME (type);
3426
3427   /* Suppress generate debug symbol entries for these types,
3428      since for normal C++ they are just clutter.
3429      However, push_lang_context undoes this if extern "Java" is seen.  */
3430   DECL_IGNORED_P (decl) = 1;
3431
3432   TYPE_FOR_JAVA (type) = 1;
3433   return type;
3434 }
3435
3436 /* Push a type into the namespace so that the back ends ignore it.  */
3437
3438 static void
3439 record_unknown_type (tree type, const char* name)
3440 {
3441   tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3442                                     TYPE_DECL, get_identifier (name), type));
3443   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
3444   DECL_IGNORED_P (decl) = 1;
3445   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3446   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3447   TYPE_ALIGN (type) = 1;
3448   TYPE_USER_ALIGN (type) = 0;
3449   SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3450 }
3451
3452 /* A string for which we should create an IDENTIFIER_NODE at
3453    startup.  */
3454
3455 typedef struct predefined_identifier
3456 {
3457   /* The name of the identifier.  */
3458   const char *const name;
3459   /* The place where the IDENTIFIER_NODE should be stored.  */
3460   tree *const node;
3461   /* Nonzero if this is the name of a constructor or destructor.  */
3462   const int ctor_or_dtor_p;
3463 } predefined_identifier;
3464
3465 /* Create all the predefined identifiers.  */
3466
3467 static void
3468 initialize_predefined_identifiers (void)
3469 {
3470   const predefined_identifier *pid;
3471
3472   /* A table of identifiers to create at startup.  */
3473   static const predefined_identifier predefined_identifiers[] = {
3474     { "C++", &lang_name_cplusplus, 0 },
3475     { "C", &lang_name_c, 0 },
3476     { "Java", &lang_name_java, 0 },
3477     /* Some of these names have a trailing space so that it is
3478        impossible for them to conflict with names written by users.  */
3479     { "__ct ", &ctor_identifier, 1 },
3480     { "__base_ctor ", &base_ctor_identifier, 1 },
3481     { "__comp_ctor ", &complete_ctor_identifier, 1 },
3482     { "__dt ", &dtor_identifier, 1 },
3483     { "__comp_dtor ", &complete_dtor_identifier, 1 },
3484     { "__base_dtor ", &base_dtor_identifier, 1 },
3485     { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3486     { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3487     { "nelts", &nelts_identifier, 0 },
3488     { THIS_NAME, &this_identifier, 0 },
3489     { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3490     { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3491     { "_vptr", &vptr_identifier, 0 },
3492     { "__vtt_parm", &vtt_parm_identifier, 0 },
3493     { "::", &global_scope_name, 0 },
3494     { "std", &std_identifier, 0 },
3495     { NULL, NULL, 0 }
3496   };
3497
3498   for (pid = predefined_identifiers; pid->name; ++pid)
3499     {
3500       *pid->node = get_identifier (pid->name);
3501       if (pid->ctor_or_dtor_p)
3502         IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3503     }
3504 }
3505
3506 /* Create the predefined scalar types of C,
3507    and some nodes representing standard constants (0, 1, (void *)0).
3508    Initialize the global binding level.
3509    Make definitions for built-in primitive functions.  */
3510
3511 void
3512 cxx_init_decl_processing (void)
3513 {
3514   tree void_ftype;
3515   tree void_ftype_ptr;
3516
3517   build_common_tree_nodes (flag_signed_char);
3518
3519   /* Create all the identifiers we need.  */
3520   initialize_predefined_identifiers ();
3521
3522   /* Create the global variables.  */
3523   push_to_top_level ();
3524
3525   current_function_decl = NULL_TREE;
3526   current_binding_level = NULL;
3527   /* Enter the global namespace.  */
3528   gcc_assert (global_namespace == NULL_TREE);
3529   global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3530                                       void_type_node);
3531   DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3532   TREE_PUBLIC (global_namespace) = 1;
3533   begin_scope (sk_namespace, global_namespace);
3534
3535   current_lang_name = NULL_TREE;
3536
3537   if (flag_visibility_ms_compat)
3538     default_visibility = VISIBILITY_HIDDEN;
3539
3540   /* Initially, C.  */
3541   current_lang_name = lang_name_c;
3542
3543   /* Create the `std' namespace.  */
3544   push_namespace (std_identifier);
3545   std_node = current_namespace;
3546   pop_namespace ();
3547
3548   c_common_nodes_and_builtins ();
3549
3550   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3551   java_short_type_node = record_builtin_java_type ("__java_short", 16);
3552   java_int_type_node = record_builtin_java_type ("__java_int", 32);
3553   java_long_type_node = record_builtin_java_type ("__java_long", 64);
3554   java_float_type_node = record_builtin_java_type ("__java_float", -32);
3555   java_double_type_node = record_builtin_java_type ("__java_double", -64);
3556   java_char_type_node = record_builtin_java_type ("__java_char", -16);
3557   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3558
3559   integer_two_node = build_int_cst (NULL_TREE, 2);
3560
3561   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3562   truthvalue_type_node = boolean_type_node;
3563   truthvalue_false_node = boolean_false_node;
3564   truthvalue_true_node = boolean_true_node;
3565
3566   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3567   noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3568   noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3569
3570 #if 0
3571   record_builtin_type (RID_MAX, NULL, string_type_node);
3572 #endif
3573
3574   delta_type_node = ptrdiff_type_node;
3575   vtable_index_type = ptrdiff_type_node;
3576
3577   vtt_parm_type = build_pointer_type (const_ptr_type_node);
3578   void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3579   void_ftype_ptr = build_function_type_list (void_type_node,
3580                                              ptr_type_node, NULL_TREE);
3581   void_ftype_ptr
3582     = build_exception_variant (void_ftype_ptr, empty_except_spec);
3583
3584   /* C++ extensions */
3585
3586   unknown_type_node = make_node (LANG_TYPE);
3587   record_unknown_type (unknown_type_node, "unknown type");
3588
3589   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
3590   TREE_TYPE (unknown_type_node) = unknown_type_node;
3591
3592   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3593      result.  */
3594   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3595   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3596
3597   init_list_type_node = make_node (LANG_TYPE);
3598   record_unknown_type (init_list_type_node, "init list");
3599
3600   {
3601     /* Make sure we get a unique function type, so we can give
3602        its pointer type a name.  (This wins for gdb.) */
3603     tree vfunc_type = make_node (FUNCTION_TYPE);
3604     TREE_TYPE (vfunc_type) = integer_type_node;
3605     TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3606     layout_type (vfunc_type);
3607
3608     vtable_entry_type = build_pointer_type (vfunc_type);
3609   }
3610   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3611
3612   vtbl_type_node
3613     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3614   layout_type (vtbl_type_node);
3615   vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3616   record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3617   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3618   layout_type (vtbl_ptr_type_node);
3619   record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3620
3621   push_namespace (get_identifier ("__cxxabiv1"));
3622   abi_node = current_namespace;
3623   pop_namespace ();
3624
3625   global_type_node = make_node (LANG_TYPE);
3626   record_unknown_type (global_type_node, "global type");
3627
3628   /* Now, C++.  */
3629   current_lang_name = lang_name_cplusplus;
3630
3631   {
3632     tree newtype, deltype;
3633     tree ptr_ftype_sizetype;
3634     tree new_eh_spec;
3635
3636     ptr_ftype_sizetype
3637       = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3638     if (cxx_dialect == cxx98)
3639       {
3640         tree bad_alloc_id;
3641         tree bad_alloc_type_node;
3642         tree bad_alloc_decl;
3643
3644         push_namespace (std_identifier);
3645         bad_alloc_id = get_identifier ("bad_alloc");
3646         bad_alloc_type_node = make_class_type (RECORD_TYPE);
3647         TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3648         bad_alloc_decl
3649           = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3650         DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3651         pop_namespace ();
3652
3653         new_eh_spec
3654           = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3655       }
3656     else
3657       new_eh_spec = noexcept_false_spec;
3658
3659     newtype = build_exception_variant (ptr_ftype_sizetype, new_eh_spec);
3660     deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3661     push_cp_library_fn (NEW_EXPR, newtype);
3662     push_cp_library_fn (VEC_NEW_EXPR, newtype);
3663     global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3664     push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3665
3666     nullptr_type_node = make_node (NULLPTR_TYPE);
3667     TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3668     TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3669     TYPE_UNSIGNED (nullptr_type_node) = 1;
3670     TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3671     SET_TYPE_MODE (nullptr_type_node, Pmode);
3672     record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
3673     nullptr_node = build_int_cst (nullptr_type_node, 0);
3674   }
3675
3676   abort_fndecl
3677     = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3678
3679   /* Perform other language dependent initializations.  */
3680   init_class_processing ();
3681   init_rtti_processing ();
3682   init_template_processing ();
3683
3684   if (flag_exceptions)
3685     init_exception_processing ();
3686
3687   if (! supports_one_only ())
3688     flag_weak = 0;
3689
3690   make_fname_decl = cp_make_fname_decl;
3691   start_fname_decls ();
3692
3693   /* Show we use EH for cleanups.  */
3694   if (flag_exceptions)
3695     using_eh_for_cleanups ();
3696 }
3697
3698 /* Generate an initializer for a function naming variable from
3699    NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
3700    filled in with the type of the init.  */
3701
3702 tree
3703 cp_fname_init (const char* name, tree *type_p)
3704 {
3705   tree domain = NULL_TREE;
3706   tree type;
3707   tree init = NULL_TREE;
3708   size_t length = 0;
3709
3710   if (name)
3711     {
3712       length = strlen (name);
3713       domain = build_index_type (size_int (length));
3714       init = build_string (length + 1, name);
3715     }
3716
3717   type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3718   type = build_cplus_array_type (type, domain);
3719
3720   *type_p = type;
3721
3722   if (init)
3723     TREE_TYPE (init) = type;
3724   else
3725     init = error_mark_node;
3726
3727   return init;
3728 }
3729
3730 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3731    the decl, LOC is the location to give the decl, NAME is the
3732    initialization string and TYPE_DEP indicates whether NAME depended
3733    on the type of the function. We make use of that to detect
3734    __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3735    at the point of first use, so we mustn't push the decl now.  */
3736
3737 static tree
3738 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3739 {
3740   const char *const name = (type_dep && processing_template_decl
3741                             ? NULL : fname_as_string (type_dep));
3742   tree type;
3743   tree init = cp_fname_init (name, &type);
3744   tree decl = build_decl (loc, VAR_DECL, id, type);
3745
3746   if (name)
3747     free (CONST_CAST (char *, name));
3748
3749   /* As we're using pushdecl_with_scope, we must set the context.  */
3750   DECL_CONTEXT (decl) = current_function_decl;
3751   DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3752
3753   TREE_STATIC (decl) = 1;
3754   TREE_READONLY (decl) = 1;
3755   DECL_ARTIFICIAL (decl) = 1;
3756
3757   TREE_USED (decl) = 1;
3758
3759   if (current_function_decl)
3760     {
3761       struct cp_binding_level *b = current_binding_level;
3762       if (b->kind == sk_function_parms)
3763         return error_mark_node;
3764       while (b->level_chain->kind != sk_function_parms)
3765         b = b->level_chain;
3766       pushdecl_with_scope (decl, b, /*is_friend=*/false);
3767       cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3768                       LOOKUP_ONLYCONVERTING);
3769     }
3770   else
3771     {
3772       DECL_THIS_STATIC (decl) = true;
3773       pushdecl_top_level_and_finish (decl, init);
3774     }
3775
3776   return decl;
3777 }
3778
3779 static tree
3780 builtin_function_1 (tree decl, tree context, bool is_global)
3781 {
3782   tree          id = DECL_NAME (decl);
3783   const char *name = IDENTIFIER_POINTER (id);
3784
3785   retrofit_lang_decl (decl);
3786
3787   DECL_ARTIFICIAL (decl) = 1;
3788   SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3789   SET_DECL_LANGUAGE (decl, lang_c);
3790   /* Runtime library routines are, by definition, available in an
3791      external shared object.  */
3792   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3793   DECL_VISIBILITY_SPECIFIED (decl) = 1;
3794
3795   DECL_CONTEXT (decl) = context;
3796
3797   if (is_global)
3798     pushdecl_top_level (decl);
3799   else
3800     pushdecl (decl);
3801
3802   /* A function in the user's namespace should have an explicit
3803      declaration before it is used.  Mark the built-in function as
3804      anticipated but not actually declared.  */
3805   if (name[0] != '_' || name[1] != '_')
3806     DECL_ANTICIPATED (decl) = 1;
3807   else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3808     {
3809       size_t len = strlen (name);
3810
3811       /* Treat __*_chk fortification functions as anticipated as well,
3812          unless they are __builtin_*.  */
3813       if (len > strlen ("___chk")
3814           && memcmp (name + len - strlen ("_chk"),
3815                      "_chk", strlen ("_chk") + 1) == 0)
3816         DECL_ANTICIPATED (decl) = 1;
3817     }
3818
3819   return decl;
3820 }
3821
3822 tree
3823 cxx_builtin_function (tree decl)
3824 {
3825   tree          id = DECL_NAME (decl);
3826   const char *name = IDENTIFIER_POINTER (id);
3827   /* All builtins that don't begin with an '_' should additionally
3828      go in the 'std' namespace.  */
3829   if (name[0] != '_')
3830     {
3831       tree decl2 = copy_node(decl);
3832       push_namespace (std_identifier);
3833       builtin_function_1 (decl2, std_node, false);
3834       pop_namespace ();
3835     }
3836
3837   return builtin_function_1 (decl, NULL_TREE, false);
3838 }
3839
3840 /* Like cxx_builtin_function, but guarantee the function is added to the global
3841    scope.  This is to allow function specific options to add new machine
3842    dependent builtins when the target ISA changes via attribute((target(...)))
3843    which saves space on program startup if the program does not use non-generic
3844    ISAs.  */
3845
3846 tree
3847 cxx_builtin_function_ext_scope (tree decl)
3848 {
3849
3850   tree          id = DECL_NAME (decl);
3851   const char *name = IDENTIFIER_POINTER (id);
3852   /* All builtins that don't begin with an '_' should additionally
3853      go in the 'std' namespace.  */
3854   if (name[0] != '_')
3855     {
3856       tree decl2 = copy_node(decl);
3857       push_namespace (std_identifier);
3858       builtin_function_1 (decl2, std_node, true);
3859       pop_namespace ();
3860     }
3861
3862   return builtin_function_1 (decl, NULL_TREE, true);
3863 }
3864
3865 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3866    function.  Not called directly.  */
3867
3868 static tree
3869 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3870 {
3871   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3872   DECL_EXTERNAL (fn) = 1;
3873   TREE_PUBLIC (fn) = 1;
3874   DECL_ARTIFICIAL (fn) = 1;
3875   SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3876   SET_DECL_LANGUAGE (fn, lang_c);
3877   /* Runtime library routines are, by definition, available in an
3878      external shared object.  */
3879   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3880   DECL_VISIBILITY_SPECIFIED (fn) = 1;
3881   return fn;
3882 }
3883
3884 /* Returns the _DECL for a library function with C linkage.
3885    We assume that such functions never throw; if this is incorrect,
3886    callers should unset TREE_NOTHROW.  */
3887
3888 static tree
3889 build_library_fn (tree name, tree type)
3890 {
3891   tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3892   TREE_NOTHROW (fn) = 1;
3893   return fn;
3894 }
3895
3896 /* Returns the _DECL for a library function with C++ linkage.  */
3897
3898 static tree
3899 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3900 {
3901   tree fn = build_library_fn_1 (name, operator_code, type);
3902   TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3903   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3904   SET_DECL_LANGUAGE (fn, lang_cplusplus);
3905   return fn;
3906 }
3907
3908 /* Like build_library_fn, but takes a C string instead of an
3909    IDENTIFIER_NODE.  */
3910
3911 tree
3912 build_library_fn_ptr (const char* name, tree type)
3913 {
3914   return build_library_fn (get_identifier (name), type);
3915 }
3916
3917 /* Like build_cp_library_fn, but takes a C string instead of an
3918    IDENTIFIER_NODE.  */
3919
3920 tree
3921 build_cp_library_fn_ptr (const char* name, tree type)
3922 {
3923   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3924 }
3925
3926 /* Like build_library_fn, but also pushes the function so that we will
3927    be able to find it via IDENTIFIER_GLOBAL_VALUE.  Also, the function
3928    may throw exceptions listed in RAISES.  */
3929
3930 tree
3931 push_library_fn (tree name, tree type, tree raises)
3932 {
3933   tree fn;
3934
3935   if (raises)
3936     type = build_exception_variant (type, raises);
3937
3938   fn = build_library_fn (name, type);
3939   pushdecl_top_level (fn);
3940   return fn;
3941 }
3942
3943 /* Like build_cp_library_fn, but also pushes the function so that it
3944    will be found by normal lookup.  */
3945
3946 static tree
3947 push_cp_library_fn (enum tree_code operator_code, tree type)
3948 {
3949   tree fn = build_cp_library_fn (ansi_opname (operator_code),
3950                                  operator_code,
3951                                  type);
3952   pushdecl (fn);
3953   return fn;
3954 }
3955
3956 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3957    a FUNCTION_TYPE.  */
3958
3959 tree
3960 push_void_library_fn (tree name, tree parmtypes)
3961 {
3962   tree type = build_function_type (void_type_node, parmtypes);
3963   return push_library_fn (name, type, NULL_TREE);
3964 }
3965
3966 /* Like push_library_fn, but also note that this function throws
3967    and does not return.  Used for __throw_foo and the like.  */
3968
3969 tree
3970 push_throw_library_fn (tree name, tree type)
3971 {
3972   tree fn = push_library_fn (name, type, NULL_TREE);
3973   TREE_THIS_VOLATILE (fn) = 1;
3974   TREE_NOTHROW (fn) = 0;
3975   return fn;
3976 }
3977 \f
3978 /* When we call finish_struct for an anonymous union, we create
3979    default copy constructors and such.  But, an anonymous union
3980    shouldn't have such things; this function undoes the damage to the
3981    anonymous union type T.
3982
3983    (The reason that we create the synthesized methods is that we don't
3984    distinguish `union { int i; }' from `typedef union { int i; } U'.
3985    The first is an anonymous union; the second is just an ordinary
3986    union type.)  */
3987
3988 void
3989 fixup_anonymous_aggr (tree t)
3990 {
3991   tree *q;
3992
3993   /* Wipe out memory of synthesized methods.  */
3994   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
3995   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3996   TYPE_HAS_COPY_CTOR (t) = 0;
3997   TYPE_HAS_CONST_COPY_CTOR (t) = 0;
3998   TYPE_HAS_COPY_ASSIGN (t) = 0;
3999   TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4000
4001   /* Splice the implicitly generated functions out of the TYPE_METHODS
4002      list.  */
4003   q = &TYPE_METHODS (t);
4004   while (*q)
4005     {
4006       if (DECL_ARTIFICIAL (*q))
4007         *q = TREE_CHAIN (*q);
4008       else
4009         q = &DECL_CHAIN (*q);
4010     }
4011
4012   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
4013   if (TYPE_METHODS (t))
4014     {
4015       tree decl = TYPE_MAIN_DECL (t);
4016
4017       if (TREE_CODE (t) != UNION_TYPE)
4018         error_at (DECL_SOURCE_LOCATION (decl), 
4019                   "an anonymous struct cannot have function members");
4020       else
4021         error_at (DECL_SOURCE_LOCATION (decl),
4022                   "an anonymous union cannot have function members");
4023     }
4024
4025   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4026      assignment operators (because they cannot have these methods themselves).
4027      For anonymous unions this is already checked because they are not allowed
4028      in any union, otherwise we have to check it.  */
4029   if (TREE_CODE (t) != UNION_TYPE)
4030     {
4031       tree field, type;
4032
4033       for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4034         if (TREE_CODE (field) == FIELD_DECL)
4035           {
4036             type = TREE_TYPE (field);
4037             if (CLASS_TYPE_P (type))
4038               {
4039                 if (TYPE_NEEDS_CONSTRUCTING (type))
4040                   error ("member %q+#D with constructor not allowed "
4041                          "in anonymous aggregate", field);
4042                 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4043                   error ("member %q+#D with destructor not allowed "
4044                          "in anonymous aggregate", field);
4045                 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4046                   error ("member %q+#D with copy assignment operator "
4047                          "not allowed in anonymous aggregate", field);
4048               }
4049           }
4050     }
4051 }
4052
4053 /* Make sure that a declaration with no declarator is well-formed, i.e.
4054    just declares a tagged type or anonymous union.
4055
4056    Returns the type declared; or NULL_TREE if none.  */
4057
4058 tree
4059 check_tag_decl (cp_decl_specifier_seq *declspecs)
4060 {
4061   int saw_friend = declspecs->specs[(int)ds_friend] != 0;
4062   int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
4063   /* If a class, struct, or enum type is declared by the DECLSPECS
4064      (i.e, if a class-specifier, enum-specifier, or non-typename
4065      elaborated-type-specifier appears in the DECLSPECS),
4066      DECLARED_TYPE is set to the corresponding type.  */
4067   tree declared_type = NULL_TREE;
4068   bool error_p = false;
4069
4070   if (declspecs->multiple_types_p)
4071     error ("multiple types in one declaration");
4072   else if (declspecs->redefined_builtin_type)
4073     {
4074       if (!in_system_header)
4075         permerror (input_location, "redeclaration of C++ built-in type %qT",
4076                    declspecs->redefined_builtin_type);
4077       return NULL_TREE;
4078     }
4079
4080   if (declspecs->type
4081       && TYPE_P (declspecs->type)
4082       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4083            && MAYBE_CLASS_TYPE_P (declspecs->type))
4084           || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4085     declared_type = declspecs->type;
4086   else if (declspecs->type == error_mark_node)
4087     error_p = true;
4088   if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4089     permerror (input_location, "declaration does not declare anything");
4090   /* Check for an anonymous union.  */
4091   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4092            && TYPE_ANONYMOUS_P (declared_type))
4093     {
4094       /* 7/3 In a simple-declaration, the optional init-declarator-list
4095          can be omitted only when declaring a class (clause 9) or
4096          enumeration (7.2), that is, when the decl-specifier-seq contains
4097          either a class-specifier, an elaborated-type-specifier with
4098          a class-key (9.1), or an enum-specifier.  In these cases and
4099          whenever a class-specifier or enum-specifier is present in the
4100          decl-specifier-seq, the identifiers in these specifiers are among
4101          the names being declared by the declaration (as class-name,
4102          enum-names, or enumerators, depending on the syntax).  In such
4103          cases, and except for the declaration of an unnamed bit-field (9.6),
4104          the decl-specifier-seq shall introduce one or more names into the
4105          program, or shall redeclare a name introduced by a previous
4106          declaration.  [Example:
4107              enum { };                  // ill-formed
4108              typedef class { };         // ill-formed
4109          --end example]  */
4110       if (saw_typedef)
4111         {
4112           error ("missing type-name in typedef-declaration");
4113           return NULL_TREE;
4114         }
4115       /* Anonymous unions are objects, so they can have specifiers.  */;
4116       SET_ANON_AGGR_TYPE_P (declared_type);
4117
4118       if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
4119         pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
4120     }
4121
4122   else
4123     {
4124       if (declspecs->specs[(int)ds_inline]
4125           || declspecs->specs[(int)ds_virtual])
4126         error ("%qs can only be specified for functions",
4127                declspecs->specs[(int)ds_inline]
4128                ? "inline" : "virtual");
4129       else if (saw_friend
4130                && (!current_class_type
4131                    || current_scope () != current_class_type))
4132         error ("%<friend%> can only be specified inside a class");
4133       else if (declspecs->specs[(int)ds_explicit])
4134         error ("%<explicit%> can only be specified for constructors");
4135       else if (declspecs->storage_class)
4136         error ("a storage class can only be specified for objects "
4137                "and functions");
4138       else if (declspecs->specs[(int)ds_const]
4139                || declspecs->specs[(int)ds_volatile]
4140                || declspecs->specs[(int)ds_restrict]
4141                || declspecs->specs[(int)ds_thread])
4142         error ("qualifiers can only be specified for objects "
4143                "and functions");
4144       else if (saw_typedef)
4145         warning (0, "%<typedef%> was ignored in this declaration");
4146       else if (declspecs->specs[(int) ds_constexpr])
4147         error ("%<constexpr%> cannot be used for type declarations");
4148     }
4149
4150   return declared_type;
4151 }
4152
4153 /* Called when a declaration is seen that contains no names to declare.
4154    If its type is a reference to a structure, union or enum inherited
4155    from a containing scope, shadow that tag name for the current scope
4156    with a forward reference.
4157    If its type defines a new named structure or union
4158    or defines an enum, it is valid but we need not do anything here.
4159    Otherwise, it is an error.
4160
4161    C++: may have to grok the declspecs to learn about static,
4162    complain for anonymous unions.
4163
4164    Returns the TYPE declared -- or NULL_TREE if none.  */
4165
4166 tree
4167 shadow_tag (cp_decl_specifier_seq *declspecs)
4168 {
4169   tree t = check_tag_decl (declspecs);
4170
4171   if (!t)
4172     return NULL_TREE;
4173
4174   if (declspecs->attributes)
4175     {
4176       warning (0, "attribute ignored in declaration of %q+#T", t);
4177       warning (0, "attribute for %q+#T must follow the %qs keyword",
4178                t, class_key_or_enum_as_string (t));
4179
4180     }
4181
4182   if (maybe_process_partial_specialization (t) == error_mark_node)
4183     return NULL_TREE;
4184
4185   /* This is where the variables in an anonymous union are
4186      declared.  An anonymous union declaration looks like:
4187      union { ... } ;
4188      because there is no declarator after the union, the parser
4189      sends that declaration here.  */
4190   if (ANON_AGGR_TYPE_P (t))
4191     {
4192       fixup_anonymous_aggr (t);
4193
4194       if (TYPE_FIELDS (t))
4195         {
4196           tree decl = grokdeclarator (/*declarator=*/NULL,
4197                                       declspecs, NORMAL, 0, NULL);
4198           finish_anon_union (decl);
4199         }
4200     }
4201
4202   return t;
4203 }
4204 \f
4205 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
4206
4207 tree
4208 groktypename (cp_decl_specifier_seq *type_specifiers,
4209               const cp_declarator *declarator,
4210               bool is_template_arg)
4211 {
4212   tree attrs;
4213   tree type;
4214   enum decl_context context
4215     = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4216   attrs = type_specifiers->attributes;
4217   type_specifiers->attributes = NULL_TREE;
4218   type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4219   if (attrs && type != error_mark_node)
4220     {
4221       if (CLASS_TYPE_P (type))
4222         warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4223                  "outside of definition", type);
4224       else if (MAYBE_CLASS_TYPE_P (type))
4225         /* A template type parameter or other dependent type.  */
4226         warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4227                  "type %qT without an associated declaration", type);
4228       else
4229         cplus_decl_attributes (&type, attrs, 0);
4230     }
4231   return type;
4232 }
4233
4234 /* Process a DECLARATOR for a function-scope variable declaration,
4235    namespace-scope variable declaration, or function declaration.
4236    (Function definitions go through start_function; class member
4237    declarations appearing in the body of the class go through
4238    grokfield.)  The DECL corresponding to the DECLARATOR is returned.
4239    If an error occurs, the error_mark_node is returned instead.
4240    
4241    DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
4242    SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4243    for an explicitly defaulted function, or SD_DELETED for an explicitly
4244    deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4245    implicitly initialized via a default constructor.  ATTRIBUTES and
4246    PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4247    *PUSHED_SCOPE_P is set to the scope entered in this function, if any; if
4248    set, the caller is responsible for calling pop_scope.  */
4249
4250 tree
4251 start_decl (const cp_declarator *declarator,
4252             cp_decl_specifier_seq *declspecs,
4253             int initialized,
4254             tree attributes,
4255             tree prefix_attributes,
4256             tree *pushed_scope_p)
4257 {
4258   tree decl;
4259   tree context;
4260   bool was_public;
4261   int flags;
4262   bool alias;
4263
4264   *pushed_scope_p = NULL_TREE;
4265
4266   /* An object declared as __attribute__((deprecated)) suppresses
4267      warnings of uses of other deprecated items.  */
4268   if (lookup_attribute ("deprecated", attributes))
4269     deprecated_state = DEPRECATED_SUPPRESS;
4270
4271   attributes = chainon (attributes, prefix_attributes);
4272
4273   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4274                          &attributes);
4275
4276   deprecated_state = DEPRECATED_NORMAL;
4277
4278   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4279       || decl == error_mark_node)
4280     return error_mark_node;
4281
4282   context = CP_DECL_CONTEXT (decl);
4283   if (context != global_namespace)
4284     *pushed_scope_p = push_scope (context);
4285
4286   if (initialized)
4287     /* Is it valid for this decl to have an initializer at all?
4288        If not, set INITIALIZED to zero, which will indirectly
4289        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
4290     switch (TREE_CODE (decl))
4291       {
4292       case TYPE_DECL:
4293         error ("typedef %qD is initialized (use decltype instead)", decl);
4294         return error_mark_node;
4295
4296       case FUNCTION_DECL:
4297         if (initialized == SD_DELETED)
4298           /* We'll handle the rest of the semantics later, but we need to
4299              set this now so it's visible to duplicate_decls.  */
4300           DECL_DELETED_FN (decl) = 1;
4301         break;
4302
4303       default:
4304         break;
4305       }
4306
4307   if (initialized)
4308     {
4309       if (! toplevel_bindings_p ()
4310           && DECL_EXTERNAL (decl))
4311         warning (0, "declaration of %q#D has %<extern%> and is initialized",
4312                  decl);
4313       DECL_EXTERNAL (decl) = 0;
4314       if (toplevel_bindings_p ())
4315         TREE_STATIC (decl) = 1;
4316     }
4317   alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4318   
4319   if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4320     record_key_method_defined (decl);
4321
4322   /* If this is a typedef that names the class for linkage purposes
4323      (7.1.3p8), apply any attributes directly to the type.  */
4324   if (TREE_CODE (decl) == TYPE_DECL
4325       && TAGGED_TYPE_P (TREE_TYPE (decl))
4326       && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4327     flags = ATTR_FLAG_TYPE_IN_PLACE;
4328   else
4329     flags = 0;
4330
4331   /* Set attributes here so if duplicate decl, will have proper attributes.  */
4332   cplus_decl_attributes (&decl, attributes, flags);
4333
4334   /* Dllimported symbols cannot be defined.  Static data members (which
4335      can be initialized in-class and dllimported) go through grokfield,
4336      not here, so we don't need to exclude those decls when checking for
4337      a definition.  */
4338   if (initialized && DECL_DLLIMPORT_P (decl))
4339     {
4340       error ("definition of %q#D is marked %<dllimport%>", decl);
4341       DECL_DLLIMPORT_P (decl) = 0;
4342     }
4343
4344   /* If #pragma weak was used, mark the decl weak now.  */
4345   maybe_apply_pragma_weak (decl);
4346
4347   if (TREE_CODE (decl) == FUNCTION_DECL
4348       && DECL_DECLARED_INLINE_P (decl)
4349       && DECL_UNINLINABLE (decl)
4350       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4351     warning (0, "inline function %q+D given attribute noinline", decl);
4352
4353   if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4354     {
4355       if (TREE_CODE (decl) == VAR_DECL)
4356         {
4357           tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4358           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
4359             error ("%q#D is not a static member of %q#T", decl, context);
4360           else
4361             {
4362               if (DECL_CONTEXT (field) != context)
4363                 {
4364                   if (!same_type_p (DECL_CONTEXT (field), context))
4365                     permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4366                                "to be defined as %<%T::%D%>",
4367                                DECL_CONTEXT (field), DECL_NAME (decl),
4368                                context, DECL_NAME (decl));
4369                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4370                 }
4371               if (processing_specialization
4372                   && template_class_depth (context) == 0
4373                   && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4374                 error ("template header not allowed in member definition "
4375                        "of explicitly specialized class");
4376               /* Static data member are tricky; an in-class initialization
4377                  still doesn't provide a definition, so the in-class
4378                  declaration will have DECL_EXTERNAL set, but will have an
4379                  initialization.  Thus, duplicate_decls won't warn
4380                  about this situation, and so we check here.  */
4381               if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4382                 error ("duplicate initialization of %qD", decl);
4383               if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4384                 decl = field;
4385               if (declspecs->specs[(int) ds_constexpr]
4386                   && !DECL_DECLARED_CONSTEXPR_P (field))
4387                 error ("%qD declared %<constexpr%> outside its class", field);
4388             }
4389         }
4390       else
4391         {
4392           tree field = check_classfn (context, decl,
4393                                       (processing_template_decl
4394                                        > template_class_depth (context))
4395                                       ? current_template_parms
4396                                       : NULL_TREE);
4397           if (field && field != error_mark_node
4398               && duplicate_decls (decl, field,
4399                                  /*newdecl_is_friend=*/false))
4400             decl = field;
4401         }
4402
4403       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
4404       DECL_IN_AGGR_P (decl) = 0;
4405       /* Do not mark DECL as an explicit specialization if it was not
4406          already marked as an instantiation; a declaration should
4407          never be marked as a specialization unless we know what
4408          template is being specialized.  */
4409       if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4410         {
4411           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4412
4413           /* [temp.expl.spec] An explicit specialization of a static data
4414              member of a template is a definition if the declaration
4415              includes an initializer; otherwise, it is a declaration.
4416
4417              We check for processing_specialization so this only applies
4418              to the new specialization syntax.  */
4419           if (!initialized && processing_specialization)
4420             DECL_EXTERNAL (decl) = 1;
4421         }
4422
4423       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4424           /* Aliases are definitions. */
4425           && !alias)
4426         permerror (input_location, "declaration of %q#D outside of class is not definition",
4427                    decl);
4428     }
4429
4430   was_public = TREE_PUBLIC (decl);
4431
4432   /* Enter this declaration into the symbol table.  */
4433   decl = maybe_push_decl (decl);
4434
4435   if (processing_template_decl)
4436     decl = push_template_decl (decl);
4437   if (decl == error_mark_node)
4438     return error_mark_node;
4439
4440   /* Tell the back end to use or not use .common as appropriate.  If we say
4441      -fconserve-space, we want this to save .data space, at the expense of
4442      wrong semantics.  If we say -fno-conserve-space, we want this to
4443      produce errors about redefs; to do this we force variables into the
4444      data segment.  */
4445   if (flag_conserve_space
4446       && TREE_CODE (decl) == VAR_DECL
4447       && TREE_PUBLIC (decl)
4448       && !DECL_THREAD_LOCAL_P (decl)
4449       && !have_global_bss_p ())
4450     DECL_COMMON (decl) = 1;
4451
4452   if (TREE_CODE (decl) == VAR_DECL
4453       && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4454       && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4455     {
4456       /* This is a const variable with implicit 'static'.  Set
4457          DECL_THIS_STATIC so we can tell it from variables that are
4458          !TREE_PUBLIC because of the anonymous namespace.  */
4459       gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4460       DECL_THIS_STATIC (decl) = 1;
4461     }
4462
4463   if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4464     start_decl_1 (decl, initialized);
4465
4466   return decl;
4467 }
4468
4469 /* Process the declaration of a variable DECL.  INITIALIZED is true
4470    iff DECL is explicitly initialized.  (INITIALIZED is false if the
4471    variable is initialized via an implicitly-called constructor.)
4472    This function must be called for ordinary variables (including, for
4473    example, implicit instantiations of templates), but must not be
4474    called for template declarations.  */
4475
4476 void
4477 start_decl_1 (tree decl, bool initialized)
4478 {
4479   tree type;
4480   bool complete_p;
4481   bool aggregate_definition_p;
4482
4483   gcc_assert (!processing_template_decl);
4484
4485   if (error_operand_p (decl))
4486     return;
4487
4488   gcc_assert (TREE_CODE (decl) == VAR_DECL);
4489
4490   type = TREE_TYPE (decl);
4491   complete_p = COMPLETE_TYPE_P (type);
4492   aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4493
4494   /* If an explicit initializer is present, or if this is a definition
4495      of an aggregate, then we need a complete type at this point.
4496      (Scalars are always complete types, so there is nothing to
4497      check.)  This code just sets COMPLETE_P; errors (if necessary)
4498      are issued below.  */
4499   if ((initialized || aggregate_definition_p) 
4500       && !complete_p
4501       && COMPLETE_TYPE_P (complete_type (type)))
4502     {
4503       complete_p = true;
4504       /* We will not yet have set TREE_READONLY on DECL if the type
4505          was "const", but incomplete, before this point.  But, now, we
4506          have a complete type, so we can try again.  */
4507       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4508     }
4509
4510   if (initialized)
4511     /* Is it valid for this decl to have an initializer at all?  */
4512     {
4513       /* Don't allow initializations for incomplete types except for
4514          arrays which might be completed by the initialization.  */
4515       if (complete_p)
4516         ;                       /* A complete type is ok.  */
4517       else if (type_uses_auto (type))
4518         ;                       /* An auto type is ok.  */
4519       else if (TREE_CODE (type) != ARRAY_TYPE)
4520         {
4521           error ("variable %q#D has initializer but incomplete type", decl);
4522           type = TREE_TYPE (decl) = error_mark_node;
4523         }
4524       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4525         {
4526           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4527             error ("elements of array %q#D have incomplete type", decl);
4528           /* else we already gave an error in start_decl.  */
4529         }
4530     }
4531   else if (aggregate_definition_p && !complete_p)
4532     {
4533       if (type_uses_auto (type))
4534         error ("declaration of %q#D has no initializer", decl);
4535       else
4536         error ("aggregate %q#D has incomplete type and cannot be defined",
4537                decl);
4538       /* Change the type so that assemble_variable will give
4539          DECL an rtl we can live with: (mem (const_int 0)).  */
4540       type = TREE_TYPE (decl) = error_mark_node;
4541     }
4542
4543   /* Create a new scope to hold this declaration if necessary.
4544      Whether or not a new scope is necessary cannot be determined
4545      until after the type has been completed; if the type is a
4546      specialization of a class template it is not until after
4547      instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4548      will be set correctly.  */
4549   maybe_push_cleanup_level (type);
4550 }
4551
4552 /* Handle initialization of references.  DECL, TYPE, and INIT have the
4553    same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
4554    but will be set to a new CLEANUP_STMT if a temporary is created
4555    that must be destroyed subsequently.
4556
4557    Returns an initializer expression to use to initialize DECL, or
4558    NULL if the initialization can be performed statically.
4559
4560    Quotes on semantics can be found in ARM 8.4.3.  */
4561
4562 static tree
4563 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
4564 {
4565   tree tmp;
4566
4567   if (init == NULL_TREE)
4568     {
4569       if ((DECL_LANG_SPECIFIC (decl) == 0
4570            || DECL_IN_AGGR_P (decl) == 0)
4571           && ! DECL_THIS_EXTERN (decl))
4572         error ("%qD declared as reference but not initialized", decl);
4573       return NULL_TREE;
4574     }
4575
4576   if (TREE_CODE (init) == TREE_LIST)
4577     init = build_x_compound_expr_from_list (init, ELK_INIT,
4578                                             tf_warning_or_error);
4579
4580   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4581       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4582     /* Note: default conversion is only called in very special cases.  */
4583     init = decay_conversion (init);
4584
4585   /* Convert INIT to the reference type TYPE.  This may involve the
4586      creation of a temporary, whose lifetime must be the same as that
4587      of the reference.  If so, a DECL_EXPR for the temporary will be
4588      added just after the DECL_EXPR for DECL.  That's why we don't set
4589      DECL_INITIAL for local references (instead assigning to them
4590      explicitly); we need to allow the temporary to be initialized
4591      first.  */
4592   tmp = initialize_reference (type, init, decl, cleanup, tf_warning_or_error);
4593
4594   if (tmp == error_mark_node)
4595     return NULL_TREE;
4596   else if (tmp == NULL_TREE)
4597     {
4598       error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
4599       return NULL_TREE;
4600     }
4601
4602   if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4603     return tmp;
4604
4605   DECL_INITIAL (decl) = tmp;
4606
4607   return NULL_TREE;
4608 }
4609
4610 /* Subroutine of check_initializer.  We're initializing a DECL of
4611    std::initializer_list<T> TYPE from a braced-init-list INIT, and need to
4612    extend the lifetime of the underlying array to match that of the decl,
4613    just like for reference initialization.  CLEANUP is as for
4614    grok_reference_init.  */
4615
4616 static tree
4617 build_init_list_var_init (tree decl, tree type, tree init, tree *array_init,
4618                           tree *cleanup)
4619 {
4620   tree aggr_init, array, arrtype;
4621   init = perform_implicit_conversion (type, init, tf_warning_or_error);
4622   if (error_operand_p (init))
4623     return error_mark_node;
4624
4625   aggr_init = TARGET_EXPR_INITIAL (init);
4626   array = CONSTRUCTOR_ELT (aggr_init, 0)->value;
4627   arrtype = TREE_TYPE (array);
4628   STRIP_NOPS (array);
4629   gcc_assert (TREE_CODE (array) == ADDR_EXPR);
4630   array = TREE_OPERAND (array, 0);
4631   /* If the array is constant, finish_compound_literal already made it a
4632      static variable and we don't need to do anything here.  */
4633   if (decl && TREE_CODE (array) == TARGET_EXPR)
4634     {
4635       tree var = set_up_extended_ref_temp (decl, array, cleanup, array_init);
4636       var = build_address (var);
4637       var = convert (arrtype, var);
4638       CONSTRUCTOR_ELT (aggr_init, 0)->value = var;
4639     }
4640   return init;
4641 }
4642
4643 /* Designated initializers in arrays are not supported in GNU C++.
4644    The parser cannot detect this error since it does not know whether
4645    a given brace-enclosed initializer is for a class type or for an
4646    array.  This function checks that CE does not use a designated
4647    initializer.  If it does, an error is issued.  Returns true if CE
4648    is valid, i.e., does not have a designated initializer.  */
4649
4650 static bool
4651 check_array_designated_initializer (const constructor_elt *ce)
4652 {
4653   /* Designated initializers for array elements are not supported.  */
4654   if (ce->index)
4655     {
4656       /* The parser only allows identifiers as designated
4657          initializers.  */
4658       if (ce->index == error_mark_node)
4659         error ("name used in a GNU-style designated "
4660                "initializer for an array");
4661       else if (TREE_CODE (ce->index) == INTEGER_CST)
4662         /* An index added by reshape_init.  */
4663         return true;
4664       else
4665         {
4666           gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4667           error ("name %qD used in a GNU-style designated "
4668                  "initializer for an array", ce->index);
4669         }
4670       return false;
4671     }
4672
4673   return true;
4674 }
4675
4676 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4677    array until we finish parsing the initializer.  If that's the
4678    situation we're in, update DECL accordingly.  */
4679
4680 static void
4681 maybe_deduce_size_from_array_init (tree decl, tree init)
4682 {
4683   tree type = TREE_TYPE (decl);
4684
4685   if (TREE_CODE (type) == ARRAY_TYPE
4686       && TYPE_DOMAIN (type) == NULL_TREE
4687       && TREE_CODE (decl) != TYPE_DECL)
4688     {
4689       /* do_default is really a C-ism to deal with tentative definitions.
4690          But let's leave it here to ease the eventual merge.  */
4691       int do_default = !DECL_EXTERNAL (decl);
4692       tree initializer = init ? init : DECL_INITIAL (decl);
4693       int failure = 0;
4694
4695       /* Check that there are no designated initializers in INIT, as
4696          those are not supported in GNU C++, and as the middle-end
4697          will crash if presented with a non-numeric designated
4698          initializer.  */
4699       if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4700         {
4701           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4702           constructor_elt *ce;
4703           HOST_WIDE_INT i;
4704           FOR_EACH_VEC_ELT (constructor_elt, v, i, ce)
4705             if (!check_array_designated_initializer (ce))
4706               failure = 1;
4707         }
4708
4709       if (!failure)
4710         {
4711           failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4712                                             do_default);
4713           if (failure == 1)
4714             {
4715               error ("initializer fails to determine size of %qD", decl);
4716               TREE_TYPE (decl) = error_mark_node;
4717             }
4718           else if (failure == 2)
4719             {
4720               if (do_default)
4721                 {
4722                   error ("array size missing in %qD", decl);
4723                   TREE_TYPE (decl) = error_mark_node;
4724                 }
4725               /* If a `static' var's size isn't known, make it extern as
4726                  well as static, so it does not get allocated.  If it's not
4727                  `static', then don't mark it extern; finish_incomplete_decl
4728                  will give it a default size and it will get allocated.  */
4729               else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4730                 DECL_EXTERNAL (decl) = 1;
4731             }
4732           else if (failure == 3)
4733             {
4734               error ("zero-size array %qD", decl);
4735               TREE_TYPE (decl) = error_mark_node;
4736             }
4737         }
4738
4739       cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4740
4741       relayout_decl (decl);
4742     }
4743 }
4744
4745 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4746    any appropriate error messages regarding the layout.  */
4747
4748 static void
4749 layout_var_decl (tree decl)
4750 {
4751   tree type;
4752
4753   type = TREE_TYPE (decl);
4754   if (type == error_mark_node)
4755     return;
4756
4757   /* If we haven't already layed out this declaration, do so now.
4758      Note that we must not call complete type for an external object
4759      because it's type might involve templates that we are not
4760      supposed to instantiate yet.  (And it's perfectly valid to say
4761      `extern X x' for some incomplete type `X'.)  */
4762   if (!DECL_EXTERNAL (decl))
4763     complete_type (type);
4764   if (!DECL_SIZE (decl)
4765       && TREE_TYPE (decl) != error_mark_node
4766       && (COMPLETE_TYPE_P (type)
4767           || (TREE_CODE (type) == ARRAY_TYPE
4768               && !TYPE_DOMAIN (type)
4769               && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4770     layout_decl (decl, 0);
4771
4772   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4773     {
4774       /* An automatic variable with an incomplete type: that is an error.
4775          Don't talk about array types here, since we took care of that
4776          message in grokdeclarator.  */
4777       error ("storage size of %qD isn%'t known", decl);
4778       TREE_TYPE (decl) = error_mark_node;
4779     }
4780 #if 0
4781   /* Keep this code around in case we later want to control debug info
4782      based on whether a type is "used".  (jason 1999-11-11) */
4783
4784   else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4785     /* Let debugger know it should output info for this type.  */
4786     note_debug_info_needed (ttype);
4787
4788   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4789     note_debug_info_needed (DECL_CONTEXT (decl));
4790 #endif
4791
4792   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4793       && DECL_SIZE (decl) != NULL_TREE
4794       && ! TREE_CONSTANT (DECL_SIZE (decl)))
4795     {
4796       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4797         constant_expression_warning (DECL_SIZE (decl));
4798       else
4799         {
4800           error ("storage size of %qD isn%'t constant", decl);
4801           TREE_TYPE (decl) = error_mark_node;
4802         }
4803     }
4804 }
4805
4806 /* If a local static variable is declared in an inline function, or if
4807    we have a weak definition, we must endeavor to create only one
4808    instance of the variable at link-time.  */
4809
4810 void
4811 maybe_commonize_var (tree decl)
4812 {
4813   /* Static data in a function with comdat linkage also has comdat
4814      linkage.  */
4815   if (TREE_STATIC (decl)
4816       /* Don't mess with __FUNCTION__.  */
4817       && ! DECL_ARTIFICIAL (decl)
4818       && DECL_FUNCTION_SCOPE_P (decl)
4819       && vague_linkage_p (DECL_CONTEXT (decl)))
4820     {
4821       if (flag_weak)
4822         {
4823           /* With weak symbols, we simply make the variable COMDAT;
4824              that will cause copies in multiple translations units to
4825              be merged.  */
4826           comdat_linkage (decl);
4827         }
4828       else
4829         {
4830           if (DECL_INITIAL (decl) == NULL_TREE
4831               || DECL_INITIAL (decl) == error_mark_node)
4832             {
4833               /* Without weak symbols, we can use COMMON to merge
4834                  uninitialized variables.  */
4835               TREE_PUBLIC (decl) = 1;
4836               DECL_COMMON (decl) = 1;
4837             }
4838           else
4839             {
4840               /* While for initialized variables, we must use internal
4841                  linkage -- which means that multiple copies will not
4842                  be merged.  */
4843               TREE_PUBLIC (decl) = 0;
4844               DECL_COMMON (decl) = 0;
4845               warning_at (input_location, 0,
4846                           "sorry: semantics of inline function static "
4847                           "data %q+#D are wrong (you%'ll wind up "
4848                           "with multiple copies)", decl);
4849               warning_at (DECL_SOURCE_LOCATION (decl), 0, 
4850                           "  you can work around this by removing "
4851                           "the initializer");
4852             }
4853         }
4854     }
4855   else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4856     /* Set it up again; we might have set DECL_INITIAL since the last
4857        time.  */
4858     comdat_linkage (decl);
4859 }
4860
4861 /* Issue an error message if DECL is an uninitialized const variable.  */
4862
4863 static void
4864 check_for_uninitialized_const_var (tree decl)
4865 {
4866   tree type = strip_array_types (TREE_TYPE (decl));
4867
4868   /* ``Unless explicitly declared extern, a const object does not have
4869      external linkage and must be initialized. ($8.4; $12.1)'' ARM
4870      7.1.6 */
4871   if (TREE_CODE (decl) == VAR_DECL
4872       && TREE_CODE (type) != REFERENCE_TYPE
4873       && CP_TYPE_CONST_P (type)
4874       && (!TYPE_NEEDS_CONSTRUCTING (type)
4875           || !type_has_user_provided_default_constructor (type))
4876       && !DECL_INITIAL (decl))
4877     {
4878       permerror (DECL_SOURCE_LOCATION (decl),
4879                  "uninitialized const %qD", decl);
4880
4881       if (CLASS_TYPE_P (type)
4882           && !type_has_user_provided_default_constructor (type))
4883         {
4884           tree defaulted_ctor;
4885
4886           inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
4887                   "%q#T has no user-provided default constructor", type);
4888           defaulted_ctor = in_class_defaulted_default_constructor (type);
4889           if (defaulted_ctor)
4890             inform (DECL_SOURCE_LOCATION (defaulted_ctor),
4891                     "constructor is not user-provided because it is "
4892                     "explicitly defaulted in the class body");
4893         }
4894     }
4895 }
4896 \f
4897 /* Structure holding the current initializer being processed by reshape_init.
4898    CUR is a pointer to the current element being processed, END is a pointer
4899    after the last element present in the initializer.  */
4900 typedef struct reshape_iterator_t
4901 {
4902   constructor_elt *cur;
4903   constructor_elt *end;
4904 } reshape_iter;
4905
4906 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
4907
4908 /* FIELD is a FIELD_DECL or NULL.  In the former case, the value
4909    returned is the next FIELD_DECL (possibly FIELD itself) that can be
4910    initialized.  If there are no more such fields, the return value
4911    will be NULL.  */
4912
4913 tree
4914 next_initializable_field (tree field)
4915 {
4916   while (field
4917          && (TREE_CODE (field) != FIELD_DECL
4918              || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4919              || DECL_ARTIFICIAL (field)))
4920     field = DECL_CHAIN (field);
4921
4922   return field;
4923 }
4924
4925 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4926    the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4927    INTEGER_CST representing the size of the array minus one (the maximum index),
4928    or NULL_TREE if the array was declared without specifying the size. D is
4929    the iterator within the constructor.  */
4930
4931 static tree
4932 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
4933                       tsubst_flags_t complain)
4934 {
4935   tree new_init;
4936   bool sized_array_p = (max_index != NULL_TREE);
4937   unsigned HOST_WIDE_INT max_index_cst = 0;
4938   unsigned HOST_WIDE_INT index;
4939
4940   /* The initializer for an array is always a CONSTRUCTOR.  */
4941   new_init = build_constructor (init_list_type_node, NULL);
4942
4943   if (sized_array_p)
4944     {
4945       /* Minus 1 is used for zero sized arrays.  */
4946       if (integer_all_onesp (max_index))
4947         return new_init;
4948
4949       if (host_integerp (max_index, 1))
4950         max_index_cst = tree_low_cst (max_index, 1);
4951       /* sizetype is sign extended, not zero extended.  */
4952       else
4953         max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4954                                       1);
4955     }
4956
4957   /* Loop until there are no more initializers.  */
4958   for (index = 0;
4959        d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4960        ++index)
4961     {
4962       tree elt_init;
4963
4964       check_array_designated_initializer (d->cur);
4965       elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
4966                                  complain);
4967       if (elt_init == error_mark_node)
4968         return error_mark_node;
4969       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
4970                               size_int (index), elt_init);
4971       if (!TREE_CONSTANT (elt_init))
4972         TREE_CONSTANT (new_init) = false;
4973     }
4974
4975   return new_init;
4976 }
4977
4978 /* Subroutine of reshape_init_r, processes the initializers for arrays.
4979    Parameters are the same of reshape_init_r.  */
4980
4981 static tree
4982 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
4983 {
4984   tree max_index = NULL_TREE;
4985
4986   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
4987
4988   if (TYPE_DOMAIN (type))
4989     max_index = array_type_nelts (type);
4990
4991   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
4992 }
4993
4994 /* Subroutine of reshape_init_r, processes the initializers for vectors.
4995    Parameters are the same of reshape_init_r.  */
4996
4997 static tree
4998 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
4999 {
5000   tree max_index = NULL_TREE;
5001
5002   gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5003
5004   if (COMPOUND_LITERAL_P (d->cur->value))
5005     {
5006       tree value = d->cur->value;
5007       if (!same_type_p (TREE_TYPE (value), type))
5008         {
5009           if (complain & tf_error)
5010             error ("invalid type %qT as initializer for a vector of type %qT",
5011                    TREE_TYPE (d->cur->value), type);
5012           value = error_mark_node;
5013         }
5014       ++d->cur;
5015       return value;
5016     }
5017
5018   /* For a vector, we initialize it as an array of the appropriate size.  */
5019   if (TREE_CODE (type) == VECTOR_TYPE)
5020     max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5021
5022   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5023 }
5024
5025 /* Subroutine of reshape_init_r, processes the initializers for classes
5026    or union. Parameters are the same of reshape_init_r.  */
5027
5028 static tree
5029 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5030                     tsubst_flags_t complain)
5031 {
5032   tree field;
5033   tree new_init;
5034
5035   gcc_assert (CLASS_TYPE_P (type));
5036
5037   /* The initializer for a class is always a CONSTRUCTOR.  */
5038   new_init = build_constructor (init_list_type_node, NULL);
5039   field = next_initializable_field (TYPE_FIELDS (type));
5040
5041   if (!field)
5042     {
5043       /* [dcl.init.aggr]
5044
5045         An initializer for an aggregate member that is an
5046         empty class shall have the form of an empty
5047         initializer-list {}.  */
5048       if (!first_initializer_p)
5049         {
5050           if (complain & tf_error)
5051             error ("initializer for %qT must be brace-enclosed", type);
5052           return error_mark_node;
5053         }
5054       return new_init;
5055     }
5056
5057   /* Loop through the initializable fields, gathering initializers.  */
5058   while (d->cur != d->end)
5059     {
5060       tree field_init;
5061
5062       /* Handle designated initializers, as an extension.  */
5063       if (d->cur->index)
5064         {
5065           field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5066
5067           if (!field || TREE_CODE (field) != FIELD_DECL)
5068             {
5069               if (complain & tf_error)
5070                 error ("%qT has no non-static data member named %qD", type,
5071                        d->cur->index);
5072               return error_mark_node;
5073             }
5074         }
5075
5076       /* If we processed all the member of the class, we are done.  */
5077       if (!field)
5078         break;
5079
5080       field_init = reshape_init_r (TREE_TYPE (field), d,
5081                                    /*first_initializer_p=*/false, complain);
5082       if (field_init == error_mark_node)
5083         return error_mark_node;
5084
5085       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5086
5087       /* [dcl.init.aggr]
5088
5089         When a union  is  initialized with a brace-enclosed
5090         initializer, the braces shall only contain an
5091         initializer for the first member of the union.  */
5092       if (TREE_CODE (type) == UNION_TYPE)
5093         break;
5094
5095       field = next_initializable_field (DECL_CHAIN (field));
5096     }
5097
5098   return new_init;
5099 }
5100
5101 /* Subroutine of reshape_init, which processes a single initializer (part of
5102    a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5103    iterator within the CONSTRUCTOR which points to the initializer to process.
5104    FIRST_INITIALIZER_P is true if this is the first initializer of the
5105    outermost CONSTRUCTOR node.  */
5106
5107 static tree
5108 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5109                 tsubst_flags_t complain)
5110 {
5111   tree init = d->cur->value;
5112
5113   if (error_operand_p (init))
5114     return error_mark_node;
5115
5116   if (TREE_CODE (type) == COMPLEX_TYPE)
5117     {
5118       /* A complex type can be initialized from one or two initializers,
5119          but braces are not elided.  */
5120       d->cur++;
5121       if (BRACE_ENCLOSED_INITIALIZER_P (init))
5122         {
5123           if (CONSTRUCTOR_NELTS (init) > 2)
5124             {
5125               if (complain & tf_error)
5126                 error ("too many initializers for %qT", type);
5127               else
5128                 return error_mark_node;
5129             }
5130         }
5131       else if (first_initializer_p && d->cur != d->end)
5132         {
5133           VEC(constructor_elt, gc) *v = 0;
5134           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5135           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5136           d->cur++;
5137           init = build_constructor (init_list_type_node, v);
5138         }
5139       return init;
5140     }
5141
5142   /* A non-aggregate type is always initialized with a single
5143      initializer.  */
5144   if (!CP_AGGREGATE_TYPE_P (type))
5145     {
5146       /* It is invalid to initialize a non-aggregate type with a
5147          brace-enclosed initializer before C++0x.
5148          We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5149          of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5150          a CONSTRUCTOR (with a record type).  */
5151       if (TREE_CODE (init) == CONSTRUCTOR
5152           && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
5153         {
5154           if (SCALAR_TYPE_P (type))
5155             {
5156               if (complain & tf_error)
5157                 error ("braces around scalar initializer for type %qT", type);
5158               init = error_mark_node;
5159             }
5160           else
5161             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5162         }
5163
5164       d->cur++;
5165       return init;
5166     }
5167
5168   /* [dcl.init.aggr]
5169
5170      All implicit type conversions (clause _conv_) are considered when
5171      initializing the aggregate member with an initializer from an
5172      initializer-list.  If the initializer can initialize a member,
5173      the member is initialized.  Otherwise, if the member is itself a
5174      non-empty subaggregate, brace elision is assumed and the
5175      initializer is considered for the initialization of the first
5176      member of the subaggregate.  */
5177   if (TREE_CODE (init) != CONSTRUCTOR
5178       /* But don't try this for the first initializer, since that would be
5179          looking through the outermost braces; A a2 = { a1 }; is not a
5180          valid aggregate initialization.  */
5181       && !first_initializer_p
5182       && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5183           || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL)))
5184     {
5185       d->cur++;
5186       return init;
5187     }
5188
5189   /* [dcl.init.string]
5190
5191       A char array (whether plain char, signed char, or unsigned char)
5192       can be initialized by a string-literal (optionally enclosed in
5193       braces); a wchar_t array can be initialized by a wide
5194       string-literal (optionally enclosed in braces).  */
5195   if (TREE_CODE (type) == ARRAY_TYPE
5196       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5197     {
5198       tree str_init = init;
5199
5200       /* Strip one level of braces if and only if they enclose a single
5201          element (as allowed by [dcl.init.string]).  */
5202       if (!first_initializer_p
5203           && TREE_CODE (str_init) == CONSTRUCTOR
5204           && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
5205         {
5206           str_init = VEC_index (constructor_elt,
5207                                 CONSTRUCTOR_ELTS (str_init), 0)->value;
5208         }
5209
5210       /* If it's a string literal, then it's the initializer for the array
5211          as a whole. Otherwise, continue with normal initialization for
5212          array types (one value per array element).  */
5213       if (TREE_CODE (str_init) == STRING_CST)
5214         {
5215           d->cur++;
5216           return str_init;
5217         }
5218     }
5219
5220   /* The following cases are about aggregates. If we are not within a full
5221      initializer already, and there is not a CONSTRUCTOR, it means that there
5222      is a missing set of braces (that is, we are processing the case for
5223      which reshape_init exists).  */
5224   if (!first_initializer_p)
5225     {
5226       if (TREE_CODE (init) == CONSTRUCTOR)
5227         {
5228           if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5229             /* There is no need to reshape pointer-to-member function
5230                initializers, as they are always constructed correctly
5231                by the front end.  */
5232            ;
5233           else if (COMPOUND_LITERAL_P (init))
5234           /* For a nested compound literal, there is no need to reshape since
5235              brace elision is not allowed. Even if we decided to allow it,
5236              we should add a call to reshape_init in finish_compound_literal,
5237              before calling digest_init, so changing this code would still
5238              not be necessary.  */
5239             gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5240           else
5241             {
5242               ++d->cur;
5243               gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5244               return reshape_init (type, init, complain);
5245             }
5246         }
5247
5248       warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5249                type);
5250     }
5251
5252   /* Dispatch to specialized routines.  */
5253   if (CLASS_TYPE_P (type))
5254     return reshape_init_class (type, d, first_initializer_p, complain);
5255   else if (TREE_CODE (type) == ARRAY_TYPE)
5256     return reshape_init_array (type, d, complain);
5257   else if (TREE_CODE (type) == VECTOR_TYPE)
5258     return reshape_init_vector (type, d, complain);
5259   else
5260     gcc_unreachable();
5261 }
5262
5263 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5264    brace-enclosed aggregate initializer.
5265
5266    INIT is the CONSTRUCTOR containing the list of initializers describing
5267    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5268    It may not presently match the shape of the TYPE; for example:
5269
5270      struct S { int a; int b; };
5271      struct S a[] = { 1, 2, 3, 4 };
5272
5273    Here INIT will hold a VEC of four elements, rather than a
5274    VEC of two elements, each itself a VEC of two elements.  This
5275    routine transforms INIT from the former form into the latter.  The
5276    revised CONSTRUCTOR node is returned.  */
5277
5278 tree
5279 reshape_init (tree type, tree init, tsubst_flags_t complain)
5280 {
5281   VEC(constructor_elt, gc) *v;
5282   reshape_iter d;
5283   tree new_init;
5284
5285   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5286
5287   v = CONSTRUCTOR_ELTS (init);
5288
5289   /* An empty constructor does not need reshaping, and it is always a valid
5290      initializer.  */
5291   if (VEC_empty (constructor_elt, v))
5292     return init;
5293
5294   /* Recurse on this CONSTRUCTOR.  */
5295   d.cur = VEC_index (constructor_elt, v, 0);
5296   d.end = d.cur + VEC_length (constructor_elt, v);
5297
5298   new_init = reshape_init_r (type, &d, true, complain);
5299   if (new_init == error_mark_node)
5300     return error_mark_node;
5301
5302   /* Make sure all the element of the constructor were used. Otherwise,
5303      issue an error about exceeding initializers.  */
5304   if (d.cur != d.end)
5305     {
5306       if (complain & tf_error)
5307         error ("too many initializers for %qT", type);
5308       else
5309         return error_mark_node;
5310     }
5311
5312   return new_init;
5313 }
5314
5315 /* Verify array initializer.  Returns true if errors have been reported.  */
5316
5317 bool
5318 check_array_initializer (tree decl, tree type, tree init)
5319 {
5320   tree element_type = TREE_TYPE (type);
5321
5322   /* The array type itself need not be complete, because the
5323      initializer may tell us how many elements are in the array.
5324      But, the elements of the array must be complete.  */
5325   if (!COMPLETE_TYPE_P (complete_type (element_type)))
5326     {
5327       if (decl)
5328         error ("elements of array %q#D have incomplete type", decl);
5329       else
5330         error ("elements of array %q#T have incomplete type", type);
5331       return true;
5332     }
5333   /* It is not valid to initialize a VLA.  */
5334   if (init
5335       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5336           || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5337     {
5338       if (decl)
5339         error ("variable-sized object %qD may not be initialized", decl);
5340       else
5341         error ("variable-sized compound literal");
5342       return true;
5343     }
5344   return false;
5345 }
5346
5347 /* Subroutine of check_initializer; args are passed down from that function.
5348    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
5349
5350 static tree
5351 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5352      
5353 {
5354   int saved_stmts_are_full_exprs_p = 0;
5355   if (building_stmt_tree ())
5356     {
5357       saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5358       current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5359     }
5360   init = build_aggr_init (decl, init, flags, tf_warning_or_error);
5361   if (building_stmt_tree ())
5362     current_stmt_tree ()->stmts_are_full_exprs_p =
5363       saved_stmts_are_full_exprs_p;
5364   return init;
5365 }
5366
5367 /* Verify INIT (the initializer for DECL), and record the
5368    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
5369    grok_reference_init.
5370
5371    If the return value is non-NULL, it is an expression that must be
5372    evaluated dynamically to initialize DECL.  */
5373
5374 static tree
5375 check_initializer (tree decl, tree init, int flags, tree *cleanup)
5376 {
5377   tree type = TREE_TYPE (decl);
5378   tree init_code = NULL;
5379   tree extra_init = NULL_TREE;
5380   tree core_type;
5381
5382   /* Things that are going to be initialized need to have complete
5383      type.  */
5384   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5385
5386   if (type == error_mark_node)
5387     /* We will have already complained.  */
5388     return NULL_TREE;
5389
5390   if (TREE_CODE (type) == ARRAY_TYPE)
5391     {
5392       if (check_array_initializer (decl, type, init))
5393         return NULL_TREE;
5394     }
5395   else if (!COMPLETE_TYPE_P (type))
5396     {
5397       error ("%qD has incomplete type", decl);
5398       TREE_TYPE (decl) = error_mark_node;
5399       return NULL_TREE;
5400     }
5401   else
5402     /* There is no way to make a variable-sized class type in GNU C++.  */
5403     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5404
5405   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5406     {
5407       int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5408       if (SCALAR_TYPE_P (type))
5409         {
5410           if (init_len == 0)
5411             {
5412               maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5413               init = build_zero_init (type, NULL_TREE, false);
5414             }
5415           else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5416             {
5417               error ("scalar object %qD requires one element in initializer",
5418                      decl);
5419               TREE_TYPE (decl) = error_mark_node;
5420               return NULL_TREE;
5421             }
5422         }
5423     }
5424
5425   if (TREE_CODE (decl) == CONST_DECL)
5426     {
5427       gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5428
5429       DECL_INITIAL (decl) = init;
5430
5431       gcc_assert (init != NULL_TREE);
5432       init = NULL_TREE;
5433     }
5434   else if (!init && DECL_REALLY_EXTERN (decl))
5435     ;
5436   else if (TREE_CODE (type) == REFERENCE_TYPE)
5437     init = grok_reference_init (decl, type, init, cleanup);
5438   else if (init || type_build_ctor_call (type))
5439     {
5440       if (!init)
5441         check_for_uninitialized_const_var (decl);
5442       /* Do not reshape constructors of vectors (they don't need to be
5443          reshaped.  */
5444       else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5445         {
5446           if (is_std_init_list (type))
5447             init = build_init_list_var_init (decl, type, init,
5448                                              &extra_init, cleanup);
5449           else if (TYPE_NON_AGGREGATE_CLASS (type))
5450             {
5451               /* Don't reshape if the class has constructors.  */
5452               if (cxx_dialect == cxx98)
5453                 error ("in C++98 %qD must be initialized by constructor, "
5454                        "not by %<{...}%>",
5455                        decl);
5456             }
5457           else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5458             {
5459               error ("opaque vector types cannot be initialized");
5460               init = error_mark_node;
5461             }
5462           else
5463             init = reshape_init (type, init, tf_warning_or_error);          
5464         }
5465
5466       /* If DECL has an array type without a specific bound, deduce the
5467          array size from the initializer.  */
5468       maybe_deduce_size_from_array_init (decl, init);
5469       type = TREE_TYPE (decl);
5470       if (type == error_mark_node)
5471         return NULL_TREE;
5472
5473       if (type_build_ctor_call (type)
5474           || (CLASS_TYPE_P (type)
5475               && !(init && BRACE_ENCLOSED_INITIALIZER_P (init))))
5476         {
5477           init_code = build_aggr_init_full_exprs (decl, init, flags);
5478
5479           /* If this is a constexpr initializer, expand_default_init will
5480              have returned an INIT_EXPR rather than a CALL_EXPR.  In that
5481              case, pull the initializer back out and pass it down into
5482              store_init_value.  */
5483           while (TREE_CODE (init_code) == EXPR_STMT
5484                  || TREE_CODE (init_code) == CONVERT_EXPR)
5485             init_code = TREE_OPERAND (init_code, 0);
5486           if (TREE_CODE (init_code) == INIT_EXPR)
5487             {
5488               init = TREE_OPERAND (init_code, 1);
5489               init_code = NULL_TREE;
5490               /* Don't call digest_init; it's unnecessary and will complain
5491                  about aggregate initialization of non-aggregate classes.  */
5492               flags |= LOOKUP_ALREADY_DIGESTED;
5493             }
5494           else if (DECL_DECLARED_CONSTEXPR_P (decl))
5495             {
5496               /* Declared constexpr, but no suitable initializer; massage
5497                  init appropriately so we can pass it into store_init_value
5498                  for the error.  */
5499               if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5500                 init = finish_compound_literal (type, init,
5501                                                 tf_warning_or_error);
5502               else if (CLASS_TYPE_P (type)
5503                        && (!init || TREE_CODE (init) == TREE_LIST))
5504                 {
5505                   init = build_functional_cast (type, init, tf_none);
5506                   if (init != error_mark_node)
5507                     TARGET_EXPR_DIRECT_INIT_P (init) = true;
5508                 }
5509               init_code = NULL_TREE;
5510             }
5511           else
5512             init = NULL_TREE;
5513         }
5514
5515       if (init && TREE_CODE (init) != TREE_VEC)
5516         {
5517           init_code = store_init_value (decl, init, flags);
5518           if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5519               && DECL_INITIAL (decl)
5520               && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5521               && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5522             warning (0, "array %qD initialized by parenthesized string literal %qE",
5523                      decl, DECL_INITIAL (decl));
5524           init = NULL;
5525         }
5526     }
5527   else
5528     {
5529       if (CLASS_TYPE_P (core_type = strip_array_types (type))
5530           && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5531               || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5532         diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5533                                                   /*complain=*/true);
5534
5535       check_for_uninitialized_const_var (decl);
5536     }
5537
5538   if (init && init != error_mark_node)
5539     init_code = build2 (INIT_EXPR, type, decl, init);
5540
5541   if (extra_init)
5542     init_code = add_stmt_to_compound (extra_init, init_code);
5543
5544   if (init_code && DECL_IN_AGGR_P (decl))
5545     {
5546       static int explained = 0;
5547
5548       if (cxx_dialect < cxx0x)
5549         error ("initializer invalid for static member with constructor");
5550       else
5551         error ("non-constant in-class initialization invalid for static "
5552                "member %qD", decl);
5553       if (!explained)
5554         {
5555           error ("(an out of class initialization is required)");
5556           explained = 1;
5557         }
5558     }
5559
5560   return init_code;
5561 }
5562
5563 /* If DECL is not a local variable, give it RTL.  */
5564
5565 static void
5566 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5567 {
5568   int toplev = toplevel_bindings_p ();
5569   int defer_p;
5570   const char *filename;
5571
5572   /* Set the DECL_ASSEMBLER_NAME for the object.  */
5573   if (asmspec)
5574     {
5575       /* The `register' keyword, when used together with an
5576          asm-specification, indicates that the variable should be
5577          placed in a particular register.  */
5578       if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5579         {
5580           set_user_assembler_name (decl, asmspec);
5581           DECL_HARD_REGISTER (decl) = 1;
5582         }
5583       else
5584         {
5585           if (TREE_CODE (decl) == FUNCTION_DECL
5586               && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5587             set_builtin_user_assembler_name (decl, asmspec);
5588           set_user_assembler_name (decl, asmspec);
5589         }
5590     }
5591
5592   /* Handle non-variables up front.  */
5593   if (TREE_CODE (decl) != VAR_DECL)
5594     {
5595       rest_of_decl_compilation (decl, toplev, at_eof);
5596       return;
5597     }
5598
5599   /* If we see a class member here, it should be a static data
5600      member.  */
5601   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5602     {
5603       gcc_assert (TREE_STATIC (decl));
5604       /* An in-class declaration of a static data member should be
5605          external; it is only a declaration, and not a definition.  */
5606       if (init == NULL_TREE)
5607         gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5608     }
5609
5610   /* We don't create any RTL for local variables.  */
5611   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5612     return;
5613
5614   /* We defer emission of local statics until the corresponding
5615      DECL_EXPR is expanded.  */
5616   defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5617
5618   /* We try to defer namespace-scope static constants so that they are
5619      not emitted into the object file unnecessarily.  */
5620   filename = input_filename;
5621   if (!DECL_VIRTUAL_P (decl)
5622       && TREE_READONLY (decl)
5623       && DECL_INITIAL (decl) != NULL_TREE
5624       && DECL_INITIAL (decl) != error_mark_node
5625       && filename != NULL
5626       && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5627       && toplev
5628       && !TREE_PUBLIC (decl))
5629     {
5630       /* Fool with the linkage of static consts according to #pragma
5631          interface.  */
5632       struct c_fileinfo *finfo = get_fileinfo (filename);
5633       if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5634         {
5635           TREE_PUBLIC (decl) = 1;
5636           DECL_EXTERNAL (decl) = finfo->interface_only;
5637         }
5638
5639       defer_p = 1;
5640     }
5641   /* Likewise for template instantiations.  */
5642   else if (DECL_LANG_SPECIFIC (decl)
5643            && DECL_IMPLICIT_INSTANTIATION (decl))
5644     defer_p = 1;
5645
5646   /* If we're not deferring, go ahead and assemble the variable.  */
5647   if (!defer_p)
5648     rest_of_decl_compilation (decl, toplev, at_eof);
5649 }
5650
5651 /* walk_tree helper for wrap_temporary_cleanups, below.  */
5652
5653 static tree
5654 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5655 {
5656   if (TYPE_P (*stmt_p))
5657     {
5658       *walk_subtrees = 0;
5659       return NULL_TREE;
5660     }
5661
5662   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5663     {
5664       tree guard = (tree)data;
5665       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5666
5667       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5668       /* Tell honor_protect_cleanup_actions to handle this as a separate
5669          cleanup.  */
5670       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5671  
5672       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5673     }
5674
5675   return NULL_TREE;
5676 }
5677
5678 /* We're initializing a local variable which has a cleanup GUARD.  If there
5679    are any temporaries used in the initializer INIT of this variable, we
5680    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5681    variable will be cleaned up properly if one of them throws.
5682
5683    Unfortunately, there's no way to express this properly in terms of
5684    nesting, as the regions for the temporaries overlap the region for the
5685    variable itself; if there are two temporaries, the variable needs to be
5686    the first thing destroyed if either of them throws.  However, we only
5687    want to run the variable's cleanup if it actually got constructed.  So
5688    we need to guard the temporary cleanups with the variable's cleanup if
5689    they are run on the normal path, but not if they are run on the
5690    exceptional path.  We implement this by telling
5691    honor_protect_cleanup_actions to strip the variable cleanup from the
5692    exceptional path.  */
5693
5694 static void
5695 wrap_temporary_cleanups (tree init, tree guard)
5696 {
5697   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5698 }
5699
5700 /* Generate code to initialize DECL (a local variable).  */
5701
5702 static void
5703 initialize_local_var (tree decl, tree init)
5704 {
5705   tree type = TREE_TYPE (decl);
5706   tree cleanup;
5707   int already_used;
5708
5709   gcc_assert (TREE_CODE (decl) == VAR_DECL
5710               || TREE_CODE (decl) == RESULT_DECL);
5711   gcc_assert (!TREE_STATIC (decl));
5712
5713   if (DECL_SIZE (decl) == NULL_TREE)
5714     {
5715       /* If we used it already as memory, it must stay in memory.  */
5716       DECL_INITIAL (decl) = NULL_TREE;
5717       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5718       return;
5719     }
5720
5721   if (type == error_mark_node)
5722     return;
5723
5724   /* Compute and store the initial value.  */
5725   already_used = TREE_USED (decl) || TREE_USED (type);
5726   if (TREE_USED (type))
5727     DECL_READ_P (decl) = 1;
5728
5729   /* Generate a cleanup, if necessary.  */
5730   cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
5731
5732   /* Perform the initialization.  */
5733   if (init)
5734     {
5735       if (TREE_CODE (init) == INIT_EXPR
5736           && !TREE_SIDE_EFFECTS (TREE_OPERAND (init, 1)))
5737         {
5738           /* Stick simple initializers in DECL_INITIAL so that
5739              -Wno-init-self works (c++/34772).  */
5740           gcc_assert (TREE_OPERAND (init, 0) == decl);
5741           DECL_INITIAL (decl) = TREE_OPERAND (init, 1);
5742         }
5743       else
5744         {
5745           int saved_stmts_are_full_exprs_p;
5746
5747           /* If we're only initializing a single object, guard the
5748              destructors of any temporaries used in its initializer with
5749              its destructor.  This isn't right for arrays because each
5750              element initialization is a full-expression.  */
5751           if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5752             wrap_temporary_cleanups (init, cleanup);
5753
5754           gcc_assert (building_stmt_tree ());
5755           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5756           current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5757           finish_expr_stmt (init);
5758           current_stmt_tree ()->stmts_are_full_exprs_p =
5759             saved_stmts_are_full_exprs_p;
5760         }
5761     }
5762
5763   /* Set this to 0 so we can tell whether an aggregate which was
5764      initialized was ever used.  Don't do this if it has a
5765      destructor, so we don't complain about the 'resource
5766      allocation is initialization' idiom.  Now set
5767      attribute((unused)) on types so decls of that type will be
5768      marked used. (see TREE_USED, above.)  */
5769   if (TYPE_NEEDS_CONSTRUCTING (type)
5770       && ! already_used
5771       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5772       && DECL_NAME (decl))
5773     TREE_USED (decl) = 0;
5774   else if (already_used)
5775     TREE_USED (decl) = 1;
5776
5777   if (cleanup)
5778     finish_decl_cleanup (decl, cleanup);
5779 }
5780
5781 /* DECL is a VAR_DECL for a compiler-generated variable with static
5782    storage duration (like a virtual table) whose initializer is a
5783    compile-time constant.  Initialize the variable and provide it to the
5784    back end.  */
5785
5786 void
5787 initialize_artificial_var (tree decl, VEC(constructor_elt,gc) *v)
5788 {
5789   tree init;
5790   gcc_assert (DECL_ARTIFICIAL (decl));
5791   init = build_constructor (TREE_TYPE (decl), v);
5792   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5793   DECL_INITIAL (decl) = init;
5794   DECL_INITIALIZED_P (decl) = 1;
5795   determine_visibility (decl);
5796   layout_var_decl (decl);
5797   maybe_commonize_var (decl);
5798   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5799 }
5800
5801 /* INIT is the initializer for a variable, as represented by the
5802    parser.  Returns true iff INIT is type-dependent.  */
5803
5804 static bool
5805 type_dependent_init_p (tree init)
5806 {
5807   if (TREE_CODE (init) == TREE_LIST)
5808     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5809     return any_type_dependent_elements_p (init);
5810   else if (TREE_CODE (init) == CONSTRUCTOR)
5811   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5812     {
5813       VEC(constructor_elt, gc) *elts;
5814       size_t nelts;
5815       size_t i;
5816
5817       elts = CONSTRUCTOR_ELTS (init);
5818       nelts = VEC_length (constructor_elt, elts);
5819       for (i = 0; i < nelts; ++i)
5820         if (type_dependent_init_p (VEC_index (constructor_elt,
5821                                               elts, i)->value))
5822           return true;
5823     }
5824   else
5825     /* It must be a simple expression, e.g., int i = 3;  */
5826     return type_dependent_expression_p (init);
5827
5828   return false;
5829 }
5830
5831 /* INIT is the initializer for a variable, as represented by the
5832    parser.  Returns true iff INIT is value-dependent.  */
5833
5834 static bool
5835 value_dependent_init_p (tree init)
5836 {
5837   if (TREE_CODE (init) == TREE_LIST)
5838     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5839     return any_value_dependent_elements_p (init);
5840   else if (TREE_CODE (init) == CONSTRUCTOR)
5841   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5842     {
5843       VEC(constructor_elt, gc) *elts;
5844       size_t nelts;
5845       size_t i;
5846
5847       elts = CONSTRUCTOR_ELTS (init);
5848       nelts = VEC_length (constructor_elt, elts);
5849       for (i = 0; i < nelts; ++i)
5850         if (value_dependent_init_p (VEC_index (constructor_elt,
5851                                                elts, i)->value))
5852           return true;
5853     }
5854   else
5855     /* It must be a simple expression, e.g., int i = 3;  */
5856     return value_dependent_expression_p (init);
5857   
5858   return false;
5859 }
5860
5861 /* Finish processing of a declaration;
5862    install its line number and initial value.
5863    If the length of an array type is not known before,
5864    it must be determined now, from the initial value, or it is an error.
5865
5866    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
5867    true, then INIT is an integral constant expression.
5868
5869    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5870    if the (init) syntax was used.  */
5871
5872 void
5873 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5874                 tree asmspec_tree, int flags)
5875 {
5876   tree type;
5877   tree cleanup;
5878   const char *asmspec = NULL;
5879   int was_readonly = 0;
5880   bool var_definition_p = false;
5881   tree auto_node;
5882
5883   if (decl == error_mark_node)
5884     return;
5885   else if (! decl)
5886     {
5887       if (init)
5888         error ("assignment (not initialization) in declaration");
5889       return;
5890     }
5891
5892   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5893   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
5894   gcc_assert (TREE_CODE (decl) != PARM_DECL);
5895
5896   type = TREE_TYPE (decl);
5897   if (type == error_mark_node)
5898     return;
5899
5900   /* Assume no cleanup is required.  */
5901   cleanup = NULL_TREE;
5902
5903   /* If a name was specified, get the string.  */
5904   if (global_scope_p (current_binding_level))
5905     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5906   if (asmspec_tree && asmspec_tree != error_mark_node)
5907     asmspec = TREE_STRING_POINTER (asmspec_tree);
5908
5909   if (current_class_type
5910       && CP_DECL_CONTEXT (decl) == current_class_type
5911       && TYPE_BEING_DEFINED (current_class_type)
5912       && (DECL_INITIAL (decl) || init))
5913     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5914
5915   auto_node = type_uses_auto (type);
5916   if (auto_node)
5917     {
5918       tree d_init;
5919       if (init == NULL_TREE)
5920         {
5921           error ("declaration of %q#D has no initializer", decl);
5922           TREE_TYPE (decl) = error_mark_node;
5923           return;
5924         }
5925       d_init = init;
5926       if (TREE_CODE (d_init) == TREE_LIST)
5927         d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
5928                                                   tf_warning_or_error);
5929       d_init = resolve_nondeduced_context (d_init);
5930       if (describable_type (d_init))
5931         {
5932           type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
5933                                                        auto_node);
5934           if (type == error_mark_node)
5935             return;
5936         }
5937     }
5938
5939   if (!ensure_literal_type_for_constexpr_object (decl))
5940     DECL_DECLARED_CONSTEXPR_P (decl) = 0;
5941
5942   if (init && TREE_CODE (decl) == FUNCTION_DECL)
5943     {
5944       tree clone;
5945       if (init == ridpointers[(int)RID_DELETE])
5946         {
5947           /* FIXME check this is 1st decl.  */
5948           DECL_DELETED_FN (decl) = 1;
5949           DECL_DECLARED_INLINE_P (decl) = 1;
5950           DECL_INITIAL (decl) = error_mark_node;
5951           FOR_EACH_CLONE (clone, decl)
5952             {
5953               DECL_DELETED_FN (clone) = 1;
5954               DECL_DECLARED_INLINE_P (clone) = 1;
5955               DECL_INITIAL (clone) = error_mark_node;
5956             }
5957           init = NULL_TREE;
5958         }
5959       else if (init == ridpointers[(int)RID_DEFAULT])
5960         {
5961           if (defaultable_fn_check (decl))
5962             DECL_DEFAULTED_FN (decl) = 1;
5963           else
5964             DECL_INITIAL (decl) = NULL_TREE;
5965         }
5966     }
5967
5968   if (init && TREE_CODE (decl) == VAR_DECL)
5969     {
5970       DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5971       if (init_const_expr_p)
5972         {
5973           /* Set these flags now for templates.  We'll update the flags in
5974              store_init_value for instantiations.  */
5975           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5976           if (decl_maybe_constant_var_p (decl))
5977             TREE_CONSTANT (decl) = 1;
5978         }
5979     }
5980
5981   if (processing_template_decl)
5982     {
5983       bool type_dependent_p;
5984
5985       /* Add this declaration to the statement-tree.  */
5986       if (at_function_scope_p ())
5987         add_decl_expr (decl);
5988
5989       type_dependent_p = dependent_type_p (type);
5990
5991       if (check_for_bare_parameter_packs (init))
5992         {
5993           init = NULL_TREE;
5994           DECL_INITIAL (decl) = NULL_TREE;
5995         }
5996
5997       /* Generally, initializers in templates are expanded when the
5998          template is instantiated.  But, if DECL is a variable constant
5999          then it can be used in future constant expressions, so its value
6000          must be available. */
6001
6002       if (TREE_CODE (decl) != VAR_DECL || dependent_type_p (type))
6003         /* We can't do anything if the decl has dependent type.  */;
6004       else if (init
6005                && init_const_expr_p
6006                && !type_dependent_p
6007                && decl_maybe_constant_var_p (decl)
6008                && !type_dependent_init_p (init)
6009                && !value_dependent_init_p (init))
6010         {
6011           /* This variable seems to be a non-dependent constant, so process
6012              its initializer.  If check_initializer returns non-null the
6013              initialization wasn't constant after all.  */
6014           tree init_code = check_initializer (decl, init, flags, &cleanup);
6015           if (init_code == NULL_TREE)
6016             init = NULL_TREE;
6017         }
6018       else if (!DECL_PRETTY_FUNCTION_P (decl))
6019         /* Deduce array size even if the initializer is dependent.  */
6020         maybe_deduce_size_from_array_init (decl, init);
6021
6022       if (init)
6023         DECL_INITIAL (decl) = init;
6024       return;
6025     }
6026
6027   /* Take care of TYPE_DECLs up front.  */
6028   if (TREE_CODE (decl) == TYPE_DECL)
6029     {
6030       if (type != error_mark_node
6031           && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6032         {
6033           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6034             warning (0, "shadowing previous type declaration of %q#D", decl);
6035           set_identifier_type_value (DECL_NAME (decl), decl);
6036         }
6037
6038       /* If we have installed this as the canonical typedef for this
6039          type, and that type has not been defined yet, delay emitting
6040          the debug information for it, as we will emit it later.  */
6041       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6042           && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6043         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6044
6045       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6046                                 at_eof);
6047       return;
6048     }
6049
6050   /* A reference will be modified here, as it is initialized.  */
6051   if (! DECL_EXTERNAL (decl)
6052       && TREE_READONLY (decl)
6053       && TREE_CODE (type) == REFERENCE_TYPE)
6054     {
6055       was_readonly = 1;
6056       TREE_READONLY (decl) = 0;
6057     }
6058
6059   if (TREE_CODE (decl) == VAR_DECL)
6060     {
6061       /* Only variables with trivial initialization and destruction can
6062          have thread-local storage.  */
6063       if (DECL_THREAD_LOCAL_P (decl)
6064           && (type_has_nontrivial_default_init (TREE_TYPE (decl))
6065               || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
6066         error ("%qD cannot be thread-local because it has non-trivial "
6067                "type %qT", decl, TREE_TYPE (decl));
6068       /* If this is a local variable that will need a mangled name,
6069          register it now.  We must do this before processing the
6070          initializer for the variable, since the initialization might
6071          require a guard variable, and since the mangled name of the
6072          guard variable will depend on the mangled name of this
6073          variable.  */
6074       if (DECL_FUNCTION_SCOPE_P (decl)
6075           && TREE_STATIC (decl)
6076           && !DECL_ARTIFICIAL (decl))
6077         {
6078           push_local_name (decl);
6079           if (DECL_CONSTRUCTOR_P (current_function_decl)
6080               || DECL_DESTRUCTOR_P (current_function_decl))
6081             /* Normally local_decls is populated during GIMPLE lowering,
6082                but [cd]tors are never actually compiled directly.  We need
6083                to put statics on the list so we can deal with the label
6084                address extension.  */
6085             add_local_decl (cfun, decl);
6086         }
6087
6088       /* Convert the initializer to the type of DECL, if we have not
6089          already initialized DECL.  */
6090       if (!DECL_INITIALIZED_P (decl)
6091           /* If !DECL_EXTERNAL then DECL is being defined.  In the
6092              case of a static data member initialized inside the
6093              class-specifier, there can be an initializer even if DECL
6094              is *not* defined.  */
6095           && (!DECL_EXTERNAL (decl) || init))
6096         {
6097           if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6098             {
6099               tree jclass
6100                 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6101               /* Allow libjava/prims.cc define primitive classes.  */
6102               if (init != NULL_TREE
6103                   || jclass == NULL_TREE
6104                   || TREE_CODE (jclass) != TYPE_DECL
6105                   || !POINTER_TYPE_P (TREE_TYPE (jclass))
6106                   || !same_type_ignoring_top_level_qualifiers_p
6107                                         (type, TREE_TYPE (TREE_TYPE (jclass))))
6108                 error ("Java object %qD not allocated with %<new%>", decl);
6109               init = NULL_TREE;
6110             }
6111           init = check_initializer (decl, init, flags, &cleanup);
6112           /* Thread-local storage cannot be dynamically initialized.  */
6113           if (DECL_THREAD_LOCAL_P (decl) && init)
6114             {
6115               error ("%qD is thread-local and so cannot be dynamically "
6116                      "initialized", decl);
6117               init = NULL_TREE;
6118             }
6119
6120           /* Check that the initializer for a static data member was a
6121              constant.  Although we check in the parser that the
6122              initializer is an integral constant expression, we do not
6123              simplify division-by-zero at the point at which it
6124              occurs.  Therefore, in:
6125
6126                struct S { static const int i = 7 / 0; };
6127
6128              we issue an error at this point.  It would
6129              probably be better to forbid division by zero in
6130              integral constant expressions.  */
6131           if (DECL_EXTERNAL (decl) && init)
6132             {
6133               error ("%qD cannot be initialized by a non-constant expression"
6134                      " when being declared", decl);
6135               DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
6136               init = NULL_TREE;
6137             }
6138
6139           /* Handle:
6140
6141              [dcl.init]
6142
6143              The memory occupied by any object of static storage
6144              duration is zero-initialized at program startup before
6145              any other initialization takes place.
6146
6147              We cannot create an appropriate initializer until after
6148              the type of DECL is finalized.  If DECL_INITIAL is set,
6149              then the DECL is statically initialized, and any
6150              necessary zero-initialization has already been performed.  */
6151           if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6152             DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6153                                                    /*nelts=*/NULL_TREE,
6154                                                    /*static_storage_p=*/true);
6155           /* Remember that the initialization for this variable has
6156              taken place.  */
6157           DECL_INITIALIZED_P (decl) = 1;
6158           /* This declaration is the definition of this variable,
6159              unless we are initializing a static data member within
6160              the class specifier.  */
6161           if (!DECL_EXTERNAL (decl))
6162             var_definition_p = true;
6163         }
6164       /* If the variable has an array type, lay out the type, even if
6165          there is no initializer.  It is valid to index through the
6166          array, and we must get TYPE_ALIGN set correctly on the array
6167          type.  */
6168       else if (TREE_CODE (type) == ARRAY_TYPE)
6169         layout_type (type);
6170
6171       if (TREE_STATIC (decl)
6172           && !at_function_scope_p ()
6173           && current_function_decl == NULL)
6174         /* So decl is a global variable or a static member of a
6175            non local class. Record the types it uses
6176            so that we can decide later to emit debug info for them.  */
6177         record_types_used_by_current_var_decl (decl);
6178     }
6179   else if (TREE_CODE (decl) == FIELD_DECL
6180            && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6181     error ("non-static data member %qD has Java class type", decl);
6182
6183   /* Add this declaration to the statement-tree.  This needs to happen
6184      after the call to check_initializer so that the DECL_EXPR for a
6185      reference temp is added before the DECL_EXPR for the reference itself.  */
6186   if (at_function_scope_p ())
6187     add_decl_expr (decl);
6188
6189   /* Let the middle end know about variables and functions -- but not
6190      static data members in uninstantiated class templates.  */
6191   if (TREE_CODE (decl) == VAR_DECL
6192       || TREE_CODE (decl) == FUNCTION_DECL)
6193     {
6194       if (TREE_CODE (decl) == VAR_DECL)
6195         {
6196           layout_var_decl (decl);
6197           maybe_commonize_var (decl);
6198         }
6199
6200       /* This needs to happen after the linkage is set. */
6201       determine_visibility (decl);
6202
6203       if (var_definition_p && TREE_STATIC (decl))
6204         {
6205           /* If a TREE_READONLY variable needs initialization
6206              at runtime, it is no longer readonly and we need to
6207              avoid MEM_READONLY_P being set on RTL created for it.  */
6208           if (init)
6209             {
6210               if (TREE_READONLY (decl))
6211                 TREE_READONLY (decl) = 0;
6212               was_readonly = 0;
6213             }
6214           else if (was_readonly)
6215             TREE_READONLY (decl) = 1;
6216         }
6217
6218       make_rtl_for_nonlocal_decl (decl, init, asmspec);
6219
6220       /* Check for abstractness of the type. Notice that there is no
6221          need to strip array types here since the check for those types
6222          is already done within create_array_type_for_decl.  */
6223       if (TREE_CODE (type) == FUNCTION_TYPE
6224           || TREE_CODE (type) == METHOD_TYPE)
6225         abstract_virtuals_error (decl, TREE_TYPE (type));
6226       else
6227         abstract_virtuals_error (decl, type);
6228
6229       if (TREE_TYPE (decl) == error_mark_node)
6230         /* No initialization required.  */
6231         ;
6232       else if (TREE_CODE (decl) == FUNCTION_DECL)
6233         {
6234           if (init)
6235             {
6236               if (init == ridpointers[(int)RID_DEFAULT])
6237                 {
6238                   /* An out-of-class default definition is defined at
6239                      the point where it is explicitly defaulted.  */
6240                   if (DECL_DELETED_FN (decl))
6241                     maybe_explain_implicit_delete (decl);
6242                   else if (DECL_INITIAL (decl) == error_mark_node)
6243                     synthesize_method (decl);
6244                 }
6245               else
6246                 error ("function %q#D is initialized like a variable", decl);
6247             }
6248           /* else no initialization required.  */
6249         }
6250       else if (DECL_EXTERNAL (decl)
6251                && ! (DECL_LANG_SPECIFIC (decl)
6252                      && DECL_NOT_REALLY_EXTERN (decl)))
6253         {
6254           if (init)
6255             DECL_INITIAL (decl) = init;
6256         }
6257       /* A variable definition.  */
6258       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6259         /* Initialize the local variable.  */
6260         initialize_local_var (decl, init);
6261
6262       /* If a variable is defined, and then a subsequent
6263          definition with external linkage is encountered, we will
6264          get here twice for the same variable.  We want to avoid
6265          calling expand_static_init more than once.  For variables
6266          that are not static data members, we can call
6267          expand_static_init only when we actually process the
6268          initializer.  It is not legal to redeclare a static data
6269          member, so this issue does not arise in that case.  */
6270       else if (var_definition_p && TREE_STATIC (decl))
6271         expand_static_init (decl, init);
6272     }
6273
6274   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6275      reference, insert it in the statement-tree now.  */
6276   if (cleanup)
6277     push_cleanup (decl, cleanup, false);
6278
6279   if (was_readonly)
6280     TREE_READONLY (decl) = 1;
6281 }
6282
6283 /* Returns a declaration for a VAR_DECL as if:
6284
6285      extern "C" TYPE NAME;
6286
6287    had been seen.  Used to create compiler-generated global
6288    variables.  */
6289
6290 static tree
6291 declare_global_var (tree name, tree type)
6292 {
6293   tree decl;
6294
6295   push_to_top_level ();
6296   decl = build_decl (input_location, VAR_DECL, name, type);
6297   TREE_PUBLIC (decl) = 1;
6298   DECL_EXTERNAL (decl) = 1;
6299   DECL_ARTIFICIAL (decl) = 1;
6300   /* If the user has explicitly declared this variable (perhaps
6301      because the code we are compiling is part of a low-level runtime
6302      library), then it is possible that our declaration will be merged
6303      with theirs by pushdecl.  */
6304   decl = pushdecl (decl);
6305   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6306   pop_from_top_level ();
6307
6308   return decl;
6309 }
6310
6311 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6312    if "__cxa_atexit" is not being used) corresponding to the function
6313    to be called when the program exits.  */
6314
6315 static tree
6316 get_atexit_fn_ptr_type (void)
6317 {
6318   tree fn_type;
6319
6320   if (!atexit_fn_ptr_type_node)
6321     {
6322       tree arg_type;
6323       if (flag_use_cxa_atexit 
6324           && !targetm.cxx.use_atexit_for_cxa_atexit ())
6325         /* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
6326         arg_type = ptr_type_node;
6327       else
6328         /* The parameter to "atexit" is "void (*)(void)".  */
6329         arg_type = NULL_TREE;
6330       
6331       fn_type = build_function_type_list (void_type_node,
6332                                           arg_type, NULL_TREE);
6333       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6334     }
6335
6336   return atexit_fn_ptr_type_node;
6337 }
6338
6339 /* Returns a pointer to the `atexit' function.  Note that if
6340    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6341    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
6342
6343 static tree
6344 get_atexit_node (void)
6345 {
6346   tree atexit_fndecl;
6347   tree fn_type;
6348   tree fn_ptr_type;
6349   const char *name;
6350   bool use_aeabi_atexit;
6351
6352   if (atexit_node)
6353     return atexit_node;
6354
6355   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6356     {
6357       /* The declaration for `__cxa_atexit' is:
6358
6359            int __cxa_atexit (void (*)(void *), void *, void *)
6360
6361          We build up the argument types and then the function type
6362          itself.  */
6363       tree argtype0, argtype1, argtype2;
6364
6365       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6366       /* First, build the pointer-to-function type for the first
6367          argument.  */
6368       fn_ptr_type = get_atexit_fn_ptr_type ();
6369       /* Then, build the rest of the argument types.  */
6370       argtype2 = ptr_type_node;
6371       if (use_aeabi_atexit)
6372         {
6373           argtype1 = fn_ptr_type;
6374           argtype0 = ptr_type_node;
6375         }
6376       else
6377         {
6378           argtype1 = ptr_type_node;
6379           argtype0 = fn_ptr_type;
6380         }
6381       /* And the final __cxa_atexit type.  */
6382       fn_type = build_function_type_list (integer_type_node,
6383                                           argtype0, argtype1, argtype2,
6384                                           NULL_TREE);
6385       fn_ptr_type = build_pointer_type (fn_type);
6386       if (use_aeabi_atexit)
6387         name = "__aeabi_atexit";
6388       else
6389         name = "__cxa_atexit";
6390     }
6391   else
6392     {
6393       /* The declaration for `atexit' is:
6394
6395            int atexit (void (*)());
6396
6397          We build up the argument types and then the function type
6398          itself.  */
6399       fn_ptr_type = get_atexit_fn_ptr_type ();
6400       /* Build the final atexit type.  */
6401       fn_type = build_function_type_list (integer_type_node,
6402                                           fn_ptr_type, NULL_TREE);
6403       name = "atexit";
6404     }
6405
6406   /* Now, build the function declaration.  */
6407   push_lang_context (lang_name_c);
6408   atexit_fndecl = build_library_fn_ptr (name, fn_type);
6409   mark_used (atexit_fndecl);
6410   pop_lang_context ();
6411   atexit_node = decay_conversion (atexit_fndecl);
6412
6413   return atexit_node;
6414 }
6415
6416 /* Returns the __dso_handle VAR_DECL.  */
6417
6418 static tree
6419 get_dso_handle_node (void)
6420 {
6421   if (dso_handle_node)
6422     return dso_handle_node;
6423
6424   /* Declare the variable.  */
6425   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6426                                         ptr_type_node);
6427
6428   return dso_handle_node;
6429 }
6430
6431 /* Begin a new function with internal linkage whose job will be simply
6432    to destroy some particular variable.  */
6433
6434 static GTY(()) int start_cleanup_cnt;
6435
6436 static tree
6437 start_cleanup_fn (void)
6438 {
6439   char name[32];
6440   tree fntype;
6441   tree fndecl;
6442   bool use_cxa_atexit = flag_use_cxa_atexit
6443                         && !targetm.cxx.use_atexit_for_cxa_atexit ();
6444
6445   push_to_top_level ();
6446
6447   /* No need to mangle this.  */
6448   push_lang_context (lang_name_c);
6449
6450   /* Build the name of the function.  */
6451   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6452   /* Build the function declaration.  */
6453   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6454   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6455   /* It's a function with internal linkage, generated by the
6456      compiler.  */
6457   TREE_PUBLIC (fndecl) = 0;
6458   DECL_ARTIFICIAL (fndecl) = 1;
6459   /* Make the function `inline' so that it is only emitted if it is
6460      actually needed.  It is unlikely that it will be inlined, since
6461      it is only called via a function pointer, but we avoid unnecessary
6462      emissions this way.  */
6463   DECL_DECLARED_INLINE_P (fndecl) = 1;
6464   DECL_INTERFACE_KNOWN (fndecl) = 1;
6465   /* Build the parameter.  */
6466   if (use_cxa_atexit)
6467     {
6468       tree parmdecl;
6469
6470       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6471       DECL_CONTEXT (parmdecl) = fndecl;
6472       TREE_USED (parmdecl) = 1;
6473       DECL_READ_P (parmdecl) = 1;
6474       DECL_ARGUMENTS (fndecl) = parmdecl;
6475     }
6476
6477   pushdecl (fndecl);
6478   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6479
6480   pop_lang_context ();
6481
6482   return current_function_decl;
6483 }
6484
6485 /* Finish the cleanup function begun by start_cleanup_fn.  */
6486
6487 static void
6488 end_cleanup_fn (void)
6489 {
6490   expand_or_defer_fn (finish_function (0));
6491
6492   pop_from_top_level ();
6493 }
6494
6495 /* Generate code to handle the destruction of DECL, an object with
6496    static storage duration.  */
6497
6498 tree
6499 register_dtor_fn (tree decl)
6500 {
6501   tree cleanup;
6502   tree compound_stmt;
6503   tree fcall;
6504   tree type;
6505   bool use_dtor;
6506   tree arg0, arg1 = NULL_TREE, arg2 = NULL_TREE;
6507
6508   type = TREE_TYPE (decl);
6509   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6510     return void_zero_node;
6511
6512   /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6513      a class object, we can just pass the destructor to
6514      "__cxa_atexit"; we don't have to build a temporary function to do
6515      the cleanup.  */
6516   use_dtor = (flag_use_cxa_atexit 
6517               && !targetm.cxx.use_atexit_for_cxa_atexit ()
6518               && CLASS_TYPE_P (type));
6519   if (use_dtor)
6520     {
6521       int idx;
6522
6523       /* Find the destructor.  */
6524       idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6525       gcc_assert (idx >= 0);
6526       cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6527       /* Make sure it is accessible.  */
6528       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6529     }
6530   else
6531     {
6532       /* Call build_cleanup before we enter the anonymous function so
6533          that any access checks will be done relative to the current
6534          scope, rather than the scope of the anonymous function.  */
6535       build_cleanup (decl);
6536   
6537       /* Now start the function.  */
6538       cleanup = start_cleanup_fn ();
6539       
6540       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
6541          to the original function, rather than the anonymous one.  That
6542          will make the back end think that nested functions are in use,
6543          which causes confusion.  */
6544       push_deferring_access_checks (dk_no_check);
6545       fcall = build_cleanup (decl);
6546       pop_deferring_access_checks ();
6547       
6548       /* Create the body of the anonymous function.  */
6549       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6550       finish_expr_stmt (fcall);
6551       finish_compound_stmt (compound_stmt);
6552       end_cleanup_fn ();
6553     }
6554
6555   /* Call atexit with the cleanup function.  */
6556   mark_used (cleanup);
6557   cleanup = build_address (cleanup);
6558   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6559     {
6560       tree addr;
6561
6562       if (use_dtor)
6563         {
6564           /* We must convert CLEANUP to the type that "__cxa_atexit"
6565              expects.  */
6566           cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6567           /* "__cxa_atexit" will pass the address of DECL to the
6568              cleanup function.  */
6569           mark_used (decl);
6570           addr = build_address (decl);
6571           /* The declared type of the parameter to "__cxa_atexit" is
6572              "void *".  For plain "T*", we could just let the
6573              machinery in cp_build_function_call convert it -- but if the
6574              type is "cv-qualified T *", then we need to convert it
6575              before passing it in, to avoid spurious errors.  */
6576           addr = build_nop (ptr_type_node, addr);
6577         }
6578       else
6579         /* Since the cleanup functions we build ignore the address
6580            they're given, there's no reason to pass the actual address
6581            in, and, in general, it's cheaper to pass NULL than any
6582            other value.  */
6583         addr = null_pointer_node;
6584       arg2 = cp_build_addr_expr (get_dso_handle_node (),
6585                                  tf_warning_or_error);
6586       if (targetm.cxx.use_aeabi_atexit ())
6587         {
6588           arg1 = cleanup;
6589           arg0 = addr;
6590         }
6591       else
6592         {
6593           arg1 = addr;
6594           arg0 = cleanup;
6595         }
6596     }
6597   else
6598     arg0 = cleanup;
6599   return cp_build_function_call_nary (get_atexit_node (), tf_warning_or_error,
6600                                       arg0, arg1, arg2, NULL_TREE);
6601 }
6602
6603 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
6604    is its initializer.  Generate code to handle the construction
6605    and destruction of DECL.  */
6606
6607 static void
6608 expand_static_init (tree decl, tree init)
6609 {
6610   gcc_assert (TREE_CODE (decl) == VAR_DECL);
6611   gcc_assert (TREE_STATIC (decl));
6612
6613   /* Some variables require no dynamic initialization.  */
6614   if (!init
6615       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6616     return;
6617
6618   if (DECL_FUNCTION_SCOPE_P (decl))
6619     {
6620       /* Emit code to perform this initialization but once.  */
6621       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6622       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6623       tree guard, guard_addr;
6624       tree acquire_fn, release_fn, abort_fn;
6625       tree flag, begin;
6626
6627       /* Emit code to perform this initialization but once.  This code
6628          looks like:
6629
6630            static <type> guard;
6631            if (!guard.first_byte) {
6632              if (__cxa_guard_acquire (&guard)) {
6633                bool flag = false;
6634                try {
6635                  // Do initialization.
6636                  flag = true; __cxa_guard_release (&guard);
6637                  // Register variable for destruction at end of program.
6638                } catch {
6639                  if (!flag) __cxa_guard_abort (&guard);
6640                }
6641            }
6642
6643          Note that the `flag' variable is only set to 1 *after* the
6644          initialization is complete.  This ensures that an exception,
6645          thrown during the construction, will cause the variable to
6646          reinitialized when we pass through this code again, as per:
6647
6648            [stmt.dcl]
6649
6650            If the initialization exits by throwing an exception, the
6651            initialization is not complete, so it will be tried again
6652            the next time control enters the declaration.
6653
6654          This process should be thread-safe, too; multiple threads
6655          should not be able to initialize the variable more than
6656          once.  */
6657
6658       /* Create the guard variable.  */
6659       guard = get_guard (decl);
6660
6661       /* This optimization isn't safe on targets with relaxed memory
6662          consistency.  On such targets we force synchronization in
6663          __cxa_guard_acquire.  */
6664       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6665         {
6666           /* Begin the conditional initialization.  */
6667           if_stmt = begin_if_stmt ();
6668           finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6669           then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6670         }
6671
6672       if (flag_threadsafe_statics)
6673         {
6674           guard_addr = build_address (guard);
6675
6676           acquire_fn = get_identifier ("__cxa_guard_acquire");
6677           release_fn = get_identifier ("__cxa_guard_release");
6678           abort_fn = get_identifier ("__cxa_guard_abort");
6679           if (!get_global_value_if_present (acquire_fn, &acquire_fn))
6680             {
6681               tree vfntype = build_function_type_list (void_type_node,
6682                                                        TREE_TYPE (guard_addr),
6683                                                        NULL_TREE);
6684               acquire_fn = push_library_fn
6685                 (acquire_fn, build_function_type_list (integer_type_node,
6686                                                        TREE_TYPE (guard_addr),
6687                                                        NULL_TREE),
6688                  NULL_TREE);
6689               release_fn = push_library_fn (release_fn, vfntype, NULL_TREE);
6690               abort_fn = push_library_fn (abort_fn, vfntype, NULL_TREE);
6691             }
6692           else
6693             {
6694               release_fn = identifier_global_value (release_fn);
6695               abort_fn = identifier_global_value (abort_fn);
6696             }
6697
6698           inner_if_stmt = begin_if_stmt ();
6699           finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6700                                inner_if_stmt);
6701
6702           inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6703           begin = get_target_expr (boolean_false_node);
6704           flag = TARGET_EXPR_SLOT (begin);
6705
6706           TARGET_EXPR_CLEANUP (begin)
6707             = build3 (COND_EXPR, void_type_node, flag,
6708                       void_zero_node,
6709                       build_call_n (abort_fn, 1, guard_addr));
6710           CLEANUP_EH_ONLY (begin) = 1;
6711
6712           /* Do the initialization itself.  */
6713           init = add_stmt_to_compound (begin, init);
6714           init = add_stmt_to_compound
6715             (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6716           init = add_stmt_to_compound
6717             (init, build_call_n (release_fn, 1, guard_addr));
6718         }
6719       else
6720         init = add_stmt_to_compound (init, set_guard (guard));
6721
6722       /* Use atexit to register a function for destroying this static
6723          variable.  */
6724       init = add_stmt_to_compound (init, register_dtor_fn (decl));
6725
6726       finish_expr_stmt (init);
6727
6728       if (flag_threadsafe_statics)
6729         {
6730           finish_compound_stmt (inner_then_clause);
6731           finish_then_clause (inner_if_stmt);
6732           finish_if_stmt (inner_if_stmt);
6733         }
6734
6735       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6736         {
6737           finish_compound_stmt (then_clause);
6738           finish_then_clause (if_stmt);
6739           finish_if_stmt (if_stmt);
6740         }
6741     }
6742   else
6743     static_aggregates = tree_cons (init, decl, static_aggregates);
6744 }
6745
6746 \f
6747 /* Make TYPE a complete type based on INITIAL_VALUE.
6748    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6749    2 if there was no information (in which case assume 0 if DO_DEFAULT),
6750    3 if the initializer list is empty (in pedantic mode). */
6751
6752 int
6753 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6754 {
6755   int failure;
6756   tree type, elt_type;
6757
6758   if (initial_value)
6759     {
6760       unsigned HOST_WIDE_INT i;
6761       tree value;
6762
6763       /* An array of character type can be initialized from a
6764          brace-enclosed string constant.
6765
6766          FIXME: this code is duplicated from reshape_init. Probably
6767          we should just call reshape_init here?  */
6768       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6769           && TREE_CODE (initial_value) == CONSTRUCTOR
6770           && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6771         {
6772           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6773           tree value = VEC_index (constructor_elt, v, 0)->value;
6774
6775           if (TREE_CODE (value) == STRING_CST
6776               && VEC_length (constructor_elt, v) == 1)
6777             initial_value = value;
6778         }
6779
6780       /* If any of the elements are parameter packs, we can't actually
6781          complete this type now because the array size is dependent.  */
6782       if (TREE_CODE (initial_value) == CONSTRUCTOR)
6783         {
6784           FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value), 
6785                                       i, value)
6786             {
6787               if (PACK_EXPANSION_P (value))
6788                 return 0;
6789             }
6790         }
6791     }
6792
6793   failure = complete_array_type (ptype, initial_value, do_default);
6794
6795   /* We can create the array before the element type is complete, which
6796      means that we didn't have these two bits set in the original type
6797      either.  In completing the type, we are expected to propagate these
6798      bits.  See also complete_type which does the same thing for arrays
6799      of fixed size.  */
6800   type = *ptype;
6801   if (TYPE_DOMAIN (type))
6802     {
6803       elt_type = TREE_TYPE (type);
6804       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6805       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6806         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6807     }
6808
6809   return failure;
6810 }
6811
6812 /* As above, but either give an error or reject zero-size arrays, depending
6813    on COMPLAIN.  */
6814
6815 int
6816 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
6817                                  bool do_default, tsubst_flags_t complain)
6818 {
6819   int failure;
6820   bool sfinae = !(complain & tf_error);
6821   /* In SFINAE context we can't be lenient about zero-size arrays.  */
6822   if (sfinae)
6823     ++pedantic;
6824   failure = cp_complete_array_type (ptype, initial_value, do_default);
6825   if (sfinae)
6826     --pedantic;
6827   if (failure)
6828     {
6829       if (sfinae)
6830         /* Not an error.  */;
6831       else if (failure == 1)
6832         error ("initializer fails to determine size of %qT", *ptype);
6833       else if (failure == 2)
6834         {
6835           if (do_default)
6836             error ("array size missing in %qT", *ptype);
6837         }
6838       else if (failure == 3)
6839         error ("zero-size array %qT", *ptype);
6840       *ptype = error_mark_node;
6841     }
6842   return failure;
6843 }
6844 \f
6845 /* Return zero if something is declared to be a member of type
6846    CTYPE when in the context of CUR_TYPE.  STRING is the error
6847    message to print in that case.  Otherwise, quietly return 1.  */
6848
6849 static int
6850 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6851 {
6852   if (ctype && ctype != cur_type)
6853     {
6854       if (flags == DTOR_FLAG)
6855         error ("destructor for alien class %qT cannot be a member", ctype);
6856       else
6857         error ("constructor for alien class %qT cannot be a member", ctype);
6858       return 0;
6859     }
6860   return 1;
6861 }
6862 \f
6863 /* Subroutine of `grokdeclarator'.  */
6864
6865 /* Generate errors possibly applicable for a given set of specifiers.
6866    This is for ARM $7.1.2.  */
6867
6868 static void
6869 bad_specifiers (tree object,
6870                 enum bad_spec_place type,
6871                 int virtualp,
6872                 int quals,
6873                 int inlinep,
6874                 int friendp,
6875                 int raises)
6876 {
6877   switch (type)
6878     {
6879       case BSP_VAR:
6880         if (virtualp)
6881           error ("%qD declared as a %<virtual%> variable", object);
6882         if (inlinep)
6883           error ("%qD declared as an %<inline%> variable", object);
6884         if (quals)
6885           error ("%<const%> and %<volatile%> function specifiers on "
6886                  "%qD invalid in variable declaration", object);
6887         break;
6888       case BSP_PARM:
6889         if (virtualp)
6890           error ("%qD declared as a %<virtual%> parameter", object);
6891         if (inlinep)
6892           error ("%qD declared as an %<inline%> parameter", object);
6893         if (quals)
6894           error ("%<const%> and %<volatile%> function specifiers on "
6895                  "%qD invalid in parameter declaration", object);
6896         break;
6897       case BSP_TYPE:
6898         if (virtualp)
6899           error ("%qD declared as a %<virtual%> type", object);
6900         if (inlinep)
6901           error ("%qD declared as an %<inline%> type", object);
6902         if (quals)
6903           error ("%<const%> and %<volatile%> function specifiers on "
6904                  "%qD invalid in type declaration", object);
6905         break;
6906       case BSP_FIELD:
6907         if (virtualp)
6908           error ("%qD declared as a %<virtual%> field", object);
6909         if (inlinep)
6910           error ("%qD declared as an %<inline%> field", object);
6911         if (quals)
6912           error ("%<const%> and %<volatile%> function specifiers on "
6913                  "%qD invalid in field declaration", object);
6914         break;
6915       default:
6916         gcc_unreachable();
6917     }
6918   if (friendp)
6919     error ("%q+D declared as a friend", object);
6920   if (raises
6921       && (TREE_CODE (object) == TYPE_DECL
6922           || (!TYPE_PTRFN_P (TREE_TYPE (object))
6923               && !TYPE_REFFN_P (TREE_TYPE (object))
6924               && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
6925     error ("%q+D declared with an exception specification", object);
6926 }
6927
6928 /* DECL is a member function or static data member and is presently
6929    being defined.  Check that the definition is taking place in a
6930    valid namespace.  */
6931
6932 static void
6933 check_class_member_definition_namespace (tree decl)
6934 {
6935   /* These checks only apply to member functions and static data
6936      members.  */
6937   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6938               || TREE_CODE (decl) == VAR_DECL);
6939   /* We check for problems with specializations in pt.c in
6940      check_specialization_namespace, where we can issue better
6941      diagnostics.  */
6942   if (processing_specialization)
6943     return;
6944   /* There are no restrictions on the placement of
6945      explicit instantiations.  */
6946   if (processing_explicit_instantiation)
6947     return;
6948   /* [class.mfct]
6949
6950      A member function definition that appears outside of the
6951      class definition shall appear in a namespace scope enclosing
6952      the class definition.
6953
6954      [class.static.data]
6955
6956      The definition for a static data member shall appear in a
6957      namespace scope enclosing the member's class definition.  */
6958   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
6959     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
6960                decl, DECL_CONTEXT (decl));
6961 }
6962
6963 /* Build a PARM_DECL for the "this" parameter.  TYPE is the
6964    METHOD_TYPE for a non-static member function; QUALS are the
6965    cv-qualifiers that apply to the function.  */
6966
6967 tree
6968 build_this_parm (tree type, cp_cv_quals quals)
6969 {
6970   tree this_type;
6971   tree qual_type;
6972   tree parm;
6973   cp_cv_quals this_quals;
6974
6975   this_type = type_of_this_parm (type);
6976   /* The `this' parameter is implicitly `const'; it cannot be
6977      assigned to.  */
6978   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
6979   qual_type = cp_build_qualified_type (this_type, this_quals);
6980   parm = build_artificial_parm (this_identifier, qual_type);
6981   cp_apply_type_quals_to_decl (this_quals, parm);
6982   return parm;
6983 }
6984
6985 /* DECL is a static member function.  Complain if it was declared
6986    with function-cv-quals.  */
6987
6988 static void
6989 check_static_quals (tree decl, cp_cv_quals quals)
6990 {
6991   if (quals != TYPE_UNQUALIFIED)
6992     error ("static member function %q#D declared with type qualifiers",
6993            decl);
6994 }
6995
6996 /* CTYPE is class type, or null if non-class.
6997    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
6998    or METHOD_TYPE.
6999    DECLARATOR is the function's name.
7000    PARMS is a chain of PARM_DECLs for the function.
7001    VIRTUALP is truthvalue of whether the function is virtual or not.
7002    FLAGS are to be passed through to `grokclassfn'.
7003    QUALS are qualifiers indicating whether the function is `const'
7004    or `volatile'.
7005    RAISES is a list of exceptions that this function can raise.
7006    CHECK is 1 if we must find this method in CTYPE, 0 if we should
7007    not look, and -1 if we should not call `grokclassfn' at all.
7008
7009    SFK is the kind of special function (if any) for the new function.
7010
7011    Returns `NULL_TREE' if something goes wrong, after issuing
7012    applicable error messages.  */
7013
7014 static tree
7015 grokfndecl (tree ctype,
7016             tree type,
7017             tree declarator,
7018             tree parms,
7019             tree orig_declarator,
7020             int virtualp,
7021             enum overload_flags flags,
7022             cp_cv_quals quals,
7023             tree raises,
7024             int check,
7025             int friendp,
7026             int publicp,
7027             int inlinep,
7028             special_function_kind sfk,
7029             bool funcdef_flag,
7030             int template_count,
7031             tree in_namespace,
7032             tree* attrlist,
7033             location_t location)
7034 {
7035   tree decl;
7036   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7037   tree t;
7038
7039   if (raises)
7040     type = build_exception_variant (type, raises);
7041
7042   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7043
7044   /* If we have an explicit location, use it, otherwise use whatever
7045      build_lang_decl used (probably input_location).  */
7046   if (location != UNKNOWN_LOCATION)
7047     DECL_SOURCE_LOCATION (decl) = location;
7048
7049   if (TREE_CODE (type) == METHOD_TYPE)
7050     {
7051       tree parm;
7052       parm = build_this_parm (type, quals);
7053       DECL_CHAIN (parm) = parms;
7054       parms = parm;
7055     }
7056   DECL_ARGUMENTS (decl) = parms;
7057   for (t = parms; t; t = DECL_CHAIN (t))
7058     DECL_CONTEXT (t) = decl;
7059   /* Propagate volatile out from type to decl.  */
7060   if (TYPE_VOLATILE (type))
7061     TREE_THIS_VOLATILE (decl) = 1;
7062
7063   /* Setup decl according to sfk.  */
7064   switch (sfk)
7065     {
7066     case sfk_constructor:
7067     case sfk_copy_constructor:
7068     case sfk_move_constructor:
7069       DECL_CONSTRUCTOR_P (decl) = 1;
7070       break;
7071     case sfk_destructor:
7072       DECL_DESTRUCTOR_P (decl) = 1;
7073       break;
7074     default:
7075       break;
7076     }
7077
7078   /* If pointers to member functions use the least significant bit to
7079      indicate whether a function is virtual, ensure a pointer
7080      to this function will have that bit clear.  */
7081   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7082       && TREE_CODE (type) == METHOD_TYPE
7083       && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7084     DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7085
7086   if (friendp
7087       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7088     {
7089       if (funcdef_flag)
7090         error
7091           ("defining explicit specialization %qD in friend declaration",
7092            orig_declarator);
7093       else
7094         {
7095           tree fns = TREE_OPERAND (orig_declarator, 0);
7096           tree args = TREE_OPERAND (orig_declarator, 1);
7097
7098           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7099             {
7100               /* Something like `template <class T> friend void f<T>()'.  */
7101               error ("invalid use of template-id %qD in declaration "
7102                      "of primary template",
7103                      orig_declarator);
7104               return NULL_TREE;
7105             }
7106
7107
7108           /* A friend declaration of the form friend void f<>().  Record
7109              the information in the TEMPLATE_ID_EXPR.  */
7110           SET_DECL_IMPLICIT_INSTANTIATION (decl);
7111
7112           if (TREE_CODE (fns) == COMPONENT_REF)
7113             {
7114               /* Due to bison parser ickiness, we will have already looked
7115                  up an operator_name or PFUNCNAME within the current class
7116                  (see template_id in parse.y). If the current class contains
7117                  such a name, we'll get a COMPONENT_REF here. Undo that.  */
7118
7119               gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
7120                           == current_class_type);
7121               fns = TREE_OPERAND (fns, 1);
7122             }
7123           gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
7124                       || TREE_CODE (fns) == OVERLOAD);
7125           DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7126
7127           for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7128             if (TREE_PURPOSE (t)
7129                 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7130             {
7131               error ("default arguments are not allowed in declaration "
7132                      "of friend template specialization %qD",
7133                      decl);
7134               return NULL_TREE;
7135             }
7136
7137           if (inlinep)
7138             {
7139               error ("%<inline%> is not allowed in declaration of friend "
7140                      "template specialization %qD",
7141                      decl);
7142               return NULL_TREE;
7143             }
7144         }
7145     }
7146
7147   /* If this decl has namespace scope, set that up.  */
7148   if (in_namespace)
7149     set_decl_namespace (decl, in_namespace, friendp);
7150   else if (!ctype)
7151     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7152
7153   /* `main' and builtins have implicit 'C' linkage.  */
7154   if ((MAIN_NAME_P (declarator)
7155        || (IDENTIFIER_LENGTH (declarator) > 10
7156            && IDENTIFIER_POINTER (declarator)[0] == '_'
7157            && IDENTIFIER_POINTER (declarator)[1] == '_'
7158            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
7159       && current_lang_name == lang_name_cplusplus
7160       && ctype == NULL_TREE
7161       && DECL_FILE_SCOPE_P (decl))
7162     SET_DECL_LANGUAGE (decl, lang_c);
7163
7164   /* Should probably propagate const out from type to decl I bet (mrs).  */
7165   if (staticp)
7166     {
7167       DECL_STATIC_FUNCTION_P (decl) = 1;
7168       DECL_CONTEXT (decl) = ctype;
7169     }
7170
7171   if (ctype)
7172     {
7173       DECL_CONTEXT (decl) = ctype;
7174       if (funcdef_flag)
7175         check_class_member_definition_namespace (decl);
7176     }
7177
7178   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7179     {
7180       if (processing_template_decl)
7181         error ("cannot declare %<::main%> to be a template");
7182       if (inlinep)
7183         error ("cannot declare %<::main%> to be inline");
7184       if (!publicp)
7185         error ("cannot declare %<::main%> to be static");
7186       inlinep = 0;
7187       publicp = 1;
7188     }
7189
7190   /* Members of anonymous types and local classes have no linkage; make
7191      them internal.  If a typedef is made later, this will be changed.  */
7192   if (ctype && (TYPE_ANONYMOUS_P (ctype)
7193                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7194     publicp = 0;
7195
7196   if (publicp && cxx_dialect == cxx98)
7197     {
7198       /* [basic.link]: A name with no linkage (notably, the name of a class
7199          or enumeration declared in a local scope) shall not be used to
7200          declare an entity with linkage.
7201
7202          DR 757 relaxes this restriction for C++0x.  */
7203       t = no_linkage_check (TREE_TYPE (decl),
7204                             /*relaxed_p=*/false);
7205       if (t)
7206         {
7207           if (TYPE_ANONYMOUS_P (t))
7208             {
7209               if (DECL_EXTERN_C_P (decl))
7210                 /* Allow this; it's pretty common in C.  */;
7211               else
7212                 {
7213                   permerror (input_location, "anonymous type with no linkage "
7214                              "used to declare function %q#D with linkage",
7215                              decl);
7216                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7217                     permerror (input_location, "%q+#D does not refer to the unqualified "
7218                                "type, so it is not used for linkage",
7219                                TYPE_NAME (t));
7220                 }
7221             }
7222           else
7223             permerror (input_location, "type %qT with no linkage used to "
7224                        "declare function %q#D with linkage", t, decl);
7225         }
7226     }
7227
7228   TREE_PUBLIC (decl) = publicp;
7229   if (! publicp)
7230     {
7231       DECL_INTERFACE_KNOWN (decl) = 1;
7232       DECL_NOT_REALLY_EXTERN (decl) = 1;
7233     }
7234
7235   /* If the declaration was declared inline, mark it as such.  */
7236   if (inlinep)
7237     DECL_DECLARED_INLINE_P (decl) = 1;
7238   if (inlinep & 2)
7239     DECL_DECLARED_CONSTEXPR_P (decl) = true;
7240
7241   DECL_EXTERNAL (decl) = 1;
7242   if (quals && TREE_CODE (type) == FUNCTION_TYPE)
7243     {
7244       error (ctype
7245              ? G_("static member function %qD cannot have cv-qualifier")
7246              : G_("non-member function %qD cannot have cv-qualifier"),
7247              decl);
7248       quals = TYPE_UNQUALIFIED;
7249     }
7250
7251   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7252       && !grok_op_properties (decl, /*complain=*/true))
7253     return NULL_TREE;
7254
7255   if (funcdef_flag)
7256     /* Make the init_value nonzero so pushdecl knows this is not
7257        tentative.  error_mark_node is replaced later with the BLOCK.  */
7258     DECL_INITIAL (decl) = error_mark_node;
7259
7260   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7261     TREE_NOTHROW (decl) = 1;
7262
7263   /* Caller will do the rest of this.  */
7264   if (check < 0)
7265     return decl;
7266
7267   if (ctype != NULL_TREE)
7268     grokclassfn (ctype, decl, flags);
7269
7270   decl = check_explicit_specialization (orig_declarator, decl,
7271                                         template_count,
7272                                         2 * funcdef_flag +
7273                                         4 * (friendp != 0));
7274   if (decl == error_mark_node)
7275     return NULL_TREE;
7276
7277   if (DECL_STATIC_FUNCTION_P (decl))
7278     check_static_quals (decl, quals);
7279
7280   if (attrlist)
7281     {
7282       cplus_decl_attributes (&decl, *attrlist, 0);
7283       *attrlist = NULL_TREE;
7284     }
7285
7286   /* Check main's type after attributes have been applied.  */
7287   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7288     {
7289       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7290                         integer_type_node))
7291         {
7292           tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7293           tree newtype;
7294           error ("%<::main%> must return %<int%>");
7295           newtype = build_function_type (integer_type_node, oldtypeargs);
7296           TREE_TYPE (decl) = newtype;
7297         }
7298       if (warn_main)
7299         check_main_parameter_types (decl);
7300     }
7301
7302   if (ctype != NULL_TREE
7303       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7304       && check)
7305     {
7306       tree old_decl = check_classfn (ctype, decl,
7307                                      (processing_template_decl
7308                                       > template_class_depth (ctype))
7309                                      ? current_template_parms
7310                                      : NULL_TREE);
7311
7312       if (old_decl == error_mark_node)
7313         return NULL_TREE;
7314
7315       if (old_decl)
7316         {
7317           tree ok;
7318           tree pushed_scope;
7319
7320           if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7321             /* Because grokfndecl is always supposed to return a
7322                FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7323                here.  We depend on our callers to figure out that its
7324                really a template that's being returned.  */
7325             old_decl = DECL_TEMPLATE_RESULT (old_decl);
7326
7327           if (DECL_STATIC_FUNCTION_P (old_decl)
7328               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7329             {
7330               /* Remove the `this' parm added by grokclassfn.  */
7331               revert_static_member_fn (decl);
7332               check_static_quals (decl, quals);
7333             }
7334           if (DECL_ARTIFICIAL (old_decl))
7335             {
7336               error ("definition of implicitly-declared %qD", old_decl);
7337               return NULL_TREE;
7338             }
7339
7340           /* Since we've smashed OLD_DECL to its
7341              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
7342           if (TREE_CODE (decl) == TEMPLATE_DECL)
7343             decl = DECL_TEMPLATE_RESULT (decl);
7344
7345           /* Attempt to merge the declarations.  This can fail, in
7346              the case of some invalid specialization declarations.  */
7347           pushed_scope = push_scope (ctype);
7348           ok = duplicate_decls (decl, old_decl, friendp);
7349           if (pushed_scope)
7350             pop_scope (pushed_scope);
7351           if (!ok)
7352             {
7353               error ("no %q#D member function declared in class %qT",
7354                      decl, ctype);
7355               return NULL_TREE;
7356             }
7357           return old_decl;
7358         }
7359     }
7360
7361   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7362     return NULL_TREE;
7363
7364   if (ctype == NULL_TREE || check)
7365     return decl;
7366
7367   if (virtualp)
7368     DECL_VIRTUAL_P (decl) = 1;
7369
7370   return decl;
7371 }
7372
7373 /* decl is a FUNCTION_DECL.
7374    specifiers are the parsed virt-specifiers.
7375
7376    Set flags to reflect the virt-specifiers.
7377
7378    Returns decl.  */
7379
7380 static tree
7381 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
7382 {
7383   if (decl == NULL_TREE)
7384     return decl;
7385   if (specifiers & VIRT_SPEC_OVERRIDE)
7386     DECL_OVERRIDE_P (decl) = 1;
7387   if (specifiers & VIRT_SPEC_FINAL)
7388     DECL_FINAL_P (decl) = 1;
7389   return decl;
7390 }
7391
7392 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
7393    the linkage that DECL will receive in the object file.  */
7394
7395 static void
7396 set_linkage_for_static_data_member (tree decl)
7397 {
7398   /* A static data member always has static storage duration and
7399      external linkage.  Note that static data members are forbidden in
7400      local classes -- the only situation in which a class has
7401      non-external linkage.  */
7402   TREE_PUBLIC (decl) = 1;
7403   TREE_STATIC (decl) = 1;
7404   /* For non-template classes, static data members are always put
7405      out in exactly those files where they are defined, just as
7406      with ordinary namespace-scope variables.  */
7407   if (!processing_template_decl)
7408     DECL_INTERFACE_KNOWN (decl) = 1;
7409 }
7410
7411 /* Create a VAR_DECL named NAME with the indicated TYPE.
7412
7413    If SCOPE is non-NULL, it is the class type or namespace containing
7414    the variable.  If SCOPE is NULL, the variable should is created in
7415    the innermost enclosings scope.  */
7416
7417 static tree
7418 grokvardecl (tree type,
7419              tree name,
7420              const cp_decl_specifier_seq *declspecs,
7421              int initialized,
7422              int constp,
7423              tree scope)
7424 {
7425   tree decl;
7426   tree explicit_scope;
7427
7428   gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
7429
7430   /* Compute the scope in which to place the variable, but remember
7431      whether or not that scope was explicitly specified by the user.   */
7432   explicit_scope = scope;
7433   if (!scope)
7434     {
7435       /* An explicit "extern" specifier indicates a namespace-scope
7436          variable.  */
7437       if (declspecs->storage_class == sc_extern)
7438         scope = current_decl_namespace ();
7439       else if (!at_function_scope_p ())
7440         scope = current_scope ();
7441     }
7442
7443   if (scope
7444       && (/* If the variable is a namespace-scope variable declared in a
7445              template, we need DECL_LANG_SPECIFIC.  */
7446           (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7447           /* Similarly for namespace-scope variables with language linkage
7448              other than C++.  */
7449           || (TREE_CODE (scope) == NAMESPACE_DECL
7450               && current_lang_name != lang_name_cplusplus)
7451           /* Similarly for static data members.  */
7452           || TYPE_P (scope)))
7453     decl = build_lang_decl (VAR_DECL, name, type);
7454   else
7455     decl = build_decl (input_location, VAR_DECL, name, type);
7456
7457   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7458     set_decl_namespace (decl, explicit_scope, 0);
7459   else
7460     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7461
7462   if (declspecs->storage_class == sc_extern)
7463     {
7464       DECL_THIS_EXTERN (decl) = 1;
7465       DECL_EXTERNAL (decl) = !initialized;
7466     }
7467
7468   if (DECL_CLASS_SCOPE_P (decl))
7469     {
7470       set_linkage_for_static_data_member (decl);
7471       /* This function is only called with out-of-class definitions.  */
7472       DECL_EXTERNAL (decl) = 0;
7473       check_class_member_definition_namespace (decl);
7474     }
7475   /* At top level, either `static' or no s.c. makes a definition
7476      (perhaps tentative), and absence of `static' makes it public.  */
7477   else if (toplevel_bindings_p ())
7478     {
7479       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7480                             && (DECL_THIS_EXTERN (decl) || ! constp));
7481       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7482     }
7483   /* Not at top level, only `static' makes a static definition.  */
7484   else
7485     {
7486       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7487       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7488     }
7489
7490   if (declspecs->specs[(int)ds_thread])
7491     DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7492
7493   /* If the type of the decl has no linkage, make sure that we'll
7494      notice that in mark_used.  */
7495   if (cxx_dialect > cxx98
7496       && decl_linkage (decl) != lk_none
7497       && DECL_LANG_SPECIFIC (decl) == NULL
7498       && !DECL_EXTERN_C_P (decl)
7499       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7500     retrofit_lang_decl (decl);
7501
7502   if (TREE_PUBLIC (decl))
7503     {
7504       /* [basic.link]: A name with no linkage (notably, the name of a class
7505          or enumeration declared in a local scope) shall not be used to
7506          declare an entity with linkage.
7507
7508          DR 757 relaxes this restriction for C++0x.  */
7509       tree t = (cxx_dialect > cxx98 ? NULL_TREE
7510                 : no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7511       if (t)
7512         {
7513           if (TYPE_ANONYMOUS_P (t))
7514             {
7515               if (DECL_EXTERN_C_P (decl))
7516                 /* Allow this; it's pretty common in C.  */
7517                 ;
7518               else
7519                 {
7520                   /* DRs 132, 319 and 389 seem to indicate types with
7521                      no linkage can only be used to declare extern "C"
7522                      entities.  Since it's not always an error in the
7523                      ISO C++ 90 Standard, we only issue a warning.  */
7524                   warning (0, "anonymous type with no linkage used to declare "
7525                            "variable %q#D with linkage", decl);
7526                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7527                     warning (0, "%q+#D does not refer to the unqualified "
7528                              "type, so it is not used for linkage",
7529                              TYPE_NAME (t));
7530                 }
7531             }
7532           else
7533             warning (0, "type %qT with no linkage used to declare variable "
7534                      "%q#D with linkage", t, decl);
7535         }
7536     }
7537   else
7538     DECL_INTERFACE_KNOWN (decl) = 1;
7539
7540   return decl;
7541 }
7542
7543 /* Create and return a canonical pointer to member function type, for
7544    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
7545
7546 tree
7547 build_ptrmemfunc_type (tree type)
7548 {
7549   tree field, fields;
7550   tree t;
7551   tree unqualified_variant = NULL_TREE;
7552
7553   if (type == error_mark_node)
7554     return type;
7555
7556   /* If a canonical type already exists for this type, use it.  We use
7557      this method instead of type_hash_canon, because it only does a
7558      simple equality check on the list of field members.  */
7559
7560   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7561     return t;
7562
7563   /* Make sure that we always have the unqualified pointer-to-member
7564      type first.  */
7565   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7566     unqualified_variant
7567       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7568
7569   t = make_class_type (RECORD_TYPE);
7570   xref_basetypes (t, NULL_TREE);
7571
7572   /* Let the front end know this is a pointer to member function...  */
7573   TYPE_PTRMEMFUNC_FLAG (t) = 1;
7574   /* ... and not really a class type.  */
7575   SET_CLASS_TYPE_P (t, 0);
7576
7577   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
7578   fields = field;
7579
7580   field = build_decl (input_location, FIELD_DECL, delta_identifier, 
7581                       delta_type_node);
7582   DECL_CHAIN (field) = fields;
7583   fields = field;
7584
7585   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7586
7587   /* Zap out the name so that the back end will give us the debugging
7588      information for this anonymous RECORD_TYPE.  */
7589   TYPE_NAME (t) = NULL_TREE;
7590
7591   /* If this is not the unqualified form of this pointer-to-member
7592      type, set the TYPE_MAIN_VARIANT for this type to be the
7593      unqualified type.  Since they are actually RECORD_TYPEs that are
7594      not variants of each other, we must do this manually.
7595      As we just built a new type there is no need to do yet another copy.  */
7596   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7597     {
7598       int type_quals = cp_type_quals (type);
7599       TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7600       TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7601       TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
7602       TYPE_MAIN_VARIANT (t) = unqualified_variant;
7603       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7604       TYPE_NEXT_VARIANT (unqualified_variant) = t;
7605       TREE_TYPE (TYPE_BINFO (t)) = t;
7606     }
7607
7608   /* Cache this pointer-to-member type so that we can find it again
7609      later.  */
7610   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7611
7612   if (TYPE_STRUCTURAL_EQUALITY_P (type))
7613     SET_TYPE_STRUCTURAL_EQUALITY (t);
7614   else if (TYPE_CANONICAL (type) != type)
7615     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7616
7617   return t;
7618 }
7619
7620 /* Create and return a pointer to data member type.  */
7621
7622 tree
7623 build_ptrmem_type (tree class_type, tree member_type)
7624 {
7625   if (TREE_CODE (member_type) == METHOD_TYPE)
7626     {
7627       cp_cv_quals quals = type_memfn_quals (member_type);
7628       member_type = build_memfn_type (member_type, class_type, quals);
7629       return build_ptrmemfunc_type (build_pointer_type (member_type));
7630     }
7631   else
7632     {
7633       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7634       return build_offset_type (class_type, member_type);
7635     }
7636 }
7637
7638 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7639    Check to see that the definition is valid.  Issue appropriate error
7640    messages.  Return 1 if the definition is particularly bad, or 0
7641    otherwise.  */
7642
7643 int
7644 check_static_variable_definition (tree decl, tree type)
7645 {
7646   /* If DECL is declared constexpr, we'll do the appropriate checks
7647      in check_initializer.  */
7648   if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
7649     return 0;
7650   else if (cxx_dialect >= cxx0x && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7651     {
7652       if (literal_type_p (type))
7653         error ("%<constexpr%> needed for in-class initialization of static "
7654                "data member %q#D of non-integral type", decl);
7655       else
7656         error ("in-class initialization of static data member %q#D of "
7657                "non-literal type", decl);
7658       return 1;
7659     }
7660
7661   /* Motion 10 at San Diego: If a static const integral data member is
7662      initialized with an integral constant expression, the initializer
7663      may appear either in the declaration (within the class), or in
7664      the definition, but not both.  If it appears in the class, the
7665      member is a member constant.  The file-scope definition is always
7666      required.  */
7667   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
7668     {
7669       error ("invalid in-class initialization of static data member "
7670              "of non-integral type %qT",
7671              type);
7672       return 1;
7673     }
7674   else if (!CP_TYPE_CONST_P (type))
7675     error ("ISO C++ forbids in-class initialization of non-const "
7676            "static member %qD",
7677            decl);
7678   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7679     pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
7680              "%qD of non-integral type %qT", decl, type);
7681
7682   return 0;
7683 }
7684
7685 /* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
7686    SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
7687    expressions out into temporary variables so that walk_tree doesn't
7688    step into them (c++/15764).  */
7689
7690 static tree
7691 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
7692 {
7693   struct pointer_set_t *pset = (struct pointer_set_t *)data;
7694   tree expr = *expr_p;
7695   if (TREE_CODE (expr) == SAVE_EXPR)
7696     {
7697       tree op = TREE_OPERAND (expr, 0);
7698       cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
7699       if (TREE_SIDE_EFFECTS (op))
7700         TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
7701       *walk_subtrees = 0;
7702     }
7703   else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
7704     *walk_subtrees = 0;
7705   return NULL;
7706 }
7707
7708 /* Entry point for the above.  */
7709
7710 static void
7711 stabilize_vla_size (tree size)
7712 {
7713   struct pointer_set_t *pset = pointer_set_create ();
7714   /* Break out any function calls into temporary variables.  */
7715   cp_walk_tree (&size, stabilize_save_expr_r, pset, pset);
7716 }
7717
7718 /* Given the SIZE (i.e., number of elements) in an array, compute an
7719    appropriate index type for the array.  If non-NULL, NAME is the
7720    name of the thing being declared.  */
7721
7722 tree
7723 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
7724 {
7725   tree type;
7726   tree itype;
7727   tree osize = size;
7728   tree abi_1_itype = NULL_TREE;
7729
7730   if (error_operand_p (size))
7731     return error_mark_node;
7732
7733   type = TREE_TYPE (size);
7734   /* type_dependent_expression_p? */
7735   if (!dependent_type_p (type))
7736     {
7737       mark_rvalue_use (size);
7738
7739       if (cxx_dialect < cxx0x && TREE_CODE (size) == NOP_EXPR
7740           && TREE_SIDE_EFFECTS (size))
7741         /* In C++98, we mark a non-constant array bound with a magic
7742            NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
7743       else
7744         {
7745           size = fold_non_dependent_expr (size);
7746
7747           if (CLASS_TYPE_P (type)
7748               && CLASSTYPE_LITERAL_P (type))
7749             {
7750               size = build_expr_type_conversion (WANT_INT, size, true);
7751               if (!size)
7752                 {
7753                   if (!(complain & tf_error))
7754                     return error_mark_node;
7755                   if (name)
7756                     error ("size of array %qD has non-integral type %qT",
7757                            name, type);
7758                   else
7759                     error ("size of array has non-integral type %qT", type);
7760                   size = integer_one_node;
7761                 }
7762               if (size == error_mark_node)
7763                 return error_mark_node;
7764               type = TREE_TYPE (size);
7765               /* We didn't support this case in GCC 3.2, so don't bother
7766                  trying to model it now in ABI v1.  */
7767               abi_1_itype = error_mark_node;
7768             }
7769
7770           size = maybe_constant_value (size);
7771           if (!TREE_CONSTANT (size))
7772             size = osize;
7773         }
7774
7775       if (error_operand_p (size))
7776         return error_mark_node;
7777
7778       /* The array bound must be an integer type.  */
7779       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
7780         {
7781           if (!(complain & tf_error))
7782             return error_mark_node;
7783           if (name)
7784             error ("size of array %qD has non-integral type %qT", name, type);
7785           else
7786             error ("size of array has non-integral type %qT", type);
7787           size = integer_one_node;
7788           type = TREE_TYPE (size);
7789         }
7790     }
7791
7792   /* A type is dependent if it is...an array type constructed from any
7793      dependent type or whose size is specified by a constant expression
7794      that is value-dependent.  */
7795   /* We can only call value_dependent_expression_p on integral constant
7796      expressions; treat non-constant expressions as dependent, too.  */
7797   if (processing_template_decl
7798       && (dependent_type_p (type)
7799           || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
7800     {
7801       /* We cannot do any checking for a SIZE that isn't known to be
7802          constant. Just build the index type and mark that it requires
7803          structural equality checks.  */
7804       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7805                                            size, integer_one_node));
7806       TYPE_DEPENDENT_P (itype) = 1;
7807       TYPE_DEPENDENT_P_VALID (itype) = 1;
7808       SET_TYPE_STRUCTURAL_EQUALITY (itype);
7809       return itype;
7810     }
7811   
7812   if (!abi_version_at_least (2) && processing_template_decl
7813       && abi_1_itype == NULL_TREE)
7814     /* For abi-1, we handled all instances in templates the same way,
7815        even when they were non-dependent. This affects the manglings
7816        produced.  So, we do the normal checking for non-dependent
7817        sizes, but at the end we'll return the same type that abi-1
7818        would have, but with TYPE_CANONICAL set to the "right"
7819        value that the current ABI would provide. */
7820     abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7821                                                osize, integer_one_node));
7822
7823   /* Normally, the array-bound will be a constant.  */
7824   if (TREE_CODE (size) == INTEGER_CST)
7825     {
7826       /* Check to see if the array bound overflowed.  Make that an
7827          error, no matter how generous we're being.  */
7828       constant_expression_error (size);
7829
7830       /* An array must have a positive number of elements.  */
7831       if (INT_CST_LT (size, integer_zero_node))
7832         {
7833           if (!(complain & tf_error))
7834             return error_mark_node;
7835           if (name)
7836             error ("size of array %qD is negative", name);
7837           else
7838             error ("size of array is negative");
7839           size = integer_one_node;
7840         }
7841       /* As an extension we allow zero-sized arrays.  */
7842       else if (integer_zerop (size))
7843         {
7844           if (!(complain & tf_error))
7845             /* We must fail if performing argument deduction (as
7846                indicated by the state of complain), so that
7847                another substitution can be found.  */
7848             return error_mark_node;
7849           else if (in_system_header)
7850             /* Allow them in system headers because glibc uses them.  */;
7851           else if (name)
7852             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
7853           else
7854             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
7855         }
7856     }
7857   else if (TREE_CONSTANT (size)
7858            /* We don't allow VLAs at non-function scopes, or during
7859               tentative template substitution.  */
7860            || !at_function_scope_p () || !(complain & tf_error))
7861     {
7862       if (!(complain & tf_error))
7863         return error_mark_node;
7864       /* `(int) &fn' is not a valid array bound.  */
7865       if (name)
7866         error ("size of array %qD is not an integral constant-expression",
7867                name);
7868       else
7869         error ("size of array is not an integral constant-expression");
7870       size = integer_one_node;
7871     }
7872   else if (pedantic && warn_vla != 0)
7873     {
7874       if (name)
7875         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
7876       else
7877         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
7878     }
7879   else if (warn_vla > 0)
7880     {
7881       if (name)
7882         warning (OPT_Wvla, 
7883                  "variable length array %qD is used", name);
7884       else
7885         warning (OPT_Wvla, 
7886                  "variable length array is used");
7887     }
7888
7889   if (processing_template_decl && !TREE_CONSTANT (size))
7890     /* A variable sized array.  */
7891     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7892   else
7893     {
7894       HOST_WIDE_INT saved_processing_template_decl;
7895
7896       /* Compute the index of the largest element in the array.  It is
7897          one less than the number of elements in the array.  We save
7898          and restore PROCESSING_TEMPLATE_DECL so that computations in
7899          cp_build_binary_op will be appropriately folded.  */
7900       saved_processing_template_decl = processing_template_decl;
7901       processing_template_decl = 0;
7902       itype = cp_build_binary_op (input_location,
7903                                   MINUS_EXPR,
7904                                   cp_convert (ssizetype, size),
7905                                   cp_convert (ssizetype, integer_one_node),
7906                                   tf_warning_or_error);
7907       itype = fold (itype);
7908       processing_template_decl = saved_processing_template_decl;
7909
7910       if (!TREE_CONSTANT (itype))
7911         /* A variable sized array.  */
7912         itype = variable_size (itype);
7913       /* Make sure that there was no overflow when creating to a signed
7914          index type.  (For example, on a 32-bit machine, an array with
7915          size 2^32 - 1 is too big.)  */
7916       else if (TREE_CODE (itype) == INTEGER_CST
7917                && TREE_OVERFLOW (itype))
7918         {
7919           if (!(complain & tf_error))
7920             return error_mark_node;
7921           error ("overflow in array dimension");
7922           TREE_OVERFLOW (itype) = 0;
7923         }
7924     }
7925
7926   /* Create and return the appropriate index type.  */
7927   if (abi_1_itype && abi_1_itype != error_mark_node)
7928     {
7929       tree t = build_index_type (itype);
7930       TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
7931       itype = abi_1_itype;
7932     }
7933   else
7934     itype = build_index_type (itype);
7935
7936   /* If the index type were dependent, we would have returned early, so
7937      remember that it isn't.  */
7938   TYPE_DEPENDENT_P (itype) = 0;
7939   TYPE_DEPENDENT_P_VALID (itype) = 1;
7940   return itype;
7941 }
7942
7943 /* Returns the scope (if any) in which the entity declared by
7944    DECLARATOR will be located.  If the entity was declared with an
7945    unqualified name, NULL_TREE is returned.  */
7946
7947 tree
7948 get_scope_of_declarator (const cp_declarator *declarator)
7949 {
7950   while (declarator && declarator->kind != cdk_id)
7951     declarator = declarator->declarator;
7952
7953   /* If the declarator-id is a SCOPE_REF, the scope in which the
7954      declaration occurs is the first operand.  */
7955   if (declarator
7956       && declarator->u.id.qualifying_scope)
7957     return declarator->u.id.qualifying_scope;
7958
7959   /* Otherwise, the declarator is not a qualified name; the entity will
7960      be declared in the current scope.  */
7961   return NULL_TREE;
7962 }
7963
7964 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
7965    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
7966    with this type.  */
7967
7968 static tree
7969 create_array_type_for_decl (tree name, tree type, tree size)
7970 {
7971   tree itype = NULL_TREE;
7972
7973   /* If things have already gone awry, bail now.  */
7974   if (type == error_mark_node || size == error_mark_node)
7975     return error_mark_node;
7976
7977   /* 8.3.4/1: If the type of the identifier of D contains the auto
7978      type-specifier, the program is ill-formed.  */
7979   if (pedantic && type_uses_auto (type))
7980     pedwarn (input_location, OPT_pedantic,
7981              "declaration of %qD as array of %<auto%>", name);
7982
7983   /* If there are some types which cannot be array elements,
7984      issue an error-message and return.  */
7985   switch (TREE_CODE (type))
7986     {
7987     case VOID_TYPE:
7988       if (name)
7989         error ("declaration of %qD as array of void", name);
7990       else
7991         error ("creating array of void");
7992       return error_mark_node;
7993
7994     case FUNCTION_TYPE:
7995       if (name)
7996         error ("declaration of %qD as array of functions", name);
7997       else
7998         error ("creating array of functions");
7999       return error_mark_node;
8000
8001     case REFERENCE_TYPE:
8002       if (name)
8003         error ("declaration of %qD as array of references", name);
8004       else
8005         error ("creating array of references");
8006       return error_mark_node;
8007
8008     case METHOD_TYPE:
8009       if (name)
8010         error ("declaration of %qD as array of function members", name);
8011       else
8012         error ("creating array of function members");
8013       return error_mark_node;
8014
8015     default:
8016       break;
8017     }
8018
8019   /* [dcl.array]
8020
8021      The constant expressions that specify the bounds of the arrays
8022      can be omitted only for the first member of the sequence.  */
8023   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8024     {
8025       if (name)
8026         error ("declaration of %qD as multidimensional array must "
8027                "have bounds for all dimensions except the first",
8028                name);
8029       else
8030         error ("multidimensional array must have bounds for all "
8031                "dimensions except the first");
8032
8033       return error_mark_node;
8034     }
8035
8036   /* Figure out the index type for the array.  */
8037   if (size)
8038     itype = compute_array_index_type (name, size, tf_warning_or_error);
8039
8040   /* [dcl.array]
8041      T is called the array element type; this type shall not be [...] an
8042      abstract class type.  */
8043   abstract_virtuals_error (name, type);
8044
8045   return build_cplus_array_type (type, itype);
8046 }
8047
8048 /* Check that it's OK to declare a function with the indicated TYPE.
8049    SFK indicates the kind of special function (if any) that this
8050    function is.  OPTYPE is the type given in a conversion operator
8051    declaration, or the class type for a constructor/destructor.
8052    Returns the actual return type of the function; that
8053    may be different than TYPE if an error occurs, or for certain
8054    special functions.  */
8055
8056 static tree
8057 check_special_function_return_type (special_function_kind sfk,
8058                                     tree type,
8059                                     tree optype)
8060 {
8061   switch (sfk)
8062     {
8063     case sfk_constructor:
8064       if (type)
8065         error ("return type specification for constructor invalid");
8066
8067       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8068         type = build_pointer_type (optype);
8069       else
8070         type = void_type_node;
8071       break;
8072
8073     case sfk_destructor:
8074       if (type)
8075         error ("return type specification for destructor invalid");
8076       /* We can't use the proper return type here because we run into
8077          problems with ambiguous bases and covariant returns.
8078          Java classes are left unchanged because (void *) isn't a valid
8079          Java type, and we don't want to change the Java ABI.  */
8080       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8081         type = build_pointer_type (void_type_node);
8082       else
8083         type = void_type_node;
8084       break;
8085
8086     case sfk_conversion:
8087       if (type)
8088         error ("return type specified for %<operator %T%>",  optype);
8089       type = optype;
8090       break;
8091
8092     default:
8093       gcc_unreachable ();
8094     }
8095
8096   return type;
8097 }
8098
8099 /* A variable or data member (whose unqualified name is IDENTIFIER)
8100    has been declared with the indicated TYPE.  If the TYPE is not
8101    acceptable, issue an error message and return a type to use for
8102    error-recovery purposes.  */
8103
8104 tree
8105 check_var_type (tree identifier, tree type)
8106 {
8107   if (VOID_TYPE_P (type))
8108     {
8109       if (!identifier)
8110         error ("unnamed variable or field declared void");
8111       else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
8112         {
8113           gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8114           error ("variable or field %qE declared void", identifier);
8115         }
8116       else
8117         error ("variable or field declared void");
8118       type = error_mark_node;
8119     }
8120
8121   return type;
8122 }
8123
8124 /* Given declspecs and a declarator (abstract or otherwise), determine
8125    the name and type of the object declared and construct a DECL node
8126    for it.
8127
8128    DECLSPECS points to the representation of declaration-specifier
8129    sequence that precedes declarator.
8130
8131    DECL_CONTEXT says which syntactic context this declaration is in:
8132      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8133      FUNCDEF for a function definition.  Like NORMAL but a few different
8134       error messages in each case.  Return value may be zero meaning
8135       this definition is too screwy to try to parse.
8136      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8137       handle member functions (which have FIELD context).
8138       Return value may be zero meaning this definition is too screwy to
8139       try to parse.
8140      PARM for a parameter declaration (either within a function prototype
8141       or before a function body).  Make a PARM_DECL, or return void_type_node.
8142      TPARM for a template parameter declaration.
8143      CATCHPARM for a parameter declaration before a catch clause.
8144      TYPENAME if for a typename (in a cast or sizeof).
8145       Don't make a DECL node; just return the ..._TYPE node.
8146      FIELD for a struct or union field; make a FIELD_DECL.
8147      BITFIELD for a field with specified width.
8148
8149    INITIALIZED is as for start_decl.
8150
8151    ATTRLIST is a pointer to the list of attributes, which may be NULL
8152    if there are none; *ATTRLIST may be modified if attributes from inside
8153    the declarator should be applied to the declaration.
8154
8155    When this function is called, scoping variables (such as
8156    CURRENT_CLASS_TYPE) should reflect the scope in which the
8157    declaration occurs, not the scope in which the new declaration will
8158    be placed.  For example, on:
8159
8160      void S::f() { ... }
8161
8162    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8163    should not be `S'.
8164
8165    Returns a DECL (if a declarator is present), a TYPE (if there is no
8166    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8167    error occurs. */
8168
8169 tree
8170 grokdeclarator (const cp_declarator *declarator,
8171                 const cp_decl_specifier_seq *declspecs,
8172                 enum decl_context decl_context,
8173                 int initialized,
8174                 tree* attrlist)
8175 {
8176   tree type = NULL_TREE;
8177   int longlong = 0;
8178   int explicit_int128 = 0;
8179   int virtualp, explicitp, friendp, inlinep, staticp;
8180   int explicit_int = 0;
8181   int explicit_char = 0;
8182   int defaulted_int = 0;
8183   tree dependent_name = NULL_TREE;
8184
8185   tree typedef_decl = NULL_TREE;
8186   const char *name = NULL;
8187   tree typedef_type = NULL_TREE;
8188   /* True if this declarator is a function definition.  */
8189   bool funcdef_flag = false;
8190   cp_declarator_kind innermost_code = cdk_error;
8191   int bitfield = 0;
8192 #if 0
8193   /* See the code below that used this.  */
8194   tree decl_attr = NULL_TREE;
8195 #endif
8196
8197   /* Keep track of what sort of function is being processed
8198      so that we can warn about default return values, or explicit
8199      return values which do not match prescribed defaults.  */
8200   special_function_kind sfk = sfk_none;
8201
8202   tree dname = NULL_TREE;
8203   tree ctor_return_type = NULL_TREE;
8204   enum overload_flags flags = NO_SPECIAL;
8205   /* cv-qualifiers that apply to the declarator, for a declaration of
8206      a member function.  */
8207   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8208   /* virt-specifiers that apply to the declarator, for a declaration of
8209      a member function.  */
8210   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8211   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
8212   int type_quals;
8213   tree raises = NULL_TREE;
8214   int template_count = 0;
8215   tree returned_attrs = NULL_TREE;
8216   tree parms = NULL_TREE;
8217   const cp_declarator *id_declarator;
8218   /* The unqualified name of the declarator; either an
8219      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
8220   tree unqualified_id;
8221   /* The class type, if any, in which this entity is located,
8222      or NULL_TREE if none.  Note that this value may be different from
8223      the current class type; for example if an attempt is made to declare
8224      "A::f" inside "B", this value will be "A".  */
8225   tree ctype = current_class_type;
8226   /* The NAMESPACE_DECL for the namespace in which this entity is
8227      located.  If an unqualified name is used to declare the entity,
8228      this value will be NULL_TREE, even if the entity is located at
8229      namespace scope.  */
8230   tree in_namespace = NULL_TREE;
8231   cp_storage_class storage_class;
8232   bool unsigned_p, signed_p, short_p, long_p, thread_p;
8233   bool type_was_error_mark_node = false;
8234   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8235   bool template_type_arg = false;
8236   bool template_parm_flag = false;
8237   bool constexpr_p = declspecs->specs[(int) ds_constexpr];
8238   const char *errmsg;
8239
8240   signed_p = declspecs->specs[(int)ds_signed];
8241   unsigned_p = declspecs->specs[(int)ds_unsigned];
8242   short_p = declspecs->specs[(int)ds_short];
8243   long_p = declspecs->specs[(int)ds_long];
8244   longlong = declspecs->specs[(int)ds_long] >= 2;
8245   explicit_int128 = declspecs->explicit_int128_p;
8246   thread_p = declspecs->specs[(int)ds_thread];
8247
8248   if (decl_context == FUNCDEF)
8249     funcdef_flag = true, decl_context = NORMAL;
8250   else if (decl_context == MEMFUNCDEF)
8251     funcdef_flag = true, decl_context = FIELD;
8252   else if (decl_context == BITFIELD)
8253     bitfield = 1, decl_context = FIELD;
8254   else if (decl_context == TEMPLATE_TYPE_ARG)
8255     template_type_arg = true, decl_context = TYPENAME;
8256   else if (decl_context == TPARM)
8257     template_parm_flag = true, decl_context = PARM;
8258
8259   if (initialized > 1)
8260     funcdef_flag = true;
8261
8262   /* Look inside a declarator for the name being declared
8263      and get it as a string, for an error message.  */
8264   for (id_declarator = declarator;
8265        id_declarator;
8266        id_declarator = id_declarator->declarator)
8267     {
8268       if (id_declarator->kind != cdk_id)
8269         innermost_code = id_declarator->kind;
8270
8271       switch (id_declarator->kind)
8272         {
8273         case cdk_function:
8274           if (id_declarator->declarator
8275               && id_declarator->declarator->kind == cdk_id)
8276             {
8277               sfk = id_declarator->declarator->u.id.sfk;
8278               if (sfk == sfk_destructor)
8279                 flags = DTOR_FLAG;
8280             }
8281           break;
8282
8283         case cdk_id:
8284           {
8285             tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8286             tree decl = id_declarator->u.id.unqualified_name;
8287             if (!decl)
8288               break;
8289             if (qualifying_scope)
8290               {
8291                 if (at_function_scope_p ())
8292                   {
8293                     /* [dcl.meaning] 
8294
8295                        A declarator-id shall not be qualified except
8296                        for ... 
8297
8298                        None of the cases are permitted in block
8299                        scope.  */
8300                     if (qualifying_scope == global_namespace)
8301                       error ("invalid use of qualified-name %<::%D%>",
8302                              decl);
8303                     else if (TYPE_P (qualifying_scope))
8304                       error ("invalid use of qualified-name %<%T::%D%>",
8305                              qualifying_scope, decl);
8306                     else 
8307                       error ("invalid use of qualified-name %<%D::%D%>",
8308                              qualifying_scope, decl);
8309                     return error_mark_node;
8310                   }
8311                 else if (TYPE_P (qualifying_scope))
8312                   {
8313                     ctype = qualifying_scope;
8314                     if (innermost_code != cdk_function
8315                         && current_class_type
8316                         && !UNIQUELY_DERIVED_FROM_P (ctype,
8317                                                      current_class_type))
8318                       {
8319                         error ("type %qT is not derived from type %qT",
8320                                ctype, current_class_type);
8321                         return error_mark_node;
8322                       }
8323                   }
8324                 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8325                   in_namespace = qualifying_scope;
8326               }
8327             switch (TREE_CODE (decl))
8328               {
8329               case BIT_NOT_EXPR:
8330                 {
8331                   tree type;
8332
8333                   if (innermost_code != cdk_function)
8334                     {
8335                       error ("declaration of %qD as non-function", decl);
8336                       return error_mark_node;
8337                     }
8338                   else if (!qualifying_scope
8339                            && !(current_class_type && at_class_scope_p ()))
8340                     {
8341                       error ("declaration of %qD as non-member", decl);
8342                       return error_mark_node;
8343                     }
8344
8345                   type = TREE_OPERAND (decl, 0);
8346                   if (TYPE_P (type))
8347                     type = constructor_name (type);
8348                   name = identifier_to_locale (IDENTIFIER_POINTER (type));
8349                   dname = decl;
8350                 }
8351                 break;
8352
8353               case TEMPLATE_ID_EXPR:
8354                 {
8355                   tree fns = TREE_OPERAND (decl, 0);
8356
8357                   dname = fns;
8358                   if (TREE_CODE (dname) != IDENTIFIER_NODE)
8359                     {
8360                       gcc_assert (is_overloaded_fn (dname));
8361                       dname = DECL_NAME (get_first_fn (dname));
8362                     }
8363                 }
8364                 /* Fall through.  */
8365
8366               case IDENTIFIER_NODE:
8367                 if (TREE_CODE (decl) == IDENTIFIER_NODE)
8368                   dname = decl;
8369
8370                 if (C_IS_RESERVED_WORD (dname))
8371                   {
8372                     error ("declarator-id missing; using reserved word %qD",
8373                            dname);
8374                     name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8375                   }
8376                 else if (!IDENTIFIER_TYPENAME_P (dname))
8377                   name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8378                 else
8379                   {
8380                     gcc_assert (flags == NO_SPECIAL);
8381                     flags = TYPENAME_FLAG;
8382                     ctor_return_type = TREE_TYPE (dname);
8383                     sfk = sfk_conversion;
8384                     if (is_typename_at_global_scope (dname))
8385                       name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8386                     else
8387                       name = "<invalid operator>";
8388                   }
8389                 break;
8390
8391               default:
8392                 gcc_unreachable ();
8393               }
8394             break;
8395           }
8396
8397         case cdk_array:
8398         case cdk_pointer:
8399         case cdk_reference:
8400         case cdk_ptrmem:
8401           break;
8402
8403         case cdk_error:
8404           return error_mark_node;
8405
8406         default:
8407           gcc_unreachable ();
8408         }
8409       if (id_declarator->kind == cdk_id)
8410         break;
8411     }
8412
8413   /* [dcl.fct.edf]
8414
8415      The declarator in a function-definition shall have the form
8416      D1 ( parameter-declaration-clause) ...  */
8417   if (funcdef_flag && innermost_code != cdk_function)
8418     {
8419       error ("function definition does not declare parameters");
8420       return error_mark_node;
8421     }
8422
8423   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
8424       && innermost_code != cdk_function
8425       && ! (ctype && !declspecs->any_specifiers_p))
8426     {
8427       error ("declaration of %qD as non-function", dname);
8428       return error_mark_node;
8429     }
8430
8431   /* Anything declared one level down from the top level
8432      must be one of the parameters of a function
8433      (because the body is at least two levels down).  */
8434
8435   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
8436      by not allowing C++ class definitions to specify their parameters
8437      with xdecls (must be spec.d in the parmlist).
8438
8439      Since we now wait to push a class scope until we are sure that
8440      we are in a legitimate method context, we must set oldcname
8441      explicitly (since current_class_name is not yet alive).
8442
8443      We also want to avoid calling this a PARM if it is in a namespace.  */
8444
8445   if (decl_context == NORMAL && !toplevel_bindings_p ())
8446     {
8447       struct cp_binding_level *b = current_binding_level;
8448       current_binding_level = b->level_chain;
8449       if (current_binding_level != 0 && toplevel_bindings_p ())
8450         decl_context = PARM;
8451       current_binding_level = b;
8452     }
8453
8454   if (name == NULL)
8455     name = decl_context == PARM ? "parameter" : "type name";
8456
8457   if (constexpr_p && declspecs->specs[(int)ds_typedef])
8458     {
8459       error ("%<constexpr%> cannot appear in a typedef declaration");
8460       return error_mark_node;
8461     }
8462
8463   /* If there were multiple types specified in the decl-specifier-seq,
8464      issue an error message.  */
8465   if (declspecs->multiple_types_p)
8466     {
8467       error ("two or more data types in declaration of %qs", name);
8468       return error_mark_node;
8469     }
8470
8471   if (declspecs->conflicting_specifiers_p)
8472     {
8473       error ("conflicting specifiers in declaration of %qs", name);
8474       return error_mark_node;
8475     }
8476
8477   /* Extract the basic type from the decl-specifier-seq.  */
8478   type = declspecs->type;
8479   if (type == error_mark_node)
8480     {
8481       type = NULL_TREE;
8482       type_was_error_mark_node = true;
8483     }
8484   /* If the entire declaration is itself tagged as deprecated then
8485      suppress reports of deprecated items.  */
8486   if (type && TREE_DEPRECATED (type)
8487       && deprecated_state != DEPRECATED_SUPPRESS)
8488     warn_deprecated_use (type, NULL_TREE);
8489   if (type && TREE_CODE (type) == TYPE_DECL)
8490     {
8491       typedef_decl = type;
8492       type = TREE_TYPE (typedef_decl);
8493       if (TREE_DEPRECATED (type)
8494           && DECL_ARTIFICIAL (typedef_decl)
8495           && deprecated_state != DEPRECATED_SUPPRESS)
8496         warn_deprecated_use (type, NULL_TREE);
8497     }
8498   /* No type at all: default to `int', and set DEFAULTED_INT
8499      because it was not a user-defined typedef.  */
8500   if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
8501     {
8502       /* These imply 'int'.  */
8503       type = integer_type_node;
8504       defaulted_int = 1;
8505     }
8506   /* Gather flags.  */
8507   explicit_int = declspecs->explicit_int_p;
8508   explicit_char = declspecs->explicit_char_p;
8509
8510 #if 0
8511   /* See the code below that used this.  */
8512   if (typedef_decl)
8513     decl_attr = DECL_ATTRIBUTES (typedef_decl);
8514 #endif
8515   typedef_type = type;
8516
8517
8518   if (sfk != sfk_conversion)
8519     ctor_return_type = ctype;
8520
8521   if (sfk != sfk_none)
8522     type = check_special_function_return_type (sfk, type,
8523                                                ctor_return_type);
8524   else if (type == NULL_TREE)
8525     {
8526       int is_main;
8527
8528       explicit_int = -1;
8529
8530       /* We handle `main' specially here, because 'main () { }' is so
8531          common.  With no options, it is allowed.  With -Wreturn-type,
8532          it is a warning.  It is only an error with -pedantic-errors.  */
8533       is_main = (funcdef_flag
8534                  && dname && TREE_CODE (dname) == IDENTIFIER_NODE
8535                  && MAIN_NAME_P (dname)
8536                  && ctype == NULL_TREE
8537                  && in_namespace == NULL_TREE
8538                  && current_namespace == global_namespace);
8539
8540       if (type_was_error_mark_node)
8541         /* We've already issued an error, don't complain more.  */;
8542       else if (in_system_header || flag_ms_extensions)
8543         /* Allow it, sigh.  */;
8544       else if (! is_main)
8545         permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
8546       else if (pedantic)
8547         pedwarn (input_location, OPT_pedantic,
8548                  "ISO C++ forbids declaration of %qs with no type", name);
8549       else
8550         warning (OPT_Wreturn_type,
8551                  "ISO C++ forbids declaration of %qs with no type", name);
8552
8553       type = integer_type_node;
8554     }
8555
8556   ctype = NULL_TREE;
8557
8558   /* Now process the modifiers that were specified
8559      and check for invalid combinations.  */
8560
8561   /* Long double is a special combination.  */
8562   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8563     {
8564       long_p = false;
8565       type = cp_build_qualified_type (long_double_type_node,
8566                                       cp_type_quals (type));
8567     }
8568
8569   /* Check all other uses of type modifiers.  */
8570
8571   if (unsigned_p || signed_p || long_p || short_p)
8572     {
8573       int ok = 0;
8574
8575       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
8576         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8577       else if (signed_p && unsigned_p)
8578         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
8579       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
8580         error ("%<long long%> invalid for %qs", name);
8581       else if (explicit_int128 && TREE_CODE (type) != INTEGER_TYPE)
8582         error ("%<__int128%> invalid for %qs", name);
8583       else if (long_p && TREE_CODE (type) == REAL_TYPE)
8584         error ("%<long%> invalid for %qs", name);
8585       else if (short_p && TREE_CODE (type) == REAL_TYPE)
8586         error ("%<short%> invalid for %qs", name);
8587       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
8588         error ("%<long%> or %<short%> invalid for %qs", name);
8589       else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
8590         error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
8591       else if ((long_p || short_p) && explicit_char)
8592         error ("%<long%> or %<short%> specified with char for %qs", name);
8593       else if (long_p && short_p)
8594         error ("%<long%> and %<short%> specified together for %qs", name);
8595       else if (type == char16_type_node || type == char32_type_node)
8596         {
8597           if (signed_p || unsigned_p)
8598             error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8599           else if (short_p || long_p)
8600             error ("%<short%> or %<long%> invalid for %qs", name);
8601         }
8602       else
8603         {
8604           ok = 1;
8605           if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
8606             {
8607               pedwarn (input_location, OPT_pedantic, 
8608                        "long, short, signed or unsigned used invalidly for %qs",
8609                        name);
8610               if (flag_pedantic_errors)
8611                 ok = 0;
8612             }
8613           if (explicit_int128)
8614             {
8615               if (int128_integer_type_node == NULL_TREE)
8616                 {
8617                   error ("%<__int128%> is not supported by this target");
8618                   ok = 0;
8619                 }
8620               else if (pedantic)
8621                 {
8622                   pedwarn (input_location, OPT_pedantic,
8623                            "ISO C++ does not support %<__int128%> for %qs",
8624                            name);
8625                   if (flag_pedantic_errors)
8626                     ok = 0;
8627                 }
8628             }
8629         }
8630
8631       /* Discard the type modifiers if they are invalid.  */
8632       if (! ok)
8633         {
8634           unsigned_p = false;
8635           signed_p = false;
8636           long_p = false;
8637           short_p = false;
8638           longlong = 0;
8639           explicit_int128 = false;
8640         }
8641     }
8642
8643   /* Decide whether an integer type is signed or not.
8644      Optionally treat bitfields as signed by default.  */
8645   if (unsigned_p
8646       /* [class.bit]
8647
8648          It is implementation-defined whether a plain (neither
8649          explicitly signed or unsigned) char, short, int, or long
8650          bit-field is signed or unsigned.
8651
8652          Naturally, we extend this to long long as well.  Note that
8653          this does not include wchar_t.  */
8654       || (bitfield && !flag_signed_bitfields
8655           && !signed_p
8656           /* A typedef for plain `int' without `signed' can be
8657              controlled just like plain `int', but a typedef for
8658              `signed int' cannot be so controlled.  */
8659           && !(typedef_decl
8660                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8661           && TREE_CODE (type) == INTEGER_TYPE
8662           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8663     {
8664       if (explicit_int128)
8665         type = int128_unsigned_type_node;
8666       else if (longlong)
8667         type = long_long_unsigned_type_node;
8668       else if (long_p)
8669         type = long_unsigned_type_node;
8670       else if (short_p)
8671         type = short_unsigned_type_node;
8672       else if (type == char_type_node)
8673         type = unsigned_char_type_node;
8674       else if (typedef_decl)
8675         type = unsigned_type_for (type);
8676       else
8677         type = unsigned_type_node;
8678     }
8679   else if (signed_p && type == char_type_node)
8680     type = signed_char_type_node;
8681   else if (explicit_int128)
8682     type = int128_integer_type_node;
8683   else if (longlong)
8684     type = long_long_integer_type_node;
8685   else if (long_p)
8686     type = long_integer_type_node;
8687   else if (short_p)
8688     type = short_integer_type_node;
8689
8690   if (declspecs->specs[(int)ds_complex])
8691     {
8692       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8693         error ("complex invalid for %qs", name);
8694       /* If we just have "complex", it is equivalent to
8695          "complex double", but if any modifiers at all are specified it is
8696          the complex form of TYPE.  E.g, "complex short" is
8697          "complex short int".  */
8698       else if (defaulted_int && ! longlong && ! explicit_int128
8699                && ! (long_p || short_p || signed_p || unsigned_p))
8700         type = complex_double_type_node;
8701       else if (type == integer_type_node)
8702         type = complex_integer_type_node;
8703       else if (type == float_type_node)
8704         type = complex_float_type_node;
8705       else if (type == double_type_node)
8706         type = complex_double_type_node;
8707       else if (type == long_double_type_node)
8708         type = complex_long_double_type_node;
8709       else
8710         type = build_complex_type (type);
8711     }
8712
8713   type_quals = TYPE_UNQUALIFIED;
8714   if (declspecs->specs[(int)ds_const])
8715     type_quals |= TYPE_QUAL_CONST;
8716   if (declspecs->specs[(int)ds_volatile])
8717     type_quals |= TYPE_QUAL_VOLATILE;
8718   if (declspecs->specs[(int)ds_restrict])
8719     type_quals |= TYPE_QUAL_RESTRICT;
8720   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8721     error ("qualifiers are not allowed on declaration of %<operator %T%>",
8722            ctor_return_type);
8723
8724   type_quals |= cp_type_quals (type);
8725   type = cp_build_qualified_type_real
8726     (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8727                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8728   /* We might have ignored or rejected some of the qualifiers.  */
8729   type_quals = cp_type_quals (type);
8730
8731   staticp = 0;
8732   inlinep = !! declspecs->specs[(int)ds_inline];
8733   virtualp = !! declspecs->specs[(int)ds_virtual];
8734   explicitp = !! declspecs->specs[(int)ds_explicit];
8735
8736   storage_class = declspecs->storage_class;
8737   if (storage_class == sc_static)
8738     staticp = 1 + (decl_context == FIELD);
8739
8740   if (virtualp && staticp == 2)
8741     {
8742       error ("member %qD cannot be declared both virtual and static", dname);
8743       storage_class = sc_none;
8744       staticp = 0;
8745     }
8746   friendp = !! declspecs->specs[(int)ds_friend];
8747
8748   if (dependent_name && !friendp)
8749     {
8750       error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8751       return error_mark_node;
8752     }
8753
8754   /* Issue errors about use of storage classes for parameters.  */
8755   if (decl_context == PARM)
8756     {
8757       if (declspecs->specs[(int)ds_typedef])
8758         {
8759           error ("typedef declaration invalid in parameter declaration");
8760           return error_mark_node;
8761         }
8762       else if (template_parm_flag && storage_class != sc_none)
8763         {
8764           error ("storage class specified for template parameter %qs", name);
8765           return error_mark_node;
8766         }
8767       else if (storage_class == sc_static
8768                || storage_class == sc_extern
8769                || thread_p)
8770         error ("storage class specifiers invalid in parameter declarations");
8771
8772       /* Function parameters cannot be constexpr.  If we saw one, moan
8773          and pretend it wasn't there.  */
8774       if (constexpr_p)
8775         {
8776           error ("a parameter cannot be declared %<constexpr%>");
8777           constexpr_p = 0;
8778         }
8779     }
8780
8781   /* Give error if `virtual' is used outside of class declaration.  */
8782   if (virtualp
8783       && (current_class_name == NULL_TREE || decl_context != FIELD))
8784     {
8785       error ("%<virtual%> outside class declaration");
8786       virtualp = 0;
8787     }
8788
8789   /* Static anonymous unions are dealt with here.  */
8790   if (staticp && decl_context == TYPENAME
8791       && declspecs->type
8792       && ANON_AGGR_TYPE_P (declspecs->type))
8793     decl_context = FIELD;
8794
8795   /* Warn about storage classes that are invalid for certain
8796      kinds of declarations (parameters, typenames, etc.).  */
8797   if (thread_p
8798       && ((storage_class
8799            && storage_class != sc_extern
8800            && storage_class != sc_static)
8801           || declspecs->specs[(int)ds_typedef]))
8802     {
8803       error ("multiple storage classes in declaration of %qs", name);
8804       thread_p = false;
8805     }
8806   if (decl_context != NORMAL
8807       && ((storage_class != sc_none
8808            && storage_class != sc_mutable)
8809           || thread_p))
8810     {
8811       if ((decl_context == PARM || decl_context == CATCHPARM)
8812           && (storage_class == sc_register
8813               || storage_class == sc_auto))
8814         ;
8815       else if (declspecs->specs[(int)ds_typedef])
8816         ;
8817       else if (decl_context == FIELD
8818                /* C++ allows static class elements.  */
8819                && storage_class == sc_static)
8820         /* C++ also allows inlines and signed and unsigned elements,
8821            but in those cases we don't come in here.  */
8822         ;
8823       else
8824         {
8825           if (decl_context == FIELD)
8826             error ("storage class specified for %qs", name);
8827           else
8828             {
8829               if (decl_context == PARM || decl_context == CATCHPARM)
8830                 error ("storage class specified for parameter %qs", name);
8831               else
8832                 error ("storage class specified for typename");
8833             }
8834           if (storage_class == sc_register
8835               || storage_class == sc_auto
8836               || storage_class == sc_extern
8837               || thread_p)
8838             storage_class = sc_none;
8839         }
8840     }
8841   else if (storage_class == sc_extern && funcdef_flag
8842            && ! toplevel_bindings_p ())
8843     error ("nested function %qs declared %<extern%>", name);
8844   else if (toplevel_bindings_p ())
8845     {
8846       if (storage_class == sc_auto)
8847         error ("top-level declaration of %qs specifies %<auto%>", name);
8848     }
8849   else if (thread_p
8850            && storage_class != sc_extern
8851            && storage_class != sc_static)
8852     {
8853       error ("function-scope %qs implicitly auto and declared %<__thread%>",
8854              name);
8855       thread_p = false;
8856     }
8857
8858   if (storage_class && friendp)
8859     {
8860       error ("storage class specifiers invalid in friend function declarations");
8861       storage_class = sc_none;
8862       staticp = 0;
8863     }
8864
8865   if (!id_declarator)
8866     unqualified_id = NULL_TREE;
8867   else
8868     {
8869       unqualified_id = id_declarator->u.id.unqualified_name;
8870       switch (TREE_CODE (unqualified_id))
8871         {
8872         case BIT_NOT_EXPR:
8873           unqualified_id = TREE_OPERAND (unqualified_id, 0);
8874           if (TYPE_P (unqualified_id))
8875             unqualified_id = constructor_name (unqualified_id);
8876           break;
8877
8878         case IDENTIFIER_NODE:
8879         case TEMPLATE_ID_EXPR:
8880           break;
8881
8882         default:
8883           gcc_unreachable ();
8884         }
8885     }
8886
8887   /* Determine the type of the entity declared by recurring on the
8888      declarator.  */
8889   for (; declarator; declarator = declarator->declarator)
8890     {
8891       const cp_declarator *inner_declarator;
8892       tree attrs;
8893
8894       if (type == error_mark_node)
8895         return error_mark_node;
8896
8897       attrs = declarator->attributes;
8898       if (attrs)
8899         {
8900           int attr_flags;
8901
8902           attr_flags = 0;
8903           if (declarator == NULL || declarator->kind == cdk_id)
8904             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8905           if (declarator->kind == cdk_function)
8906             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8907           if (declarator->kind == cdk_array)
8908             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8909           returned_attrs = decl_attributes (&type,
8910                                             chainon (returned_attrs, attrs),
8911                                             attr_flags);
8912         }
8913
8914       if (declarator->kind == cdk_id)
8915         break;
8916
8917       inner_declarator = declarator->declarator;
8918
8919       switch (declarator->kind)
8920         {
8921         case cdk_array:
8922           type = create_array_type_for_decl (dname, type,
8923                                              declarator->u.array.bounds);
8924           break;
8925
8926         case cdk_function:
8927           {
8928             tree arg_types;
8929             int funcdecl_p;
8930
8931             /* Declaring a function type.
8932                Make sure we have a valid type for the function to return.  */
8933
8934             if (type_quals != TYPE_UNQUALIFIED)
8935               {
8936                 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
8937                   warning (OPT_Wignored_qualifiers,
8938                            "type qualifiers ignored on function return type");
8939                 /* We now know that the TYPE_QUALS don't apply to the
8940                    decl, but to its return type.  */
8941                 type_quals = TYPE_UNQUALIFIED;
8942               }
8943             errmsg = targetm.invalid_return_type (type);
8944             if (errmsg)
8945               {
8946                 error (errmsg);
8947                 type = integer_type_node;
8948               }
8949
8950             /* Error about some types functions can't return.  */
8951
8952             if (TREE_CODE (type) == FUNCTION_TYPE)
8953               {
8954                 error ("%qs declared as function returning a function", name);
8955                 return error_mark_node;
8956               }
8957             if (TREE_CODE (type) == ARRAY_TYPE)
8958               {
8959                 error ("%qs declared as function returning an array", name);
8960                 return error_mark_node;
8961               }
8962
8963             /* Pick up type qualifiers which should be applied to `this'.  */
8964             memfn_quals = declarator->u.function.qualifiers;
8965             /* Pick up virt-specifiers.  */
8966             virt_specifiers = declarator->u.function.virt_specifiers;
8967             /* Pick up the exception specifications.  */
8968             raises = declarator->u.function.exception_specification;
8969
8970             /* Say it's a definition only for the CALL_EXPR
8971                closest to the identifier.  */
8972             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
8973
8974             /* Handle a late-specified return type.  */
8975             if (funcdecl_p)
8976               {
8977                 if (type_uses_auto (type))
8978                   {
8979                     if (!declarator->u.function.late_return_type)
8980                       {
8981                         error ("%qs function uses %<auto%> type specifier without"
8982                                " late return type", name);
8983                         return error_mark_node;
8984                       }
8985                     else if (!is_auto (type))
8986                       {
8987                         error ("%qs function with late return type has"
8988                                " %qT as its type rather than plain %<auto%>",
8989                                name, type);
8990                         return error_mark_node;
8991                       }
8992                   }
8993                 else if (declarator->u.function.late_return_type)
8994                   {
8995                     error ("%qs function with late return type not declared"
8996                            " with %<auto%> type specifier", name);
8997                     return error_mark_node;
8998                   }
8999               }
9000             type = splice_late_return_type
9001               (type, declarator->u.function.late_return_type);
9002             if (type == error_mark_node)
9003               return error_mark_node;
9004
9005             if (ctype == NULL_TREE
9006                 && decl_context == FIELD
9007                 && funcdecl_p
9008                 && (friendp == 0 || dname == current_class_name))
9009               ctype = current_class_type;
9010
9011             if (ctype && (sfk == sfk_constructor
9012                           || sfk == sfk_destructor))
9013               {
9014                 /* We are within a class's scope. If our declarator name
9015                    is the same as the class name, and we are defining
9016                    a function, then it is a constructor/destructor, and
9017                    therefore returns a void type.  */
9018
9019                 /* ISO C++ 12.4/2.  A destructor may not be declared
9020                    const or volatile.  A destructor may not be
9021                    static.
9022
9023                    ISO C++ 12.1.  A constructor may not be declared
9024                    const or volatile.  A constructor may not be
9025                    virtual.  A constructor may not be static.  */
9026                 if (staticp == 2)
9027                   error ((flags == DTOR_FLAG)
9028                          ? "destructor cannot be static member function"
9029                          : "constructor cannot be static member function");
9030                 if (memfn_quals)
9031                   {
9032                     error ((flags == DTOR_FLAG)
9033                            ? "destructors may not be cv-qualified"
9034                            : "constructors may not be cv-qualified");
9035                     memfn_quals = TYPE_UNQUALIFIED;
9036                   }
9037
9038                 if (decl_context == FIELD
9039                     && !member_function_or_else (ctype,
9040                                                  current_class_type,
9041                                                  flags))
9042                   return error_mark_node;
9043
9044                 if (flags != DTOR_FLAG)
9045                   {
9046                     /* It's a constructor.  */
9047                     if (explicitp == 1)
9048                       explicitp = 2;
9049                     if (virtualp)
9050                       {
9051                         permerror (input_location, "constructors cannot be declared virtual");
9052                         virtualp = 0;
9053                       }
9054                     if (decl_context == FIELD
9055                         && sfk != sfk_constructor)
9056                       return error_mark_node;
9057                   }
9058                 if (decl_context == FIELD)
9059                   staticp = 0;
9060               }
9061             else if (friendp)
9062               {
9063                 if (initialized)
9064                   error ("can%'t initialize friend function %qs", name);
9065                 if (virtualp)
9066                   {
9067                     /* Cannot be both friend and virtual.  */
9068                     error ("virtual functions cannot be friends");
9069                     friendp = 0;
9070                   }
9071                 if (decl_context == NORMAL)
9072                   error ("friend declaration not in class definition");
9073                 if (current_function_decl && funcdef_flag)
9074                   error ("can%'t define friend function %qs in a local "
9075                          "class definition",
9076                          name);
9077               }
9078             else if (ctype && sfk == sfk_conversion)
9079               {
9080                 if (explicitp == 1)
9081                   {
9082                     maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9083                     explicitp = 2;
9084                   }
9085               }
9086
9087             arg_types = grokparms (declarator->u.function.parameters,
9088                                    &parms);
9089
9090             if (inner_declarator
9091                 && inner_declarator->kind == cdk_id
9092                 && inner_declarator->u.id.sfk == sfk_destructor
9093                 && arg_types != void_list_node)
9094               {
9095                 error ("destructors may not have parameters");
9096                 arg_types = void_list_node;
9097                 parms = NULL_TREE;
9098               }
9099
9100             type = build_function_type (type, arg_types);
9101           }
9102           break;
9103
9104         case cdk_pointer:
9105         case cdk_reference:
9106         case cdk_ptrmem:
9107           /* Filter out pointers-to-references and references-to-references.
9108              We can get these if a TYPE_DECL is used.  */
9109
9110           if (TREE_CODE (type) == REFERENCE_TYPE)
9111             {
9112               if (declarator->kind != cdk_reference)
9113                 {
9114                   error ("cannot declare pointer to %q#T", type);
9115                   type = TREE_TYPE (type);
9116                 }
9117
9118               /* In C++0x, we allow reference to reference declarations
9119                  that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9120                  and template type arguments [14.3.1/4 temp.arg.type]. The
9121                  check for direct reference to reference declarations, which
9122                  are still forbidden, occurs below. Reasoning behind the change
9123                  can be found in DR106, DR540, and the rvalue reference
9124                  proposals. */
9125               else if (cxx_dialect == cxx98)
9126                 {
9127                   error ("cannot declare reference to %q#T", type);
9128                   type = TREE_TYPE (type);
9129                 }
9130             }
9131           else if (VOID_TYPE_P (type))
9132             {
9133               if (declarator->kind == cdk_reference)
9134                 error ("cannot declare reference to %q#T", type);
9135               else if (declarator->kind == cdk_ptrmem)
9136                 error ("cannot declare pointer to %q#T member", type);
9137             }
9138
9139           /* We now know that the TYPE_QUALS don't apply to the decl,
9140              but to the target of the pointer.  */
9141           type_quals = TYPE_UNQUALIFIED;
9142
9143           if (declarator->kind == cdk_ptrmem
9144               && (TREE_CODE (type) == FUNCTION_TYPE
9145                   || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
9146             {
9147               memfn_quals |= type_memfn_quals (type);
9148               type = build_memfn_type (type,
9149                                        declarator->u.pointer.class_type,
9150                                        memfn_quals);
9151               if (type == error_mark_node)
9152                 return error_mark_node;
9153               memfn_quals = TYPE_UNQUALIFIED;
9154             }
9155
9156           if (TREE_CODE (type) == FUNCTION_TYPE
9157               && type_memfn_quals (type) != TYPE_UNQUALIFIED)
9158             error (declarator->kind == cdk_reference
9159                    ? G_("cannot declare reference to qualified function type %qT")
9160                    : G_("cannot declare pointer to qualified function type %qT"),
9161                    type);
9162
9163           /* When the pointed-to type involves components of variable size,
9164              care must be taken to ensure that the size evaluation code is
9165              emitted early enough to dominate all the possible later uses
9166              and late enough for the variables on which it depends to have
9167              been assigned.
9168
9169              This is expected to happen automatically when the pointed-to
9170              type has a name/declaration of it's own, but special attention
9171              is required if the type is anonymous.
9172
9173              We handle the NORMAL and FIELD contexts here by inserting a
9174              dummy statement that just evaluates the size at a safe point
9175              and ensures it is not deferred until e.g. within a deeper
9176              conditional context (c++/43555).
9177
9178              We expect nothing to be needed here for PARM or TYPENAME.
9179              Evaluating the size at this point for TYPENAME would
9180              actually be incorrect, as we might be in the middle of an
9181              expression with side effects on the pointed-to type size
9182              "arguments" prior to the pointer declaration point and the
9183              size evaluation could end up prior to the side effects.  */
9184
9185           if (!TYPE_NAME (type)
9186               && (decl_context == NORMAL || decl_context == FIELD)
9187               && at_function_scope_p ()
9188               && variably_modified_type_p (type, NULL_TREE))
9189             {
9190               /* First break out any side-effects.  */
9191               stabilize_vla_size (TYPE_SIZE (type));
9192               /* And then force evaluation of the SAVE_EXPR.  */
9193               finish_expr_stmt (TYPE_SIZE (type));
9194             }
9195
9196           if (declarator->kind == cdk_reference)
9197             {
9198               /* In C++0x, the type we are creating a reference to might be
9199                  a typedef which is itself a reference type. In that case,
9200                  we follow the reference collapsing rules in
9201                  [7.1.3/8 dcl.typedef] to create the final reference type:
9202
9203                  "If a typedef TD names a type that is a reference to a type
9204                  T, an attempt to create the type 'lvalue reference to cv TD'
9205                  creates the type 'lvalue reference to T,' while an attempt
9206                  to create the type "rvalue reference to cv TD' creates the
9207                  type TD."
9208               */
9209               if (VOID_TYPE_P (type))
9210                 /* We already gave an error.  */;
9211               else if (TREE_CODE (type) == REFERENCE_TYPE)
9212                 {
9213                   if (declarator->u.reference.rvalue_ref)
9214                     /* Leave type alone.  */;
9215                   else
9216                     type = cp_build_reference_type (TREE_TYPE (type), false);
9217                 }
9218               else
9219                 type = cp_build_reference_type
9220                   (type, declarator->u.reference.rvalue_ref);
9221
9222               /* In C++0x, we need this check for direct reference to
9223                  reference declarations, which are forbidden by
9224                  [8.3.2/5 dcl.ref]. Reference to reference declarations
9225                  are only allowed indirectly through typedefs and template
9226                  type arguments. Example:
9227
9228                    void foo(int & &);      // invalid ref-to-ref decl
9229
9230                    typedef int & int_ref;
9231                    void foo(int_ref &);    // valid ref-to-ref decl
9232               */
9233               if (inner_declarator && inner_declarator->kind == cdk_reference)
9234                 error ("cannot declare reference to %q#T, which is not "
9235                        "a typedef or a template type argument", type);
9236             }
9237           else if (TREE_CODE (type) == METHOD_TYPE)
9238             type = build_ptrmemfunc_type (build_pointer_type (type));
9239           else if (declarator->kind == cdk_ptrmem)
9240             {
9241               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
9242                           != NAMESPACE_DECL);
9243               if (declarator->u.pointer.class_type == error_mark_node)
9244                 /* We will already have complained.  */
9245                 type = error_mark_node;
9246               else
9247                 type = build_ptrmem_type (declarator->u.pointer.class_type,
9248                                           type);
9249             }
9250           else
9251             type = build_pointer_type (type);
9252
9253           /* Process a list of type modifier keywords (such as
9254              const or volatile) that were given inside the `*' or `&'.  */
9255
9256           if (declarator->u.pointer.qualifiers)
9257             {
9258               type
9259                 = cp_build_qualified_type (type,
9260                                            declarator->u.pointer.qualifiers);
9261               type_quals = cp_type_quals (type);
9262             }
9263           ctype = NULL_TREE;
9264           break;
9265
9266         case cdk_error:
9267           break;
9268
9269         default:
9270           gcc_unreachable ();
9271         }
9272     }
9273
9274   /* We need to stabilize side-effects in VLA sizes for regular array
9275      declarations too, not just pointers to arrays.  */
9276   if (type != error_mark_node && !TYPE_NAME (type)
9277       && (decl_context == NORMAL || decl_context == FIELD)
9278       && at_function_scope_p ()
9279       && variably_modified_type_p (type, NULL_TREE))
9280     stabilize_vla_size (TYPE_SIZE (type));
9281
9282   /* A `constexpr' specifier used in an object declaration declares
9283      the object as `const'.  */
9284   if (constexpr_p && innermost_code != cdk_function)
9285     {
9286       if (type_quals & TYPE_QUAL_CONST)
9287         error ("both %<const%> and %<constexpr%> cannot be used here");
9288       if (type_quals & TYPE_QUAL_VOLATILE)
9289         error ("both %<volatile%> and %<constexpr%> cannot be used here");
9290       type_quals |= TYPE_QUAL_CONST;
9291       type = cp_build_qualified_type (type, type_quals);
9292     }
9293
9294   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
9295       && TREE_CODE (type) != FUNCTION_TYPE
9296       && TREE_CODE (type) != METHOD_TYPE)
9297     {
9298       error ("template-id %qD used as a declarator",
9299              unqualified_id);
9300       unqualified_id = dname;
9301     }
9302
9303   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
9304      qualified with a class-name, turn it into a METHOD_TYPE, unless
9305      we know that the function is static.  We take advantage of this
9306      opportunity to do other processing that pertains to entities
9307      explicitly declared to be class members.  Note that if DECLARATOR
9308      is non-NULL, we know it is a cdk_id declarator; otherwise, we
9309      would not have exited the loop above.  */
9310   if (declarator
9311       && declarator->u.id.qualifying_scope
9312       && TYPE_P (declarator->u.id.qualifying_scope))
9313     {
9314       tree t;
9315
9316       ctype = declarator->u.id.qualifying_scope;
9317       ctype = TYPE_MAIN_VARIANT (ctype);
9318       t = ctype;
9319       while (t != NULL_TREE && CLASS_TYPE_P (t))
9320         {
9321           /* You're supposed to have one `template <...>' for every
9322              template class, but you don't need one for a full
9323              specialization.  For example:
9324
9325                template <class T> struct S{};
9326                template <> struct S<int> { void f(); };
9327                void S<int>::f () {}
9328
9329              is correct; there shouldn't be a `template <>' for the
9330              definition of `S<int>::f'.  */
9331           if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
9332               && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
9333             /* T is an explicit (not partial) specialization.  All
9334                containing classes must therefore also be explicitly
9335                specialized.  */
9336             break;
9337           if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
9338               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
9339             template_count += 1;
9340
9341           t = TYPE_MAIN_DECL (t);
9342           t = DECL_CONTEXT (t);
9343         }
9344
9345       if (ctype == current_class_type)
9346         {
9347           if (friendp)
9348             {
9349               permerror (input_location, "member functions are implicitly friends of their class");
9350               friendp = 0;
9351             }
9352           else
9353             permerror (declarator->id_loc, 
9354                           "extra qualification %<%T::%> on member %qs",
9355                           ctype, name);
9356         }
9357       else if (/* If the qualifying type is already complete, then we
9358                   can skip the following checks.  */
9359                !COMPLETE_TYPE_P (ctype)
9360                && (/* If the function is being defined, then
9361                       qualifying type must certainly be complete.  */
9362                    funcdef_flag
9363                    /* A friend declaration of "T::f" is OK, even if
9364                       "T" is a template parameter.  But, if this
9365                       function is not a friend, the qualifying type
9366                       must be a class.  */
9367                    || (!friendp && !CLASS_TYPE_P (ctype))
9368                    /* For a declaration, the type need not be
9369                       complete, if either it is dependent (since there
9370                       is no meaningful definition of complete in that
9371                       case) or the qualifying class is currently being
9372                       defined.  */
9373                    || !(dependent_type_p (ctype)
9374                         || currently_open_class (ctype)))
9375                /* Check that the qualifying type is complete.  */
9376                && !complete_type_or_else (ctype, NULL_TREE))
9377         return error_mark_node;
9378       else if (TREE_CODE (type) == FUNCTION_TYPE)
9379         {
9380           if (current_class_type
9381               && (!friendp || funcdef_flag))
9382             {
9383               error (funcdef_flag
9384                      ? "cannot define member function %<%T::%s%> within %<%T%>"
9385                      : "cannot declare member function %<%T::%s%> within %<%T%>",
9386                      ctype, name, current_class_type);
9387               return error_mark_node;
9388             }
9389         }
9390       else if (declspecs->specs[(int)ds_typedef]
9391                && current_class_type)
9392         {
9393           error ("cannot declare member %<%T::%s%> within %qT",
9394                  ctype, name, current_class_type);
9395           return error_mark_node;
9396         }
9397     }
9398
9399   if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
9400     ctype = current_class_type;
9401
9402   /* Now TYPE has the actual type.  */
9403
9404   if (returned_attrs)
9405     {
9406       if (attrlist)
9407         *attrlist = chainon (returned_attrs, *attrlist);
9408       else
9409         attrlist = &returned_attrs;
9410     }
9411
9412   /* Handle parameter packs. */
9413   if (parameter_pack_p)
9414     {
9415       if (decl_context == PARM)
9416         /* Turn the type into a pack expansion.*/
9417         type = make_pack_expansion (type);
9418       else
9419         error ("non-parameter %qs cannot be a parameter pack", name);
9420     }
9421
9422   /* Did array size calculations overflow?  */
9423
9424   if (TREE_CODE (type) == ARRAY_TYPE
9425       && COMPLETE_TYPE_P (type)
9426       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
9427       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
9428     {
9429       error ("size of array %qs is too large", name);
9430       /* If we proceed with the array type as it is, we'll eventually
9431          crash in tree_low_cst().  */
9432       type = error_mark_node;
9433     }
9434
9435   if ((decl_context == FIELD || decl_context == PARM)
9436       && !processing_template_decl
9437       && variably_modified_type_p (type, NULL_TREE))
9438     {
9439       if (decl_context == FIELD)
9440         error ("data member may not have variably modified type %qT", type);
9441       else
9442         error ("parameter may not have variably modified type %qT", type);
9443       type = error_mark_node;
9444     }
9445
9446   if (explicitp == 1 || (explicitp && friendp))
9447     {
9448       /* [dcl.fct.spec] The explicit specifier shall only be used in
9449          declarations of constructors within a class definition.  */
9450       error ("only declarations of constructors can be %<explicit%>");
9451       explicitp = 0;
9452     }
9453
9454   if (storage_class == sc_mutable)
9455     {
9456       if (decl_context != FIELD || friendp)
9457         {
9458           error ("non-member %qs cannot be declared %<mutable%>", name);
9459           storage_class = sc_none;
9460         }
9461       else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
9462         {
9463           error ("non-object member %qs cannot be declared %<mutable%>", name);
9464           storage_class = sc_none;
9465         }
9466       else if (TREE_CODE (type) == FUNCTION_TYPE
9467                || TREE_CODE (type) == METHOD_TYPE)
9468         {
9469           error ("function %qs cannot be declared %<mutable%>", name);
9470           storage_class = sc_none;
9471         }
9472       else if (staticp)
9473         {
9474           error ("static %qs cannot be declared %<mutable%>", name);
9475           storage_class = sc_none;
9476         }
9477       else if (type_quals & TYPE_QUAL_CONST)
9478         {
9479           error ("const %qs cannot be declared %<mutable%>", name);
9480           storage_class = sc_none;
9481         }
9482       else if (TREE_CODE (type) == REFERENCE_TYPE)
9483         {
9484           permerror (input_location, "reference %qs cannot be declared "
9485                      "%<mutable%>", name);
9486           storage_class = sc_none;
9487         }
9488     }
9489
9490   /* If this is declaring a typedef name, return a TYPE_DECL.  */
9491   if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
9492     {
9493       tree decl;
9494
9495       /* Note that the grammar rejects storage classes
9496          in typenames, fields or parameters.  */
9497       if (current_lang_name == lang_name_java)
9498         TYPE_FOR_JAVA (type) = 1;
9499
9500       /* This declaration:
9501
9502            typedef void f(int) const;
9503
9504          declares a function type which is not a member of any
9505          particular class, but which is cv-qualified; for
9506          example "f S::*" declares a pointer to a const-qualified
9507          member function of S.  We record the cv-qualification in the
9508          function type.  */
9509       if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
9510         {
9511           type = apply_memfn_quals (type, memfn_quals);
9512           
9513           /* We have now dealt with these qualifiers.  */
9514           memfn_quals = TYPE_UNQUALIFIED;
9515         }
9516
9517       if (type_uses_auto (type))
9518         {
9519           error ("typedef declared %<auto%>");
9520           type = error_mark_node;
9521         }
9522
9523       if (decl_context == FIELD)
9524         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
9525       else
9526         decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
9527       if (id_declarator && declarator->u.id.qualifying_scope) {
9528         error_at (DECL_SOURCE_LOCATION (decl), 
9529                   "typedef name may not be a nested-name-specifier");
9530         TREE_TYPE (decl) = error_mark_node;
9531       }
9532
9533       if (decl_context != FIELD)
9534         {
9535           if (!current_function_decl)
9536             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
9537           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
9538                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
9539                        (current_function_decl)))
9540             /* The TYPE_DECL is "abstract" because there will be
9541                clones of this constructor/destructor, and there will
9542                be copies of this TYPE_DECL generated in those
9543                clones.  */
9544             DECL_ABSTRACT (decl) = 1;
9545         }
9546       else if (constructor_name_p (unqualified_id, current_class_type))
9547         permerror (input_location, "ISO C++ forbids nested type %qD with same name "
9548                    "as enclosing class",
9549                    unqualified_id);
9550
9551       /* If the user declares "typedef struct {...} foo" then the
9552          struct will have an anonymous name.  Fill that name in now.
9553          Nothing can refer to it, so nothing needs know about the name
9554          change.  */
9555       if (type != error_mark_node
9556           && unqualified_id
9557           && TYPE_NAME (type)
9558           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9559           && TYPE_ANONYMOUS_P (type)
9560           && cp_type_quals (type) == TYPE_UNQUALIFIED)
9561         {
9562           tree t;
9563
9564           /* Replace the anonymous name with the real name everywhere.  */
9565           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9566             {
9567               if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9568                 /* We do not rename the debug info representing the
9569                    anonymous tagged type because the standard says in
9570                    [dcl.typedef] that the naming applies only for
9571                    linkage purposes.  */
9572                 /*debug_hooks->set_name (t, decl);*/
9573                 TYPE_NAME (t) = decl;
9574             }
9575
9576           if (TYPE_LANG_SPECIFIC (type))
9577             TYPE_WAS_ANONYMOUS (type) = 1;
9578
9579           /* If this is a typedef within a template class, the nested
9580              type is a (non-primary) template.  The name for the
9581              template needs updating as well.  */
9582           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9583             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9584               = TYPE_IDENTIFIER (type);
9585
9586           /* Adjust linkage now that we aren't anonymous anymore.  */
9587           set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
9588           determine_visibility (TYPE_MAIN_DECL (type));
9589
9590           /* FIXME remangle member functions; member functions of a
9591              type with external linkage have external linkage.  */
9592         }
9593
9594       if (signed_p
9595           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9596         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9597
9598       bad_specifiers (decl, BSP_TYPE, virtualp,
9599                       memfn_quals != TYPE_UNQUALIFIED,
9600                       inlinep, friendp, raises != NULL_TREE);
9601
9602       return decl;
9603     }
9604
9605   /* Detect the case of an array type of unspecified size
9606      which came, as such, direct from a typedef name.
9607      We must copy the type, so that the array's domain can be
9608      individually set by the object's initializer.  */
9609
9610   if (type && typedef_type
9611       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
9612       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
9613     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
9614
9615   /* Detect where we're using a typedef of function type to declare a
9616      function. PARMS will not be set, so we must create it now.  */
9617
9618   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
9619     {
9620       tree decls = NULL_TREE;
9621       tree args;
9622
9623       for (args = TYPE_ARG_TYPES (type);
9624            args && args != void_list_node;
9625            args = TREE_CHAIN (args))
9626         {
9627           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
9628
9629           DECL_CHAIN (decl) = decls;
9630           decls = decl;
9631         }
9632
9633       parms = nreverse (decls);
9634
9635       if (decl_context != TYPENAME)
9636         {
9637           /* A cv-qualifier-seq shall only be part of the function type
9638              for a non-static member function. [8.3.5/4 dcl.fct] */
9639           if (type_memfn_quals (type) != TYPE_UNQUALIFIED
9640               && (current_class_type == NULL_TREE || staticp) )
9641             {
9642               error (staticp
9643                      ? G_("qualified function types cannot be used to "
9644                           "declare static member functions")
9645                      : G_("qualified function types cannot be used to "
9646                           "declare free functions"));
9647               type = TYPE_MAIN_VARIANT (type);
9648             }
9649
9650           /* The qualifiers on the function type become the qualifiers on
9651              the non-static member function. */
9652           memfn_quals |= type_memfn_quals (type);
9653           type_quals = TYPE_UNQUALIFIED;
9654         }
9655     }
9656
9657   /* If this is a type name (such as, in a cast or sizeof),
9658      compute the type and return it now.  */
9659
9660   if (decl_context == TYPENAME)
9661     {
9662       /* Note that the grammar rejects storage classes
9663          in typenames, fields or parameters.  */
9664       if (type_quals != TYPE_UNQUALIFIED)
9665         type_quals = TYPE_UNQUALIFIED;
9666
9667       /* Special case: "friend class foo" looks like a TYPENAME context.  */
9668       if (friendp)
9669         {
9670           if (type_quals != TYPE_UNQUALIFIED)
9671             {
9672               error ("type qualifiers specified for friend class declaration");
9673               type_quals = TYPE_UNQUALIFIED;
9674             }
9675           if (inlinep)
9676             {
9677               error ("%<inline%> specified for friend class declaration");
9678               inlinep = 0;
9679             }
9680
9681           if (!current_aggr)
9682             {
9683               /* Don't allow friend declaration without a class-key.  */
9684               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9685                 permerror (input_location, "template parameters cannot be friends");
9686               else if (TREE_CODE (type) == TYPENAME_TYPE)
9687                 permerror (input_location, "friend declaration requires class-key, "
9688                            "i.e. %<friend class %T::%D%>",
9689                            TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
9690               else
9691                 permerror (input_location, "friend declaration requires class-key, "
9692                            "i.e. %<friend %#T%>",
9693                            type);
9694             }
9695
9696           /* Only try to do this stuff if we didn't already give up.  */
9697           if (type != integer_type_node)
9698             {
9699               /* A friendly class?  */
9700               if (current_class_type)
9701                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9702                                    /*complain=*/true);
9703               else
9704                 error ("trying to make class %qT a friend of global scope",
9705                        type);
9706
9707               type = void_type_node;
9708             }
9709         }
9710       else if (memfn_quals)
9711         {
9712           if (ctype == NULL_TREE
9713               && TREE_CODE (type) == METHOD_TYPE)
9714             ctype = TYPE_METHOD_BASETYPE (type);
9715
9716           if (ctype)
9717             type = build_memfn_type (type, ctype, memfn_quals);
9718           /* Core issue #547: need to allow this in template type args.  */
9719           else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9720             type = apply_memfn_quals (type, memfn_quals);
9721           else
9722             error ("invalid qualifiers on non-member function type");
9723         }
9724
9725       return type;
9726     }
9727   else if (unqualified_id == NULL_TREE && decl_context != PARM
9728            && decl_context != CATCHPARM
9729            && TREE_CODE (type) != UNION_TYPE
9730            && ! bitfield)
9731     {
9732       error ("abstract declarator %qT used as declaration", type);
9733       return error_mark_node;
9734     }
9735
9736   /* Only functions may be declared using an operator-function-id.  */
9737   if (unqualified_id
9738       && IDENTIFIER_OPNAME_P (unqualified_id)
9739       && TREE_CODE (type) != FUNCTION_TYPE
9740       && TREE_CODE (type) != METHOD_TYPE)
9741     {
9742       error ("declaration of %qD as non-function", unqualified_id);
9743       return error_mark_node;
9744     }
9745
9746   /* We don't check parameter types here because we can emit a better
9747      error message later.  */
9748   if (decl_context != PARM)
9749     {
9750       type = check_var_type (unqualified_id, type);
9751       if (type == error_mark_node)
9752         return error_mark_node;
9753     }
9754
9755   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9756      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
9757
9758   if (decl_context == PARM || decl_context == CATCHPARM)
9759     {
9760       if (ctype || in_namespace)
9761         error ("cannot use %<::%> in parameter declaration");
9762
9763       if (type_uses_auto (type))
9764         {
9765           error ("parameter declared %<auto%>");
9766           type = error_mark_node;
9767         }
9768
9769       /* A parameter declared as an array of T is really a pointer to T.
9770          One declared as a function is really a pointer to a function.
9771          One declared as a member is really a pointer to member.  */
9772
9773       if (TREE_CODE (type) == ARRAY_TYPE)
9774         {
9775           /* Transfer const-ness of array into that of type pointed to.  */
9776           type = build_pointer_type (TREE_TYPE (type));
9777           type_quals = TYPE_UNQUALIFIED;
9778         }
9779       else if (TREE_CODE (type) == FUNCTION_TYPE)
9780         type = build_pointer_type (type);
9781     }
9782
9783   if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9784       && !NEW_DELETE_OPNAME_P (unqualified_id))
9785     {
9786       cp_cv_quals real_quals = memfn_quals;
9787       if (constexpr_p && sfk != sfk_constructor && sfk != sfk_destructor)
9788         real_quals |= TYPE_QUAL_CONST;
9789       type = build_memfn_type (type, ctype, real_quals);
9790     }
9791
9792   {
9793     tree decl;
9794
9795     if (decl_context == PARM)
9796       {
9797         decl = cp_build_parm_decl (unqualified_id, type);
9798
9799         bad_specifiers (decl, BSP_PARM, virtualp,
9800                         memfn_quals != TYPE_UNQUALIFIED,
9801                         inlinep, friendp, raises != NULL_TREE);
9802       }
9803     else if (decl_context == FIELD)
9804       {
9805         /* The C99 flexible array extension.  */
9806         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
9807             && TYPE_DOMAIN (type) == NULL_TREE)
9808           {
9809             tree itype = compute_array_index_type (dname, integer_zero_node,
9810                                                    tf_warning_or_error);
9811             type = build_cplus_array_type (TREE_TYPE (type), itype);
9812           }
9813
9814         if (type == error_mark_node)
9815           {
9816             /* Happens when declaring arrays of sizes which
9817                are error_mark_node, for example.  */
9818             decl = NULL_TREE;
9819           }
9820         else if (in_namespace && !friendp)
9821           {
9822             /* Something like struct S { int N::j; };  */
9823             error ("invalid use of %<::%>");
9824             return error_mark_node;
9825           }
9826         else if (TREE_CODE (type) == FUNCTION_TYPE
9827                  || TREE_CODE (type) == METHOD_TYPE)
9828           {
9829             int publicp = 0;
9830             tree function_context;
9831
9832             if (friendp == 0)
9833               {
9834                 /* This should never happen in pure C++ (the check
9835                    could be an assert).  It could happen in
9836                    Objective-C++ if someone writes invalid code that
9837                    uses a function declaration for an instance
9838                    variable or property (instance variables and
9839                    properties are parsed as FIELD_DECLs, but they are
9840                    part of an Objective-C class, not a C++ class).
9841                    That code is invalid and is caught by this
9842                    check.  */
9843                 if (!ctype)
9844                   {
9845                     error ("declaration of function %qD in invalid context",
9846                            unqualified_id);
9847                     return error_mark_node;
9848                   }
9849
9850                 /* ``A union may [ ... ] not [ have ] virtual functions.''
9851                    ARM 9.5 */
9852                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9853                   {
9854                     error ("function %qD declared virtual inside a union",
9855                            unqualified_id);
9856                     return error_mark_node;
9857                   }
9858
9859                 if (NEW_DELETE_OPNAME_P (unqualified_id))
9860                   {
9861                     if (virtualp)
9862                       {
9863                         error ("%qD cannot be declared virtual, since it "
9864                                "is always static",
9865                                unqualified_id);
9866                         virtualp = 0;
9867                       }
9868                   }
9869               }
9870
9871             /* Check that the name used for a destructor makes sense.  */
9872             if (sfk == sfk_destructor)
9873               {
9874                 tree uqname = id_declarator->u.id.unqualified_name;
9875
9876                 if (!ctype)
9877                   {
9878                     gcc_assert (friendp);
9879                     error ("expected qualified name in friend declaration "
9880                            "for destructor %qD", uqname);
9881                     return error_mark_node;
9882                   }
9883
9884                 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
9885                   {
9886                     error ("declaration of %qD as member of %qT",
9887                            uqname, ctype);
9888                     return error_mark_node;
9889                   }
9890                 if (constexpr_p)
9891                   {
9892                     error ("a destructor cannot be %<constexpr%>");
9893                     return error_mark_node;
9894                   }
9895               }
9896             else if (sfk == sfk_constructor && friendp && !ctype)
9897               {
9898                 error ("expected qualified name in friend declaration "
9899                        "for constructor %qD",
9900                        id_declarator->u.id.unqualified_name);
9901                 return error_mark_node;
9902               }
9903
9904             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
9905             function_context = (ctype != NULL_TREE) ?
9906               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
9907             publicp = (! friendp || ! staticp)
9908               && function_context == NULL_TREE;
9909             decl = grokfndecl (ctype, type,
9910                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9911                                ? unqualified_id : dname,
9912                                parms,
9913                                unqualified_id,
9914                                virtualp, flags, memfn_quals, raises,
9915                                friendp ? -1 : 0, friendp, publicp,
9916                                inlinep | (2 * constexpr_p),
9917                                sfk,
9918                                funcdef_flag, template_count, in_namespace,
9919                                attrlist, declarator->id_loc);
9920             decl = set_virt_specifiers (decl, virt_specifiers);
9921             if (decl == NULL_TREE)
9922               return error_mark_node;
9923 #if 0
9924             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
9925             /* The decl and setting of decl_attr is also turned off.  */
9926             decl = build_decl_attribute_variant (decl, decl_attr);
9927 #endif
9928
9929             /* [class.conv.ctor]
9930
9931                A constructor declared without the function-specifier
9932                explicit that can be called with a single parameter
9933                specifies a conversion from the type of its first
9934                parameter to the type of its class.  Such a constructor
9935                is called a converting constructor.  */
9936             if (explicitp == 2)
9937               DECL_NONCONVERTING_P (decl) = 1;
9938           }
9939         else if (!staticp && !dependent_type_p (type)
9940                  && !COMPLETE_TYPE_P (complete_type (type))
9941                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9942           {
9943             if (unqualified_id)
9944               error ("field %qD has incomplete type", unqualified_id);
9945             else
9946               error ("name %qT has incomplete type", type);
9947
9948             /* If we're instantiating a template, tell them which
9949                instantiation made the field's type be incomplete.  */
9950             if (current_class_type
9951                 && TYPE_NAME (current_class_type)
9952                 && IDENTIFIER_TEMPLATE (current_class_name)
9953                 && declspecs->type
9954                 && declspecs->type == type)
9955               error ("  in instantiation of template %qT",
9956                      current_class_type);
9957
9958             return error_mark_node;
9959           }
9960         else
9961           {
9962             if (friendp)
9963               {
9964                 error ("%qE is neither function nor member function; "
9965                        "cannot be declared friend", unqualified_id);
9966                 friendp = 0;
9967               }
9968             decl = NULL_TREE;
9969           }
9970
9971         if (friendp)
9972           {
9973             /* Friends are treated specially.  */
9974             if (ctype == current_class_type)
9975               ;  /* We already issued a permerror.  */
9976             else if (decl && DECL_NAME (decl))
9977               {
9978                 if (template_class_depth (current_class_type) == 0)
9979                   {
9980                     decl = check_explicit_specialization
9981                       (unqualified_id, decl, template_count,
9982                        2 * funcdef_flag + 4);
9983                     if (decl == error_mark_node)
9984                       return error_mark_node;
9985                   }
9986
9987                 decl = do_friend (ctype, unqualified_id, decl,
9988                                   *attrlist, flags,
9989                                   funcdef_flag);
9990                 return decl;
9991               }
9992             else
9993               return error_mark_node;
9994           }
9995
9996         /* Structure field.  It may not be a function, except for C++.  */
9997
9998         if (decl == NULL_TREE)
9999           {
10000             if (initialized)
10001               {
10002                 if (!staticp)
10003                   {
10004                     /* An attempt is being made to initialize a non-static
10005                        member.  But, from [class.mem]:
10006
10007                        4 A member-declarator can contain a
10008                        constant-initializer only if it declares a static
10009                        member (_class.static_) of integral or enumeration
10010                        type, see _class.static.data_.
10011
10012                        This used to be relatively common practice, but
10013                        the rest of the compiler does not correctly
10014                        handle the initialization unless the member is
10015                        static so we make it static below.  */
10016                     if (cxx_dialect >= cxx0x)
10017                       {
10018                         sorry ("non-static data member initializers");
10019                       }
10020                     else
10021                       {
10022                         permerror (input_location, "ISO C++ forbids initialization of member %qD",
10023                                    unqualified_id);
10024                         permerror (input_location, "making %qD static", unqualified_id);
10025                         staticp = 1;
10026                       }
10027                   }
10028
10029                 if (uses_template_parms (type))
10030                   /* We'll check at instantiation time.  */
10031                   ;
10032                 else if (constexpr_p)
10033                   /* constexpr has the same requirements.  */
10034                   ;
10035                 else if (check_static_variable_definition (unqualified_id,
10036                                                            type))
10037                   /* If we just return the declaration, crashes
10038                      will sometimes occur.  We therefore return
10039                      void_type_node, as if this was a friend
10040                      declaration, to cause callers to completely
10041                      ignore this declaration.  */
10042                   return error_mark_node;
10043               }
10044
10045             if (staticp)
10046               {
10047                 /* C++ allows static class members.  All other work
10048                    for this is done by grokfield.  */
10049                 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
10050                 set_linkage_for_static_data_member (decl);
10051                 /* Even if there is an in-class initialization, DECL
10052                    is considered undefined until an out-of-class
10053                    definition is provided.  */
10054                 DECL_EXTERNAL (decl) = 1;
10055
10056                 if (thread_p)
10057                   DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
10058
10059                 if (constexpr_p && !initialized)
10060                   {
10061                     error ("constexpr static data member %qD must have an "
10062                            "initializer", decl);
10063                     constexpr_p = false;
10064                   }
10065               }
10066             else
10067               {
10068                 if (constexpr_p)
10069                   {
10070                     error ("non-static data member %qE declared %<constexpr%>",
10071                            unqualified_id);
10072                     constexpr_p = false;
10073                   }
10074                 decl = build_decl (input_location,
10075                                    FIELD_DECL, unqualified_id, type);
10076                 DECL_NONADDRESSABLE_P (decl) = bitfield;
10077                 if (bitfield && !unqualified_id)
10078                   TREE_NO_WARNING (decl) = 1;
10079
10080                 if (storage_class == sc_mutable)
10081                   {
10082                     DECL_MUTABLE_P (decl) = 1;
10083                     storage_class = sc_none;
10084                   }
10085               }
10086
10087             bad_specifiers (decl, BSP_FIELD, virtualp,
10088                             memfn_quals != TYPE_UNQUALIFIED,
10089                             inlinep, friendp, raises != NULL_TREE);
10090           }
10091       }
10092     else if (TREE_CODE (type) == FUNCTION_TYPE
10093              || TREE_CODE (type) == METHOD_TYPE)
10094       {
10095         tree original_name;
10096         int publicp = 0;
10097
10098         if (!unqualified_id)
10099           return error_mark_node;
10100
10101         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10102           original_name = dname;
10103         else
10104           original_name = unqualified_id;
10105
10106         if (storage_class == sc_auto)
10107           error ("storage class %<auto%> invalid for function %qs", name);
10108         else if (storage_class == sc_register)
10109           error ("storage class %<register%> invalid for function %qs", name);
10110         else if (thread_p)
10111           error ("storage class %<__thread%> invalid for function %qs", name);
10112
10113         if (virt_specifiers)
10114           error ("virt-specifiers in %qs not allowed outside a class definition", name);
10115         /* Function declaration not at top level.
10116            Storage classes other than `extern' are not allowed
10117            and `extern' makes no difference.  */
10118         if (! toplevel_bindings_p ()
10119             && (storage_class == sc_static
10120                 || declspecs->specs[(int)ds_inline])
10121             && pedantic)
10122           {
10123             if (storage_class == sc_static)
10124               pedwarn (input_location, OPT_pedantic, 
10125                        "%<static%> specified invalid for function %qs "
10126                        "declared out of global scope", name);
10127             else
10128               pedwarn (input_location, OPT_pedantic, 
10129                        "%<inline%> specifier invalid for function %qs "
10130                        "declared out of global scope", name);
10131           }
10132
10133         if (ctype != NULL_TREE
10134             && TREE_CODE (ctype) != NAMESPACE_DECL && !MAYBE_CLASS_TYPE_P (ctype))
10135           {
10136             error ("%q#T is not a class or a namespace", ctype);
10137             ctype = NULL_TREE;
10138           }
10139
10140         if (ctype == NULL_TREE)
10141           {
10142             if (virtualp)
10143               {
10144                 error ("virtual non-class function %qs", name);
10145                 virtualp = 0;
10146               }
10147             else if (sfk == sfk_constructor
10148                      || sfk == sfk_destructor)
10149               {
10150                 error (funcdef_flag
10151                        ? "%qs defined in a non-class scope"
10152                        : "%qs declared in a non-class scope", name);
10153                 sfk = sfk_none;
10154               }
10155           }
10156
10157         /* Record presence of `static'.  */
10158         publicp = (ctype != NULL_TREE
10159                    || storage_class == sc_extern
10160                    || storage_class != sc_static);
10161
10162         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10163                            virtualp, flags, memfn_quals, raises,
10164                            1, friendp,
10165                            publicp, inlinep | (2 * constexpr_p), sfk,
10166                            funcdef_flag,
10167                            template_count, in_namespace, attrlist,
10168                            declarator->id_loc);
10169         if (decl == NULL_TREE)
10170           return error_mark_node;
10171
10172         if (staticp == 1)
10173           {
10174             int invalid_static = 0;
10175
10176             /* Don't allow a static member function in a class, and forbid
10177                declaring main to be static.  */
10178             if (TREE_CODE (type) == METHOD_TYPE)
10179               {
10180                 permerror (input_location, "cannot declare member function %qD to have "
10181                            "static linkage", decl);
10182                 invalid_static = 1;
10183               }
10184             else if (current_function_decl)
10185               {
10186                 /* FIXME need arm citation */
10187                 error ("cannot declare static function inside another function");
10188                 invalid_static = 1;
10189               }
10190
10191             if (invalid_static)
10192               {
10193                 staticp = 0;
10194                 storage_class = sc_none;
10195               }
10196           }
10197       }
10198     else
10199       {
10200         /* It's a variable.  */
10201
10202         /* An uninitialized decl with `extern' is a reference.  */
10203         decl = grokvardecl (type, unqualified_id,
10204                             declspecs,
10205                             initialized,
10206                             (type_quals & TYPE_QUAL_CONST) != 0,
10207                             ctype ? ctype : in_namespace);
10208         bad_specifiers (decl, BSP_VAR, virtualp,
10209                         memfn_quals != TYPE_UNQUALIFIED,
10210                         inlinep, friendp, raises != NULL_TREE);
10211
10212         if (ctype)
10213           {
10214             DECL_CONTEXT (decl) = ctype;
10215             if (staticp == 1)
10216               {
10217                 permerror (input_location, "%<static%> may not be used when defining "
10218                            "(as opposed to declaring) a static data member");
10219                 staticp = 0;
10220                 storage_class = sc_none;
10221               }
10222             if (storage_class == sc_register && TREE_STATIC (decl))
10223               {
10224                 error ("static member %qD declared %<register%>", decl);
10225                 storage_class = sc_none;
10226               }
10227             if (storage_class == sc_extern && pedantic)
10228               {
10229                 pedwarn (input_location, OPT_pedantic, 
10230                          "cannot explicitly declare member %q#D to have "
10231                          "extern linkage", decl);
10232                 storage_class = sc_none;
10233               }
10234           }
10235         else if (constexpr_p && DECL_EXTERNAL (decl))
10236           {
10237             error ("declaration of constexpr variable %qD is not a definition",
10238                    decl);
10239             constexpr_p = false;
10240           }
10241       }
10242
10243     if (storage_class == sc_extern && initialized && !funcdef_flag)
10244       {
10245         if (toplevel_bindings_p ())
10246           {
10247             /* It's common practice (and completely valid) to have a const
10248                be initialized and declared extern.  */
10249             if (!(type_quals & TYPE_QUAL_CONST))
10250               warning (0, "%qs initialized and declared %<extern%>", name);
10251           }
10252         else
10253           {
10254             error ("%qs has both %<extern%> and initializer", name);
10255             return error_mark_node;
10256           }
10257       }
10258
10259     /* Record `register' declaration for warnings on &
10260        and in case doing stupid register allocation.  */
10261
10262     if (storage_class == sc_register)
10263       DECL_REGISTER (decl) = 1;
10264     else if (storage_class == sc_extern)
10265       DECL_THIS_EXTERN (decl) = 1;
10266     else if (storage_class == sc_static)
10267       DECL_THIS_STATIC (decl) = 1;
10268
10269     /* Set constexpr flag on vars (functions got it in grokfndecl).  */
10270     if (constexpr_p && TREE_CODE (decl) == VAR_DECL)
10271       DECL_DECLARED_CONSTEXPR_P (decl) = true;
10272
10273     /* Record constancy and volatility on the DECL itself .  There's
10274        no need to do this when processing a template; we'll do this
10275        for the instantiated declaration based on the type of DECL.  */
10276     if (!processing_template_decl)
10277       cp_apply_type_quals_to_decl (type_quals, decl);
10278
10279     return decl;
10280   }
10281 }
10282 \f
10283 /* Subroutine of start_function.  Ensure that each of the parameter
10284    types (as listed in PARMS) is complete, as is required for a
10285    function definition.  */
10286
10287 static void
10288 require_complete_types_for_parms (tree parms)
10289 {
10290   for (; parms; parms = DECL_CHAIN (parms))
10291     {
10292       if (dependent_type_p (TREE_TYPE (parms)))
10293         continue;
10294       if (!VOID_TYPE_P (TREE_TYPE (parms))
10295           && complete_type_or_else (TREE_TYPE (parms), parms))
10296         {
10297           relayout_decl (parms);
10298           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
10299         }
10300       else
10301         /* grokparms or complete_type_or_else will have already issued
10302            an error.  */
10303         TREE_TYPE (parms) = error_mark_node;
10304     }
10305 }
10306
10307 /* Returns nonzero if T is a local variable.  */
10308
10309 int
10310 local_variable_p (const_tree t)
10311 {
10312   if ((TREE_CODE (t) == VAR_DECL
10313        /* A VAR_DECL with a context that is a _TYPE is a static data
10314           member.  */
10315        && !TYPE_P (CP_DECL_CONTEXT (t))
10316        /* Any other non-local variable must be at namespace scope.  */
10317        && !DECL_NAMESPACE_SCOPE_P (t))
10318       || (TREE_CODE (t) == PARM_DECL))
10319     return 1;
10320
10321   return 0;
10322 }
10323
10324 /* Like local_variable_p, but suitable for use as a tree-walking
10325    function.  */
10326
10327 static tree
10328 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
10329                          void *data ATTRIBUTE_UNUSED)
10330 {
10331   if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
10332     return *tp;
10333   else if (TYPE_P (*tp))
10334     *walk_subtrees = 0;
10335
10336   return NULL_TREE;
10337 }
10338
10339
10340 /* Check that ARG, which is a default-argument expression for a
10341    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
10342    something goes wrong.  DECL may also be a _TYPE node, rather than a
10343    DECL, if there is no DECL available.  */
10344
10345 tree
10346 check_default_argument (tree decl, tree arg)
10347 {
10348   tree var;
10349   tree decl_type;
10350
10351   if (TREE_CODE (arg) == DEFAULT_ARG)
10352     /* We get a DEFAULT_ARG when looking at an in-class declaration
10353        with a default argument.  Ignore the argument for now; we'll
10354        deal with it after the class is complete.  */
10355     return arg;
10356
10357   if (TYPE_P (decl))
10358     {
10359       decl_type = decl;
10360       decl = NULL_TREE;
10361     }
10362   else
10363     decl_type = TREE_TYPE (decl);
10364
10365   if (arg == error_mark_node
10366       || decl == error_mark_node
10367       || TREE_TYPE (arg) == error_mark_node
10368       || decl_type == error_mark_node)
10369     /* Something already went wrong.  There's no need to check
10370        further.  */
10371     return error_mark_node;
10372
10373   /* [dcl.fct.default]
10374
10375      A default argument expression is implicitly converted to the
10376      parameter type.  */
10377   if (!TREE_TYPE (arg)
10378       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
10379     {
10380       if (decl)
10381         error ("default argument for %q#D has type %qT",
10382                decl, TREE_TYPE (arg));
10383       else
10384         error ("default argument for parameter of type %qT has type %qT",
10385                decl_type, TREE_TYPE (arg));
10386
10387       return error_mark_node;
10388     }
10389
10390   /* [dcl.fct.default]
10391
10392      Local variables shall not be used in default argument
10393      expressions.
10394
10395      The keyword `this' shall not be used in a default argument of a
10396      member function.  */
10397   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
10398   if (var)
10399     {
10400       error ("default argument %qE uses local variable %qD", arg, var);
10401       return error_mark_node;
10402     }
10403
10404   /* All is well.  */
10405   return arg;
10406 }
10407
10408 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
10409
10410 static tree
10411 type_is_deprecated (tree type)
10412 {
10413   enum tree_code code;
10414   if (TREE_DEPRECATED (type))
10415     return type;
10416   if (TYPE_NAME (type)
10417       && TREE_DEPRECATED (TYPE_NAME (type)))
10418     return type;
10419
10420   /* Do warn about using typedefs to a deprecated class.  */
10421   if (TAGGED_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
10422     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
10423
10424   code = TREE_CODE (type);
10425
10426   if (code == POINTER_TYPE || code == REFERENCE_TYPE
10427       || code == OFFSET_TYPE || code == FUNCTION_TYPE
10428       || code == METHOD_TYPE || code == ARRAY_TYPE)
10429     return type_is_deprecated (TREE_TYPE (type));
10430
10431   if (TYPE_PTRMEMFUNC_P (type))
10432     return type_is_deprecated
10433       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
10434
10435   return NULL_TREE;
10436 }
10437
10438 /* Decode the list of parameter types for a function type.
10439    Given the list of things declared inside the parens,
10440    return a list of types.
10441
10442    If this parameter does not end with an ellipsis, we append
10443    void_list_node.
10444
10445    *PARMS is set to the chain of PARM_DECLs created.  */
10446
10447 static tree
10448 grokparms (tree parmlist, tree *parms)
10449 {
10450   tree result = NULL_TREE;
10451   tree decls = NULL_TREE;
10452   tree parm;
10453   int any_error = 0;
10454
10455   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
10456     {
10457       tree type = NULL_TREE;
10458       tree init = TREE_PURPOSE (parm);
10459       tree decl = TREE_VALUE (parm);
10460       const char *errmsg;
10461
10462       if (parm == void_list_node)
10463         break;
10464
10465       if (! decl || TREE_TYPE (decl) == error_mark_node)
10466         continue;
10467
10468       type = TREE_TYPE (decl);
10469       if (VOID_TYPE_P (type))
10470         {
10471           if (same_type_p (type, void_type_node)
10472               && DECL_SELF_REFERENCE_P (type)
10473               && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
10474             /* this is a parmlist of `(void)', which is ok.  */
10475             break;
10476           cxx_incomplete_type_error (decl, type);
10477           /* It's not a good idea to actually create parameters of
10478              type `void'; other parts of the compiler assume that a
10479              void type terminates the parameter list.  */
10480           type = error_mark_node;
10481           TREE_TYPE (decl) = error_mark_node;
10482         }
10483
10484       if (type != error_mark_node
10485           && TYPE_FOR_JAVA (type)
10486           && MAYBE_CLASS_TYPE_P (type))
10487         {
10488           error ("parameter %qD has Java class type", decl);
10489           type = error_mark_node;
10490           TREE_TYPE (decl) = error_mark_node;
10491           init = NULL_TREE;
10492         }
10493
10494       if (type != error_mark_node
10495           && (errmsg = targetm.invalid_parameter_type (type)))
10496         {
10497           error (errmsg);
10498           type = error_mark_node;
10499           TREE_TYPE (decl) = error_mark_node;
10500         }
10501
10502       if (type != error_mark_node)
10503         {
10504           if (deprecated_state != DEPRECATED_SUPPRESS)
10505             {
10506               tree deptype = type_is_deprecated (type);
10507               if (deptype)
10508                 warn_deprecated_use (deptype, NULL_TREE);
10509             }
10510
10511           /* Top-level qualifiers on the parameters are
10512              ignored for function types.  */
10513           type = cp_build_qualified_type (type, 0);
10514           if (TREE_CODE (type) == METHOD_TYPE)
10515             {
10516               error ("parameter %qD invalidly declared method type", decl);
10517               type = build_pointer_type (type);
10518               TREE_TYPE (decl) = type;
10519             }
10520           else if (abstract_virtuals_error (decl, type))
10521             any_error = 1;  /* Seems like a good idea.  */
10522           else if (POINTER_TYPE_P (type))
10523             {
10524               /* [dcl.fct]/6, parameter types cannot contain pointers
10525                  (references) to arrays of unknown bound.  */
10526               tree t = TREE_TYPE (type);
10527               int ptr = TYPE_PTR_P (type);
10528
10529               while (1)
10530                 {
10531                   if (TYPE_PTR_P (t))
10532                     ptr = 1;
10533                   else if (TREE_CODE (t) != ARRAY_TYPE)
10534                     break;
10535                   else if (!TYPE_DOMAIN (t))
10536                     break;
10537                   t = TREE_TYPE (t);
10538                 }
10539               if (TREE_CODE (t) == ARRAY_TYPE)
10540                 error (ptr
10541                        ? G_("parameter %qD includes pointer to array of "
10542                             "unknown bound %qT")
10543                        : G_("parameter %qD includes reference to array of "
10544                             "unknown bound %qT"),
10545                        decl, t);
10546             }
10547
10548           if (any_error)
10549             init = NULL_TREE;
10550           else if (init && !processing_template_decl)
10551             init = check_default_argument (decl, init);
10552         }
10553
10554       DECL_CHAIN (decl) = decls;
10555       decls = decl;
10556       result = tree_cons (init, type, result);
10557     }
10558   decls = nreverse (decls);
10559   result = nreverse (result);
10560   if (parm)
10561     result = chainon (result, void_list_node);
10562   *parms = decls;
10563
10564   return result;
10565 }
10566
10567 \f
10568 /* D is a constructor or overloaded `operator='.
10569
10570    Let T be the class in which D is declared. Then, this function
10571    returns:
10572
10573    -1 if D's is an ill-formed constructor or copy assignment operator
10574       whose first parameter is of type `T'.
10575    0  if D is not a copy constructor or copy assignment
10576       operator.
10577    1  if D is a copy constructor or copy assignment operator whose
10578       first parameter is a reference to non-const qualified T.
10579    2  if D is a copy constructor or copy assignment operator whose
10580       first parameter is a reference to const qualified T.
10581
10582    This function can be used as a predicate. Positive values indicate
10583    a copy constructor and nonzero values indicate a copy assignment
10584    operator.  */
10585
10586 int
10587 copy_fn_p (const_tree d)
10588 {
10589   tree args;
10590   tree arg_type;
10591   int result = 1;
10592
10593   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10594
10595   if (TREE_CODE (d) == TEMPLATE_DECL
10596       || (DECL_TEMPLATE_INFO (d)
10597           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10598     /* Instantiations of template member functions are never copy
10599        functions.  Note that member functions of templated classes are
10600        represented as template functions internally, and we must
10601        accept those as copy functions.  */
10602     return 0;
10603
10604   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10605   if (!args)
10606     return 0;
10607
10608   arg_type = TREE_VALUE (args);
10609   if (arg_type == error_mark_node)
10610     return 0;
10611
10612   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
10613     {
10614       /* Pass by value copy assignment operator.  */
10615       result = -1;
10616     }
10617   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
10618            && !TYPE_REF_IS_RVALUE (arg_type)
10619            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
10620     {
10621       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
10622         result = 2;
10623     }
10624   else
10625     return 0;
10626
10627   args = TREE_CHAIN (args);
10628
10629   if (args && args != void_list_node && !TREE_PURPOSE (args))
10630     /* There are more non-optional args.  */
10631     return 0;
10632
10633   return result;
10634 }
10635
10636 /* D is a constructor or overloaded `operator='.
10637
10638    Let T be the class in which D is declared. Then, this function
10639    returns true when D is a move constructor or move assignment
10640    operator, false otherwise.  */
10641
10642 bool
10643 move_fn_p (const_tree d)
10644 {
10645   tree args;
10646   tree arg_type;
10647   bool result = false;
10648
10649   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10650
10651   if (cxx_dialect == cxx98)
10652     /* There are no move constructors if we are in C++98 mode.  */
10653     return false;
10654
10655   if (TREE_CODE (d) == TEMPLATE_DECL
10656       || (DECL_TEMPLATE_INFO (d)
10657          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10658     /* Instantiations of template member functions are never copy
10659        functions.  Note that member functions of templated classes are
10660        represented as template functions internally, and we must
10661        accept those as copy functions.  */
10662     return 0;
10663
10664   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10665   if (!args)
10666     return 0;
10667
10668   arg_type = TREE_VALUE (args);
10669   if (arg_type == error_mark_node)
10670     return 0;
10671
10672   if (TREE_CODE (arg_type) == REFERENCE_TYPE
10673       && TYPE_REF_IS_RVALUE (arg_type)
10674       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
10675                       DECL_CONTEXT (d)))
10676     result = true;
10677
10678   args = TREE_CHAIN (args);
10679
10680   if (args && args != void_list_node && !TREE_PURPOSE (args))
10681     /* There are more non-optional args.  */
10682     return false;
10683
10684   return result;
10685 }
10686
10687 /* Remember any special properties of member function DECL.  */
10688
10689 void
10690 grok_special_member_properties (tree decl)
10691 {
10692   tree class_type;
10693
10694   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10695     return;
10696
10697   class_type = DECL_CONTEXT (decl);
10698   if (DECL_CONSTRUCTOR_P (decl))
10699     {
10700       int ctor = copy_fn_p (decl);
10701
10702       if (!DECL_ARTIFICIAL (decl))
10703         TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
10704
10705       if (ctor > 0)
10706         {
10707           /* [class.copy]
10708
10709              A non-template constructor for class X is a copy
10710              constructor if its first parameter is of type X&, const
10711              X&, volatile X& or const volatile X&, and either there
10712              are no other parameters or else all other parameters have
10713              default arguments.  */
10714           TYPE_HAS_COPY_CTOR (class_type) = 1;
10715           if (user_provided_p (decl))
10716             TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
10717           if (ctor > 1)
10718             TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
10719         }
10720       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
10721         {
10722           TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
10723           if (user_provided_p (decl))
10724             TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10725         }
10726       else if (move_fn_p (decl) && user_provided_p (decl))
10727         TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
10728       else if (is_list_ctor (decl))
10729         TYPE_HAS_LIST_CTOR (class_type) = 1;
10730
10731       if (DECL_DECLARED_CONSTEXPR_P (decl)
10732           && !copy_fn_p (decl) && !move_fn_p (decl))
10733         TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
10734     }
10735   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10736     {
10737       /* [class.copy]
10738
10739          A non-template assignment operator for class X is a copy
10740          assignment operator if its parameter is of type X, X&, const
10741          X&, volatile X& or const volatile X&.  */
10742
10743       int assop = copy_fn_p (decl);
10744
10745       if (assop)
10746         {
10747           TYPE_HAS_COPY_ASSIGN (class_type) = 1;
10748           if (user_provided_p (decl))
10749             TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
10750           if (assop != 1)
10751             TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
10752         }
10753       else if (move_fn_p (decl) && user_provided_p (decl))
10754         TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
10755     }
10756   /* Destructors are handled in check_methods.  */
10757 }
10758
10759 /* Check a constructor DECL has the correct form.  Complains
10760    if the class has a constructor of the form X(X).  */
10761
10762 int
10763 grok_ctor_properties (const_tree ctype, const_tree decl)
10764 {
10765   int ctor_parm = copy_fn_p (decl);
10766
10767   if (ctor_parm < 0)
10768     {
10769       /* [class.copy]
10770
10771          A declaration of a constructor for a class X is ill-formed if
10772          its first parameter is of type (optionally cv-qualified) X
10773          and either there are no other parameters or else all other
10774          parameters have default arguments.
10775
10776          We *don't* complain about member template instantiations that
10777          have this form, though; they can occur as we try to decide
10778          what constructor to use during overload resolution.  Since
10779          overload resolution will never prefer such a constructor to
10780          the non-template copy constructor (which is either explicitly
10781          or implicitly defined), there's no need to worry about their
10782          existence.  Theoretically, they should never even be
10783          instantiated, but that's hard to forestall.  */
10784       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
10785                 ctype, ctype);
10786       return 0;
10787     }
10788
10789   return 1;
10790 }
10791
10792 /* An operator with this code is unary, but can also be binary.  */
10793
10794 static int
10795 ambi_op_p (enum tree_code code)
10796 {
10797   return (code == INDIRECT_REF
10798           || code == ADDR_EXPR
10799           || code == UNARY_PLUS_EXPR
10800           || code == NEGATE_EXPR
10801           || code == PREINCREMENT_EXPR
10802           || code == PREDECREMENT_EXPR);
10803 }
10804
10805 /* An operator with this name can only be unary.  */
10806
10807 static int
10808 unary_op_p (enum tree_code code)
10809 {
10810   return (code == TRUTH_NOT_EXPR
10811           || code == BIT_NOT_EXPR
10812           || code == COMPONENT_REF
10813           || code == TYPE_EXPR);
10814 }
10815
10816 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
10817    errors are issued for invalid declarations.  */
10818
10819 bool
10820 grok_op_properties (tree decl, bool complain)
10821 {
10822   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
10823   tree argtype;
10824   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10825   tree name = DECL_NAME (decl);
10826   enum tree_code operator_code;
10827   int arity;
10828   bool ellipsis_p;
10829   tree class_type;
10830
10831   /* Count the number of arguments and check for ellipsis.  */
10832   for (argtype = argtypes, arity = 0;
10833        argtype && argtype != void_list_node;
10834        argtype = TREE_CHAIN (argtype))
10835     ++arity;
10836   ellipsis_p = !argtype;
10837
10838   class_type = DECL_CONTEXT (decl);
10839   if (class_type && !CLASS_TYPE_P (class_type))
10840     class_type = NULL_TREE;
10841
10842   if (DECL_CONV_FN_P (decl))
10843     operator_code = TYPE_EXPR;
10844   else
10845     do
10846       {
10847 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
10848         if (ansi_opname (CODE) == name)                         \
10849           {                                                     \
10850             operator_code = (CODE);                             \
10851             break;                                              \
10852           }                                                     \
10853         else if (ansi_assopname (CODE) == name)                 \
10854           {                                                     \
10855             operator_code = (CODE);                             \
10856             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
10857             break;                                              \
10858           }
10859
10860 #include "operators.def"
10861 #undef DEF_OPERATOR
10862
10863         gcc_unreachable ();
10864       }
10865     while (0);
10866   gcc_assert (operator_code != MAX_TREE_CODES);
10867   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10868
10869   if (class_type)
10870     switch (operator_code)
10871       {
10872       case NEW_EXPR:
10873         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
10874         break;
10875
10876       case DELETE_EXPR:
10877         TYPE_GETS_DELETE (class_type) |= 1;
10878         break;
10879
10880       case VEC_NEW_EXPR:
10881         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
10882         break;
10883
10884       case VEC_DELETE_EXPR:
10885         TYPE_GETS_DELETE (class_type) |= 2;
10886         break;
10887
10888       default:
10889         break;
10890       }
10891
10892     /* [basic.std.dynamic.allocation]/1:
10893
10894        A program is ill-formed if an allocation function is declared
10895        in a namespace scope other than global scope or declared static
10896        in global scope.
10897
10898        The same also holds true for deallocation functions.  */
10899   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
10900       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10901     {
10902       if (DECL_NAMESPACE_SCOPE_P (decl))
10903         {
10904           if (CP_DECL_CONTEXT (decl) != global_namespace)
10905             {
10906               error ("%qD may not be declared within a namespace", decl);
10907               return false;
10908             }
10909           else if (!TREE_PUBLIC (decl))
10910             {
10911               error ("%qD may not be declared as static", decl);
10912               return false;
10913             }
10914         }
10915     }
10916
10917   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
10918     {
10919       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10920       DECL_IS_OPERATOR_NEW (decl) = 1;
10921     }
10922   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10923     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
10924   else
10925     {
10926       /* An operator function must either be a non-static member function
10927          or have at least one parameter of a class, a reference to a class,
10928          an enumeration, or a reference to an enumeration.  13.4.0.6 */
10929       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
10930         {
10931           if (operator_code == TYPE_EXPR
10932               || operator_code == CALL_EXPR
10933               || operator_code == COMPONENT_REF
10934               || operator_code == ARRAY_REF
10935               || operator_code == NOP_EXPR)
10936             {
10937               error ("%qD must be a nonstatic member function", decl);
10938               return false;
10939             }
10940           else
10941             {
10942               tree p;
10943
10944               if (DECL_STATIC_FUNCTION_P (decl))
10945                 {
10946                   error ("%qD must be either a non-static member "
10947                          "function or a non-member function", decl);
10948                   return false;
10949                 }
10950
10951               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
10952                 {
10953                   tree arg = non_reference (TREE_VALUE (p));
10954                   if (arg == error_mark_node)
10955                     return false;
10956
10957                   /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
10958                      because these checks are performed even on
10959                      template functions.  */
10960                   if (MAYBE_CLASS_TYPE_P (arg)
10961                       || TREE_CODE (arg) == ENUMERAL_TYPE)
10962                     break;
10963                 }
10964
10965               if (!p || p == void_list_node)
10966                 {
10967                   if (complain)
10968                     error ("%qD must have an argument of class or "
10969                            "enumerated type", decl);
10970                   return false;
10971                 }
10972             }
10973         }
10974
10975       /* There are no restrictions on the arguments to an overloaded
10976          "operator ()".  */
10977       if (operator_code == CALL_EXPR)
10978         return true;
10979
10980       /* Warn about conversion operators that will never be used.  */
10981       if (IDENTIFIER_TYPENAME_P (name)
10982           && ! DECL_TEMPLATE_INFO (decl)
10983           && warn_conversion
10984           /* Warn only declaring the function; there is no need to
10985              warn again about out-of-class definitions.  */
10986           && class_type == current_class_type)
10987         {
10988           tree t = TREE_TYPE (name);
10989           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
10990
10991           if (ref)
10992             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
10993
10994           if (TREE_CODE (t) == VOID_TYPE)
10995             warning (OPT_Wconversion,
10996                      ref
10997                      ? G_("conversion to a reference to void "
10998                           "will never use a type conversion operator")
10999                      : G_("conversion to void "
11000                           "will never use a type conversion operator"));
11001           else if (class_type)
11002             {
11003               if (t == class_type)
11004                 warning (OPT_Wconversion,
11005                      ref
11006                      ? G_("conversion to a reference to the same type "
11007                           "will never use a type conversion operator")
11008                      : G_("conversion to the same type "
11009                           "will never use a type conversion operator"));                
11010               /* Don't force t to be complete here.  */
11011               else if (MAYBE_CLASS_TYPE_P (t)
11012                        && COMPLETE_TYPE_P (t)
11013                        && DERIVED_FROM_P (t, class_type))
11014                  warning (OPT_Wconversion,
11015                           ref
11016                           ? G_("conversion to a reference to a base class "
11017                                "will never use a type conversion operator")
11018                           : G_("conversion to a base class "
11019                                "will never use a type conversion operator"));           
11020             }
11021
11022         }
11023
11024       if (operator_code == COND_EXPR)
11025         {
11026           /* 13.4.0.3 */
11027           error ("ISO C++ prohibits overloading operator ?:");
11028           return false;
11029         }
11030       else if (ellipsis_p)
11031         {
11032           error ("%qD must not have variable number of arguments", decl);
11033           return false;
11034         }
11035       else if (ambi_op_p (operator_code))
11036         {
11037           if (arity == 1)
11038             /* We pick the one-argument operator codes by default, so
11039                we don't have to change anything.  */
11040             ;
11041           else if (arity == 2)
11042             {
11043               /* If we thought this was a unary operator, we now know
11044                  it to be a binary operator.  */
11045               switch (operator_code)
11046                 {
11047                 case INDIRECT_REF:
11048                   operator_code = MULT_EXPR;
11049                   break;
11050
11051                 case ADDR_EXPR:
11052                   operator_code = BIT_AND_EXPR;
11053                   break;
11054
11055                 case UNARY_PLUS_EXPR:
11056                   operator_code = PLUS_EXPR;
11057                   break;
11058
11059                 case NEGATE_EXPR:
11060                   operator_code = MINUS_EXPR;
11061                   break;
11062
11063                 case PREINCREMENT_EXPR:
11064                   operator_code = POSTINCREMENT_EXPR;
11065                   break;
11066
11067                 case PREDECREMENT_EXPR:
11068                   operator_code = POSTDECREMENT_EXPR;
11069                   break;
11070
11071                 default:
11072                   gcc_unreachable ();
11073                 }
11074
11075               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11076
11077               if ((operator_code == POSTINCREMENT_EXPR
11078                    || operator_code == POSTDECREMENT_EXPR)
11079                   && ! processing_template_decl
11080                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11081                 {
11082                   if (methodp)
11083                     error ("postfix %qD must take %<int%> as its argument",
11084                            decl);
11085                   else
11086                     error ("postfix %qD must take %<int%> as its second "
11087                            "argument", decl);
11088                   return false;
11089                 }
11090             }
11091           else
11092             {
11093               if (methodp)
11094                 error ("%qD must take either zero or one argument", decl);
11095               else
11096                 error ("%qD must take either one or two arguments", decl);
11097               return false;
11098             }
11099
11100           /* More Effective C++ rule 6.  */
11101           if (warn_ecpp
11102               && (operator_code == POSTINCREMENT_EXPR
11103                   || operator_code == POSTDECREMENT_EXPR
11104                   || operator_code == PREINCREMENT_EXPR
11105                   || operator_code == PREDECREMENT_EXPR))
11106             {
11107               tree arg = TREE_VALUE (argtypes);
11108               tree ret = TREE_TYPE (TREE_TYPE (decl));
11109               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11110                 arg = TREE_TYPE (arg);
11111               arg = TYPE_MAIN_VARIANT (arg);
11112               if (operator_code == PREINCREMENT_EXPR
11113                   || operator_code == PREDECREMENT_EXPR)
11114                 {
11115                   if (TREE_CODE (ret) != REFERENCE_TYPE
11116                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11117                                        arg))
11118                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11119                              build_reference_type (arg));
11120                 }
11121               else
11122                 {
11123                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11124                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11125                 }
11126             }
11127         }
11128       else if (unary_op_p (operator_code))
11129         {
11130           if (arity != 1)
11131             {
11132               if (methodp)
11133                 error ("%qD must take %<void%>", decl);
11134               else
11135                 error ("%qD must take exactly one argument", decl);
11136               return false;
11137             }
11138         }
11139       else /* if (binary_op_p (operator_code)) */
11140         {
11141           if (arity != 2)
11142             {
11143               if (methodp)
11144                 error ("%qD must take exactly one argument", decl);
11145               else
11146                 error ("%qD must take exactly two arguments", decl);
11147               return false;
11148             }
11149
11150           /* More Effective C++ rule 7.  */
11151           if (warn_ecpp
11152               && (operator_code == TRUTH_ANDIF_EXPR
11153                   || operator_code == TRUTH_ORIF_EXPR
11154                   || operator_code == COMPOUND_EXPR))
11155             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
11156                      decl);
11157         }
11158
11159       /* Effective C++ rule 23.  */
11160       if (warn_ecpp
11161           && arity == 2
11162           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
11163           && (operator_code == PLUS_EXPR
11164               || operator_code == MINUS_EXPR
11165               || operator_code == TRUNC_DIV_EXPR
11166               || operator_code == MULT_EXPR
11167               || operator_code == TRUNC_MOD_EXPR)
11168           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11169         warning (OPT_Weffc__, "%qD should return by value", decl);
11170
11171       /* [over.oper]/8 */
11172       for (; argtypes && argtypes != void_list_node;
11173           argtypes = TREE_CHAIN (argtypes))
11174         if (TREE_PURPOSE (argtypes))
11175           {
11176             TREE_PURPOSE (argtypes) = NULL_TREE;
11177             if (operator_code == POSTINCREMENT_EXPR
11178                 || operator_code == POSTDECREMENT_EXPR)
11179               {
11180                 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments", 
11181                          decl);
11182               }
11183             else
11184               {
11185                 error ("%qD cannot have default arguments", decl);
11186                 return false;
11187               }
11188           }
11189     }
11190   return true;
11191 }
11192 \f
11193 /* Return a string giving the keyword associate with CODE.  */
11194
11195 static const char *
11196 tag_name (enum tag_types code)
11197 {
11198   switch (code)
11199     {
11200     case record_type:
11201       return "struct";
11202     case class_type:
11203       return "class";
11204     case union_type:
11205       return "union";
11206     case enum_type:
11207       return "enum";
11208     case typename_type:
11209       return "typename";
11210     default:
11211       gcc_unreachable ();
11212     }
11213 }
11214
11215 /* Name lookup in an elaborated-type-specifier (after the keyword
11216    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
11217    elaborated-type-specifier is invalid, issue a diagnostic and return
11218    error_mark_node; otherwise, return the *_TYPE to which it referred.
11219    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
11220
11221 tree
11222 check_elaborated_type_specifier (enum tag_types tag_code,
11223                                  tree decl,
11224                                  bool allow_template_p)
11225 {
11226   tree type;
11227
11228   /* In the case of:
11229
11230        struct S { struct S *p; };
11231
11232      name lookup will find the TYPE_DECL for the implicit "S::S"
11233      typedef.  Adjust for that here.  */
11234   if (DECL_SELF_REFERENCE_P (decl))
11235     decl = TYPE_NAME (TREE_TYPE (decl));
11236
11237   type = TREE_TYPE (decl);
11238
11239   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
11240      is false for this case as well.  */
11241   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11242     {
11243       error ("using template type parameter %qT after %qs",
11244              type, tag_name (tag_code));
11245       return error_mark_node;
11246     }
11247   /*   [dcl.type.elab]
11248
11249        If the identifier resolves to a typedef-name or a template
11250        type-parameter, the elaborated-type-specifier is ill-formed.
11251
11252      In other words, the only legitimate declaration to use in the
11253      elaborated type specifier is the implicit typedef created when
11254      the type is declared.  */
11255   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
11256            && !DECL_SELF_REFERENCE_P (decl)
11257            && tag_code != typename_type)
11258     {
11259       error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
11260       error ("%q+D has a previous declaration here", decl);
11261       return error_mark_node;
11262     }
11263   else if (TREE_CODE (type) != RECORD_TYPE
11264            && TREE_CODE (type) != UNION_TYPE
11265            && tag_code != enum_type
11266            && tag_code != typename_type)
11267     {
11268       error ("%qT referred to as %qs", type, tag_name (tag_code));
11269       error ("%q+T has a previous declaration here", type);
11270       return error_mark_node;
11271     }
11272   else if (TREE_CODE (type) != ENUMERAL_TYPE
11273            && tag_code == enum_type)
11274     {
11275       error ("%qT referred to as enum", type);
11276       error ("%q+T has a previous declaration here", type);
11277       return error_mark_node;
11278     }
11279   else if (!allow_template_p
11280            && TREE_CODE (type) == RECORD_TYPE
11281            && CLASSTYPE_IS_TEMPLATE (type))
11282     {
11283       /* If a class template appears as elaborated type specifier
11284          without a template header such as:
11285
11286            template <class T> class C {};
11287            void f(class C);             // No template header here
11288
11289          then the required template argument is missing.  */
11290       error ("template argument required for %<%s %T%>",
11291              tag_name (tag_code),
11292              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
11293       return error_mark_node;
11294     }
11295
11296   return type;
11297 }
11298
11299 /* Lookup NAME in elaborate type specifier in scope according to
11300    SCOPE and issue diagnostics if necessary.
11301    Return *_TYPE node upon success, NULL_TREE when the NAME is not
11302    found, and ERROR_MARK_NODE for type error.  */
11303
11304 static tree
11305 lookup_and_check_tag (enum tag_types tag_code, tree name,
11306                       tag_scope scope, bool template_header_p)
11307 {
11308   tree t;
11309   tree decl;
11310   if (scope == ts_global)
11311     {
11312       /* First try ordinary name lookup, ignoring hidden class name
11313          injected via friend declaration.  */
11314       decl = lookup_name_prefer_type (name, 2);
11315       /* If that fails, the name will be placed in the smallest
11316          non-class, non-function-prototype scope according to 3.3.1/5.
11317          We may already have a hidden name declared as friend in this
11318          scope.  So lookup again but not ignoring hidden names.
11319          If we find one, that name will be made visible rather than
11320          creating a new tag.  */
11321       if (!decl)
11322         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
11323     }
11324   else
11325     decl = lookup_type_scope (name, scope);
11326
11327   if (decl && DECL_CLASS_TEMPLATE_P (decl))
11328     decl = DECL_TEMPLATE_RESULT (decl);
11329
11330   if (decl && TREE_CODE (decl) == TYPE_DECL)
11331     {
11332       /* Look for invalid nested type:
11333            class C {
11334              class C {};
11335            };  */
11336       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
11337         {
11338           error ("%qD has the same name as the class in which it is "
11339                  "declared",
11340                  decl);
11341           return error_mark_node;
11342         }
11343
11344       /* Two cases we need to consider when deciding if a class
11345          template is allowed as an elaborated type specifier:
11346          1. It is a self reference to its own class.
11347          2. It comes with a template header.
11348
11349          For example:
11350
11351            template <class T> class C {
11352              class C *c1;               // DECL_SELF_REFERENCE_P is true
11353              class D;
11354            };
11355            template <class U> class C; // template_header_p is true
11356            template <class T> class C<T>::D {
11357              class C *c2;               // DECL_SELF_REFERENCE_P is true
11358            };  */
11359
11360       t = check_elaborated_type_specifier (tag_code,
11361                                            decl,
11362                                            template_header_p
11363                                            | DECL_SELF_REFERENCE_P (decl));
11364       return t;
11365     }
11366   else if (decl && TREE_CODE (decl) == TREE_LIST)
11367     {
11368       error ("reference to %qD is ambiguous", name);
11369       print_candidates (decl);
11370       return error_mark_node;
11371     }
11372   else
11373     return NULL_TREE;
11374 }
11375
11376 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
11377    Define the tag as a forward-reference if it is not defined.
11378
11379    If a declaration is given, process it here, and report an error if
11380    multiple declarations are not identical.
11381
11382    SCOPE is TS_CURRENT when this is also a definition.  Only look in
11383    the current frame for the name (since C++ allows new names in any
11384    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
11385    declaration.  Only look beginning from the current scope outward up
11386    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
11387
11388    TEMPLATE_HEADER_P is true when this declaration is preceded by
11389    a set of template parameters.  */
11390
11391 static tree
11392 xref_tag_1 (enum tag_types tag_code, tree name,
11393             tag_scope scope, bool template_header_p)
11394 {
11395   enum tree_code code;
11396   tree t;
11397   tree context = NULL_TREE;
11398
11399   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11400
11401   switch (tag_code)
11402     {
11403     case record_type:
11404     case class_type:
11405       code = RECORD_TYPE;
11406       break;
11407     case union_type:
11408       code = UNION_TYPE;
11409       break;
11410     case enum_type:
11411       code = ENUMERAL_TYPE;
11412       break;
11413     default:
11414       gcc_unreachable ();
11415     }
11416
11417   /* In case of anonymous name, xref_tag is only called to
11418      make type node and push name.  Name lookup is not required.  */
11419   if (ANON_AGGRNAME_P (name))
11420     t = NULL_TREE;
11421   else
11422     t = lookup_and_check_tag  (tag_code, name,
11423                                scope, template_header_p);
11424
11425   if (t == error_mark_node)
11426     return error_mark_node;
11427
11428   if (scope != ts_current && t && current_class_type
11429       && template_class_depth (current_class_type)
11430       && template_header_p)
11431     {
11432       /* Since SCOPE is not TS_CURRENT, we are not looking at a
11433          definition of this tag.  Since, in addition, we are currently
11434          processing a (member) template declaration of a template
11435          class, we must be very careful; consider:
11436
11437            template <class X>
11438            struct S1
11439
11440            template <class U>
11441            struct S2
11442            { template <class V>
11443            friend struct S1; };
11444
11445          Here, the S2::S1 declaration should not be confused with the
11446          outer declaration.  In particular, the inner version should
11447          have a template parameter of level 2, not level 1.  This
11448          would be particularly important if the member declaration
11449          were instead:
11450
11451            template <class V = U> friend struct S1;
11452
11453          say, when we should tsubst into `U' when instantiating
11454          S2.  On the other hand, when presented with:
11455
11456            template <class T>
11457            struct S1 {
11458              template <class U>
11459              struct S2 {};
11460              template <class U>
11461              friend struct S2;
11462            };
11463
11464          we must find the inner binding eventually.  We
11465          accomplish this by making sure that the new type we
11466          create to represent this declaration has the right
11467          TYPE_CONTEXT.  */
11468       context = TYPE_CONTEXT (t);
11469       t = NULL_TREE;
11470     }
11471
11472   if (! t)
11473     {
11474       /* If no such tag is yet defined, create a forward-reference node
11475          and record it as the "definition".
11476          When a real declaration of this type is found,
11477          the forward-reference will be altered into a real type.  */
11478       if (code == ENUMERAL_TYPE)
11479         {
11480           error ("use of enum %q#D without previous declaration", name);
11481           return error_mark_node;
11482         }
11483       else
11484         {
11485           t = make_class_type (code);
11486           TYPE_CONTEXT (t) = context;
11487           t = pushtag (name, t, scope);
11488         }
11489     }
11490   else
11491     {
11492       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
11493         {
11494           if (!redeclare_class_template (t, current_template_parms))
11495             return error_mark_node;
11496         }
11497       else if (!processing_template_decl
11498                && CLASS_TYPE_P (t)
11499                && CLASSTYPE_IS_TEMPLATE (t))
11500         {
11501           error ("redeclaration of %qT as a non-template", t);
11502           error ("previous declaration %q+D", t);
11503           return error_mark_node;
11504         }
11505
11506       /* Make injected friend class visible.  */
11507       if (scope != ts_within_enclosing_non_class
11508           && hidden_name_p (TYPE_NAME (t)))
11509         {
11510           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
11511           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
11512
11513           if (TYPE_TEMPLATE_INFO (t))
11514             {
11515               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
11516               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
11517             }
11518         }
11519     }
11520
11521   return t;
11522 }
11523
11524 /* Wrapper for xref_tag_1.  */
11525
11526 tree
11527 xref_tag (enum tag_types tag_code, tree name,
11528           tag_scope scope, bool template_header_p)
11529 {
11530   tree ret;
11531   timevar_start (TV_NAME_LOOKUP);
11532   ret = xref_tag_1 (tag_code, name, scope, template_header_p);
11533   timevar_stop (TV_NAME_LOOKUP);
11534   return ret;
11535 }
11536
11537
11538 tree
11539 xref_tag_from_type (tree old, tree id, tag_scope scope)
11540 {
11541   enum tag_types tag_kind;
11542
11543   if (TREE_CODE (old) == RECORD_TYPE)
11544     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
11545   else
11546     tag_kind  = union_type;
11547
11548   if (id == NULL_TREE)
11549     id = TYPE_IDENTIFIER (old);
11550
11551   return xref_tag (tag_kind, id, scope, false);
11552 }
11553
11554 /* Create the binfo hierarchy for REF with (possibly NULL) base list
11555    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
11556    access_* node, and the TREE_VALUE is the type of the base-class.
11557    Non-NULL TREE_TYPE indicates virtual inheritance.  
11558  
11559    Returns true if the binfo hierarchy was successfully created,
11560    false if an error was detected. */
11561
11562 bool
11563 xref_basetypes (tree ref, tree base_list)
11564 {
11565   tree *basep;
11566   tree binfo, base_binfo;
11567   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
11568   unsigned max_bases = 0;  /* Maximum direct bases.  */
11569   int i;
11570   tree default_access;
11571   tree igo_prev; /* Track Inheritance Graph Order.  */
11572
11573   if (ref == error_mark_node)
11574     return false;
11575
11576   /* The base of a derived class is private by default, all others are
11577      public.  */
11578   default_access = (TREE_CODE (ref) == RECORD_TYPE
11579                     && CLASSTYPE_DECLARED_CLASS (ref)
11580                     ? access_private_node : access_public_node);
11581
11582   /* First, make sure that any templates in base-classes are
11583      instantiated.  This ensures that if we call ourselves recursively
11584      we do not get confused about which classes are marked and which
11585      are not.  */
11586   basep = &base_list;
11587   while (*basep)
11588     {
11589       tree basetype = TREE_VALUE (*basep);
11590
11591       if (!(processing_template_decl && uses_template_parms (basetype))
11592           && !complete_type_or_else (basetype, NULL))
11593         /* An incomplete type.  Remove it from the list.  */
11594         *basep = TREE_CHAIN (*basep);
11595       else
11596         {
11597           max_bases++;
11598           if (TREE_TYPE (*basep))
11599             max_vbases++;
11600           if (CLASS_TYPE_P (basetype))
11601             max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
11602           basep = &TREE_CHAIN (*basep);
11603         }
11604     }
11605
11606   TYPE_MARKED_P (ref) = 1;
11607
11608   /* The binfo slot should be empty, unless this is an (ill-formed)
11609      redefinition.  */
11610   if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
11611     {
11612       error ("redefinition of %q#T", ref);
11613       return false;
11614     }
11615
11616   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
11617
11618   binfo = make_tree_binfo (max_bases);
11619
11620   TYPE_BINFO (ref) = binfo;
11621   BINFO_OFFSET (binfo) = size_zero_node;
11622   BINFO_TYPE (binfo) = ref;
11623
11624   /* Apply base-class info set up to the variants of this type.  */
11625   fixup_type_variants (ref);
11626
11627   if (max_bases)
11628     {
11629       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
11630       /* An aggregate cannot have baseclasses.  */
11631       CLASSTYPE_NON_AGGREGATE (ref) = 1;
11632
11633       if (TREE_CODE (ref) == UNION_TYPE)
11634         {
11635           error ("derived union %qT invalid", ref);
11636           return false;
11637         }
11638     }
11639
11640   if (max_bases > 1)
11641     {
11642       if (TYPE_FOR_JAVA (ref))
11643         {
11644           error ("Java class %qT cannot have multiple bases", ref);
11645           return false;
11646         }
11647     }
11648
11649   if (max_vbases)
11650     {
11651       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
11652
11653       if (TYPE_FOR_JAVA (ref))
11654         {
11655           error ("Java class %qT cannot have virtual bases", ref);
11656           return false;
11657         }
11658     }
11659
11660   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
11661     {
11662       tree access = TREE_PURPOSE (base_list);
11663       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
11664       tree basetype = TREE_VALUE (base_list);
11665
11666       if (access == access_default_node)
11667         access = default_access;
11668
11669       if (PACK_EXPANSION_P (basetype))
11670         basetype = PACK_EXPANSION_PATTERN (basetype);
11671       if (TREE_CODE (basetype) == TYPE_DECL)
11672         basetype = TREE_TYPE (basetype);
11673       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
11674         {
11675           error ("base type %qT fails to be a struct or class type",
11676                  basetype);
11677           return false;
11678         }
11679
11680       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
11681         TYPE_FOR_JAVA (ref) = 1;
11682
11683       base_binfo = NULL_TREE;
11684       if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
11685         {
11686           base_binfo = TYPE_BINFO (basetype);
11687           /* The original basetype could have been a typedef'd type.  */
11688           basetype = BINFO_TYPE (base_binfo);
11689
11690           /* Inherit flags from the base.  */
11691           TYPE_HAS_NEW_OPERATOR (ref)
11692             |= TYPE_HAS_NEW_OPERATOR (basetype);
11693           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
11694             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
11695           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
11696           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
11697           CLASSTYPE_DIAMOND_SHAPED_P (ref)
11698             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
11699           CLASSTYPE_REPEATED_BASE_P (ref)
11700             |= CLASSTYPE_REPEATED_BASE_P (basetype);
11701         }
11702
11703       /* We must do this test after we've seen through a typedef
11704          type.  */
11705       if (TYPE_MARKED_P (basetype))
11706         {
11707           if (basetype == ref)
11708             error ("recursive type %qT undefined", basetype);
11709           else
11710             error ("duplicate base type %qT invalid", basetype);
11711           return false;
11712         }
11713
11714       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
11715         /* Regenerate the pack expansion for the bases. */
11716         basetype = make_pack_expansion (basetype);
11717
11718       TYPE_MARKED_P (basetype) = 1;
11719
11720       base_binfo = copy_binfo (base_binfo, basetype, ref,
11721                                &igo_prev, via_virtual);
11722       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
11723         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
11724
11725       BINFO_BASE_APPEND (binfo, base_binfo);
11726       BINFO_BASE_ACCESS_APPEND (binfo, access);
11727     }
11728
11729   if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
11730     /* If we have space in the vbase vector, we must have shared at
11731        least one of them, and are therefore diamond shaped.  */
11732     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
11733
11734   /* Unmark all the types.  */
11735   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
11736     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11737   TYPE_MARKED_P (ref) = 0;
11738
11739   /* Now see if we have a repeated base type.  */
11740   if (!CLASSTYPE_REPEATED_BASE_P (ref))
11741     {
11742       for (base_binfo = binfo; base_binfo;
11743            base_binfo = TREE_CHAIN (base_binfo))
11744         {
11745           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11746             {
11747               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11748               break;
11749             }
11750           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11751         }
11752       for (base_binfo = binfo; base_binfo;
11753            base_binfo = TREE_CHAIN (base_binfo))
11754         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11755           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11756         else
11757           break;
11758     }
11759
11760   return true;
11761 }
11762
11763 \f
11764 /* Copies the enum-related properties from type SRC to type DST.
11765    Used with the underlying type of an enum and the enum itself.  */
11766 static void
11767 copy_type_enum (tree dst, tree src)
11768 {
11769   TYPE_MIN_VALUE (dst) = TYPE_MIN_VALUE (src);
11770   TYPE_MAX_VALUE (dst) = TYPE_MAX_VALUE (src);
11771   TYPE_SIZE (dst) = TYPE_SIZE (src);
11772   TYPE_SIZE_UNIT (dst) = TYPE_SIZE_UNIT (src);
11773   SET_TYPE_MODE (dst, TYPE_MODE (src));
11774   TYPE_PRECISION (dst) = TYPE_PRECISION (src);
11775   TYPE_ALIGN (dst) = TYPE_ALIGN (src);
11776   TYPE_USER_ALIGN (dst) = TYPE_USER_ALIGN (src);
11777   TYPE_UNSIGNED (dst) = TYPE_UNSIGNED (src);
11778 }
11779
11780 /* Begin compiling the definition of an enumeration type.
11781    NAME is its name, 
11782
11783    if ENUMTYPE is not NULL_TREE then the type has alredy been found.
11784
11785    UNDERLYING_TYPE is the type that will be used as the storage for
11786    the enumeration type. This should be NULL_TREE if no storage type
11787    was specified.
11788
11789    SCOPED_ENUM_P is true if this is a scoped enumeration type.
11790
11791    if IS_NEW is not NULL, gets TRUE iff a new type is created.
11792
11793    Returns the type object, as yet incomplete.
11794    Also records info about it so that build_enumerator
11795    may be used to declare the individual values as they are read.  */
11796
11797 tree
11798 start_enum (tree name, tree enumtype, tree underlying_type,
11799             bool scoped_enum_p, bool *is_new)
11800 {
11801   tree prevtype = NULL_TREE;
11802   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11803
11804   if (is_new)
11805     *is_new = false;
11806   /* [C++0x dcl.enum]p5:
11807
11808     If not explicitly specified, the underlying type of a scoped
11809     enumeration type is int.  */
11810   if (!underlying_type && scoped_enum_p)
11811     underlying_type = integer_type_node;
11812
11813   if (underlying_type)
11814     underlying_type = cv_unqualified (underlying_type);
11815
11816   /* If this is the real definition for a previous forward reference,
11817      fill in the contents in the same object that used to be the
11818      forward reference.  */
11819   if (!enumtype)
11820     enumtype = lookup_and_check_tag (enum_type, name,
11821                                      /*tag_scope=*/ts_current,
11822                                      /*template_header_p=*/false);
11823
11824   /* In case of a template_decl, the only check that should be deferred
11825      to instantiation time is the comparison of underlying types.  */
11826   if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
11827     {
11828       if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
11829         {
11830           error_at (input_location, "scoped/unscoped mismatch "
11831                     "in enum %q#T", enumtype);
11832           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11833                     "previous definition here");
11834           enumtype = error_mark_node;
11835         }
11836       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
11837         {
11838           error_at (input_location, "underlying type mismatch "
11839                     "in enum %q#T", enumtype);
11840           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11841                     "previous definition here");
11842           enumtype = error_mark_node;
11843         }
11844       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
11845                && !dependent_type_p (underlying_type)
11846                && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
11847                && !same_type_p (underlying_type,
11848                                 ENUM_UNDERLYING_TYPE (enumtype)))
11849         {
11850           error_at (input_location, "different underlying type "
11851                     "in enum %q#T", enumtype);
11852           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11853                     "previous definition here");
11854           underlying_type = NULL_TREE;
11855         }
11856     }
11857
11858   if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
11859       || processing_template_decl)
11860     {
11861       /* In case of error, make a dummy enum to allow parsing to
11862          continue.  */
11863       if (enumtype == error_mark_node)
11864         {
11865           name = make_anon_name ();
11866           enumtype = NULL_TREE;
11867         }
11868
11869       /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
11870          of an opaque enum, or an opaque enum of an already defined
11871          enumeration (C++0x only).
11872          In any other case, it'll be NULL_TREE. */
11873       if (!enumtype)
11874         {
11875           if (is_new)
11876             *is_new = true;
11877         }
11878       prevtype = enumtype;
11879       enumtype = cxx_make_type (ENUMERAL_TYPE);
11880       enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
11881       if (enumtype == error_mark_node)
11882         return error_mark_node;
11883
11884       /* The enum is considered opaque until the opening '{' of the
11885          enumerator list.  */
11886       SET_OPAQUE_ENUM_P (enumtype, true);
11887       ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
11888     }
11889
11890   SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
11891
11892   if (underlying_type)
11893     {
11894       if (CP_INTEGRAL_TYPE_P (underlying_type))
11895         {
11896           copy_type_enum (enumtype, underlying_type);
11897           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11898         }
11899       else if (dependent_type_p (underlying_type))
11900         ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11901       else
11902         error ("underlying type %<%T%> of %<%T%> must be an integral type", 
11903                underlying_type, enumtype);
11904     }
11905
11906   /* If into a template class, the returned enum is always the first
11907      declaration (opaque or not) seen. This way all the references to
11908      this type will be to the same declaration. The following ones are used
11909      only to check for definition errors.  */
11910   if (prevtype && processing_template_decl)
11911     return prevtype;
11912   else
11913     return enumtype;
11914 }
11915
11916 /* After processing and defining all the values of an enumeration type,
11917    install their decls in the enumeration type.
11918    ENUMTYPE is the type object.  */
11919
11920 void
11921 finish_enum_value_list (tree enumtype)
11922 {
11923   tree values;
11924   tree underlying_type;
11925   tree decl;
11926   tree value;
11927   tree minnode, maxnode;
11928   tree t;
11929
11930   bool fixed_underlying_type_p 
11931     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
11932
11933   /* We built up the VALUES in reverse order.  */
11934   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
11935
11936   /* For an enum defined in a template, just set the type of the values;
11937      all further processing is postponed until the template is
11938      instantiated.  We need to set the type so that tsubst of a CONST_DECL
11939      works.  */
11940   if (processing_template_decl)
11941     {
11942       for (values = TYPE_VALUES (enumtype);
11943            values;
11944            values = TREE_CHAIN (values))
11945         TREE_TYPE (TREE_VALUE (values)) = enumtype;
11946       return;
11947     }
11948
11949   /* Determine the minimum and maximum values of the enumerators.  */
11950   if (TYPE_VALUES (enumtype))
11951     {
11952       minnode = maxnode = NULL_TREE;
11953
11954       for (values = TYPE_VALUES (enumtype);
11955            values;
11956            values = TREE_CHAIN (values))
11957         {
11958           decl = TREE_VALUE (values);
11959
11960           /* [dcl.enum]: Following the closing brace of an enum-specifier,
11961              each enumerator has the type of its enumeration.  Prior to the
11962              closing brace, the type of each enumerator is the type of its
11963              initializing value.  */
11964           TREE_TYPE (decl) = enumtype;
11965
11966           /* Update the minimum and maximum values, if appropriate.  */
11967           value = DECL_INITIAL (decl);
11968           if (value == error_mark_node)
11969             value = integer_zero_node;
11970           /* Figure out what the minimum and maximum values of the
11971              enumerators are.  */
11972           if (!minnode)
11973             minnode = maxnode = value;
11974           else if (tree_int_cst_lt (maxnode, value))
11975             maxnode = value;
11976           else if (tree_int_cst_lt (value, minnode))
11977             minnode = value;
11978         }
11979     }
11980   else
11981     /* [dcl.enum]
11982
11983        If the enumerator-list is empty, the underlying type is as if
11984        the enumeration had a single enumerator with value 0.  */
11985     minnode = maxnode = integer_zero_node;
11986
11987   if (!fixed_underlying_type_p)
11988     {
11989       /* Compute the number of bits require to represent all values of the
11990          enumeration.  We must do this before the type of MINNODE and
11991          MAXNODE are transformed, since tree_int_cst_min_precision relies
11992          on the TREE_TYPE of the value it is passed.  */
11993       bool unsignedp = tree_int_cst_sgn (minnode) >= 0;
11994       int lowprec = tree_int_cst_min_precision (minnode, unsignedp);
11995       int highprec = tree_int_cst_min_precision (maxnode, unsignedp);
11996       int precision = MAX (lowprec, highprec);
11997       unsigned int itk;
11998       bool use_short_enum;
11999
12000       /* Determine the underlying type of the enumeration.
12001
12002          [dcl.enum]
12003
12004          The underlying type of an enumeration is an integral type that
12005          can represent all the enumerator values defined in the
12006          enumeration.  It is implementation-defined which integral type is
12007          used as the underlying type for an enumeration except that the
12008          underlying type shall not be larger than int unless the value of
12009          an enumerator cannot fit in an int or unsigned int.
12010
12011          We use "int" or an "unsigned int" as the underlying type, even if
12012          a smaller integral type would work, unless the user has
12013          explicitly requested that we use the smallest possible type.  The
12014          user can request that for all enumerations with a command line
12015          flag, or for just one enumeration with an attribute.  */
12016
12017       use_short_enum = flag_short_enums
12018         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12019
12020       for (itk = (use_short_enum ? itk_char : itk_int);
12021            itk != itk_none;
12022            itk++)
12023         {
12024           underlying_type = integer_types[itk];
12025           if (underlying_type != NULL_TREE
12026               && TYPE_PRECISION (underlying_type) >= precision
12027               && TYPE_UNSIGNED (underlying_type) == unsignedp)
12028             break;
12029         }
12030       if (itk == itk_none)
12031         {
12032           /* DR 377
12033
12034              IF no integral type can represent all the enumerator values, the
12035              enumeration is ill-formed.  */
12036           error ("no integral type can represent all of the enumerator values "
12037                  "for %qT", enumtype);
12038           precision = TYPE_PRECISION (long_long_integer_type_node);
12039           underlying_type = integer_types[itk_unsigned_long_long];
12040         }
12041
12042       /* [dcl.enum]
12043
12044          The value of sizeof() applied to an enumeration type, an object
12045          of an enumeration type, or an enumerator, is the value of sizeof()
12046          applied to the underlying type.  */
12047       copy_type_enum (enumtype, underlying_type);
12048
12049       /* Compute the minimum and maximum values for the type.
12050
12051          [dcl.enum]
12052
12053          For an enumeration where emin is the smallest enumerator and emax
12054          is the largest, the values of the enumeration are the values of the
12055          underlying type in the range bmin to bmax, where bmin and bmax are,
12056          respectively, the smallest and largest values of the smallest bit-
12057          field that can store emin and emax.  */
12058
12059       /* The middle-end currently assumes that types with TYPE_PRECISION
12060          narrower than their underlying type are suitably zero or sign
12061          extended to fill their mode.  Similarly, it assumes that the front
12062          end assures that a value of a particular type must be within
12063          TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12064
12065          We used to set these fields based on bmin and bmax, but that led
12066          to invalid assumptions like optimizing away bounds checking.  So
12067          now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12068          TYPE_MAX_VALUE to the values for the mode above and only restrict
12069          the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
12070       ENUM_UNDERLYING_TYPE (enumtype)
12071         = build_distinct_type_copy (underlying_type);
12072       TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12073       set_min_and_max_values_for_integral_type
12074         (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
12075
12076       /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
12077       if (flag_strict_enums)
12078         set_min_and_max_values_for_integral_type (enumtype, precision,
12079                                                   unsignedp);
12080     }
12081   else
12082     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
12083
12084   /* Convert each of the enumerators to the type of the underlying
12085      type of the enumeration.  */
12086   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
12087     {
12088       location_t saved_location;
12089
12090       decl = TREE_VALUE (values);
12091       saved_location = input_location;
12092       input_location = DECL_SOURCE_LOCATION (decl);
12093       if (fixed_underlying_type_p)
12094         /* If the enumeration type has a fixed underlying type, we
12095            already checked all of the enumerator values.  */
12096         value = DECL_INITIAL (decl);
12097       else
12098         value = perform_implicit_conversion (underlying_type,
12099                                              DECL_INITIAL (decl),
12100                                              tf_warning_or_error);
12101       input_location = saved_location;
12102
12103       /* Do not clobber shared ints.  */
12104       value = copy_node (value);
12105
12106       TREE_TYPE (value) = enumtype;
12107       DECL_INITIAL (decl) = value;
12108     }
12109
12110   /* Fix up all variant types of this enum type.  */
12111   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
12112     TYPE_VALUES (t) = TYPE_VALUES (enumtype);
12113
12114   /* Finish debugging output for this type.  */
12115   rest_of_type_compilation (enumtype, namespace_bindings_p ());
12116 }
12117
12118 /* Finishes the enum type. This is called only the first time an
12119    enumeration is seen, be it opaque or odinary.
12120    ENUMTYPE is the type object.  */
12121
12122 void
12123 finish_enum (tree enumtype)
12124 {
12125   if (processing_template_decl)
12126     {
12127       if (at_function_scope_p ())
12128         add_stmt (build_min (TAG_DEFN, enumtype));
12129       return;
12130     }
12131
12132   /* Here there should not be any variants of this type.  */
12133   gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
12134               && !TYPE_NEXT_VARIANT (enumtype));
12135 }
12136
12137 /* Build and install a CONST_DECL for an enumeration constant of the
12138    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12139    LOC is the location of NAME.
12140    Assignment of sequential values by default is handled here.  */
12141
12142 void
12143 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
12144 {
12145   tree decl;
12146   tree context;
12147   tree type;
12148
12149   /* If the VALUE was erroneous, pretend it wasn't there; that will
12150      result in the enum being assigned the next value in sequence.  */
12151   if (value == error_mark_node)
12152     value = NULL_TREE;
12153
12154   /* Remove no-op casts from the value.  */
12155   if (value)
12156     STRIP_TYPE_NOPS (value);
12157
12158   if (! processing_template_decl)
12159     {
12160       /* Validate and default VALUE.  */
12161       if (value != NULL_TREE)
12162         {
12163           value = cxx_constant_value (value);
12164
12165           if (TREE_CODE (value) == INTEGER_CST
12166               && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
12167             {
12168               value = perform_integral_promotions (value);
12169             }
12170           else
12171             {
12172               error ("enumerator value for %qD is not an integer constant", name);
12173               value = NULL_TREE;
12174             }
12175         }
12176
12177       /* Default based on previous value.  */
12178       if (value == NULL_TREE)
12179         {
12180           if (TYPE_VALUES (enumtype))
12181             {
12182               HOST_WIDE_INT hi;
12183               unsigned HOST_WIDE_INT lo;
12184               tree prev_value;
12185               bool overflowed;
12186
12187               /* C++03 7.2/4: If no initializer is specified for the first
12188                  enumerator, the type is an unspecified integral
12189                  type. Otherwise the type is the same as the type of the
12190                  initializing value of the preceding enumerator unless the
12191                  incremented value is not representable in that type, in
12192                  which case the type is an unspecified integral type
12193                  sufficient to contain the incremented value.  */
12194               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
12195               if (error_operand_p (prev_value))
12196                 value = error_mark_node;
12197               else
12198                 {
12199                   overflowed = add_double (TREE_INT_CST_LOW (prev_value),
12200                                            TREE_INT_CST_HIGH (prev_value),
12201                                            1, 0, &lo, &hi);
12202                   if (!overflowed)
12203                     {
12204                       double_int di;
12205                       tree type = TREE_TYPE (prev_value);
12206                       bool pos = (TYPE_UNSIGNED (type) || hi >= 0);
12207                       di.low = lo; di.high = hi;
12208                       if (!double_int_fits_to_tree_p (type, di))
12209                         {
12210                           unsigned int itk;
12211                           for (itk = itk_int; itk != itk_none; itk++)
12212                             {
12213                               type = integer_types[itk];
12214                               if (type != NULL_TREE
12215                                   && (pos || !TYPE_UNSIGNED (type))
12216                                   && double_int_fits_to_tree_p (type, di))
12217                                 break;
12218                             }
12219                           if (type && cxx_dialect < cxx0x
12220                               && itk > itk_unsigned_long)
12221                             pedwarn (input_location, OPT_Wlong_long, pos ? "\
12222 incremented enumerator value is too large for %<unsigned long%>" :  "\
12223 incremented enumerator value is too large for %<long%>");
12224                         }
12225                       if (type == NULL_TREE)
12226                         overflowed = true;
12227                       else
12228                         value = double_int_to_tree (type, di);
12229                     }
12230
12231                   if (overflowed)
12232                     {
12233                       error ("overflow in enumeration values at %qD", name);
12234                       value = error_mark_node;
12235                     }
12236                 }
12237             }
12238           else
12239             value = integer_zero_node;
12240         }
12241
12242       /* Remove no-op casts from the value.  */
12243       STRIP_TYPE_NOPS (value);
12244
12245       /* If the underlying type of the enum is fixed, check whether
12246          the enumerator values fits in the underlying type.  If it
12247          does not fit, the program is ill-formed [C++0x dcl.enum].  */
12248       if (ENUM_UNDERLYING_TYPE (enumtype)
12249           && value
12250           && TREE_CODE (value) == INTEGER_CST
12251           && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
12252         {
12253           error ("enumerator value %E is too large for underlying type %<%T%>",
12254                  value, ENUM_UNDERLYING_TYPE (enumtype));
12255
12256           /* Silently convert the value so that we can continue.  */
12257           value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
12258                                                value, tf_none);
12259         }
12260     }
12261
12262   /* C++ associates enums with global, function, or class declarations.  */
12263   context = current_scope ();
12264
12265   /* Build the actual enumeration constant.  Note that the enumeration
12266      constants have the underlying type of the enum (if it is fixed)
12267      or the type of their initializer (if the underlying type of the
12268      enum is not fixed):
12269
12270       [ C++0x dcl.enum ]
12271
12272         If the underlying type is fixed, the type of each enumerator
12273         prior to the closing brace is the underlying type; if the
12274         initializing value of an enumerator cannot be represented by
12275         the underlying type, the program is ill-formed. If the
12276         underlying type is not fixed, the type of each enumerator is
12277         the type of its initializing value.
12278
12279     If the underlying type is not fixed, it will be computed by
12280     finish_enum and we will reset the type of this enumerator.  Of
12281     course, if we're processing a template, there may be no value.  */
12282   type = value ? TREE_TYPE (value) : NULL_TREE;
12283
12284   if (context && context == current_class_type)
12285     /* This enum declaration is local to the class.  We need the full
12286        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
12287     decl = build_lang_decl_loc (loc, CONST_DECL, name, type);
12288   else
12289     /* It's a global enum, or it's local to a function.  (Note local to
12290        a function could mean local to a class method.  */
12291     decl = build_decl (loc, CONST_DECL, name, type);
12292   
12293   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12294   TREE_CONSTANT (decl) = 1;
12295   TREE_READONLY (decl) = 1;
12296   DECL_INITIAL (decl) = value;
12297
12298   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
12299     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12300        on the TYPE_FIELDS list for `S'.  (That's so that you can say
12301        things like `S::i' later.)  */
12302     finish_member_declaration (decl);
12303   else
12304     pushdecl (decl);
12305
12306   /* Add this enumeration constant to the list for this type.  */
12307   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
12308 }
12309
12310 /* Look for an enumerator with the given NAME within the enumeration
12311    type ENUMTYPE.  This routine is used primarily for qualified name
12312    lookup into an enumerator in C++0x, e.g.,
12313
12314      enum class Color { Red, Green, Blue };
12315
12316      Color color = Color::Red;
12317
12318    Returns the value corresponding to the enumerator, or
12319    NULL_TREE if no such enumerator was found.  */
12320 tree
12321 lookup_enumerator (tree enumtype, tree name)
12322 {
12323   tree e;
12324   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
12325
12326   e = purpose_member (name, TYPE_VALUES (enumtype));
12327   return e? TREE_VALUE (e) : NULL_TREE;
12328 }
12329
12330 \f
12331 /* We're defining DECL.  Make sure that its type is OK.  */
12332
12333 static void
12334 check_function_type (tree decl, tree current_function_parms)
12335 {
12336   tree fntype = TREE_TYPE (decl);
12337   tree return_type = complete_type (TREE_TYPE (fntype));
12338
12339   /* In a function definition, arg types must be complete.  */
12340   require_complete_types_for_parms (current_function_parms);
12341
12342   if (dependent_type_p (return_type))
12343     return;
12344   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
12345       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
12346     {
12347       tree args = TYPE_ARG_TYPES (fntype);
12348
12349       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
12350         error ("return type %q#T is incomplete", return_type);
12351       else
12352         error ("return type has Java class type %q#T", return_type);
12353
12354       /* Make it return void instead.  */
12355       if (TREE_CODE (fntype) == METHOD_TYPE)
12356         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
12357                                              void_type_node,
12358                                              TREE_CHAIN (args));
12359       else
12360         fntype = build_function_type (void_type_node, args);
12361       fntype
12362         = build_exception_variant (fntype,
12363                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
12364       fntype = (cp_build_type_attribute_variant
12365                 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
12366       TREE_TYPE (decl) = fntype;
12367     }
12368   else
12369     abstract_virtuals_error (decl, TREE_TYPE (fntype));
12370 }
12371
12372 /* Create the FUNCTION_DECL for a function definition.
12373    DECLSPECS and DECLARATOR are the parts of the declaration;
12374    they describe the function's name and the type it returns,
12375    but twisted together in a fashion that parallels the syntax of C.
12376
12377    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12378    DECLARATOR is really the DECL for the function we are about to
12379    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12380    indicating that the function is an inline defined in-class.
12381
12382    This function creates a binding context for the function body
12383    as well as setting up the FUNCTION_DECL in current_function_decl.
12384
12385    For C++, we must first check whether that datum makes any sense.
12386    For example, "class A local_a(1,2);" means that variable local_a
12387    is an aggregate of type A, which should have a constructor
12388    applied to it with the argument list [1, 2].
12389
12390    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
12391    or may be a BLOCK if the function has been defined previously
12392    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
12393    error_mark_node if the function has never been defined, or
12394    a BLOCK if the function has been defined somewhere.  */
12395
12396 void
12397 start_preparsed_function (tree decl1, tree attrs, int flags)
12398 {
12399   tree ctype = NULL_TREE;
12400   tree fntype;
12401   tree restype;
12402   int doing_friend = 0;
12403   struct cp_binding_level *bl;
12404   tree current_function_parms;
12405   struct c_fileinfo *finfo
12406     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
12407   bool honor_interface;
12408
12409   /* Sanity check.  */
12410   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
12411   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
12412
12413   fntype = TREE_TYPE (decl1);
12414   if (TREE_CODE (fntype) == METHOD_TYPE)
12415     ctype = TYPE_METHOD_BASETYPE (fntype);
12416
12417   /* ISO C++ 11.4/5.  A friend function defined in a class is in
12418      the (lexical) scope of the class in which it is defined.  */
12419   if (!ctype && DECL_FRIEND_P (decl1))
12420     {
12421       ctype = DECL_FRIEND_CONTEXT (decl1);
12422
12423       /* CTYPE could be null here if we're dealing with a template;
12424          for example, `inline friend float foo()' inside a template
12425          will have no CTYPE set.  */
12426       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12427         ctype = NULL_TREE;
12428       else
12429         doing_friend = 1;
12430     }
12431
12432   if (DECL_DECLARED_INLINE_P (decl1)
12433       && lookup_attribute ("noinline", attrs))
12434     warning (0, "inline function %q+D given attribute noinline", decl1);
12435
12436   /* Handle gnu_inline attribute.  */
12437   if (GNU_INLINE_P (decl1))
12438     {
12439       DECL_EXTERNAL (decl1) = 1;
12440       DECL_NOT_REALLY_EXTERN (decl1) = 0;
12441       DECL_INTERFACE_KNOWN (decl1) = 1;
12442       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
12443     }
12444
12445   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
12446     /* This is a constructor, we must ensure that any default args
12447        introduced by this definition are propagated to the clones
12448        now. The clones are used directly in overload resolution.  */
12449     adjust_clone_args (decl1);
12450
12451   /* Sometimes we don't notice that a function is a static member, and
12452      build a METHOD_TYPE for it.  Fix that up now.  */
12453   gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12454                 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
12455
12456   /* Set up current_class_type, and enter the scope of the class, if
12457      appropriate.  */
12458   if (ctype)
12459     push_nested_class (ctype);
12460   else if (DECL_STATIC_FUNCTION_P (decl1))
12461     push_nested_class (DECL_CONTEXT (decl1));
12462
12463   /* Now that we have entered the scope of the class, we must restore
12464      the bindings for any template parameters surrounding DECL1, if it
12465      is an inline member template.  (Order is important; consider the
12466      case where a template parameter has the same name as a field of
12467      the class.)  It is not until after this point that
12468      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12469   if (flags & SF_INCLASS_INLINE)
12470     maybe_begin_member_template_processing (decl1);
12471
12472   /* Effective C++ rule 15.  */
12473   if (warn_ecpp
12474       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
12475       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12476     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
12477
12478   /* Make the init_value nonzero so pushdecl knows this is not tentative.
12479      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
12480   if (!DECL_INITIAL (decl1))
12481     DECL_INITIAL (decl1) = error_mark_node;
12482
12483   /* This function exists in static storage.
12484      (This does not mean `static' in the C sense!)  */
12485   TREE_STATIC (decl1) = 1;
12486
12487   /* We must call push_template_decl after current_class_type is set
12488      up.  (If we are processing inline definitions after exiting a
12489      class scope, current_class_type will be NULL_TREE until set above
12490      by push_nested_class.)  */
12491   if (processing_template_decl)
12492     {
12493       /* FIXME: Handle error_mark_node more gracefully.  */
12494       tree newdecl1 = push_template_decl (decl1);
12495       if (newdecl1 != error_mark_node)
12496         decl1 = newdecl1;
12497     }
12498
12499   /* We are now in the scope of the function being defined.  */
12500   current_function_decl = decl1;
12501
12502   /* Save the parm names or decls from this function's declarator
12503      where store_parm_decls will find them.  */
12504   current_function_parms = DECL_ARGUMENTS (decl1);
12505
12506   /* Make sure the parameter and return types are reasonable.  When
12507      you declare a function, these types can be incomplete, but they
12508      must be complete when you define the function.  */
12509   check_function_type (decl1, current_function_parms);
12510
12511   /* Build the return declaration for the function.  */
12512   restype = TREE_TYPE (fntype);
12513   if (DECL_RESULT (decl1) == NULL_TREE)
12514     {
12515       tree resdecl;
12516
12517       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
12518       DECL_ARTIFICIAL (resdecl) = 1;
12519       DECL_IGNORED_P (resdecl) = 1;
12520       DECL_RESULT (decl1) = resdecl;
12521
12522       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
12523     }
12524
12525   /* Let the user know we're compiling this function.  */
12526   announce_function (decl1);
12527
12528   /* Record the decl so that the function name is defined.
12529      If we already have a decl for this name, and it is a FUNCTION_DECL,
12530      use the old decl.  */
12531   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
12532     {
12533       /* A specialization is not used to guide overload resolution.  */
12534       if (!DECL_FUNCTION_MEMBER_P (decl1)
12535           && !(DECL_USE_TEMPLATE (decl1) &&
12536                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
12537         {
12538           tree olddecl = pushdecl (decl1);
12539
12540           if (olddecl == error_mark_node)
12541             /* If something went wrong when registering the declaration,
12542                use DECL1; we have to have a FUNCTION_DECL to use when
12543                parsing the body of the function.  */
12544             ;
12545           else
12546             {
12547               /* Otherwise, OLDDECL is either a previous declaration
12548                  of the same function or DECL1 itself.  */
12549
12550               if (warn_missing_declarations
12551                   && olddecl == decl1
12552                   && !DECL_MAIN_P (decl1)
12553                   && TREE_PUBLIC (decl1)
12554                   && !DECL_DECLARED_INLINE_P (decl1))
12555                 {
12556                   tree context;
12557
12558                   /* Check whether DECL1 is in an anonymous
12559                      namespace.  */
12560                   for (context = DECL_CONTEXT (decl1);
12561                        context;
12562                        context = DECL_CONTEXT (context))
12563                     {
12564                       if (TREE_CODE (context) == NAMESPACE_DECL
12565                           && DECL_NAME (context) == NULL_TREE)
12566                         break;
12567                     }
12568
12569                   if (context == NULL)
12570                     warning (OPT_Wmissing_declarations,
12571                              "no previous declaration for %q+D", decl1);
12572                 }
12573
12574               decl1 = olddecl;
12575             }
12576         }
12577       else
12578         {
12579           /* We need to set the DECL_CONTEXT.  */
12580           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12581             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12582         }
12583       fntype = TREE_TYPE (decl1);
12584
12585       /* If #pragma weak applies, mark the decl appropriately now.
12586          The pragma only applies to global functions.  Because
12587          determining whether or not the #pragma applies involves
12588          computing the mangled name for the declaration, we cannot
12589          apply the pragma until after we have merged this declaration
12590          with any previous declarations; if the original declaration
12591          has a linkage specification, that specification applies to
12592          the definition as well, and may affect the mangled name.  */
12593       if (DECL_FILE_SCOPE_P (decl1))
12594         maybe_apply_pragma_weak (decl1);
12595     }
12596
12597   /* constexpr functions must have literal argument types and
12598      literal return type.  */
12599   validate_constexpr_fundecl (decl1);
12600
12601   /* Reset this in case the call to pushdecl changed it.  */
12602   current_function_decl = decl1;
12603
12604   gcc_assert (DECL_INITIAL (decl1));
12605
12606   /* This function may already have been parsed, in which case just
12607      return; our caller will skip over the body without parsing.  */
12608   if (DECL_INITIAL (decl1) != error_mark_node)
12609     return;
12610
12611   /* Initialize RTL machinery.  We cannot do this until
12612      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
12613      even when processing a template; this is how we get
12614      CFUN set up, and our per-function variables initialized.
12615      FIXME factor out the non-RTL stuff.  */
12616   bl = current_binding_level;
12617   allocate_struct_function (decl1, processing_template_decl);
12618
12619   /* Initialize the language data structures.  Whenever we start
12620      a new function, we destroy temporaries in the usual way.  */
12621   cfun->language = ggc_alloc_cleared_language_function ();
12622   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
12623   current_binding_level = bl;
12624
12625   /* Start the statement-tree, start the tree now.  */
12626   DECL_SAVED_TREE (decl1) = push_stmt_list ();
12627
12628   /* If we are (erroneously) defining a function that we have already
12629      defined before, wipe out what we knew before.  */
12630   if (!DECL_PENDING_INLINE_P (decl1))
12631     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12632
12633   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12634     {
12635       /* We know that this was set up by `grokclassfn'.  We do not
12636          wait until `store_parm_decls', since evil parse errors may
12637          never get us to that point.  Here we keep the consistency
12638          between `current_class_type' and `current_class_ptr'.  */
12639       tree t = DECL_ARGUMENTS (decl1);
12640
12641       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
12642       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
12643
12644       cp_function_chain->x_current_class_ref
12645         = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
12646       cp_function_chain->x_current_class_ptr = t;
12647
12648       /* Constructors and destructors need to know whether they're "in
12649          charge" of initializing virtual base classes.  */
12650       t = DECL_CHAIN (t);
12651       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
12652         {
12653           current_in_charge_parm = t;
12654           t = DECL_CHAIN (t);
12655         }
12656       if (DECL_HAS_VTT_PARM_P (decl1))
12657         {
12658           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
12659           current_vtt_parm = t;
12660         }
12661     }
12662
12663   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
12664                      /* Implicitly-defined methods (like the
12665                         destructor for a class in which no destructor
12666                         is explicitly declared) must not be defined
12667                         until their definition is needed.  So, we
12668                         ignore interface specifications for
12669                         compiler-generated functions.  */
12670                      && !DECL_ARTIFICIAL (decl1));
12671
12672   if (DECL_INTERFACE_KNOWN (decl1))
12673     {
12674       tree ctx = decl_function_context (decl1);
12675
12676       if (DECL_NOT_REALLY_EXTERN (decl1))
12677         DECL_EXTERNAL (decl1) = 0;
12678
12679       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
12680           && TREE_PUBLIC (ctx))
12681         /* This is a function in a local class in an extern inline
12682            function.  */
12683         comdat_linkage (decl1);
12684     }
12685   /* If this function belongs to an interface, it is public.
12686      If it belongs to someone else's interface, it is also external.
12687      This only affects inlines and template instantiations.  */
12688   else if (!finfo->interface_unknown && honor_interface)
12689     {
12690       if (DECL_DECLARED_INLINE_P (decl1)
12691           || DECL_TEMPLATE_INSTANTIATION (decl1)
12692           || processing_template_decl)
12693         {
12694           DECL_EXTERNAL (decl1)
12695             = (finfo->interface_only
12696                || (DECL_DECLARED_INLINE_P (decl1)
12697                    && ! flag_implement_inlines
12698                    && !DECL_VINDEX (decl1)));
12699
12700           /* For WIN32 we also want to put these in linkonce sections.  */
12701           maybe_make_one_only (decl1);
12702         }
12703       else
12704         DECL_EXTERNAL (decl1) = 0;
12705       DECL_INTERFACE_KNOWN (decl1) = 1;
12706       /* If this function is in an interface implemented in this file,
12707          make sure that the back end knows to emit this function
12708          here.  */
12709       if (!DECL_EXTERNAL (decl1))
12710         mark_needed (decl1);
12711     }
12712   else if (finfo->interface_unknown && finfo->interface_only
12713            && honor_interface)
12714     {
12715       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
12716          interface, we will have both finfo->interface_unknown and
12717          finfo->interface_only set.  In that case, we don't want to
12718          use the normal heuristics because someone will supply a
12719          #pragma implementation elsewhere, and deducing it here would
12720          produce a conflict.  */
12721       comdat_linkage (decl1);
12722       DECL_EXTERNAL (decl1) = 0;
12723       DECL_INTERFACE_KNOWN (decl1) = 1;
12724       DECL_DEFER_OUTPUT (decl1) = 1;
12725     }
12726   else
12727     {
12728       /* This is a definition, not a reference.
12729          So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
12730       if (!GNU_INLINE_P (decl1))
12731         DECL_EXTERNAL (decl1) = 0;
12732
12733       if ((DECL_DECLARED_INLINE_P (decl1)
12734            || DECL_TEMPLATE_INSTANTIATION (decl1))
12735           && ! DECL_INTERFACE_KNOWN (decl1))
12736         DECL_DEFER_OUTPUT (decl1) = 1;
12737       else
12738         DECL_INTERFACE_KNOWN (decl1) = 1;
12739     }
12740
12741   /* Determine the ELF visibility attribute for the function.  We must not
12742      do this before calling "pushdecl", as we must allow "duplicate_decls"
12743      to merge any attributes appropriately.  We also need to wait until
12744      linkage is set.  */
12745   if (!DECL_CLONED_FUNCTION_P (decl1))
12746     determine_visibility (decl1);
12747
12748   begin_scope (sk_function_parms, decl1);
12749
12750   ++function_depth;
12751
12752   if (DECL_DESTRUCTOR_P (decl1)
12753       || (DECL_CONSTRUCTOR_P (decl1)
12754           && targetm.cxx.cdtor_returns_this ()))
12755     {
12756       cdtor_label = build_decl (input_location, 
12757                                 LABEL_DECL, NULL_TREE, NULL_TREE);
12758       DECL_CONTEXT (cdtor_label) = current_function_decl;
12759     }
12760
12761   start_fname_decls ();
12762
12763   store_parm_decls (current_function_parms);
12764 }
12765
12766
12767 /* Like start_preparsed_function, except that instead of a
12768    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
12769
12770    Returns 1 on success.  If the DECLARATOR is not suitable for a function
12771    (it defines a datum instead), we return 0, which tells
12772    yyparse to report a parse error.  */
12773
12774 int
12775 start_function (cp_decl_specifier_seq *declspecs,
12776                 const cp_declarator *declarator,
12777                 tree attrs)
12778 {
12779   tree decl1;
12780
12781   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
12782   if (decl1 == error_mark_node)
12783     return 0;
12784   /* If the declarator is not suitable for a function definition,
12785      cause a syntax error.  */
12786   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
12787     {
12788       error ("invalid function declaration");
12789       return 0;
12790     }
12791
12792   if (DECL_MAIN_P (decl1))
12793     /* main must return int.  grokfndecl should have corrected it
12794        (and issued a diagnostic) if the user got it wrong.  */
12795     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
12796                              integer_type_node));
12797
12798   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
12799
12800   return 1;
12801 }
12802 \f
12803 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
12804    FN.  */
12805
12806 static bool
12807 use_eh_spec_block (tree fn)
12808 {
12809   return (flag_exceptions && flag_enforce_eh_specs
12810           && !processing_template_decl
12811           && !type_throw_all_p (TREE_TYPE (fn))
12812           /* We insert the EH_SPEC_BLOCK only in the original
12813              function; then, it is copied automatically to the
12814              clones.  */
12815           && !DECL_CLONED_FUNCTION_P (fn)
12816           /* Implicitly-generated constructors and destructors have
12817              exception specifications.  However, those specifications
12818              are the union of the possible exceptions specified by the
12819              constructors/destructors for bases and members, so no
12820              unallowed exception will ever reach this function.  By
12821              not creating the EH_SPEC_BLOCK we save a little memory,
12822              and we avoid spurious warnings about unreachable
12823              code.  */
12824           && !DECL_DEFAULTED_FN (fn));
12825 }
12826
12827 /* Store the parameter declarations into the current function declaration.
12828    This is called after parsing the parameter declarations, before
12829    digesting the body of the function.
12830
12831    Also install to binding contour return value identifier, if any.  */
12832
12833 static void
12834 store_parm_decls (tree current_function_parms)
12835 {
12836   tree fndecl = current_function_decl;
12837   tree parm;
12838
12839   /* This is a chain of any other decls that came in among the parm
12840      declarations.  If a parm is declared with  enum {foo, bar} x;
12841      then CONST_DECLs for foo and bar are put here.  */
12842   tree nonparms = NULL_TREE;
12843
12844   if (current_function_parms)
12845     {
12846       /* This case is when the function was defined with an ANSI prototype.
12847          The parms already have decls, so we need not do anything here
12848          except record them as in effect
12849          and complain if any redundant old-style parm decls were written.  */
12850
12851       tree specparms = current_function_parms;
12852       tree next;
12853
12854       /* Must clear this because it might contain TYPE_DECLs declared
12855              at class level.  */
12856       current_binding_level->names = NULL;
12857
12858       /* If we're doing semantic analysis, then we'll call pushdecl
12859              for each of these.  We must do them in reverse order so that
12860              they end in the correct forward order.  */
12861       specparms = nreverse (specparms);
12862
12863       for (parm = specparms; parm; parm = next)
12864         {
12865           next = DECL_CHAIN (parm);
12866           if (TREE_CODE (parm) == PARM_DECL)
12867             {
12868               if (DECL_NAME (parm) == NULL_TREE
12869                   || TREE_CODE (parm) != VOID_TYPE)
12870                 pushdecl (parm);
12871               else
12872                 error ("parameter %qD declared void", parm);
12873             }
12874           else
12875             {
12876               /* If we find an enum constant or a type tag,
12877                  put it aside for the moment.  */
12878               TREE_CHAIN (parm) = NULL_TREE;
12879               nonparms = chainon (nonparms, parm);
12880             }
12881         }
12882
12883       /* Get the decls in their original chain order and record in the
12884          function.  This is all and only the PARM_DECLs that were
12885          pushed into scope by the loop above.  */
12886       DECL_ARGUMENTS (fndecl) = getdecls ();
12887     }
12888   else
12889     DECL_ARGUMENTS (fndecl) = NULL_TREE;
12890
12891   /* Now store the final chain of decls for the arguments
12892      as the decl-chain of the current lexical scope.
12893      Put the enumerators in as well, at the front so that
12894      DECL_ARGUMENTS is not modified.  */
12895   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
12896
12897   if (use_eh_spec_block (current_function_decl))
12898     current_eh_spec_block = begin_eh_spec_block ();
12899 }
12900
12901 \f
12902 /* We have finished doing semantic analysis on DECL, but have not yet
12903    generated RTL for its body.  Save away our current state, so that
12904    when we want to generate RTL later we know what to do.  */
12905
12906 static void
12907 save_function_data (tree decl)
12908 {
12909   struct language_function *f;
12910
12911   /* Save the language-specific per-function data so that we can
12912      get it back when we really expand this function.  */
12913   gcc_assert (!DECL_PENDING_INLINE_P (decl));
12914
12915   /* Make a copy.  */
12916   f = ggc_alloc_language_function ();
12917   memcpy (f, cp_function_chain, sizeof (struct language_function));
12918   DECL_SAVED_FUNCTION_DATA (decl) = f;
12919
12920   /* Clear out the bits we don't need.  */
12921   f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
12922   f->bindings = NULL;
12923   f->x_local_names = NULL;
12924 }
12925
12926
12927 /* Set the return value of the constructor (if present).  */
12928
12929 static void
12930 finish_constructor_body (void)
12931 {
12932   tree val;
12933   tree exprstmt;
12934
12935   if (targetm.cxx.cdtor_returns_this ()
12936       && (! TYPE_FOR_JAVA (current_class_type)))
12937     {
12938       /* Any return from a constructor will end up here.  */
12939       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
12940
12941       val = DECL_ARGUMENTS (current_function_decl);
12942       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12943                     DECL_RESULT (current_function_decl), val);
12944       /* Return the address of the object.  */
12945       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
12946       add_stmt (exprstmt);
12947     }
12948 }
12949
12950 /* Do all the processing for the beginning of a destructor; set up the
12951    vtable pointers and cleanups for bases and members.  */
12952
12953 static void
12954 begin_destructor_body (void)
12955 {
12956   tree compound_stmt;
12957
12958   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
12959      issued an error message.  We still want to try to process the
12960      body of the function, but initialize_vtbl_ptrs will crash if
12961      TYPE_BINFO is NULL.  */
12962   if (COMPLETE_TYPE_P (current_class_type))
12963     {
12964       compound_stmt = begin_compound_stmt (0);
12965       /* Make all virtual function table pointers in non-virtual base
12966          classes point to CURRENT_CLASS_TYPE's virtual function
12967          tables.  */
12968       initialize_vtbl_ptrs (current_class_ptr);
12969       finish_compound_stmt (compound_stmt);
12970
12971       /* And insert cleanups for our bases and members so that they
12972          will be properly destroyed if we throw.  */
12973       push_base_cleanups ();
12974     }
12975 }
12976
12977 /* At the end of every destructor we generate code to delete the object if
12978    necessary.  Do that now.  */
12979
12980 static void
12981 finish_destructor_body (void)
12982 {
12983   tree exprstmt;
12984
12985   /* Any return from a destructor will end up here; that way all base
12986      and member cleanups will be run when the function returns.  */
12987   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
12988
12989   /* In a virtual destructor, we must call delete.  */
12990   if (DECL_VIRTUAL_P (current_function_decl))
12991     {
12992       tree if_stmt;
12993       tree virtual_size = cxx_sizeof (current_class_type);
12994
12995       /* [class.dtor]
12996
12997       At the point of definition of a virtual destructor (including
12998       an implicit definition), non-placement operator delete shall
12999       be looked up in the scope of the destructor's class and if
13000       found shall be accessible and unambiguous.  */
13001       exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
13002                                       virtual_size,
13003                                       /*global_p=*/false,
13004                                       /*placement=*/NULL_TREE,
13005                                       /*alloc_fn=*/NULL_TREE);
13006
13007       if_stmt = begin_if_stmt ();
13008       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13009                                    current_in_charge_parm,
13010                                    integer_one_node),
13011                            if_stmt);
13012       finish_expr_stmt (exprstmt);
13013       finish_then_clause (if_stmt);
13014       finish_if_stmt (if_stmt);
13015     }
13016
13017   if (targetm.cxx.cdtor_returns_this ())
13018     {
13019       tree val;
13020
13021       val = DECL_ARGUMENTS (current_function_decl);
13022       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13023                     DECL_RESULT (current_function_decl), val);
13024       /* Return the address of the object.  */
13025       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13026       add_stmt (exprstmt);
13027     }
13028 }
13029
13030 /* Do the necessary processing for the beginning of a function body, which
13031    in this case includes member-initializers, but not the catch clauses of
13032    a function-try-block.  Currently, this means opening a binding level
13033    for the member-initializers (in a ctor) and member cleanups (in a dtor).  */
13034
13035 tree
13036 begin_function_body (void)
13037 {
13038   tree stmt;
13039
13040   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13041     return NULL_TREE;
13042
13043   if (processing_template_decl)
13044     /* Do nothing now.  */;
13045   else
13046     /* Always keep the BLOCK node associated with the outermost pair of
13047        curly braces of a function.  These are needed for correct
13048        operation of dwarfout.c.  */
13049     keep_next_level (true);
13050
13051   stmt = begin_compound_stmt (BCS_FN_BODY);
13052
13053   if (processing_template_decl)
13054     /* Do nothing now.  */;
13055   else if (DECL_DESTRUCTOR_P (current_function_decl))
13056     begin_destructor_body ();
13057
13058   return stmt;
13059 }
13060
13061 /* Do the processing for the end of a function body.  Currently, this means
13062    closing out the cleanups for fully-constructed bases and members, and in
13063    the case of the destructor, deleting the object if desired.  Again, this
13064    is only meaningful for [cd]tors, since they are the only functions where
13065    there is a significant distinction between the main body and any
13066    function catch clauses.  Handling, say, main() return semantics here
13067    would be wrong, as flowing off the end of a function catch clause for
13068    main() would also need to return 0.  */
13069
13070 void
13071 finish_function_body (tree compstmt)
13072 {
13073   if (compstmt == NULL_TREE)
13074     return;
13075
13076   /* Close the block.  */
13077   finish_compound_stmt (compstmt);
13078
13079   if (processing_template_decl)
13080     /* Do nothing now.  */;
13081   else if (DECL_CONSTRUCTOR_P (current_function_decl))
13082     finish_constructor_body ();
13083   else if (DECL_DESTRUCTOR_P (current_function_decl))
13084     finish_destructor_body ();
13085 }
13086
13087 /* Given a function, returns the BLOCK corresponding to the outermost level
13088    of curly braces, skipping the artificial block created for constructor
13089    initializers.  */
13090
13091 tree
13092 outer_curly_brace_block (tree fndecl)
13093 {
13094   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
13095   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13096     /* Skip the artificial function body block.  */
13097     block = BLOCK_SUBBLOCKS (block);
13098   return block;
13099 }
13100
13101 /* If FNDECL is a class's key method, add the class to the list of
13102    keyed classes that should be emitted.  */
13103
13104 static void
13105 record_key_method_defined (tree fndecl)
13106 {
13107   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
13108       && DECL_VIRTUAL_P (fndecl)
13109       && !processing_template_decl)
13110     {
13111       tree fnclass = DECL_CONTEXT (fndecl);
13112       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
13113         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
13114     }
13115 }
13116
13117 /* Subroutine of finish_function.
13118    Save the body of constexpr functions for possible
13119    future compile time evaluation.  */
13120
13121 static void
13122 maybe_save_function_definition (tree fun)
13123 {
13124   if (!processing_template_decl
13125       && DECL_DECLARED_CONSTEXPR_P (fun)
13126       && !DECL_CLONED_FUNCTION_P (fun))
13127     register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
13128 }
13129
13130 /* Finish up a function declaration and compile that function
13131    all the way to assembler language output.  The free the storage
13132    for the function definition.
13133
13134    FLAGS is a bitwise or of the following values:
13135      2 - INCLASS_INLINE
13136        We just finished processing the body of an in-class inline
13137        function definition.  (This processing will have taken place
13138        after the class definition is complete.)  */
13139
13140 tree
13141 finish_function (int flags)
13142 {
13143   tree fndecl = current_function_decl;
13144   tree fntype, ctype = NULL_TREE;
13145   int inclass_inline = (flags & 2) != 0;
13146
13147   /* When we get some parse errors, we can end up without a
13148      current_function_decl, so cope.  */
13149   if (fndecl == NULL_TREE)
13150     return error_mark_node;
13151
13152   if (c_dialect_objc ())
13153     objc_finish_function ();
13154
13155   gcc_assert (!defer_mark_used_calls);
13156   defer_mark_used_calls = true;
13157
13158   record_key_method_defined (fndecl);
13159
13160   fntype = TREE_TYPE (fndecl);
13161
13162   /*  TREE_READONLY (fndecl) = 1;
13163       This caused &foo to be of type ptr-to-const-function
13164       which then got a warning when stored in a ptr-to-function variable.  */
13165
13166   gcc_assert (building_stmt_tree ());
13167   /* The current function is being defined, so its DECL_INITIAL should
13168      be set, and unless there's a multiple definition, it should be
13169      error_mark_node.  */
13170   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
13171
13172   /* For a cloned function, we've already got all the code we need;
13173      there's no need to add any extra bits.  */
13174   if (!DECL_CLONED_FUNCTION_P (fndecl))
13175     {
13176       if (DECL_MAIN_P (current_function_decl))
13177         {
13178           tree stmt;
13179
13180           /* Make it so that `main' always returns 0 by default (or
13181              1 for VMS).  */
13182 #if VMS_TARGET
13183           stmt = finish_return_stmt (integer_one_node);
13184 #else
13185           stmt = finish_return_stmt (integer_zero_node);
13186 #endif
13187           /* Hack.  We don't want the middle-end to warn that this
13188              return is unreachable, so put the statement on the
13189              special line 0.  */
13190           {
13191             location_t linezero = linemap_line_start (line_table, 0, 1);
13192             SET_EXPR_LOCATION (stmt, linezero);
13193           }
13194         }
13195
13196       if (use_eh_spec_block (current_function_decl))
13197         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
13198                               (TREE_TYPE (current_function_decl)),
13199                               current_eh_spec_block);
13200     }
13201
13202   /* If we're saving up tree structure, tie off the function now.  */
13203   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
13204
13205   finish_fname_decls ();
13206
13207   /* If this function can't throw any exceptions, remember that.  */
13208   if (!processing_template_decl
13209       && !cp_function_chain->can_throw
13210       && !flag_non_call_exceptions
13211       && !decl_replaceable_p (fndecl))
13212     TREE_NOTHROW (fndecl) = 1;
13213
13214   /* This must come after expand_function_end because cleanups might
13215      have declarations (from inline functions) that need to go into
13216      this function's blocks.  */
13217
13218   /* If the current binding level isn't the outermost binding level
13219      for this function, either there is a bug, or we have experienced
13220      syntax errors and the statement tree is malformed.  */
13221   if (current_binding_level->kind != sk_function_parms)
13222     {
13223       /* Make sure we have already experienced errors.  */
13224       gcc_assert (errorcount);
13225
13226       /* Throw away the broken statement tree and extra binding
13227          levels.  */
13228       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
13229
13230       while (current_binding_level->kind != sk_function_parms)
13231         {
13232           if (current_binding_level->kind == sk_class)
13233             pop_nested_class ();
13234           else
13235             poplevel (0, 0, 0);
13236         }
13237     }
13238   poplevel (1, 0, 1);
13239
13240   /* Statements should always be full-expressions at the outermost set
13241      of curly braces for a function.  */
13242   gcc_assert (stmts_are_full_exprs_p ());
13243
13244   /* Save constexpr function body before it gets munged by
13245      the NRV transformation.   */
13246   maybe_save_function_definition (fndecl);
13247
13248   /* Set up the named return value optimization, if we can.  Candidate
13249      variables are selected in check_return_expr.  */
13250   if (current_function_return_value)
13251     {
13252       tree r = current_function_return_value;
13253       tree outer;
13254
13255       if (r != error_mark_node
13256           /* This is only worth doing for fns that return in memory--and
13257              simpler, since we don't have to worry about promoted modes.  */
13258           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
13259           /* Only allow this for variables declared in the outer scope of
13260              the function so we know that their lifetime always ends with a
13261              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
13262              we were to do this optimization in tree-ssa.  */
13263           && (outer = outer_curly_brace_block (fndecl))
13264           && chain_member (r, BLOCK_VARS (outer)))
13265         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
13266
13267       current_function_return_value = NULL_TREE;
13268     }
13269
13270   /* Remember that we were in class scope.  */
13271   if (current_class_name)
13272     ctype = current_class_type;
13273
13274   /* Must mark the RESULT_DECL as being in this function.  */
13275   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13276
13277   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13278      to the FUNCTION_DECL node itself.  */
13279   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13280
13281   /* Save away current state, if appropriate.  */
13282   if (!processing_template_decl)
13283     save_function_data (fndecl);
13284
13285   /* Complain if there's just no return statement.  */
13286   if (warn_return_type
13287       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
13288       && !dependent_type_p (TREE_TYPE (fntype))
13289       && !current_function_returns_value && !current_function_returns_null
13290       /* Don't complain if we abort or throw.  */
13291       && !current_function_returns_abnormally
13292       /* Don't complain if we are declared noreturn.  */
13293       && !TREE_THIS_VOLATILE (fndecl)
13294       && !DECL_NAME (DECL_RESULT (fndecl))
13295       && !TREE_NO_WARNING (fndecl)
13296       /* Structor return values (if any) are set by the compiler.  */
13297       && !DECL_CONSTRUCTOR_P (fndecl)
13298       && !DECL_DESTRUCTOR_P (fndecl))
13299     {
13300       warning (OPT_Wreturn_type,
13301                "no return statement in function returning non-void");
13302       TREE_NO_WARNING (fndecl) = 1;
13303     }
13304
13305   /* Store the end of the function, so that we get good line number
13306      info for the epilogue.  */
13307   cfun->function_end_locus = input_location;
13308
13309   /* Complain about parameters that are only set, but never otherwise used.  */
13310   if (warn_unused_but_set_parameter
13311       && !processing_template_decl
13312       && errorcount == unused_but_set_errorcount
13313       && !DECL_CLONED_FUNCTION_P (fndecl))
13314     {
13315       tree decl;
13316
13317       for (decl = DECL_ARGUMENTS (fndecl);
13318            decl;
13319            decl = DECL_CHAIN (decl))
13320         if (TREE_USED (decl)
13321             && TREE_CODE (decl) == PARM_DECL
13322             && !DECL_READ_P (decl)
13323             && DECL_NAME (decl)
13324             && !DECL_ARTIFICIAL (decl)
13325             && !TREE_NO_WARNING (decl)
13326             && !DECL_IN_SYSTEM_HEADER (decl)
13327             && TREE_TYPE (decl) != error_mark_node
13328             && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
13329             && (!CLASS_TYPE_P (TREE_TYPE (decl))
13330                 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
13331           warning (OPT_Wunused_but_set_parameter,
13332                    "parameter %q+D set but not used", decl);
13333       unused_but_set_errorcount = errorcount;
13334     }
13335
13336   /* Genericize before inlining.  */
13337   if (!processing_template_decl)
13338     {
13339       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
13340       invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
13341       cp_genericize (fndecl);
13342       /* Clear out the bits we don't need.  */
13343       f->x_current_class_ptr = NULL;
13344       f->x_current_class_ref = NULL;
13345       f->x_eh_spec_block = NULL;
13346       f->x_in_charge_parm = NULL;
13347       f->x_vtt_parm = NULL;
13348       f->x_return_value = NULL;
13349       f->bindings = NULL;
13350       f->extern_decl_map = NULL;
13351     }
13352   /* Clear out the bits we don't need.  */
13353   local_names = NULL;
13354
13355   /* We're leaving the context of this function, so zap cfun.  It's still in
13356      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
13357   set_cfun (NULL);
13358   current_function_decl = NULL;
13359
13360   /* If this is an in-class inline definition, we may have to pop the
13361      bindings for the template parameters that we added in
13362      maybe_begin_member_template_processing when start_function was
13363      called.  */
13364   if (inclass_inline)
13365     maybe_end_member_template_processing ();
13366
13367   /* Leave the scope of the class.  */
13368   if (ctype)
13369     pop_nested_class ();
13370
13371   --function_depth;
13372
13373   /* Clean up.  */
13374   current_function_decl = NULL_TREE;
13375
13376   defer_mark_used_calls = false;
13377   if (deferred_mark_used_calls)
13378     {
13379       unsigned int i;
13380       tree decl;
13381
13382       FOR_EACH_VEC_ELT (tree, deferred_mark_used_calls, i, decl)
13383         mark_used (decl);
13384       VEC_free (tree, gc, deferred_mark_used_calls);
13385     }
13386
13387   return fndecl;
13388 }
13389 \f
13390 /* Create the FUNCTION_DECL for a function definition.
13391    DECLSPECS and DECLARATOR are the parts of the declaration;
13392    they describe the return type and the name of the function,
13393    but twisted together in a fashion that parallels the syntax of C.
13394
13395    This function creates a binding context for the function body
13396    as well as setting up the FUNCTION_DECL in current_function_decl.
13397
13398    Returns a FUNCTION_DECL on success.
13399
13400    If the DECLARATOR is not suitable for a function (it defines a datum
13401    instead), we return 0, which tells yyparse to report a parse error.
13402
13403    May return void_type_node indicating that this method is actually
13404    a friend.  See grokfield for more details.
13405
13406    Came here with a `.pushlevel' .
13407
13408    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13409    CHANGES TO CODE IN `grokfield'.  */
13410
13411 tree
13412 grokmethod (cp_decl_specifier_seq *declspecs,
13413             const cp_declarator *declarator, tree attrlist)
13414 {
13415   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13416                                 &attrlist);
13417
13418   if (fndecl == error_mark_node)
13419     return error_mark_node;
13420
13421   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
13422     {
13423       error ("invalid member function declaration");
13424       return error_mark_node;
13425     }
13426
13427   if (attrlist)
13428     cplus_decl_attributes (&fndecl, attrlist, 0);
13429
13430   /* Pass friends other than inline friend functions back.  */
13431   if (fndecl == void_type_node)
13432     return fndecl;
13433
13434   if (DECL_IN_AGGR_P (fndecl))
13435     {
13436       if (DECL_CLASS_SCOPE_P (fndecl))
13437         error ("%qD is already defined in class %qT", fndecl,
13438                DECL_CONTEXT (fndecl));
13439       return error_mark_node;
13440     }
13441
13442   check_template_shadow (fndecl);
13443
13444   DECL_DECLARED_INLINE_P (fndecl) = 1;
13445   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
13446
13447   /* We process method specializations in finish_struct_1.  */
13448   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13449     {
13450       fndecl = push_template_decl (fndecl);
13451       if (fndecl == error_mark_node)
13452         return fndecl;
13453     }
13454
13455   if (! DECL_FRIEND_P (fndecl))
13456     {
13457       if (DECL_CHAIN (fndecl))
13458         {
13459           fndecl = copy_node (fndecl);
13460           TREE_CHAIN (fndecl) = NULL_TREE;
13461         }
13462     }
13463
13464   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
13465
13466   DECL_IN_AGGR_P (fndecl) = 1;
13467   return fndecl;
13468 }
13469 \f
13470
13471 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
13472    we can lay it out later, when and if its type becomes complete.  */
13473
13474 void
13475 maybe_register_incomplete_var (tree var)
13476 {
13477   gcc_assert (TREE_CODE (var) == VAR_DECL);
13478
13479   /* Keep track of variables with incomplete types.  */
13480   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
13481       && DECL_EXTERNAL (var))
13482     {
13483       tree inner_type = TREE_TYPE (var);
13484
13485       while (TREE_CODE (inner_type) == ARRAY_TYPE)
13486         inner_type = TREE_TYPE (inner_type);
13487       inner_type = TYPE_MAIN_VARIANT (inner_type);
13488
13489       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
13490           /* RTTI TD entries are created while defining the type_info.  */
13491           || (TYPE_LANG_SPECIFIC (inner_type)
13492               && TYPE_BEING_DEFINED (inner_type)))
13493         {
13494           incomplete_var *iv
13495             = VEC_safe_push (incomplete_var, gc, incomplete_vars, NULL);
13496           iv->decl = var;
13497           iv->incomplete_type = inner_type;
13498         }
13499     }
13500 }
13501
13502 /* Called when a class type (given by TYPE) is defined.  If there are
13503    any existing VAR_DECLs whose type has been completed by this
13504    declaration, update them now.  */
13505
13506 void
13507 complete_vars (tree type)
13508 {
13509   unsigned ix;
13510   incomplete_var *iv;
13511
13512   for (ix = 0; VEC_iterate (incomplete_var, incomplete_vars, ix, iv); )
13513     {
13514       if (same_type_p (type, iv->incomplete_type))
13515         {
13516           tree var = iv->decl;
13517           tree type = TREE_TYPE (var);
13518           /* Complete the type of the variable.  The VAR_DECL itself
13519              will be laid out in expand_expr.  */
13520           complete_type (type);
13521           cp_apply_type_quals_to_decl (cp_type_quals (type), var);
13522           /* Remove this entry from the list.  */
13523           VEC_unordered_remove (incomplete_var, incomplete_vars, ix);
13524         }
13525       else
13526         ix++;
13527     }
13528
13529   /* Check for pending declarations which may have abstract type.  */
13530   complete_type_check_abstract (type);
13531 }
13532
13533 /* If DECL is of a type which needs a cleanup, build and return an
13534    expression to perform that cleanup here.  Return NULL_TREE if no
13535    cleanup need be done.  */
13536
13537 tree
13538 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
13539 {
13540   tree type;
13541   tree attr;
13542   tree cleanup;
13543
13544   /* Assume no cleanup is required.  */
13545   cleanup = NULL_TREE;
13546
13547   if (error_operand_p (decl))
13548     return cleanup;
13549
13550   /* Handle "__attribute__((cleanup))".  We run the cleanup function
13551      before the destructor since the destructor is what actually
13552      terminates the lifetime of the object.  */
13553   attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
13554   if (attr)
13555     {
13556       tree id;
13557       tree fn;
13558       tree arg;
13559
13560       /* Get the name specified by the user for the cleanup function.  */
13561       id = TREE_VALUE (TREE_VALUE (attr));
13562       /* Look up the name to find the cleanup function to call.  It is
13563          important to use lookup_name here because that is what is
13564          used in c-common.c:handle_cleanup_attribute when performing
13565          initial checks on the attribute.  Note that those checks
13566          include ensuring that the function found is not an overloaded
13567          function, or an object with an overloaded call operator,
13568          etc.; we can rely on the fact that the function found is an
13569          ordinary FUNCTION_DECL.  */
13570       fn = lookup_name (id);
13571       arg = build_address (decl);
13572       mark_used (decl);
13573       cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
13574       if (cleanup == error_mark_node)
13575         return error_mark_node;
13576     }
13577   /* Handle ordinary C++ destructors.  */
13578   type = TREE_TYPE (decl);
13579   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
13580     {
13581       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
13582       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
13583                          && CLASSTYPE_VBASECLASSES (type));
13584       tree addr;
13585       tree call;
13586
13587       if (TREE_CODE (type) == ARRAY_TYPE)
13588         addr = decl;
13589       else
13590         addr = build_address (decl);
13591
13592       /* Optimize for space over speed here.  */
13593       if (!has_vbases || flag_expensive_optimizations)
13594         flags |= LOOKUP_NONVIRTUAL;
13595
13596       call = build_delete (TREE_TYPE (addr), addr,
13597                            sfk_complete_destructor, flags, 0, complain);
13598       if (call == error_mark_node)
13599         cleanup = error_mark_node;
13600       else if (cleanup)
13601         cleanup = cp_build_compound_expr (cleanup, call, complain);
13602       else
13603         cleanup = call;
13604     }
13605
13606   return cleanup;
13607 }
13608 \f
13609 /* When a stmt has been parsed, this function is called.  */
13610
13611 void
13612 finish_stmt (void)
13613 {
13614 }
13615
13616 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
13617    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
13618    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
13619
13620 tree
13621 static_fn_type (tree memfntype)
13622 {
13623   tree fntype;
13624   tree args;
13625
13626   if (TYPE_PTRMEMFUNC_P (memfntype))
13627     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
13628   if (POINTER_TYPE_P (memfntype)
13629       || TREE_CODE (memfntype) == FUNCTION_DECL)
13630     memfntype = TREE_TYPE (memfntype);
13631   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
13632     return memfntype;
13633   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
13634   args = TYPE_ARG_TYPES (memfntype);
13635   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
13636   fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
13637   fntype = (cp_build_type_attribute_variant
13638             (fntype, TYPE_ATTRIBUTES (memfntype)));
13639   fntype = (build_exception_variant
13640             (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
13641   return fntype;
13642 }
13643
13644 /* DECL was originally constructed as a non-static member function,
13645    but turned out to be static.  Update it accordingly.  */
13646
13647 void
13648 revert_static_member_fn (tree decl)
13649 {
13650   tree stype = static_fn_type (decl);
13651   cp_cv_quals quals = type_memfn_quals (stype);
13652
13653   if (quals != TYPE_UNQUALIFIED)
13654     stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED);
13655
13656   TREE_TYPE (decl) = stype;
13657
13658   if (DECL_ARGUMENTS (decl))
13659     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
13660   DECL_STATIC_FUNCTION_P (decl) = 1;
13661 }
13662
13663 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
13664    one of the language-independent trees.  */
13665
13666 enum cp_tree_node_structure_enum
13667 cp_tree_node_structure (union lang_tree_node * t)
13668 {
13669   switch (TREE_CODE (&t->generic))
13670     {
13671     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
13672     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
13673     case OVERLOAD:              return TS_CP_OVERLOAD;
13674     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
13675     case PTRMEM_CST:            return TS_CP_PTRMEM;
13676     case BASELINK:              return TS_CP_BASELINK;
13677     case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
13678     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
13679     case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
13680     case LAMBDA_EXPR:           return TS_CP_LAMBDA_EXPR;
13681     case TEMPLATE_INFO:         return TS_CP_TEMPLATE_INFO;
13682     default:                    return TS_CP_GENERIC;
13683     }
13684 }
13685
13686 /* Build the void_list_node (void_type_node having been created).  */
13687 tree
13688 build_void_list_node (void)
13689 {
13690   tree t = build_tree_list (NULL_TREE, void_type_node);
13691   return t;
13692 }
13693
13694 bool
13695 cp_missing_noreturn_ok_p (tree decl)
13696 {
13697   /* A missing noreturn is ok for the `main' function.  */
13698   return DECL_MAIN_P (decl);
13699 }
13700
13701 /* Return the COMDAT group into which DECL should be placed.  */
13702
13703 tree
13704 cxx_comdat_group (tree decl)
13705 {
13706   tree name;
13707
13708   /* Virtual tables, construction virtual tables, and virtual table
13709      tables all go in a single COMDAT group, named after the primary
13710      virtual table.  */
13711   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
13712     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
13713   /* For all other DECLs, the COMDAT group is the mangled name of the
13714      declaration itself.  */
13715   else
13716     {
13717       while (DECL_THUNK_P (decl))
13718         {
13719           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
13720              into the same section as the target function.  In that case
13721              we must return target's name.  */
13722           tree target = THUNK_TARGET (decl);
13723           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
13724               && DECL_SECTION_NAME (target) != NULL
13725               && DECL_ONE_ONLY (target))
13726             decl = target;
13727           else
13728             break;
13729         }
13730       name = DECL_ASSEMBLER_NAME (decl);
13731     }
13732
13733   return name;
13734 }
13735
13736 #include "gt-cp-decl.h"