OSDN Git Service

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