OSDN Git Service

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