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