OSDN Git Service

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