OSDN Git Service

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