OSDN Git Service

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