OSDN Git Service

PR c++/561
[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 "output.h"
43 #include "except.h"
44 #include "toplev.h"
45 #include "hashtab.h"
46 #include "tm_p.h"
47 #include "target.h"
48 #include "c-common.h"
49 #include "c-pragma.h"
50 #include "diagnostic.h"
51 #include "intl.h"
52 #include "debug.h"
53 #include "timevar.h"
54 #include "tree-flow.h"
55 #include "pointer-set.h"
56 #include "plugin.h"
57
58 static tree grokparms (tree parmlist, tree *);
59 static const char *redeclaration_error_message (tree, tree);
60
61 static int decl_jump_unsafe (tree);
62 static void require_complete_types_for_parms (tree);
63 static int ambi_op_p (enum tree_code);
64 static int unary_op_p (enum tree_code);
65 static void push_local_name (tree);
66 static tree grok_reference_init (tree, tree, tree, tree *);
67 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
68                          int, int, tree);
69 static void record_unknown_type (tree, const char *);
70 static tree builtin_function_1 (tree, tree, bool);
71 static tree build_library_fn_1 (tree, enum tree_code, tree);
72 static int member_function_or_else (tree, tree, enum overload_flags);
73 static void bad_specifiers (tree, const char *, int, int, int, int,
74                             int);
75 static void check_for_uninitialized_const_var (tree);
76 static hashval_t typename_hash (const void *);
77 static int typename_compare (const void *, const void *);
78 static tree local_variable_p_walkfn (tree *, int *, void *);
79 static tree record_builtin_java_type (const char *, int);
80 static const char *tag_name (enum tag_types);
81 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
82 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
83 static void maybe_deduce_size_from_array_init (tree, tree);
84 static void layout_var_decl (tree);
85 static tree check_initializer (tree, tree, int, tree *);
86 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
87 static void save_function_data (tree);
88 static void check_function_type (tree, tree);
89 static void finish_constructor_body (void);
90 static void begin_destructor_body (void);
91 static void finish_destructor_body (void);
92 static tree create_array_type_for_decl (tree, tree, tree);
93 static tree get_atexit_node (void);
94 static tree get_dso_handle_node (void);
95 static tree start_cleanup_fn (void);
96 static void end_cleanup_fn (void);
97 static tree cp_make_fname_decl (location_t, tree, int);
98 static void initialize_predefined_identifiers (void);
99 static tree check_special_function_return_type
100         (special_function_kind, tree, tree);
101 static tree push_cp_library_fn (enum tree_code, tree);
102 static tree build_cp_library_fn (tree, enum tree_code, tree);
103 static void store_parm_decls (tree);
104 static void initialize_local_var (tree, tree);
105 static void expand_static_init (tree, tree);
106 static tree next_initializable_field (tree);
107
108 /* The following symbols are subsumed in the cp_global_trees array, and
109    listed here individually for documentation purposes.
110
111    C++ extensions
112         tree wchar_decl_node;
113
114         tree vtable_entry_type;
115         tree delta_type_node;
116         tree __t_desc_type_node;
117
118         tree class_type_node;
119         tree unknown_type_node;
120
121    Array type `vtable_entry_type[]'
122
123         tree vtbl_type_node;
124         tree vtbl_ptr_type_node;
125
126    Namespaces,
127
128         tree std_node;
129         tree abi_node;
130
131    A FUNCTION_DECL which can call `abort'.  Not necessarily the
132    one that the user will declare, but sufficient to be called
133    by routines that want to abort the program.
134
135         tree abort_fndecl;
136
137    The FUNCTION_DECL for the default `::operator delete'.
138
139         tree global_delete_fndecl;
140
141    Used by RTTI
142         tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
143         tree tinfo_var_id;  */
144
145 tree cp_global_trees[CPTI_MAX];
146
147 /* Indicates that there is a type value in some namespace, although
148    that is not necessarily in scope at the moment.  */
149
150 tree global_type_node;
151
152 /* The node that holds the "name" of the global scope.  */
153 tree global_scope_name;
154
155 #define local_names cp_function_chain->x_local_names
156
157 /* A list of objects which have constructors or destructors
158    which reside in the global scope.  The decl is stored in
159    the TREE_VALUE slot and the initializer is stored
160    in the TREE_PURPOSE slot.  */
161 tree static_aggregates;
162
163 /* -- end of C++ */
164
165 /* A node for the integer constants 2, and 3.  */
166
167 tree integer_two_node, integer_three_node;
168
169 /* Used only for jumps to as-yet undefined labels, since jumps to
170    defined labels can have their validity checked immediately.  */
171
172 struct GTY(()) named_label_use_entry {
173   struct named_label_use_entry *next;
174   /* The binding level to which this entry is *currently* attached.
175      This is initially the binding level in which the goto appeared,
176      but is modified as scopes are closed.  */
177   struct cp_binding_level *binding_level;
178   /* The head of the names list that was current when the goto appeared,
179      or the inner scope popped.  These are the decls that will *not* be
180      skipped when jumping to the label.  */
181   tree names_in_scope;
182   /* The location of the goto, for error reporting.  */
183   location_t o_goto_locus;
184   /* True if an OpenMP structured block scope has been closed since
185      the goto appeared.  This means that the branch from the label will
186      illegally exit an OpenMP scope.  */
187   bool in_omp_scope;
188 };
189
190 /* A list of all LABEL_DECLs in the function that have names.  Here so
191    we can clear out their names' definitions at the end of the
192    function, and so we can check the validity of jumps to these labels.  */
193
194 struct GTY(()) named_label_entry {
195   /* The decl itself.  */
196   tree label_decl;
197
198   /* The binding level to which the label is *currently* attached.
199      This is initially set to the binding level in which the label
200      is defined, but is modified as scopes are closed.  */
201   struct cp_binding_level *binding_level;
202   /* The head of the names list that was current when the label was
203      defined, or the inner scope popped.  These are the decls that will
204      be skipped when jumping to the label.  */
205   tree names_in_scope;
206   /* A tree list of all decls from all binding levels that would be
207      crossed by a backward branch to the label.  */
208   tree bad_decls;
209
210   /* A list of uses of the label, before the label is defined.  */
211   struct named_label_use_entry *uses;
212
213   /* The following bits are set after the label is defined, and are
214      updated as scopes are popped.  They indicate that a backward jump
215      to the label will illegally enter a scope of the given flavor.  */
216   bool in_try_scope;
217   bool in_catch_scope;
218   bool in_omp_scope;
219 };
220
221 #define named_labels cp_function_chain->x_named_labels
222 \f
223 /* The number of function bodies which we are currently processing.
224    (Zero if we are at namespace scope, one inside the body of a
225    function, two inside the body of a function in a local class, etc.)  */
226 int function_depth;
227
228 /* To avoid unwanted recursion, finish_function defers all mark_used calls
229    encountered during its execution until it finishes.  */
230 bool defer_mark_used_calls;
231 VEC(tree, gc) *deferred_mark_used_calls;
232
233 /* States indicating how grokdeclarator() should handle declspecs marked
234    with __attribute__((deprecated)).  An object declared as
235    __attribute__((deprecated)) suppresses warnings of uses of other
236    deprecated items.  */
237 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
238
239 \f
240 /* A TREE_LIST of VAR_DECLs.  The TREE_PURPOSE is a RECORD_TYPE or
241    UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type.  At the
242    time the VAR_DECL was declared, the type was incomplete.  */
243
244 static GTY(()) tree incomplete_vars;
245 \f
246 /* Returns the kind of template specialization we are currently
247    processing, given that it's declaration contained N_CLASS_SCOPES
248    explicit scope qualifications.  */
249
250 tmpl_spec_kind
251 current_tmpl_spec_kind (int n_class_scopes)
252 {
253   int n_template_parm_scopes = 0;
254   int seen_specialization_p = 0;
255   int innermost_specialization_p = 0;
256   struct cp_binding_level *b;
257
258   /* Scan through the template parameter scopes.  */
259   for (b = current_binding_level;
260        b->kind == sk_template_parms;
261        b = b->level_chain)
262     {
263       /* If we see a specialization scope inside a parameter scope,
264          then something is wrong.  That corresponds to a declaration
265          like:
266
267             template <class T> template <> ...
268
269          which is always invalid since [temp.expl.spec] forbids the
270          specialization of a class member template if the enclosing
271          class templates are not explicitly specialized as well.  */
272       if (b->explicit_spec_p)
273         {
274           if (n_template_parm_scopes == 0)
275             innermost_specialization_p = 1;
276           else
277             seen_specialization_p = 1;
278         }
279       else if (seen_specialization_p == 1)
280         return tsk_invalid_member_spec;
281
282       ++n_template_parm_scopes;
283     }
284
285   /* Handle explicit instantiations.  */
286   if (processing_explicit_instantiation)
287     {
288       if (n_template_parm_scopes != 0)
289         /* We've seen a template parameter list during an explicit
290            instantiation.  For example:
291
292              template <class T> template void f(int);
293
294            This is erroneous.  */
295         return tsk_invalid_expl_inst;
296       else
297         return tsk_expl_inst;
298     }
299
300   if (n_template_parm_scopes < n_class_scopes)
301     /* We've not seen enough template headers to match all the
302        specialized classes present.  For example:
303
304          template <class T> void R<T>::S<T>::f(int);
305
306        This is invalid; there needs to be one set of template
307        parameters for each class.  */
308     return tsk_insufficient_parms;
309   else if (n_template_parm_scopes == n_class_scopes)
310     /* We're processing a non-template declaration (even though it may
311        be a member of a template class.)  For example:
312
313          template <class T> void S<T>::f(int);
314
315        The `class T' matches the `S<T>', leaving no template headers
316        corresponding to the `f'.  */
317     return tsk_none;
318   else if (n_template_parm_scopes > n_class_scopes + 1)
319     /* We've got too many template headers.  For example:
320
321          template <> template <class T> void f (T);
322
323        There need to be more enclosing classes.  */
324     return tsk_excessive_parms;
325   else
326     /* This must be a template.  It's of the form:
327
328          template <class T> template <class U> void S<T>::f(U);
329
330        This is a specialization if the innermost level was a
331        specialization; otherwise it's just a definition of the
332        template.  */
333     return innermost_specialization_p ? tsk_expl_spec : tsk_template;
334 }
335
336 /* Exit the current scope.  */
337
338 void
339 finish_scope (void)
340 {
341   poplevel (0, 0, 0);
342 }
343
344 /* When a label goes out of scope, check to see if that label was used
345    in a valid manner, and issue any appropriate warnings or errors.  */
346
347 static void
348 pop_label (tree label, tree old_value)
349 {
350   if (!processing_template_decl)
351     {
352       if (DECL_INITIAL (label) == NULL_TREE)
353         {
354           location_t location;
355
356           error ("label %q+D used but not defined", label);
357           location = input_location; /* FIXME want (input_filename, (line)0) */
358           /* Avoid crashing later.  */
359           define_label (location, DECL_NAME (label));
360         }
361       else 
362         warn_for_unused_label (label);
363     }
364
365   SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
366 }
367
368 /* At the end of a function, all labels declared within the function
369    go out of scope.  BLOCK is the top-level block for the
370    function.  */
371
372 static int
373 pop_labels_1 (void **slot, void *data)
374 {
375   struct named_label_entry *ent = (struct named_label_entry *) *slot;
376   tree block = (tree) data;
377
378   pop_label (ent->label_decl, NULL_TREE);
379
380   /* Put the labels into the "variables" of the top-level block,
381      so debugger can see them.  */
382   TREE_CHAIN (ent->label_decl) = BLOCK_VARS (block);
383   BLOCK_VARS (block) = ent->label_decl;
384
385   htab_clear_slot (named_labels, slot);
386
387   return 1;
388 }
389
390 static void
391 pop_labels (tree block)
392 {
393   if (named_labels)
394     {
395       htab_traverse (named_labels, pop_labels_1, block);
396       named_labels = NULL;
397     }
398 }
399
400 /* At the end of a block with local labels, restore the outer definition.  */
401
402 static void
403 pop_local_label (tree label, tree old_value)
404 {
405   struct named_label_entry dummy;
406   void **slot;
407
408   pop_label (label, old_value);
409
410   dummy.label_decl = label;
411   slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
412   htab_clear_slot (named_labels, slot);
413 }
414
415 /* The following two routines are used to interface to Objective-C++.
416    The binding level is purposely treated as an opaque type.  */
417
418 void *
419 objc_get_current_scope (void)
420 {
421   return current_binding_level;
422 }
423
424 /* The following routine is used by the NeXT-style SJLJ exceptions;
425    variables get marked 'volatile' so as to not be clobbered by
426    _setjmp()/_longjmp() calls.  All variables in the current scope,
427    as well as parent scopes up to (but not including) ENCLOSING_BLK
428    shall be thusly marked.  */
429
430 void
431 objc_mark_locals_volatile (void *enclosing_blk)
432 {
433   struct cp_binding_level *scope;
434
435   for (scope = current_binding_level;
436        scope && scope != enclosing_blk;
437        scope = scope->level_chain)
438     {
439       tree decl;
440
441       for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
442         objc_volatilize_decl (decl);
443
444       /* Do not climb up past the current function.  */
445       if (scope->kind == sk_function_parms)
446         break;
447     }
448 }
449
450 /* Update data for defined and undefined labels when leaving a scope.  */
451
452 static int
453 poplevel_named_label_1 (void **slot, void *data)
454 {
455   struct named_label_entry *ent = (struct named_label_entry *) *slot;
456   struct cp_binding_level *bl = (struct cp_binding_level *) data;
457   struct cp_binding_level *obl = bl->level_chain;
458
459   if (ent->binding_level == bl)
460     {
461       tree decl;
462
463       for (decl = ent->names_in_scope; decl; decl = TREE_CHAIN (decl))
464         if (decl_jump_unsafe (decl))
465           ent->bad_decls = tree_cons (NULL, decl, ent->bad_decls);
466
467       ent->binding_level = obl;
468       ent->names_in_scope = obl->names;
469       switch (bl->kind)
470         {
471         case sk_try:
472           ent->in_try_scope = true;
473           break;
474         case sk_catch:
475           ent->in_catch_scope = true;
476           break;
477         case sk_omp:
478           ent->in_omp_scope = true;
479           break;
480         default:
481           break;
482         }
483     }
484   else if (ent->uses)
485     {
486       struct named_label_use_entry *use;
487
488       for (use = ent->uses; use ; use = use->next)
489         if (use->binding_level == bl)
490           {
491             use->binding_level = obl;
492             use->names_in_scope = obl->names;
493             if (bl->kind == sk_omp)
494               use->in_omp_scope = true;
495           }
496     }
497
498   return 1;
499 }
500
501 /* Exit a binding level.
502    Pop the level off, and restore the state of the identifier-decl mappings
503    that were in effect when this level was entered.
504
505    If KEEP == 1, this level had explicit declarations, so
506    and create a "block" (a BLOCK node) for the level
507    to record its declarations and subblocks for symbol table output.
508
509    If FUNCTIONBODY is nonzero, this level is the body of a function,
510    so create a block as if KEEP were set and also clear out all
511    label names.
512
513    If REVERSE is nonzero, reverse the order of decls before putting
514    them into the BLOCK.  */
515
516 tree
517 poplevel (int keep, int reverse, int functionbody)
518 {
519   tree link;
520   /* The chain of decls was accumulated in reverse order.
521      Put it into forward order, just for cleanliness.  */
522   tree decls;
523   int tmp = functionbody;
524   int real_functionbody;
525   tree subblocks;
526   tree block;
527   tree decl;
528   int leaving_for_scope;
529   scope_kind kind;
530
531   timevar_push (TV_NAME_LOOKUP);
532  restart:
533
534   block = NULL_TREE;
535
536   gcc_assert (current_binding_level->kind != sk_class);
537
538   real_functionbody = (current_binding_level->kind == sk_cleanup
539                        ? ((functionbody = 0), tmp) : functionbody);
540   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
541
542   gcc_assert (!VEC_length(cp_class_binding,
543                           current_binding_level->class_shadowed));
544
545   /* We used to use KEEP == 2 to indicate that the new block should go
546      at the beginning of the list of blocks at this binding level,
547      rather than the end.  This hack is no longer used.  */
548   gcc_assert (keep == 0 || keep == 1);
549
550   if (current_binding_level->keep)
551     keep = 1;
552
553   /* Any uses of undefined labels, and any defined labels, now operate
554      under constraints of next binding contour.  */
555   if (cfun && !functionbody && named_labels)
556     htab_traverse (named_labels, poplevel_named_label_1,
557                    current_binding_level);
558
559   /* Get the decls in the order they were written.
560      Usually current_binding_level->names is in reverse order.
561      But parameter decls were previously put in forward order.  */
562
563   if (reverse)
564     current_binding_level->names
565       = decls = nreverse (current_binding_level->names);
566   else
567     decls = current_binding_level->names;
568
569   /* If there were any declarations or structure tags in that level,
570      or if this level is a function body,
571      create a BLOCK to record them for the life of this function.  */
572   block = NULL_TREE;
573   if (keep == 1 || functionbody)
574     block = make_node (BLOCK);
575   if (block != NULL_TREE)
576     {
577       BLOCK_VARS (block) = decls;
578       BLOCK_SUBBLOCKS (block) = subblocks;
579     }
580
581   /* In each subblock, record that this is its superior.  */
582   if (keep >= 0)
583     for (link = subblocks; link; link = BLOCK_CHAIN (link))
584       BLOCK_SUPERCONTEXT (link) = block;
585
586   /* We still support the old for-scope rules, whereby the variables
587      in a for-init statement were in scope after the for-statement
588      ended.  We only use the new rules if flag_new_for_scope is
589      nonzero.  */
590   leaving_for_scope
591     = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
592
593   /* Before we remove the declarations first check for unused variables.  */
594   if (warn_unused_variable
595       && !processing_template_decl)
596     for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
597       if (TREE_CODE (decl) == VAR_DECL
598           && ! TREE_USED (decl)
599           && ! DECL_IN_SYSTEM_HEADER (decl)
600           && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
601         warning (OPT_Wunused_variable, "unused variable %q+D", decl);
602
603   /* Remove declarations for all the DECLs in this level.  */
604   for (link = decls; link; link = TREE_CHAIN (link))
605     {
606       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
607           && DECL_NAME (link))
608         {
609           tree name = DECL_NAME (link);
610           cxx_binding *ob;
611           tree ns_binding;
612
613           ob = outer_binding (name,
614                               IDENTIFIER_BINDING (name),
615                               /*class_p=*/true);
616           if (!ob)
617             ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
618           else
619             ns_binding = NULL_TREE;
620
621           if (ob && ob->scope == current_binding_level->level_chain)
622             /* We have something like:
623
624                  int i;
625                  for (int i; ;);
626
627                and we are leaving the `for' scope.  There's no reason to
628                keep the binding of the inner `i' in this case.  */
629             pop_binding (name, link);
630           else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
631                    || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
632             /* Here, we have something like:
633
634                  typedef int I;
635
636                  void f () {
637                    for (int I; ;);
638                  }
639
640                We must pop the for-scope binding so we know what's a
641                type and what isn't.  */
642             pop_binding (name, link);
643           else
644             {
645               /* Mark this VAR_DECL as dead so that we can tell we left it
646                  there only for backward compatibility.  */
647               DECL_DEAD_FOR_LOCAL (link) = 1;
648
649               /* Keep track of what should have happened when we
650                  popped the binding.  */
651               if (ob && ob->value)
652                 {
653                   SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
654                   DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
655                 }
656
657               /* Add it to the list of dead variables in the next
658                  outermost binding to that we can remove these when we
659                  leave that binding.  */
660               current_binding_level->level_chain->dead_vars_from_for
661                 = tree_cons (NULL_TREE, link,
662                              current_binding_level->level_chain->
663                              dead_vars_from_for);
664
665               /* Although we don't pop the cxx_binding, we do clear
666                  its SCOPE since the scope is going away now.  */
667               IDENTIFIER_BINDING (name)->scope
668                 = current_binding_level->level_chain;
669             }
670         }
671       else
672         {
673           tree name;
674
675           /* Remove the binding.  */
676           decl = link;
677
678           if (TREE_CODE (decl) == TREE_LIST)
679             decl = TREE_VALUE (decl);
680           name = decl;
681
682           if (TREE_CODE (name) == OVERLOAD)
683             name = OVL_FUNCTION (name);
684
685           gcc_assert (DECL_P (name));
686           pop_binding (DECL_NAME (name), decl);
687         }
688     }
689
690   /* Remove declarations for any `for' variables from inner scopes
691      that we kept around.  */
692   for (link = current_binding_level->dead_vars_from_for;
693        link; link = TREE_CHAIN (link))
694     pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
695
696   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
697   for (link = current_binding_level->type_shadowed;
698        link; link = TREE_CHAIN (link))
699     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
700
701   /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
702   for (link = current_binding_level->shadowed_labels;
703        link;
704        link = TREE_CHAIN (link))
705     pop_local_label (TREE_VALUE (link), TREE_PURPOSE (link));
706
707   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
708      list if a `using' declaration put them there.  The debugging
709      back ends won't understand OVERLOAD, so we remove them here.
710      Because the BLOCK_VARS are (temporarily) shared with
711      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
712      popped all the bindings.  */
713   if (block)
714     {
715       tree* d;
716
717       for (d = &BLOCK_VARS (block); *d; )
718         {
719           if (TREE_CODE (*d) == TREE_LIST)
720             *d = TREE_CHAIN (*d);
721           else
722             d = &TREE_CHAIN (*d);
723         }
724     }
725
726   /* If the level being exited is the top level of a function,
727      check over all the labels.  */
728   if (functionbody)
729     {
730       /* Since this is the top level block of a function, the vars are
731          the function's parameters.  Don't leave them in the BLOCK
732          because they are found in the FUNCTION_DECL instead.  */
733       BLOCK_VARS (block) = 0;
734       pop_labels (block);
735     }
736
737   kind = current_binding_level->kind;
738   if (kind == sk_cleanup)
739     {
740       tree stmt;
741
742       /* If this is a temporary binding created for a cleanup, then we'll
743          have pushed a statement list level.  Pop that, create a new
744          BIND_EXPR for the block, and insert it into the stream.  */
745       stmt = pop_stmt_list (current_binding_level->statement_list);
746       stmt = c_build_bind_expr (input_location, block, stmt);
747       add_stmt (stmt);
748     }
749
750   leave_scope ();
751   if (functionbody)
752     {
753       /* The current function is being defined, so its DECL_INITIAL
754          should be error_mark_node.  */
755       gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
756       DECL_INITIAL (current_function_decl) = block;
757     }
758   else if (block)
759     current_binding_level->blocks
760       = chainon (current_binding_level->blocks, block);
761
762   /* If we did not make a block for the level just exited,
763      any blocks made for inner levels
764      (since they cannot be recorded as subblocks in that level)
765      must be carried forward so they will later become subblocks
766      of something else.  */
767   else if (subblocks)
768     current_binding_level->blocks
769       = chainon (current_binding_level->blocks, subblocks);
770
771   /* Each and every BLOCK node created here in `poplevel' is important
772      (e.g. for proper debugging information) so if we created one
773      earlier, mark it as "used".  */
774   if (block)
775     TREE_USED (block) = 1;
776
777   /* All temporary bindings created for cleanups are popped silently.  */
778   if (kind == sk_cleanup)
779     goto restart;
780
781   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
782 }
783
784 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
785    itself, calling F for each.  The DATA is passed to F as well.  */
786
787 static int
788 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
789 {
790   int result = 0;
791   tree current = NAMESPACE_LEVEL (name_space)->namespaces;
792
793   result |= (*f) (name_space, data);
794
795   for (; current; current = TREE_CHAIN (current))
796     result |= walk_namespaces_r (current, f, data);
797
798   return result;
799 }
800
801 /* Walk all the namespaces, calling F for each.  The DATA is passed to
802    F as well.  */
803
804 int
805 walk_namespaces (walk_namespaces_fn f, void* data)
806 {
807   return walk_namespaces_r (global_namespace, f, data);
808 }
809
810 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
811    DATA is non-NULL, this is the last time we will call
812    wrapup_global_declarations for this NAMESPACE.  */
813
814 int
815 wrapup_globals_for_namespace (tree name_space, void* data)
816 {
817   struct cp_binding_level *level = NAMESPACE_LEVEL (name_space);
818   VEC(tree,gc) *statics = level->static_decls;
819   tree *vec = VEC_address (tree, statics);
820   int len = VEC_length (tree, statics);
821   int last_time = (data != 0);
822
823   if (last_time)
824     {
825       check_global_declarations (vec, len);
826       emit_debug_global_declarations (vec, len);
827       return 0;
828     }
829
830   /* Write out any globals that need to be output.  */
831   return wrapup_global_declarations (vec, len);
832 }
833
834 \f
835 /* In C++, you don't have to write `struct S' to refer to `S'; you
836    can just use `S'.  We accomplish this by creating a TYPE_DECL as
837    if the user had written `typedef struct S S'.  Create and return
838    the TYPE_DECL for TYPE.  */
839
840 tree
841 create_implicit_typedef (tree name, tree type)
842 {
843   tree decl;
844
845   decl = build_decl (input_location, TYPE_DECL, name, type);
846   DECL_ARTIFICIAL (decl) = 1;
847   /* There are other implicit type declarations, like the one *within*
848      a class that allows you to write `S::S'.  We must distinguish
849      amongst these.  */
850   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
851   TYPE_NAME (type) = decl;
852   TYPE_STUB_DECL (type) = decl;
853
854   return decl;
855 }
856
857 /* Remember a local name for name-mangling purposes.  */
858
859 static void
860 push_local_name (tree decl)
861 {
862   size_t i, nelts;
863   tree t, name;
864
865   timevar_push (TV_NAME_LOOKUP);
866
867   name = DECL_NAME (decl);
868
869   nelts = VEC_length (tree, local_names);
870   for (i = 0; i < nelts; i++)
871     {
872       t = VEC_index (tree, local_names, i);
873       if (DECL_NAME (t) == name)
874         {
875           if (!DECL_LANG_SPECIFIC (decl))
876             retrofit_lang_decl (decl);
877           DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
878           if (DECL_LANG_SPECIFIC (t))
879             DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
880           else
881             DECL_DISCRIMINATOR (decl) = 1;
882
883           VEC_replace (tree, local_names, i, decl);
884           timevar_pop (TV_NAME_LOOKUP);
885           return;
886         }
887     }
888
889   VEC_safe_push (tree, gc, local_names, decl);
890   timevar_pop (TV_NAME_LOOKUP);
891 }
892 \f
893 /* Subroutine of duplicate_decls: return truthvalue of whether
894    or not types of these decls match.
895
896    For C++, we must compare the parameter list so that `int' can match
897    `int&' in a parameter position, but `int&' is not confused with
898    `const int&'.  */
899
900 int
901 decls_match (tree newdecl, tree olddecl)
902 {
903   int types_match;
904
905   if (newdecl == olddecl)
906     return 1;
907
908   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
909     /* If the two DECLs are not even the same kind of thing, we're not
910        interested in their types.  */
911     return 0;
912
913   if (TREE_CODE (newdecl) == FUNCTION_DECL)
914     {
915       tree f1 = TREE_TYPE (newdecl);
916       tree f2 = TREE_TYPE (olddecl);
917       tree p1 = TYPE_ARG_TYPES (f1);
918       tree p2 = TYPE_ARG_TYPES (f2);
919
920       /* Specializations of different templates are different functions
921          even if they have the same type.  */
922       tree t1 = (DECL_USE_TEMPLATE (newdecl)
923                  ? DECL_TI_TEMPLATE (newdecl)
924                  : NULL_TREE);
925       tree t2 = (DECL_USE_TEMPLATE (olddecl)
926                  ? DECL_TI_TEMPLATE (olddecl)
927                  : NULL_TREE);
928       if (t1 != t2)
929         return 0;
930
931       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
932           && ! (DECL_EXTERN_C_P (newdecl)
933                 && DECL_EXTERN_C_P (olddecl)))
934         return 0;
935
936 #ifdef NO_IMPLICIT_EXTERN_C
937       /* A new declaration doesn't match a built-in one unless it
938          is also extern "C".  */
939       if (DECL_IS_BUILTIN (olddecl)
940           && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
941         return 0;
942 #endif
943
944       if (TREE_CODE (f1) != TREE_CODE (f2))
945         return 0;
946
947       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
948         {
949           if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
950               && (DECL_BUILT_IN (olddecl)
951 #ifndef NO_IMPLICIT_EXTERN_C
952                   || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
953                   || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
954 #endif
955               ))
956             {
957               types_match = self_promoting_args_p (p1);
958               if (p1 == void_list_node)
959                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
960             }
961 #ifndef NO_IMPLICIT_EXTERN_C
962           else if (p1 == NULL_TREE
963                    && (DECL_EXTERN_C_P (olddecl)
964                        && DECL_IN_SYSTEM_HEADER (olddecl)
965                        && !DECL_CLASS_SCOPE_P (olddecl))
966                    && (DECL_EXTERN_C_P (newdecl)
967                        && DECL_IN_SYSTEM_HEADER (newdecl)
968                        && !DECL_CLASS_SCOPE_P (newdecl)))
969             {
970               types_match = self_promoting_args_p (p2);
971               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
972             }
973 #endif
974           else
975             types_match = compparms (p1, p2);
976         }
977       else
978         types_match = 0;
979     }
980   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
981     {
982       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
983           != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
984         return 0;
985
986       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
987                                 DECL_TEMPLATE_PARMS (olddecl)))
988         return 0;
989
990       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
991         types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
992                                    TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
993       else
994         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
995                                    DECL_TEMPLATE_RESULT (newdecl));
996     }
997   else
998     {
999       /* Need to check scope for variable declaration (VAR_DECL).
1000          For typedef (TYPE_DECL), scope is ignored.  */
1001       if (TREE_CODE (newdecl) == VAR_DECL
1002           && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1003           /* [dcl.link]
1004              Two declarations for an object with C language linkage
1005              with the same name (ignoring the namespace that qualify
1006              it) that appear in different namespace scopes refer to
1007              the same object.  */
1008           && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1009         return 0;
1010
1011       if (TREE_TYPE (newdecl) == error_mark_node)
1012         types_match = TREE_TYPE (olddecl) == error_mark_node;
1013       else if (TREE_TYPE (olddecl) == NULL_TREE)
1014         types_match = TREE_TYPE (newdecl) == NULL_TREE;
1015       else if (TREE_TYPE (newdecl) == NULL_TREE)
1016         types_match = 0;
1017       else
1018         types_match = comptypes (TREE_TYPE (newdecl),
1019                                  TREE_TYPE (olddecl),
1020                                  COMPARE_REDECLARATION);
1021     }
1022
1023   return types_match;
1024 }
1025
1026 /* If NEWDECL is `static' and an `extern' was seen previously,
1027    warn about it.  OLDDECL is the previous declaration.
1028
1029    Note that this does not apply to the C++ case of declaring
1030    a variable `extern const' and then later `const'.
1031
1032    Don't complain about built-in functions, since they are beyond
1033    the user's control.  */
1034
1035 void
1036 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1037 {
1038   tree name;
1039
1040   if (TREE_CODE (newdecl) == TYPE_DECL
1041       || TREE_CODE (newdecl) == TEMPLATE_DECL
1042       || TREE_CODE (newdecl) == CONST_DECL
1043       || TREE_CODE (newdecl) == NAMESPACE_DECL)
1044     return;
1045
1046   /* Don't get confused by static member functions; that's a different
1047      use of `static'.  */
1048   if (TREE_CODE (newdecl) == FUNCTION_DECL
1049       && DECL_STATIC_FUNCTION_P (newdecl))
1050     return;
1051
1052   /* If the old declaration was `static', or the new one isn't, then
1053      then everything is OK.  */
1054   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1055     return;
1056
1057   /* It's OK to declare a builtin function as `static'.  */
1058   if (TREE_CODE (olddecl) == FUNCTION_DECL
1059       && DECL_ARTIFICIAL (olddecl))
1060     return;
1061
1062   name = DECL_ASSEMBLER_NAME (newdecl);
1063   permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1064   permerror (input_location, "previous declaration of %q+D", olddecl);
1065 }
1066
1067 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1068    function templates.  If their exception specifications do not
1069    match, issue a diagnostic.  */
1070
1071 static void
1072 check_redeclaration_exception_specification (tree new_decl,
1073                                              tree old_decl)
1074 {
1075   tree new_type;
1076   tree old_type;
1077   tree new_exceptions;
1078   tree old_exceptions;
1079
1080   new_type = TREE_TYPE (new_decl);
1081   new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1082   old_type = TREE_TYPE (old_decl);
1083   old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1084
1085   /* [except.spec]
1086
1087      If any declaration of a function has an exception-specification,
1088      all declarations, including the definition and an explicit
1089      specialization, of that function shall have an
1090      exception-specification with the same set of type-ids.  */
1091   if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1092       && ! DECL_IS_BUILTIN (old_decl)
1093       && flag_exceptions
1094       && !comp_except_specs (new_exceptions, old_exceptions,
1095                              /*exact=*/true))
1096     {
1097       error ("declaration of %qF throws different exceptions", new_decl);
1098       error ("from previous declaration %q+F", old_decl);
1099     }
1100 }
1101
1102 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)                   \
1103                           && lookup_attribute ("gnu_inline",            \
1104                                                DECL_ATTRIBUTES (fn)))
1105
1106 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1107    If the redeclaration is invalid, a diagnostic is issued, and the
1108    error_mark_node is returned.  Otherwise, OLDDECL is returned.
1109
1110    If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1111    returned.
1112
1113    NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend.  */
1114
1115 tree
1116 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1117 {
1118   unsigned olddecl_uid = DECL_UID (olddecl);
1119   int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1120   int new_defines_function = 0;
1121   tree new_template_info;
1122
1123   if (newdecl == olddecl)
1124     return olddecl;
1125
1126   types_match = decls_match (newdecl, olddecl);
1127
1128   /* If either the type of the new decl or the type of the old decl is an
1129      error_mark_node, then that implies that we have already issued an
1130      error (earlier) for some bogus type specification, and in that case,
1131      it is rather pointless to harass the user with yet more error message
1132      about the same declaration, so just pretend the types match here.  */
1133   if (TREE_TYPE (newdecl) == error_mark_node
1134       || TREE_TYPE (olddecl) == error_mark_node)
1135     return error_mark_node;
1136
1137   if (DECL_P (olddecl)
1138       && TREE_CODE (newdecl) == FUNCTION_DECL
1139       && TREE_CODE (olddecl) == FUNCTION_DECL
1140       && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1141     {
1142       if (DECL_DECLARED_INLINE_P (newdecl)
1143           && DECL_UNINLINABLE (newdecl)
1144           && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1145         /* Already warned elsewhere.  */;
1146       else if (DECL_DECLARED_INLINE_P (olddecl)
1147                && DECL_UNINLINABLE (olddecl)
1148                && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1149         /* Already warned.  */;
1150       else if (DECL_DECLARED_INLINE_P (newdecl)
1151                && DECL_UNINLINABLE (olddecl)
1152                && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1153         {
1154           warning (OPT_Wattributes, "function %q+D redeclared as inline",
1155                    newdecl);
1156           warning (OPT_Wattributes, "previous declaration of %q+D "
1157                    "with attribute noinline", olddecl);
1158         }
1159       else if (DECL_DECLARED_INLINE_P (olddecl)
1160                && DECL_UNINLINABLE (newdecl)
1161                && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1162         {
1163           warning (OPT_Wattributes, "function %q+D redeclared with "
1164                    "attribute noinline", newdecl);
1165           warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1166                    olddecl);
1167         }
1168     }
1169
1170   /* Check for redeclaration and other discrepancies.  */
1171   if (TREE_CODE (olddecl) == FUNCTION_DECL
1172       && DECL_ARTIFICIAL (olddecl))
1173     {
1174       gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1175       if (TREE_CODE (newdecl) != FUNCTION_DECL)
1176         {
1177           /* Avoid warnings redeclaring built-ins which have not been
1178              explicitly declared.  */
1179           if (DECL_ANTICIPATED (olddecl))
1180             return NULL_TREE;
1181
1182           /* If you declare a built-in or predefined function name as static,
1183              the old definition is overridden, but optionally warn this was a
1184              bad choice of name.  */
1185           if (! TREE_PUBLIC (newdecl))
1186             {
1187               warning (OPT_Wshadow, "shadowing %s function %q#D",
1188                        DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1189                        olddecl);
1190               /* Discard the old built-in function.  */
1191               return NULL_TREE;
1192             }
1193           /* If the built-in is not ansi, then programs can override
1194              it even globally without an error.  */
1195           else if (! DECL_BUILT_IN (olddecl))
1196             warning (0, "library function %q#D redeclared as non-function %q#D",
1197                      olddecl, newdecl);
1198           else
1199             {
1200               error ("declaration of %q#D", newdecl);
1201               error ("conflicts with built-in declaration %q#D",
1202                      olddecl);
1203             }
1204           return NULL_TREE;
1205         }
1206       else if (!types_match)
1207         {
1208           /* Avoid warnings redeclaring built-ins which have not been
1209              explicitly declared.  */
1210           if (DECL_ANTICIPATED (olddecl))
1211             {
1212               /* Deal with fileptr_type_node.  FILE type is not known
1213                  at the time we create the builtins.  */
1214               tree t1, t2;
1215
1216               for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1217                    t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1218                    t1 || t2;
1219                    t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1220                 if (!t1 || !t2)
1221                   break;
1222                 else if (TREE_VALUE (t2) == fileptr_type_node)
1223                   {
1224                     tree t = TREE_VALUE (t1);
1225
1226                     if (TREE_CODE (t) == POINTER_TYPE
1227                         && TYPE_NAME (TREE_TYPE (t))
1228                         && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1229                            == get_identifier ("FILE")
1230                         && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1231                       {
1232                         tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1233
1234                         TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1235                           = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1236                         types_match = decls_match (newdecl, olddecl);
1237                         if (types_match)
1238                           return duplicate_decls (newdecl, olddecl,
1239                                                   newdecl_is_friend);
1240                         TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1241                       }
1242                   }
1243                 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1244                   break;
1245             }
1246           else if ((DECL_EXTERN_C_P (newdecl)
1247                     && DECL_EXTERN_C_P (olddecl))
1248                    || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1249                                  TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1250             {
1251               /* A near match; override the builtin.  */
1252
1253               if (TREE_PUBLIC (newdecl))
1254                 {
1255                   warning (0, "new declaration %q#D", newdecl);
1256                   warning (0, "ambiguates built-in declaration %q#D",
1257                            olddecl);
1258                 }
1259               else
1260                 warning (OPT_Wshadow, "shadowing %s function %q#D",
1261                          DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1262                          olddecl);
1263             }
1264           else
1265             /* Discard the old built-in function.  */
1266             return NULL_TREE;
1267
1268           /* Replace the old RTL to avoid problems with inlining.  */
1269           COPY_DECL_RTL (newdecl, olddecl);
1270         }
1271       /* Even if the types match, prefer the new declarations type for
1272          built-ins which have not been explicitly declared, for
1273          exception lists, etc...  */
1274       else if (DECL_ANTICIPATED (olddecl))
1275         {
1276           tree type = TREE_TYPE (newdecl);
1277           tree attribs = (*targetm.merge_type_attributes)
1278             (TREE_TYPE (olddecl), type);
1279
1280           type = cp_build_type_attribute_variant (type, attribs);
1281           TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1282         }
1283
1284       /* If a function is explicitly declared "throw ()", propagate that to
1285          the corresponding builtin.  */
1286       if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1287           && DECL_ANTICIPATED (olddecl)
1288           && TREE_NOTHROW (newdecl)
1289           && !TREE_NOTHROW (olddecl)
1290           && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != NULL_TREE
1291           && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != olddecl
1292           && types_match)
1293         TREE_NOTHROW (built_in_decls [DECL_FUNCTION_CODE (olddecl)]) = 1;
1294
1295       /* Whether or not the builtin can throw exceptions has no
1296          bearing on this declarator.  */
1297       TREE_NOTHROW (olddecl) = 0;
1298
1299       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1300         {
1301           /* If a builtin function is redeclared as `static', merge
1302              the declarations, but make the original one static.  */
1303           DECL_THIS_STATIC (olddecl) = 1;
1304           TREE_PUBLIC (olddecl) = 0;
1305
1306           /* Make the old declaration consistent with the new one so
1307              that all remnants of the builtin-ness of this function
1308              will be banished.  */
1309           SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1310           COPY_DECL_RTL (newdecl, olddecl);
1311         }
1312     }
1313   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1314     {
1315       /* C++ Standard, 3.3, clause 4:
1316          "[Note: a namespace name or a class template name must be unique
1317          in its declarative region (7.3.2, clause 14). ]"  */
1318       if (TREE_CODE (olddecl) != NAMESPACE_DECL
1319           && TREE_CODE (newdecl) != NAMESPACE_DECL
1320           && (TREE_CODE (olddecl) != TEMPLATE_DECL
1321               || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1322           && (TREE_CODE (newdecl) != TEMPLATE_DECL
1323               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1324         {
1325           if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1326                && TREE_CODE (newdecl) != TYPE_DECL)
1327               || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1328                   && TREE_CODE (olddecl) != TYPE_DECL))
1329             {
1330               /* We do nothing special here, because C++ does such nasty
1331                  things with TYPE_DECLs.  Instead, just let the TYPE_DECL
1332                  get shadowed, and know that if we need to find a TYPE_DECL
1333                  for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1334                  slot of the identifier.  */
1335               return NULL_TREE;
1336             }
1337             
1338             if ((TREE_CODE (newdecl) == FUNCTION_DECL
1339                  && DECL_FUNCTION_TEMPLATE_P (olddecl))
1340                 || (TREE_CODE (olddecl) == FUNCTION_DECL
1341                     && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1342               return NULL_TREE;
1343         }
1344
1345       error ("%q#D redeclared as different kind of symbol", newdecl);
1346       if (TREE_CODE (olddecl) == TREE_LIST)
1347         olddecl = TREE_VALUE (olddecl);
1348       error ("previous declaration of %q+#D", olddecl);
1349
1350       return error_mark_node;
1351     }
1352   else if (!types_match)
1353     {
1354       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1355         /* These are certainly not duplicate declarations; they're
1356            from different scopes.  */
1357         return NULL_TREE;
1358
1359       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1360         {
1361           /* The name of a class template may not be declared to refer to
1362              any other template, class, function, object, namespace, value,
1363              or type in the same scope.  */
1364           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1365               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1366             {
1367               error ("declaration of template %q#D", newdecl);
1368               error ("conflicts with previous declaration %q+#D", olddecl);
1369             }
1370           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1371                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1372                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1373                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1374                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1375                                            DECL_TEMPLATE_PARMS (olddecl))
1376                    /* Template functions can be disambiguated by
1377                       return type.  */
1378                    && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1379                                    TREE_TYPE (TREE_TYPE (olddecl))))
1380             {
1381               error ("new declaration %q#D", newdecl);
1382               error ("ambiguates old declaration %q+#D", olddecl);
1383             }
1384           return NULL_TREE;
1385         }
1386       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1387         {
1388           if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1389             {
1390               error ("declaration of C function %q#D conflicts with",
1391                      newdecl);
1392               error ("previous declaration %q+#D here", olddecl);
1393             }
1394           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1395                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1396             {
1397               error ("new declaration %q#D", newdecl);
1398               error ("ambiguates old declaration %q+#D", olddecl);
1399               return error_mark_node;
1400             }
1401           else
1402             return NULL_TREE;
1403         }
1404       else
1405         {
1406           error ("conflicting declaration %q#D", newdecl);
1407           error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1408           return error_mark_node;
1409         }
1410     }
1411   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1412             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1413                  && (!DECL_TEMPLATE_INFO (newdecl)
1414                      || (DECL_TI_TEMPLATE (newdecl)
1415                          != DECL_TI_TEMPLATE (olddecl))))
1416                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1417                     && (!DECL_TEMPLATE_INFO (olddecl)
1418                         || (DECL_TI_TEMPLATE (olddecl)
1419                             != DECL_TI_TEMPLATE (newdecl))))))
1420     /* It's OK to have a template specialization and a non-template
1421        with the same type, or to have specializations of two
1422        different templates with the same type.  Note that if one is a
1423        specialization, and the other is an instantiation of the same
1424        template, that we do not exit at this point.  That situation
1425        can occur if we instantiate a template class, and then
1426        specialize one of its methods.  This situation is valid, but
1427        the declarations must be merged in the usual way.  */
1428     return NULL_TREE;
1429   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1430            && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1431                 && !DECL_USE_TEMPLATE (newdecl))
1432                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1433                    && !DECL_USE_TEMPLATE (olddecl))))
1434     /* One of the declarations is a template instantiation, and the
1435        other is not a template at all.  That's OK.  */
1436     return NULL_TREE;
1437   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1438     {
1439       /* In [namespace.alias] we have:
1440
1441            In a declarative region, a namespace-alias-definition can be
1442            used to redefine a namespace-alias declared in that declarative
1443            region to refer only to the namespace to which it already
1444            refers.
1445
1446          Therefore, if we encounter a second alias directive for the same
1447          alias, we can just ignore the second directive.  */
1448       if (DECL_NAMESPACE_ALIAS (newdecl)
1449           && (DECL_NAMESPACE_ALIAS (newdecl)
1450               == DECL_NAMESPACE_ALIAS (olddecl)))
1451         return olddecl;
1452       /* [namespace.alias]
1453
1454          A namespace-name or namespace-alias shall not be declared as
1455          the name of any other entity in the same declarative region.
1456          A namespace-name defined at global scope shall not be
1457          declared as the name of any other entity in any global scope
1458          of the program.  */
1459       error ("declaration of namespace %qD conflicts with", newdecl);
1460       error ("previous declaration of namespace %q+D here", olddecl);
1461       return error_mark_node;
1462     }
1463   else
1464     {
1465       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1466       if (errmsg)
1467         {
1468           error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1469           if (DECL_NAME (olddecl) != NULL_TREE)
1470             error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1471                          ? "%q+#D previously defined here"
1472                          : "%q+#D previously declared here", olddecl);
1473           return error_mark_node;
1474         }
1475       else if (TREE_CODE (olddecl) == FUNCTION_DECL
1476                && DECL_INITIAL (olddecl) != NULL_TREE
1477                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1478                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1479         {
1480           /* Prototype decl follows defn w/o prototype.  */
1481           warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1482           warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1483                       "follows non-prototype definition here");
1484         }
1485       else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1486                 || TREE_CODE (olddecl) == VAR_DECL)
1487                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1488         {
1489           /* [dcl.link]
1490              If two declarations of the same function or object
1491              specify different linkage-specifications ..., the program
1492              is ill-formed.... Except for functions with C++ linkage,
1493              a function declaration without a linkage specification
1494              shall not precede the first linkage specification for
1495              that function.  A function can be declared without a
1496              linkage specification after an explicit linkage
1497              specification has been seen; the linkage explicitly
1498              specified in the earlier declaration is not affected by
1499              such a function declaration.
1500
1501              DR 563 raises the question why the restrictions on
1502              functions should not also apply to objects.  Older
1503              versions of G++ silently ignore the linkage-specification
1504              for this example:
1505
1506                namespace N { 
1507                  extern int i;
1508                  extern "C" int i;
1509                }
1510
1511              which is clearly wrong.  Therefore, we now treat objects
1512              like functions.  */
1513           if (current_lang_depth () == 0)
1514             {
1515               /* There is no explicit linkage-specification, so we use
1516                  the linkage from the previous declaration.  */
1517               if (!DECL_LANG_SPECIFIC (newdecl))
1518                 retrofit_lang_decl (newdecl);
1519               SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1520             }
1521           else
1522             {
1523               error ("previous declaration of %q+#D with %qL linkage",
1524                      olddecl, DECL_LANGUAGE (olddecl));
1525               error ("conflicts with new declaration with %qL linkage",
1526                      DECL_LANGUAGE (newdecl));
1527             }
1528         }
1529
1530       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1531         ;
1532       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1533         {
1534           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1535           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1536           int i = 1;
1537
1538           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1539             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1540
1541           for (; t1 && t1 != void_list_node;
1542                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1543             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1544               {
1545                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1546                                            TREE_PURPOSE (t2)))
1547                   {
1548                     permerror (input_location, "default argument given for parameter %d of %q#D",
1549                                i, newdecl);
1550                     permerror (input_location, "after previous specification in %q+#D", olddecl);
1551                   }
1552                 else
1553                   {
1554                     error ("default argument given for parameter %d of %q#D",
1555                            i, newdecl);
1556                     error ("after previous specification in %q+#D",
1557                                  olddecl);
1558                   }
1559               }
1560         }
1561     }
1562
1563   /* Do not merge an implicit typedef with an explicit one.  In:
1564
1565        class A;
1566        ...
1567        typedef class A A __attribute__ ((foo));
1568
1569      the attribute should apply only to the typedef.  */
1570   if (TREE_CODE (olddecl) == TYPE_DECL
1571       && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1572           || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1573     return NULL_TREE;
1574
1575   /* If new decl is `static' and an `extern' was seen previously,
1576      warn about it.  */
1577   warn_extern_redeclared_static (newdecl, olddecl);
1578
1579   /* We have committed to returning 1 at this point.  */
1580   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1581     {
1582       /* Now that functions must hold information normally held
1583          by field decls, there is extra work to do so that
1584          declaration information does not get destroyed during
1585          definition.  */
1586       if (DECL_VINDEX (olddecl))
1587         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1588       if (DECL_CONTEXT (olddecl))
1589         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1590       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1591       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1592       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1593       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1594       DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1595       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1596       if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1597         SET_OVERLOADED_OPERATOR_CODE
1598           (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1599       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1600
1601       /* Optionally warn about more than one declaration for the same
1602          name, but don't warn about a function declaration followed by a
1603          definition.  */
1604       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1605           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1606           /* Don't warn about extern decl followed by definition.  */
1607           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1608           /* Don't warn about friends, let add_friend take care of it.  */
1609           && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
1610         {
1611           warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1612           warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1613         }
1614
1615       if (DECL_DELETED_FN (newdecl))
1616         {
1617           error ("deleted definition of %qD", newdecl);
1618           error ("after previous declaration %q+D", olddecl);
1619         }
1620     }
1621
1622   /* Deal with C++: must preserve virtual function table size.  */
1623   if (TREE_CODE (olddecl) == TYPE_DECL)
1624     {
1625       tree newtype = TREE_TYPE (newdecl);
1626       tree oldtype = TREE_TYPE (olddecl);
1627
1628       if (newtype != error_mark_node && oldtype != error_mark_node
1629           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1630         CLASSTYPE_FRIEND_CLASSES (newtype)
1631           = CLASSTYPE_FRIEND_CLASSES (oldtype);
1632
1633       DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1634     }
1635
1636   /* Copy all the DECL_... slots specified in the new decl
1637      except for any that we copy here from the old type.  */
1638   DECL_ATTRIBUTES (newdecl)
1639     = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1640
1641   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1642     {
1643       tree old_result;
1644       tree new_result;
1645       old_result = DECL_TEMPLATE_RESULT (olddecl);
1646       new_result = DECL_TEMPLATE_RESULT (newdecl);
1647       TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1648       DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1649         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1650                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1651
1652       DECL_ATTRIBUTES (old_result)
1653         = (*targetm.merge_decl_attributes) (old_result, new_result);
1654
1655       if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1656         {
1657           if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1658               && DECL_INITIAL (new_result))
1659             {
1660               if (DECL_INITIAL (old_result))
1661                 DECL_UNINLINABLE (old_result) = 1;
1662               else
1663                 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1664               DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1665               DECL_NOT_REALLY_EXTERN (old_result)
1666                 = DECL_NOT_REALLY_EXTERN (new_result);
1667               DECL_INTERFACE_KNOWN (old_result)
1668                 = DECL_INTERFACE_KNOWN (new_result);
1669               DECL_DECLARED_INLINE_P (old_result)
1670                 = DECL_DECLARED_INLINE_P (new_result);
1671               DECL_DISREGARD_INLINE_LIMITS (old_result)
1672                 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1673
1674             }
1675           else
1676             {
1677               DECL_DECLARED_INLINE_P (old_result)
1678                 |= DECL_DECLARED_INLINE_P (new_result);
1679               DECL_DISREGARD_INLINE_LIMITS (old_result)
1680                 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1681               check_redeclaration_exception_specification (newdecl, olddecl);
1682             }
1683         }
1684
1685       /* If the new declaration is a definition, update the file and
1686          line information on the declaration, and also make
1687          the old declaration the same definition.  */
1688       if (DECL_INITIAL (new_result) != NULL_TREE)
1689         {
1690           DECL_SOURCE_LOCATION (olddecl)
1691             = DECL_SOURCE_LOCATION (old_result)
1692             = DECL_SOURCE_LOCATION (newdecl);
1693           DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1694           if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1695             {
1696               tree parm;
1697               DECL_ARGUMENTS (old_result)
1698                 = DECL_ARGUMENTS (new_result);
1699               for (parm = DECL_ARGUMENTS (old_result); parm;
1700                    parm = TREE_CHAIN (parm))
1701                 DECL_CONTEXT (parm) = old_result;
1702             }
1703         }
1704
1705       return olddecl;
1706     }
1707
1708   if (types_match)
1709     {
1710       /* Automatically handles default parameters.  */
1711       tree oldtype = TREE_TYPE (olddecl);
1712       tree newtype;
1713
1714       /* Merge the data types specified in the two decls.  */
1715       newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1716
1717       /* If merge_types produces a non-typedef type, just use the old type.  */
1718       if (TREE_CODE (newdecl) == TYPE_DECL
1719           && newtype == DECL_ORIGINAL_TYPE (newdecl))
1720         newtype = oldtype;
1721
1722       if (TREE_CODE (newdecl) == VAR_DECL)
1723         {
1724           DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1725           DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1726           DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1727             |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1728           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1729             |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1730
1731           /* Merge the threadprivate attribute from OLDDECL into NEWDECL.  */
1732           if (DECL_LANG_SPECIFIC (olddecl)
1733               && CP_DECL_THREADPRIVATE_P (olddecl))
1734             {
1735               /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed.  */
1736               if (!DECL_LANG_SPECIFIC (newdecl))
1737                 retrofit_lang_decl (newdecl);
1738
1739               DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1740               CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1741             }
1742         }
1743
1744       /* Do this after calling `merge_types' so that default
1745          parameters don't confuse us.  */
1746       else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1747         check_redeclaration_exception_specification (newdecl, olddecl);
1748       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1749
1750       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1751         check_default_args (newdecl);
1752
1753       /* Lay the type out, unless already done.  */
1754       if (! same_type_p (newtype, oldtype)
1755           && TREE_TYPE (newdecl) != error_mark_node
1756           && !(processing_template_decl && uses_template_parms (newdecl)))
1757         layout_type (TREE_TYPE (newdecl));
1758
1759       if ((TREE_CODE (newdecl) == VAR_DECL
1760            || TREE_CODE (newdecl) == PARM_DECL
1761            || TREE_CODE (newdecl) == RESULT_DECL
1762            || TREE_CODE (newdecl) == FIELD_DECL
1763            || TREE_CODE (newdecl) == TYPE_DECL)
1764           && !(processing_template_decl && uses_template_parms (newdecl)))
1765         layout_decl (newdecl, 0);
1766
1767       /* Merge the type qualifiers.  */
1768       if (TREE_READONLY (newdecl))
1769         TREE_READONLY (olddecl) = 1;
1770       if (TREE_THIS_VOLATILE (newdecl))
1771         TREE_THIS_VOLATILE (olddecl) = 1;
1772       if (TREE_NOTHROW (newdecl))
1773         TREE_NOTHROW (olddecl) = 1;
1774
1775       /* Merge deprecatedness.  */
1776       if (TREE_DEPRECATED (newdecl))
1777         TREE_DEPRECATED (olddecl) = 1;
1778
1779       /* Preserve function specific target and optimization options */
1780       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1781         {
1782           if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1783               && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1784             DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1785               = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1786
1787           if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1788               && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1789             DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1790               = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1791         }
1792
1793       /* Merge the initialization information.  */
1794       if (DECL_INITIAL (newdecl) == NULL_TREE
1795           && DECL_INITIAL (olddecl) != NULL_TREE)
1796         {
1797           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1798           DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1799           if (TREE_CODE (newdecl) == FUNCTION_DECL)
1800             {
1801               DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1802               DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1803             }
1804         }
1805
1806       /* Merge the section attribute.
1807          We want to issue an error if the sections conflict but that must be
1808          done later in decl_attributes since we are called before attributes
1809          are assigned.  */
1810       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1811         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1812
1813       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1814         {
1815           DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1816             |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1817           DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1818           TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1819           TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1820           DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1821           DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1822           DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1823           TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1824           DECL_LOOPING_CONST_OR_PURE_P (newdecl) 
1825             |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
1826           /* Keep the old RTL.  */
1827           COPY_DECL_RTL (olddecl, newdecl);
1828         }
1829       else if (TREE_CODE (newdecl) == VAR_DECL
1830                && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1831         {
1832           /* Keep the old RTL.  We cannot keep the old RTL if the old
1833              declaration was for an incomplete object and the new
1834              declaration is not since many attributes of the RTL will
1835              change.  */
1836           COPY_DECL_RTL (olddecl, newdecl);
1837         }
1838     }
1839   /* If cannot merge, then use the new type and qualifiers,
1840      and don't preserve the old rtl.  */
1841   else
1842     {
1843       /* Clean out any memory we had of the old declaration.  */
1844       tree oldstatic = value_member (olddecl, static_aggregates);
1845       if (oldstatic)
1846         TREE_VALUE (oldstatic) = error_mark_node;
1847
1848       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1849       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1850       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1851       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1852     }
1853
1854   /* Merge the storage class information.  */
1855   merge_weak (newdecl, olddecl);
1856
1857   if (DECL_ONE_ONLY (olddecl))
1858     DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
1859
1860   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1861   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1862   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1863   if (! DECL_EXTERNAL (olddecl))
1864     DECL_EXTERNAL (newdecl) = 0;
1865
1866   new_template_info = NULL_TREE;
1867   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1868     {
1869       bool new_redefines_gnu_inline = false;
1870
1871       if (new_defines_function
1872           && ((DECL_INTERFACE_KNOWN (olddecl)
1873                && TREE_CODE (olddecl) == FUNCTION_DECL)
1874               || (TREE_CODE (olddecl) == TEMPLATE_DECL
1875                   && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1876                       == FUNCTION_DECL))))
1877         {
1878           tree fn = olddecl;
1879
1880           if (TREE_CODE (fn) == TEMPLATE_DECL)
1881             fn = DECL_TEMPLATE_RESULT (olddecl);
1882
1883           new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
1884         }
1885
1886       if (!new_redefines_gnu_inline)
1887         {
1888           DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1889           DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1890           DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1891         }
1892       DECL_TEMPLATE_INSTANTIATED (newdecl)
1893         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1894       DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
1895
1896       /* If the OLDDECL is an instantiation and/or specialization,
1897          then the NEWDECL must be too.  But, it may not yet be marked
1898          as such if the caller has created NEWDECL, but has not yet
1899          figured out that it is a redeclaration.  */
1900       if (!DECL_USE_TEMPLATE (newdecl))
1901         DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
1902
1903       /* Don't really know how much of the language-specific
1904          values we should copy from old to new.  */
1905       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1906       DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1907       DECL_INITIALIZED_IN_CLASS_P (newdecl)
1908         |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1909
1910       if (LANG_DECL_HAS_MIN (newdecl))
1911         {
1912           DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
1913             DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
1914           if (DECL_TEMPLATE_INFO (newdecl))
1915             new_template_info = DECL_TEMPLATE_INFO (newdecl);
1916           DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1917         }
1918       /* Only functions have these fields.  */
1919       if (TREE_CODE (newdecl) == FUNCTION_DECL
1920           || DECL_FUNCTION_TEMPLATE_P (newdecl))
1921         {
1922           DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1923           olddecl_friend = DECL_FRIEND_P (olddecl);
1924           hidden_friend = (DECL_ANTICIPATED (olddecl)
1925                            && DECL_HIDDEN_FRIEND_P (olddecl)
1926                            && newdecl_is_friend);
1927           DECL_BEFRIENDING_CLASSES (newdecl)
1928             = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1929                        DECL_BEFRIENDING_CLASSES (olddecl));
1930           /* DECL_THUNKS is only valid for virtual functions,
1931              otherwise it is a DECL_FRIEND_CONTEXT.  */
1932           if (DECL_VIRTUAL_P (newdecl))
1933             DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
1934         }
1935     }
1936
1937   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1938     {
1939       tree parm;
1940
1941       /* Merge parameter attributes. */
1942       tree oldarg, newarg;
1943       for (oldarg = DECL_ARGUMENTS(olddecl), 
1944                newarg = DECL_ARGUMENTS(newdecl);
1945            oldarg && newarg;
1946            oldarg = TREE_CHAIN(oldarg), newarg = TREE_CHAIN(newarg)) {
1947           DECL_ATTRIBUTES (newarg)
1948               = (*targetm.merge_decl_attributes) (oldarg, newarg);
1949           DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
1950       }
1951       
1952       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1953           && !DECL_TEMPLATE_INSTANTIATION (newdecl))
1954         {
1955           /* If newdecl is not a specialization, then it is not a
1956              template-related function at all.  And that means that we
1957              should have exited above, returning 0.  */
1958           gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
1959
1960           if (DECL_ODR_USED (olddecl))
1961             /* From [temp.expl.spec]:
1962
1963                If a template, a member template or the member of a class
1964                template is explicitly specialized then that
1965                specialization shall be declared before the first use of
1966                that specialization that would cause an implicit
1967                instantiation to take place, in every translation unit in
1968                which such a use occurs.  */
1969             error ("explicit specialization of %qD after first use",
1970                       olddecl);
1971
1972           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
1973
1974           /* Don't propagate visibility from the template to the
1975              specialization here.  We'll do that in determine_visibility if
1976              appropriate.  */
1977           DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
1978
1979           /* [temp.expl.spec/14] We don't inline explicit specialization
1980              just because the primary template says so.  */
1981         }
1982       else if (new_defines_function && DECL_INITIAL (olddecl))
1983         {
1984           /* Never inline re-defined extern inline functions.
1985              FIXME: this could be better handled by keeping both
1986              function as separate declarations.  */
1987           DECL_UNINLINABLE (newdecl) = 1;
1988         }
1989       else
1990         {
1991           if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1992             DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
1993
1994           DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
1995
1996           DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1997             = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1998
1999           DECL_DISREGARD_INLINE_LIMITS (newdecl)
2000             = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2001             = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2002                || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2003         }
2004
2005       /* Preserve abstractness on cloned [cd]tors.  */
2006       DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2007
2008       /* Update newdecl's parms to point at olddecl.  */
2009       for (parm = DECL_ARGUMENTS (newdecl); parm;
2010            parm = TREE_CHAIN (parm))
2011         DECL_CONTEXT (parm) = olddecl;
2012
2013       if (! types_match)
2014         {
2015           SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2016           COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2017           COPY_DECL_RTL (newdecl, olddecl);
2018         }
2019       if (! types_match || new_defines_function)
2020         {
2021           /* These need to be copied so that the names are available.
2022              Note that if the types do match, we'll preserve inline
2023              info and other bits, but if not, we won't.  */
2024           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2025           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2026         }
2027       if (new_defines_function)
2028         /* If defining a function declared with other language
2029            linkage, use the previously declared language linkage.  */
2030         SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2031       else if (types_match)
2032         {
2033           /* If redeclaring a builtin function, and not a definition,
2034              it stays built in.  */
2035           if (DECL_BUILT_IN (olddecl))
2036             {
2037               DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2038               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2039               /* If we're keeping the built-in definition, keep the rtl,
2040                  regardless of declaration matches.  */
2041               COPY_DECL_RTL (olddecl, newdecl);
2042             }
2043
2044           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2045           /* Don't clear out the arguments if we're just redeclaring a
2046              function.  */
2047           if (DECL_ARGUMENTS (olddecl))
2048             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2049         }
2050     }
2051   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2052     NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2053
2054   /* Now preserve various other info from the definition.  */
2055   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2056   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2057   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2058   COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2059
2060   /* Warn about conflicting visibility specifications.  */
2061   if (DECL_VISIBILITY_SPECIFIED (olddecl)
2062       && DECL_VISIBILITY_SPECIFIED (newdecl)
2063       && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2064     {
2065       warning_at (input_location, OPT_Wattributes,
2066                   "%q+D: visibility attribute ignored because it", newdecl);
2067       warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2068                   "conflicts with previous declaration here");
2069     }
2070   /* Choose the declaration which specified visibility.  */
2071   if (DECL_VISIBILITY_SPECIFIED (olddecl))
2072     {
2073       DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2074       DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2075     }
2076   /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2077      so keep this behavior.  */
2078   if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2079     {
2080       SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2081       DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2082     }
2083
2084   /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2085      with that from NEWDECL below.  */
2086   if (DECL_LANG_SPECIFIC (olddecl))
2087     {
2088       gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2089                   != DECL_LANG_SPECIFIC (newdecl));
2090       ggc_free (DECL_LANG_SPECIFIC (olddecl));
2091     }
2092
2093   /* Merge the USED information.  */
2094   if (TREE_USED (olddecl))
2095     TREE_USED (newdecl) = 1;
2096   else if (TREE_USED (newdecl))
2097     TREE_USED (olddecl) = 1;
2098
2099   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2100     {
2101       int function_size;
2102
2103       function_size = sizeof (struct tree_decl_common);
2104
2105       memcpy ((char *) olddecl + sizeof (struct tree_common),
2106               (char *) newdecl + sizeof (struct tree_common),
2107               function_size - sizeof (struct tree_common));
2108
2109       memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2110               (char *) newdecl + sizeof (struct tree_decl_common),
2111               sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2112       if (new_template_info)
2113         /* If newdecl is a template instantiation, it is possible that
2114            the following sequence of events has occurred:
2115
2116            o A friend function was declared in a class template.  The
2117            class template was instantiated.
2118
2119            o The instantiation of the friend declaration was
2120            recorded on the instantiation list, and is newdecl.
2121
2122            o Later, however, instantiate_class_template called pushdecl
2123            on the newdecl to perform name injection.  But, pushdecl in
2124            turn called duplicate_decls when it discovered that another
2125            declaration of a global function with the same name already
2126            existed.
2127
2128            o Here, in duplicate_decls, we decided to clobber newdecl.
2129
2130            If we're going to do that, we'd better make sure that
2131            olddecl, and not newdecl, is on the list of
2132            instantiations so that if we try to do the instantiation
2133            again we won't get the clobbered declaration.  */
2134         reregister_specialization (newdecl,
2135                                    new_template_info,
2136                                    olddecl);
2137     }
2138   else
2139     {
2140       size_t size = tree_code_size (TREE_CODE (olddecl));
2141       memcpy ((char *) olddecl + sizeof (struct tree_common),
2142               (char *) newdecl + sizeof (struct tree_common),
2143               sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2144       switch (TREE_CODE (olddecl))
2145         {
2146         case LABEL_DECL:
2147         case VAR_DECL:
2148         case RESULT_DECL:
2149         case PARM_DECL:
2150         case FIELD_DECL:
2151         case TYPE_DECL:
2152         case CONST_DECL:
2153           {
2154             memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2155                     (char *) newdecl + sizeof (struct tree_decl_common),
2156                     size - sizeof (struct tree_decl_common)
2157                     + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2158           }
2159           break;
2160         default:
2161           memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2162                   (char *) newdecl + sizeof (struct tree_decl_common),
2163                   sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2164                   + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2165           break;
2166         }
2167     }
2168   DECL_UID (olddecl) = olddecl_uid;
2169   if (olddecl_friend)
2170     DECL_FRIEND_P (olddecl) = 1;
2171   if (hidden_friend)
2172     {
2173       DECL_ANTICIPATED (olddecl) = 1;
2174       DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2175     }
2176
2177   /* NEWDECL contains the merged attribute lists.
2178      Update OLDDECL to be the same.  */
2179   DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2180
2181   /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2182     so that encode_section_info has a chance to look at the new decl
2183     flags and attributes.  */
2184   if (DECL_RTL_SET_P (olddecl)
2185       && (TREE_CODE (olddecl) == FUNCTION_DECL
2186           || (TREE_CODE (olddecl) == VAR_DECL
2187               && TREE_STATIC (olddecl))))
2188     make_decl_rtl (olddecl);
2189
2190   /* The NEWDECL will no longer be needed.  Because every out-of-class
2191      declaration of a member results in a call to duplicate_decls,
2192      freeing these nodes represents in a significant savings.  */
2193   ggc_free (newdecl);
2194
2195   return olddecl;
2196 }
2197 \f
2198 /* Return zero if the declaration NEWDECL is valid
2199    when the declaration OLDDECL (assumed to be for the same name)
2200    has already been seen.
2201    Otherwise return an error message format string with a %s
2202    where the identifier should go.  */
2203
2204 static const char *
2205 redeclaration_error_message (tree newdecl, tree olddecl)
2206 {
2207   if (TREE_CODE (newdecl) == TYPE_DECL)
2208     {
2209       /* Because C++ can put things into name space for free,
2210          constructs like "typedef struct foo { ... } foo"
2211          would look like an erroneous redeclaration.  */
2212       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2213         return NULL;
2214       else
2215         return "redefinition of %q#D";
2216     }
2217   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2218     {
2219       /* If this is a pure function, its olddecl will actually be
2220          the original initialization to `0' (which we force to call
2221          abort()).  Don't complain about redefinition in this case.  */
2222       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2223           && DECL_INITIAL (olddecl) == NULL_TREE)
2224         return NULL;
2225
2226       /* If both functions come from different namespaces, this is not
2227          a redeclaration - this is a conflict with a used function.  */
2228       if (DECL_NAMESPACE_SCOPE_P (olddecl)
2229           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2230           && ! decls_match (olddecl, newdecl))
2231         return "%qD conflicts with used function";
2232
2233       /* We'll complain about linkage mismatches in
2234          warn_extern_redeclared_static.  */
2235
2236       /* Defining the same name twice is no good.  */
2237       if (DECL_INITIAL (olddecl) != NULL_TREE
2238           && DECL_INITIAL (newdecl) != NULL_TREE)
2239         {
2240           if (DECL_NAME (olddecl) == NULL_TREE)
2241             return "%q#D not declared in class";
2242           else if (!GNU_INLINE_P (olddecl)
2243                    || GNU_INLINE_P (newdecl))
2244             return "redefinition of %q#D";
2245         }
2246
2247       if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2248         {
2249           bool olda = GNU_INLINE_P (olddecl);
2250           bool newa = GNU_INLINE_P (newdecl);
2251
2252           if (olda != newa)
2253             {
2254               if (newa)
2255                 return "%q+D redeclared inline with %<gnu_inline%> attribute";
2256               else
2257                 return "%q+D redeclared inline without %<gnu_inline%> attribute";
2258             }
2259         }
2260
2261       return NULL;
2262     }
2263   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2264     {
2265       tree nt, ot;
2266
2267       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2268         {
2269           if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2270               && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2271             return "redefinition of %q#D";
2272           return NULL;
2273         }
2274
2275       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2276           || (DECL_TEMPLATE_RESULT (newdecl)
2277               == DECL_TEMPLATE_RESULT (olddecl)))
2278         return NULL;
2279
2280       nt = DECL_TEMPLATE_RESULT (newdecl);
2281       if (DECL_TEMPLATE_INFO (nt))
2282         nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2283       ot = DECL_TEMPLATE_RESULT (olddecl);
2284       if (DECL_TEMPLATE_INFO (ot))
2285         ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2286       if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2287           && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2288         return "redefinition of %q#D";
2289
2290       if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2291         {
2292           bool olda = GNU_INLINE_P (ot);
2293           bool newa = GNU_INLINE_P (nt);
2294
2295           if (olda != newa)
2296             {
2297               if (newa)
2298                 return "%q+D redeclared inline with %<gnu_inline%> attribute";
2299               else
2300                 return "%q+D redeclared inline without %<gnu_inline%> attribute";
2301             }
2302         }
2303
2304       /* Core issue #226 (C++0x): 
2305            
2306            If a friend function template declaration specifies a
2307            default template-argument, that declaration shall be a
2308            definition and shall be the only declaration of the
2309            function template in the translation unit.  */
2310       if ((cxx_dialect != cxx98) 
2311           && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2312           && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl), 
2313                                        /*is_primary=*/1, /*is_partial=*/0,
2314                                        /*is_friend_decl=*/2))
2315         return "redeclaration of friend %q#D may not have default template arguments";
2316
2317       return NULL;
2318     }
2319   else if (TREE_CODE (newdecl) == VAR_DECL
2320            && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2321            && (! DECL_LANG_SPECIFIC (olddecl)
2322                || ! CP_DECL_THREADPRIVATE_P (olddecl)
2323                || DECL_THREAD_LOCAL_P (newdecl)))
2324     {
2325       /* Only variables can be thread-local, and all declarations must
2326          agree on this property.  */
2327       if (DECL_THREAD_LOCAL_P (newdecl))
2328         return "thread-local declaration of %q#D follows "
2329                "non-thread-local declaration";
2330       else
2331         return "non-thread-local declaration of %q#D follows "
2332                "thread-local declaration";
2333     }
2334   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2335     {
2336       /* The objects have been declared at namespace scope.  If either
2337          is a member of an anonymous union, then this is an invalid
2338          redeclaration.  For example:
2339
2340            int i;
2341            union { int i; };
2342
2343            is invalid.  */
2344       if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2345           || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
2346         return "redeclaration of %q#D";
2347       /* If at least one declaration is a reference, there is no
2348          conflict.  For example:
2349
2350            int i = 3;
2351            extern int i;
2352
2353          is valid.  */
2354       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2355         return NULL;
2356       /* Reject two definitions.  */
2357       return "redefinition of %q#D";
2358     }
2359   else
2360     {
2361       /* Objects declared with block scope:  */
2362       /* Reject two definitions, and reject a definition
2363          together with an external reference.  */
2364       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2365         return "redeclaration of %q#D";
2366       return NULL;
2367     }
2368 }
2369 \f
2370 /* Hash and equality functions for the named_label table.  */
2371
2372 static hashval_t
2373 named_label_entry_hash (const void *data)
2374 {
2375   const struct named_label_entry *ent = (const struct named_label_entry *) data;
2376   return DECL_UID (ent->label_decl);
2377 }
2378
2379 static int
2380 named_label_entry_eq (const void *a, const void *b)
2381 {
2382   const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2383   const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2384   return ent_a->label_decl == ent_b->label_decl;
2385 }
2386
2387 /* Create a new label, named ID.  */
2388
2389 static tree
2390 make_label_decl (tree id, int local_p)
2391 {
2392   struct named_label_entry *ent;
2393   void **slot;
2394   tree decl;
2395
2396   decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2397
2398   DECL_CONTEXT (decl) = current_function_decl;
2399   DECL_MODE (decl) = VOIDmode;
2400   C_DECLARED_LABEL_FLAG (decl) = local_p;
2401
2402   /* Say where one reference is to the label, for the sake of the
2403      error if it is not defined.  */
2404   DECL_SOURCE_LOCATION (decl) = input_location;
2405
2406   /* Record the fact that this identifier is bound to this label.  */
2407   SET_IDENTIFIER_LABEL_VALUE (id, decl);
2408
2409   /* Create the label htab for the function on demand.  */
2410   if (!named_labels)
2411     named_labels = htab_create_ggc (13, named_label_entry_hash,
2412                                     named_label_entry_eq, NULL);
2413
2414   /* Record this label on the list of labels used in this function.
2415      We do this before calling make_label_decl so that we get the
2416      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
2417   ent = GGC_CNEW (struct named_label_entry);
2418   ent->label_decl = decl;
2419
2420   slot = htab_find_slot (named_labels, ent, INSERT);
2421   gcc_assert (*slot == NULL);
2422   *slot = ent;
2423
2424   return decl;
2425 }
2426
2427 /* Look for a label named ID in the current function.  If one cannot
2428    be found, create one.  (We keep track of used, but undefined,
2429    labels, and complain about them at the end of a function.)  */
2430
2431 tree
2432 lookup_label (tree id)
2433 {
2434   tree decl;
2435
2436   timevar_push (TV_NAME_LOOKUP);
2437   /* You can't use labels at global scope.  */
2438   if (current_function_decl == NULL_TREE)
2439     {
2440       error ("label %qE referenced outside of any function", id);
2441       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2442     }
2443
2444   /* See if we've already got this label.  */
2445   decl = IDENTIFIER_LABEL_VALUE (id);
2446   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2447     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2448
2449   decl = make_label_decl (id, /*local_p=*/0);
2450   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2451 }
2452
2453 /* Declare a local label named ID.  */
2454
2455 tree
2456 declare_local_label (tree id)
2457 {
2458   tree decl, shadow;
2459
2460   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2461      this scope we can restore the old value of IDENTIFIER_TYPE_VALUE.  */
2462   shadow = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2463                       current_binding_level->shadowed_labels);
2464   current_binding_level->shadowed_labels = shadow;
2465
2466   decl = make_label_decl (id, /*local_p=*/1);
2467   TREE_VALUE (shadow) = decl;
2468
2469   return decl;
2470 }
2471
2472 /* Returns nonzero if it is ill-formed to jump past the declaration of
2473    DECL.  Returns 2 if it's also a real problem.  */
2474
2475 static int
2476 decl_jump_unsafe (tree decl)
2477 {
2478   /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2479      with automatic storage duration is not in scope to a point where it is
2480      in scope is ill-formed unless the variable has scalar type, class type
2481      with a trivial default constructor and a trivial destructor, a
2482      cv-qualified version of one of these types, or an array of one of the
2483      preceding types and is declared without an initializer (8.5).  */
2484   tree type = TREE_TYPE (decl);
2485
2486   if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2487       || type == error_mark_node)
2488     return 0;
2489
2490   type = strip_array_types (type);
2491
2492   if (type_has_nontrivial_default_init (TREE_TYPE (decl))
2493       || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2494     return 2;
2495
2496   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2497     return 1;
2498
2499   return 0;
2500 }
2501
2502 /* A subroutine of check_previous_goto_1 to identify a branch to the user.  */
2503
2504 static void
2505 identify_goto (tree decl, const location_t *locus)
2506 {
2507   if (decl)
2508     permerror (input_location, "jump to label %qD", decl);
2509   else
2510     permerror (input_location, "jump to case label");
2511   if (locus)
2512     permerror (*locus, "  from here");
2513 }
2514
2515 /* Check that a single previously seen jump to a newly defined label
2516    is OK.  DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2517    the jump context; NAMES are the names in scope in LEVEL at the jump
2518    context; LOCUS is the source position of the jump or 0.  Returns
2519    true if all is well.  */
2520
2521 static bool
2522 check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2523                        bool exited_omp, const location_t *locus)
2524 {
2525   struct cp_binding_level *b;
2526   bool identified = false, saw_eh = false, saw_omp = false;
2527
2528   if (exited_omp)
2529     {
2530       identify_goto (decl, locus);
2531       error ("  exits OpenMP structured block");
2532       identified = saw_omp = true;
2533     }
2534
2535   for (b = current_binding_level; b ; b = b->level_chain)
2536     {
2537       tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2538
2539       for (new_decls = b->names; new_decls != old_decls;
2540            new_decls = TREE_CHAIN (new_decls))
2541         {
2542           int problem = decl_jump_unsafe (new_decls);
2543           if (! problem)
2544             continue;
2545
2546           if (!identified)
2547             {
2548               identify_goto (decl, locus);
2549               identified = true;
2550             }
2551           if (problem > 1)
2552             error ("  crosses initialization of %q+#D", new_decls);
2553           else
2554             permerror (input_location, "  enters scope of %q+#D which has "
2555                        "non-trivial destructor", new_decls);
2556         }
2557
2558       if (b == level)
2559         break;
2560       if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2561         {
2562           if (!identified)
2563             {
2564               identify_goto (decl, locus);
2565               identified = true;
2566             }
2567           if (b->kind == sk_try)
2568             error ("  enters try block");
2569           else
2570             error ("  enters catch block");
2571           saw_eh = true;
2572         }
2573       if (b->kind == sk_omp && !saw_omp)
2574         {
2575           if (!identified)
2576             {
2577               identify_goto (decl, locus);
2578               identified = true;
2579             }
2580           error ("  enters OpenMP structured block");
2581           saw_omp = true;
2582         }
2583     }
2584
2585   return !identified;
2586 }
2587
2588 static void
2589 check_previous_goto (tree decl, struct named_label_use_entry *use)
2590 {
2591   check_previous_goto_1 (decl, use->binding_level,
2592                          use->names_in_scope, use->in_omp_scope,
2593                          &use->o_goto_locus);
2594 }
2595
2596 static bool
2597 check_switch_goto (struct cp_binding_level* level)
2598 {
2599   return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2600 }
2601
2602 /* Check that a new jump to a label DECL is OK.  Called by
2603    finish_goto_stmt.  */
2604
2605 void
2606 check_goto (tree decl)
2607 {
2608   struct named_label_entry *ent, dummy;
2609   bool saw_catch = false, identified = false;
2610   tree bad;
2611
2612   /* We can't know where a computed goto is jumping.
2613      So we assume that it's OK.  */
2614   if (TREE_CODE (decl) != LABEL_DECL)
2615     return;
2616
2617   /* We didn't record any information about this label when we created it,
2618      and there's not much point since it's trivial to analyze as a return.  */
2619   if (decl == cdtor_label)
2620     return;
2621
2622   dummy.label_decl = decl;
2623   ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2624   gcc_assert (ent != NULL);
2625
2626   /* If the label hasn't been defined yet, defer checking.  */
2627   if (! DECL_INITIAL (decl))
2628     {
2629       struct named_label_use_entry *new_use;
2630
2631       /* Don't bother creating another use if the last goto had the
2632          same data, and will therefore create the same set of errors.  */
2633       if (ent->uses
2634           && ent->uses->names_in_scope == current_binding_level->names)
2635         return;
2636
2637       new_use = GGC_NEW (struct named_label_use_entry);
2638       new_use->binding_level = current_binding_level;
2639       new_use->names_in_scope = current_binding_level->names;
2640       new_use->o_goto_locus = input_location;
2641       new_use->in_omp_scope = false;
2642
2643       new_use->next = ent->uses;
2644       ent->uses = new_use;
2645       return;
2646     }
2647
2648   if (ent->in_try_scope || ent->in_catch_scope
2649       || ent->in_omp_scope || ent->bad_decls)
2650     {
2651       permerror (input_location, "jump to label %q+D", decl);
2652       permerror (input_location, "  from here");
2653       identified = true;
2654     }
2655
2656   for (bad = ent->bad_decls; bad; bad = TREE_CHAIN (bad))
2657     {
2658       tree b = TREE_VALUE (bad);
2659       int u = decl_jump_unsafe (b);
2660
2661       if (u > 1 && DECL_ARTIFICIAL (b))
2662         {
2663           /* Can't skip init of __exception_info.  */
2664           error_at (DECL_SOURCE_LOCATION (b), "  enters catch block");
2665           saw_catch = true;
2666         }
2667       else if (u > 1)
2668         error ("  skips initialization of %q+#D", b);
2669       else
2670         permerror (input_location, "  enters scope of %q+#D which has "
2671                    "non-trivial destructor", b);
2672     }
2673
2674   if (ent->in_try_scope)
2675     error ("  enters try block");
2676   else if (ent->in_catch_scope && !saw_catch)
2677     error ("  enters catch block");
2678
2679   if (ent->in_omp_scope)
2680     error ("  enters OpenMP structured block");
2681   else if (flag_openmp)
2682     {
2683       struct cp_binding_level *b;
2684       for (b = current_binding_level; b ; b = b->level_chain)
2685         {
2686           if (b == ent->binding_level)
2687             break;
2688           if (b->kind == sk_omp)
2689             {
2690               if (!identified)
2691                 {
2692                   permerror (input_location, "jump to label %q+D", decl);
2693                   permerror (input_location, "  from here");
2694                   identified = true;
2695                 }
2696               error ("  exits OpenMP structured block");
2697               break;
2698             }
2699         }
2700     }
2701 }
2702
2703 /* Check that a return is ok wrt OpenMP structured blocks.
2704    Called by finish_return_stmt.  Returns true if all is well.  */
2705
2706 bool
2707 check_omp_return (void)
2708 {
2709   struct cp_binding_level *b;
2710   for (b = current_binding_level; b ; b = b->level_chain)
2711     if (b->kind == sk_omp)
2712       {
2713         error ("invalid exit from OpenMP structured block");
2714         return false;
2715       }
2716   return true;
2717 }
2718
2719 /* Define a label, specifying the location in the source file.
2720    Return the LABEL_DECL node for the label.  */
2721
2722 tree
2723 define_label (location_t location, tree name)
2724 {
2725   struct named_label_entry *ent, dummy;
2726   struct cp_binding_level *p;
2727   tree decl;
2728
2729   timevar_push (TV_NAME_LOOKUP);
2730
2731   decl = lookup_label (name);
2732
2733   dummy.label_decl = decl;
2734   ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2735   gcc_assert (ent != NULL);
2736
2737   /* After labels, make any new cleanups in the function go into their
2738      own new (temporary) binding contour.  */
2739   for (p = current_binding_level;
2740        p->kind != sk_function_parms;
2741        p = p->level_chain)
2742     p->more_cleanups_ok = 0;
2743
2744   if (name == get_identifier ("wchar_t"))
2745     permerror (input_location, "label named wchar_t");
2746
2747   if (DECL_INITIAL (decl) != NULL_TREE)
2748     {
2749       error ("duplicate label %qD", decl);
2750       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
2751     }
2752   else
2753     {
2754       struct named_label_use_entry *use;
2755
2756       /* Mark label as having been defined.  */
2757       DECL_INITIAL (decl) = error_mark_node;
2758       /* Say where in the source.  */
2759       DECL_SOURCE_LOCATION (decl) = location;
2760
2761       ent->binding_level = current_binding_level;
2762       ent->names_in_scope = current_binding_level->names;
2763
2764       for (use = ent->uses; use ; use = use->next)
2765         check_previous_goto (decl, use);
2766       ent->uses = NULL;
2767     }
2768
2769   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2770 }
2771
2772 struct cp_switch
2773 {
2774   struct cp_binding_level *level;
2775   struct cp_switch *next;
2776   /* The SWITCH_STMT being built.  */
2777   tree switch_stmt;
2778   /* A splay-tree mapping the low element of a case range to the high
2779      element, or NULL_TREE if there is no high element.  Used to
2780      determine whether or not a new case label duplicates an old case
2781      label.  We need a tree, rather than simply a hash table, because
2782      of the GNU case range extension.  */
2783   splay_tree cases;
2784 };
2785
2786 /* A stack of the currently active switch statements.  The innermost
2787    switch statement is on the top of the stack.  There is no need to
2788    mark the stack for garbage collection because it is only active
2789    during the processing of the body of a function, and we never
2790    collect at that point.  */
2791
2792 static struct cp_switch *switch_stack;
2793
2794 /* Called right after a switch-statement condition is parsed.
2795    SWITCH_STMT is the switch statement being parsed.  */
2796
2797 void
2798 push_switch (tree switch_stmt)
2799 {
2800   struct cp_switch *p = XNEW (struct cp_switch);
2801   p->level = current_binding_level;
2802   p->next = switch_stack;
2803   p->switch_stmt = switch_stmt;
2804   p->cases = splay_tree_new (case_compare, NULL, NULL);
2805   switch_stack = p;
2806 }
2807
2808 void
2809 pop_switch (void)
2810 {
2811   struct cp_switch *cs = switch_stack;
2812   location_t switch_location;
2813
2814   /* Emit warnings as needed.  */
2815   if (EXPR_HAS_LOCATION (cs->switch_stmt))
2816     switch_location = EXPR_LOCATION (cs->switch_stmt);
2817   else
2818     switch_location = input_location;
2819   if (!processing_template_decl)
2820     c_do_switch_warnings (cs->cases, switch_location,
2821                           SWITCH_STMT_TYPE (cs->switch_stmt),
2822                           SWITCH_STMT_COND (cs->switch_stmt));
2823
2824   splay_tree_delete (cs->cases);
2825   switch_stack = switch_stack->next;
2826   free (cs);
2827 }
2828
2829 /* Note that we've seen a definition of a case label, and complain if this
2830    is a bad place for one.  */
2831
2832 tree
2833 finish_case_label (location_t loc, tree low_value, tree high_value)
2834 {
2835   tree cond, r;
2836   struct cp_binding_level *p;
2837
2838   if (processing_template_decl)
2839     {
2840       tree label;
2841
2842       /* For templates, just add the case label; we'll do semantic
2843          analysis at instantiation-time.  */
2844       label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
2845       return add_stmt (build_case_label (loc, low_value, high_value, label));
2846     }
2847
2848   /* Find the condition on which this switch statement depends.  */
2849   cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
2850   if (cond && TREE_CODE (cond) == TREE_LIST)
2851     cond = TREE_VALUE (cond);
2852
2853   if (!check_switch_goto (switch_stack->level))
2854     return error_mark_node;
2855
2856   r = c_add_case_label (loc, switch_stack->cases, cond,
2857                         SWITCH_STMT_TYPE (switch_stack->switch_stmt),
2858                         low_value, high_value);
2859
2860   /* After labels, make any new cleanups in the function go into their
2861      own new (temporary) binding contour.  */
2862   for (p = current_binding_level;
2863        p->kind != sk_function_parms;
2864        p = p->level_chain)
2865     p->more_cleanups_ok = 0;
2866
2867   return r;
2868 }
2869 \f
2870 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
2871
2872 static hashval_t
2873 typename_hash (const void* k)
2874 {
2875   hashval_t hash;
2876   const_tree const t = (const_tree) k;
2877
2878   hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2879           ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
2880
2881   return hash;
2882 }
2883
2884 typedef struct typename_info {
2885   tree scope;
2886   tree name;
2887   tree template_id;
2888   bool enum_p;
2889   bool class_p;
2890 } typename_info;
2891
2892 /* Compare two TYPENAME_TYPEs.  K1 is really of type `tree', K2 is
2893    really of type `typename_info*'  */
2894
2895 static int
2896 typename_compare (const void * k1, const void * k2)
2897 {
2898   const_tree const t1 = (const_tree) k1;
2899   const typename_info *const t2 = (const typename_info *) k2;
2900
2901   return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2902           && TYPE_CONTEXT (t1) == t2->scope
2903           && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2904           && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2905           && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
2906 }
2907
2908 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
2909    the type of `T', NAME is the IDENTIFIER_NODE for `t'.
2910
2911    Returns the new TYPENAME_TYPE.  */
2912
2913 static GTY ((param_is (union tree_node))) htab_t typename_htab;
2914
2915 static tree
2916 build_typename_type (tree context, tree name, tree fullname,
2917                      enum tag_types tag_type)
2918 {
2919   tree t;
2920   tree d;
2921   typename_info ti;
2922   void **e;
2923   hashval_t hash;
2924
2925   if (typename_htab == NULL)
2926     typename_htab = htab_create_ggc (61, &typename_hash,
2927                                      &typename_compare, NULL);
2928
2929   ti.scope = FROB_CONTEXT (context);
2930   ti.name = name;
2931   ti.template_id = fullname;
2932   ti.enum_p = tag_type == enum_type;
2933   ti.class_p = (tag_type == class_type
2934                 || tag_type == record_type
2935                 || tag_type == union_type);
2936   hash =  (htab_hash_pointer (ti.scope)
2937            ^ htab_hash_pointer (ti.name));
2938
2939   /* See if we already have this type.  */
2940   e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
2941   if (*e)
2942     t = (tree) *e;
2943   else
2944     {
2945       /* Build the TYPENAME_TYPE.  */
2946       t = cxx_make_type (TYPENAME_TYPE);
2947       TYPE_CONTEXT (t) = ti.scope;
2948       TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2949       TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2950       TYPENAME_IS_CLASS_P (t) = ti.class_p;
2951
2952       /* Build the corresponding TYPE_DECL.  */
2953       d = build_decl (input_location, TYPE_DECL, name, t);
2954       TYPE_NAME (TREE_TYPE (d)) = d;
2955       TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2956       DECL_CONTEXT (d) = FROB_CONTEXT (context);
2957       DECL_ARTIFICIAL (d) = 1;
2958
2959       /* Store it in the hash table.  */
2960       *e = t;
2961
2962       /* TYPENAME_TYPEs must always be compared structurally, because
2963          they may or may not resolve down to another type depending on
2964          the currently open classes. */
2965       SET_TYPE_STRUCTURAL_EQUALITY (t);
2966     }
2967
2968   return t;
2969 }
2970
2971 /* Resolve `typename CONTEXT::NAME'.  TAG_TYPE indicates the tag
2972    provided to name the type.  Returns an appropriate type, unless an
2973    error occurs, in which case error_mark_node is returned.  If we
2974    locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2975    return that, rather than the _TYPE it corresponds to, in other
2976    cases we look through the type decl.  If TF_ERROR is set, complain
2977    about errors, otherwise be quiet.  */
2978
2979 tree
2980 make_typename_type (tree context, tree name, enum tag_types tag_type,
2981                     tsubst_flags_t complain)
2982 {
2983   tree fullname;
2984   tree t;
2985   bool want_template;
2986
2987   if (name == error_mark_node
2988       || context == NULL_TREE
2989       || context == error_mark_node)
2990     return error_mark_node;
2991
2992   if (TYPE_P (name))
2993     {
2994       if (!(TYPE_LANG_SPECIFIC (name)
2995             && (CLASSTYPE_IS_TEMPLATE (name)
2996                 || CLASSTYPE_USE_TEMPLATE (name))))
2997         name = TYPE_IDENTIFIER (name);
2998       else
2999         /* Create a TEMPLATE_ID_EXPR for the type.  */
3000         name = build_nt (TEMPLATE_ID_EXPR,
3001                          CLASSTYPE_TI_TEMPLATE (name),
3002                          CLASSTYPE_TI_ARGS (name));
3003     }
3004   else if (TREE_CODE (name) == TYPE_DECL)
3005     name = DECL_NAME (name);
3006
3007   fullname = name;
3008
3009   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3010     {
3011       name = TREE_OPERAND (name, 0);
3012       if (TREE_CODE (name) == TEMPLATE_DECL)
3013         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3014       else if (TREE_CODE (name) == OVERLOAD)
3015         {
3016           error ("%qD is not a type", name);
3017           return error_mark_node;
3018         }
3019     }
3020   if (TREE_CODE (name) == TEMPLATE_DECL)
3021     {
3022       error ("%qD used without template parameters", name);
3023       return error_mark_node;
3024     }
3025   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3026   gcc_assert (TYPE_P (context));
3027
3028   if (!MAYBE_CLASS_TYPE_P (context))
3029     {
3030       if (complain & tf_error)
3031         error ("%q#T is not a class", context);
3032       return error_mark_node;
3033     }
3034   
3035   /* When the CONTEXT is a dependent type,  NAME could refer to a
3036      dependent base class of CONTEXT.  But look inside it anyway
3037      if CONTEXT is a currently open scope, in case it refers to a
3038      member of the current instantiation or a non-dependent base;
3039      lookup will stop when we hit a dependent base.  */
3040   if (!dependent_scope_p (context))
3041     /* We should only set WANT_TYPE when we're a nested typename type.
3042        Then we can give better diagnostics if we find a non-type.  */
3043     t = lookup_field (context, name, 2, /*want_type=*/true);
3044   else
3045     t = NULL_TREE;
3046
3047   if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3048     return build_typename_type (context, name, fullname, tag_type);
3049
3050   want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3051   
3052   if (!t)
3053     {
3054       if (complain & tf_error)
3055         error (want_template ? "no class template named %q#T in %q#T"
3056                : "no type named %q#T in %q#T", name, context);
3057       return error_mark_node;
3058     }
3059   
3060   /* Pull out the template from an injected-class-name (or multiple).  */
3061   if (want_template)
3062     t = maybe_get_template_decl_from_type_decl (t);
3063
3064   if (TREE_CODE (t) == TREE_LIST)
3065     {
3066       if (complain & tf_error)
3067         {
3068           error ("lookup of %qT in %qT is ambiguous", name, context);
3069           print_candidates (t);
3070         }
3071       return error_mark_node;
3072     }
3073
3074   if (want_template && !DECL_CLASS_TEMPLATE_P (t))
3075     {
3076       if (complain & tf_error)
3077         error ("%<typename %T::%D%> names %q#T, which is not a class template",
3078                context, name, t);
3079       return error_mark_node;
3080     }
3081   if (!want_template && TREE_CODE (t) != TYPE_DECL)
3082     {
3083       if (complain & tf_error)
3084         error ("%<typename %T::%D%> names %q#T, which is not a type",
3085                context, name, t);
3086       return error_mark_node;
3087     }
3088   
3089   if (complain & tf_error)
3090     perform_or_defer_access_check (TYPE_BINFO (context), t, t);
3091
3092   if (want_template)
3093     return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3094                                   NULL_TREE, context,
3095                                   /*entering_scope=*/0,
3096                                   tf_warning_or_error | tf_user);
3097   
3098   if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3099     t = TREE_TYPE (t);
3100   
3101   return t;
3102 }
3103
3104 /* Resolve `CONTEXT::template NAME'.  Returns a TEMPLATE_DECL if the name
3105    can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3106    in which case error_mark_node is returned.
3107
3108    If PARM_LIST is non-NULL, also make sure that the template parameter
3109    list of TEMPLATE_DECL matches.
3110
3111    If COMPLAIN zero, don't complain about any errors that occur.  */
3112
3113 tree
3114 make_unbound_class_template (tree context, tree name, tree parm_list,
3115                              tsubst_flags_t complain)
3116 {
3117   tree t;
3118   tree d;
3119
3120   if (TYPE_P (name))
3121     name = TYPE_IDENTIFIER (name);
3122   else if (DECL_P (name))
3123     name = DECL_NAME (name);
3124   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3125
3126   if (!dependent_type_p (context)
3127       || currently_open_class (context))
3128     {
3129       tree tmpl = NULL_TREE;
3130
3131       if (MAYBE_CLASS_TYPE_P (context))
3132         tmpl = lookup_field (context, name, 0, false);
3133
3134       if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
3135         {
3136           if (complain & tf_error)
3137             error ("no class template named %q#T in %q#T", name, context);
3138           return error_mark_node;
3139         }
3140
3141       if (parm_list
3142           && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3143         {
3144           if (complain & tf_error)
3145             {
3146               error ("template parameters do not match template");
3147               error ("%q+D declared here", tmpl);
3148             }
3149           return error_mark_node;
3150         }
3151
3152       if (complain & tf_error)
3153         perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
3154
3155       return tmpl;
3156     }
3157
3158   /* Build the UNBOUND_CLASS_TEMPLATE.  */
3159   t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3160   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3161   TREE_TYPE (t) = NULL_TREE;
3162   SET_TYPE_STRUCTURAL_EQUALITY (t);
3163
3164   /* Build the corresponding TEMPLATE_DECL.  */
3165   d = build_decl (input_location, TEMPLATE_DECL, name, t);
3166   TYPE_NAME (TREE_TYPE (d)) = d;
3167   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3168   DECL_CONTEXT (d) = FROB_CONTEXT (context);
3169   DECL_ARTIFICIAL (d) = 1;
3170   DECL_TEMPLATE_PARMS (d) = parm_list;
3171
3172   return t;
3173 }
3174
3175 \f
3176
3177 /* Push the declarations of builtin types into the namespace.
3178    RID_INDEX is the index of the builtin type in the array
3179    RID_POINTERS.  NAME is the name used when looking up the builtin
3180    type.  TYPE is the _TYPE node for the builtin type.  */
3181
3182 void
3183 record_builtin_type (enum rid rid_index,
3184                      const char* name,
3185                      tree type)
3186 {
3187   tree rname = NULL_TREE, tname = NULL_TREE;
3188   tree tdecl = NULL_TREE;
3189
3190   if ((int) rid_index < (int) RID_MAX)
3191     rname = ridpointers[(int) rid_index];
3192   if (name)
3193     tname = get_identifier (name);
3194
3195   /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3196      eliminated.  Built-in types should not be looked up name; their
3197      names are keywords that the parser can recognize.  However, there
3198      is code in c-common.c that uses identifier_global_value to look
3199      up built-in types by name.  */
3200   if (tname)
3201     {
3202       tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3203       DECL_ARTIFICIAL (tdecl) = 1;
3204       SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3205     }
3206   if (rname)
3207     {
3208       if (!tdecl)
3209         {
3210           tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3211           DECL_ARTIFICIAL (tdecl) = 1;
3212         }
3213       SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3214     }
3215
3216   if (!TYPE_NAME (type))
3217     TYPE_NAME (type) = tdecl;
3218
3219   if (tdecl)
3220     debug_hooks->type_decl (tdecl, 0);
3221 }
3222
3223 /* Record one of the standard Java types.
3224  * Declare it as having the given NAME.
3225  * If SIZE > 0, it is the size of one of the integral types;
3226  * otherwise it is the negative of the size of one of the other types.  */
3227
3228 static tree
3229 record_builtin_java_type (const char* name, int size)
3230 {
3231   tree type, decl;
3232   if (size > 0)
3233     type = build_nonstandard_integer_type (size, 0);
3234   else if (size > -32)
3235     {
3236       tree stype;
3237       /* "__java_char" or ""__java_boolean".  */
3238       type = build_nonstandard_integer_type (-size, 1);
3239       /* Get the signed type cached and attached to the unsigned type,
3240          so it doesn't get garbage-collected at "random" times,
3241          causing potential codegen differences out of different UIDs
3242          and different alias set numbers.  */
3243       stype = build_nonstandard_integer_type (-size, 0);
3244       TREE_CHAIN (type) = stype;
3245       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3246     }
3247   else
3248     { /* "__java_float" or ""__java_double".  */
3249       type = make_node (REAL_TYPE);
3250       TYPE_PRECISION (type) = - size;
3251       layout_type (type);
3252     }
3253   record_builtin_type (RID_MAX, name, type);
3254   decl = TYPE_NAME (type);
3255
3256   /* Suppress generate debug symbol entries for these types,
3257      since for normal C++ they are just clutter.
3258      However, push_lang_context undoes this if extern "Java" is seen.  */
3259   DECL_IGNORED_P (decl) = 1;
3260
3261   TYPE_FOR_JAVA (type) = 1;
3262   return type;
3263 }
3264
3265 /* Push a type into the namespace so that the back ends ignore it.  */
3266
3267 static void
3268 record_unknown_type (tree type, const char* name)
3269 {
3270   tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3271                                     TYPE_DECL, get_identifier (name), type));
3272   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
3273   DECL_IGNORED_P (decl) = 1;
3274   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3275   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3276   TYPE_ALIGN (type) = 1;
3277   TYPE_USER_ALIGN (type) = 0;
3278   SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3279 }
3280
3281 /* A string for which we should create an IDENTIFIER_NODE at
3282    startup.  */
3283
3284 typedef struct predefined_identifier
3285 {
3286   /* The name of the identifier.  */
3287   const char *const name;
3288   /* The place where the IDENTIFIER_NODE should be stored.  */
3289   tree *const node;
3290   /* Nonzero if this is the name of a constructor or destructor.  */
3291   const int ctor_or_dtor_p;
3292 } predefined_identifier;
3293
3294 /* Create all the predefined identifiers.  */
3295
3296 static void
3297 initialize_predefined_identifiers (void)
3298 {
3299   const predefined_identifier *pid;
3300
3301   /* A table of identifiers to create at startup.  */
3302   static const predefined_identifier predefined_identifiers[] = {
3303     { "C++", &lang_name_cplusplus, 0 },
3304     { "C", &lang_name_c, 0 },
3305     { "Java", &lang_name_java, 0 },
3306     /* Some of these names have a trailing space so that it is
3307        impossible for them to conflict with names written by users.  */
3308     { "__ct ", &ctor_identifier, 1 },
3309     { "__base_ctor ", &base_ctor_identifier, 1 },
3310     { "__comp_ctor ", &complete_ctor_identifier, 1 },
3311     { "__dt ", &dtor_identifier, 1 },
3312     { "__comp_dtor ", &complete_dtor_identifier, 1 },
3313     { "__base_dtor ", &base_dtor_identifier, 1 },
3314     { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3315     { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3316     { "nelts", &nelts_identifier, 0 },
3317     { THIS_NAME, &this_identifier, 0 },
3318     { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3319     { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3320     { "_vptr", &vptr_identifier, 0 },
3321     { "__vtt_parm", &vtt_parm_identifier, 0 },
3322     { "::", &global_scope_name, 0 },
3323     { "std", &std_identifier, 0 },
3324     { NULL, NULL, 0 }
3325   };
3326
3327   for (pid = predefined_identifiers; pid->name; ++pid)
3328     {
3329       *pid->node = get_identifier (pid->name);
3330       if (pid->ctor_or_dtor_p)
3331         IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3332     }
3333 }
3334
3335 /* Create the predefined scalar types of C,
3336    and some nodes representing standard constants (0, 1, (void *)0).
3337    Initialize the global binding level.
3338    Make definitions for built-in primitive functions.  */
3339
3340 void
3341 cxx_init_decl_processing (void)
3342 {
3343   tree void_ftype;
3344   tree void_ftype_ptr;
3345
3346   build_common_tree_nodes (flag_signed_char, false);
3347
3348   /* Create all the identifiers we need.  */
3349   initialize_predefined_identifiers ();
3350
3351   /* Create the global variables.  */
3352   push_to_top_level ();
3353
3354   current_function_decl = NULL_TREE;
3355   current_binding_level = NULL;
3356   /* Enter the global namespace.  */
3357   gcc_assert (global_namespace == NULL_TREE);
3358   global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3359                                       void_type_node);
3360   TREE_PUBLIC (global_namespace) = 1;
3361   begin_scope (sk_namespace, global_namespace);
3362
3363   current_lang_name = NULL_TREE;
3364
3365   if (flag_visibility_ms_compat)
3366     default_visibility = VISIBILITY_HIDDEN;
3367
3368   /* Initially, C.  */
3369   current_lang_name = lang_name_c;
3370
3371   /* Create the `std' namespace.  */
3372   push_namespace (std_identifier);
3373   std_node = current_namespace;
3374   pop_namespace ();
3375
3376   c_common_nodes_and_builtins ();
3377
3378   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3379   java_short_type_node = record_builtin_java_type ("__java_short", 16);
3380   java_int_type_node = record_builtin_java_type ("__java_int", 32);
3381   java_long_type_node = record_builtin_java_type ("__java_long", 64);
3382   java_float_type_node = record_builtin_java_type ("__java_float", -32);
3383   java_double_type_node = record_builtin_java_type ("__java_double", -64);
3384   java_char_type_node = record_builtin_java_type ("__java_char", -16);
3385   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3386
3387   integer_two_node = build_int_cst (NULL_TREE, 2);
3388   integer_three_node = build_int_cst (NULL_TREE, 3);
3389
3390   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3391   truthvalue_type_node = boolean_type_node;
3392   truthvalue_false_node = boolean_false_node;
3393   truthvalue_true_node = boolean_true_node;
3394
3395   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3396
3397 #if 0
3398   record_builtin_type (RID_MAX, NULL, string_type_node);
3399 #endif
3400
3401   delta_type_node = ptrdiff_type_node;
3402   vtable_index_type = ptrdiff_type_node;
3403
3404   vtt_parm_type = build_pointer_type (const_ptr_type_node);
3405   void_ftype = build_function_type (void_type_node, void_list_node);
3406   void_ftype_ptr = build_function_type (void_type_node,
3407                                         tree_cons (NULL_TREE,
3408                                                    ptr_type_node,
3409                                                    void_list_node));
3410   void_ftype_ptr
3411     = build_exception_variant (void_ftype_ptr, empty_except_spec);
3412
3413   /* C++ extensions */
3414
3415   unknown_type_node = make_node (UNKNOWN_TYPE);
3416   record_unknown_type (unknown_type_node, "unknown type");
3417
3418   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
3419   TREE_TYPE (unknown_type_node) = unknown_type_node;
3420
3421   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3422      result.  */
3423   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3424   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3425
3426   init_list_type_node = make_node (UNKNOWN_TYPE);
3427   record_unknown_type (init_list_type_node, "init list");
3428
3429   {
3430     /* Make sure we get a unique function type, so we can give
3431        its pointer type a name.  (This wins for gdb.) */
3432     tree vfunc_type = make_node (FUNCTION_TYPE);
3433     TREE_TYPE (vfunc_type) = integer_type_node;
3434     TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3435     layout_type (vfunc_type);
3436
3437     vtable_entry_type = build_pointer_type (vfunc_type);
3438   }
3439   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3440
3441   vtbl_type_node
3442     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3443   layout_type (vtbl_type_node);
3444   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3445   record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3446   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3447   layout_type (vtbl_ptr_type_node);
3448   record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3449
3450   push_namespace (get_identifier ("__cxxabiv1"));
3451   abi_node = current_namespace;
3452   pop_namespace ();
3453
3454   global_type_node = make_node (LANG_TYPE);
3455   record_unknown_type (global_type_node, "global type");
3456
3457   /* Now, C++.  */
3458   current_lang_name = lang_name_cplusplus;
3459
3460   {
3461     tree bad_alloc_id;
3462     tree bad_alloc_type_node;
3463     tree bad_alloc_decl;
3464     tree newtype, deltype;
3465     tree ptr_ftype_sizetype;
3466
3467     push_namespace (std_identifier);
3468     bad_alloc_id = get_identifier ("bad_alloc");
3469     bad_alloc_type_node = make_class_type (RECORD_TYPE);
3470     TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3471     bad_alloc_decl
3472       = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3473     DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3474     pop_namespace ();
3475
3476     ptr_ftype_sizetype
3477       = build_function_type (ptr_type_node,
3478                              tree_cons (NULL_TREE,
3479                                         size_type_node,
3480                                         void_list_node));
3481     newtype = build_exception_variant
3482       (ptr_ftype_sizetype, add_exception_specifier
3483        (NULL_TREE, bad_alloc_type_node, -1));
3484     deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3485     push_cp_library_fn (NEW_EXPR, newtype);
3486     push_cp_library_fn (VEC_NEW_EXPR, newtype);
3487     global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3488     push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3489   }
3490
3491   abort_fndecl
3492     = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3493
3494   /* Perform other language dependent initializations.  */
3495   init_class_processing ();
3496   init_rtti_processing ();
3497   init_template_processing ();
3498
3499   if (flag_exceptions)
3500     init_exception_processing ();
3501
3502   if (! supports_one_only ())
3503     flag_weak = 0;
3504
3505   make_fname_decl = cp_make_fname_decl;
3506   start_fname_decls ();
3507
3508   /* Show we use EH for cleanups.  */
3509   if (flag_exceptions)
3510     using_eh_for_cleanups ();
3511 }
3512
3513 /* Generate an initializer for a function naming variable from
3514    NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
3515    filled in with the type of the init.  */
3516
3517 tree
3518 cp_fname_init (const char* name, tree *type_p)
3519 {
3520   tree domain = NULL_TREE;
3521   tree type;
3522   tree init = NULL_TREE;
3523   size_t length = 0;
3524
3525   if (name)
3526     {
3527       length = strlen (name);
3528       domain = build_index_type (size_int (length));
3529       init = build_string (length + 1, name);
3530     }
3531
3532   type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3533   type = build_cplus_array_type (type, domain);
3534
3535   *type_p = type;
3536
3537   if (init)
3538     TREE_TYPE (init) = type;
3539   else
3540     init = error_mark_node;
3541
3542   return init;
3543 }
3544
3545 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3546    the decl, LOC is the location to give the decl, NAME is the
3547    initialization string and TYPE_DEP indicates whether NAME depended
3548    on the type of the function. We make use of that to detect
3549    __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3550    at the point of first use, so we mustn't push the decl now.  */
3551
3552 static tree
3553 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3554 {
3555   const char *const name = (type_dep && processing_template_decl
3556                             ? NULL : fname_as_string (type_dep));
3557   tree type;
3558   tree init = cp_fname_init (name, &type);
3559   tree decl = build_decl (loc, VAR_DECL, id, type);
3560
3561   if (name)
3562     free (CONST_CAST (char *, name));
3563
3564   /* As we're using pushdecl_with_scope, we must set the context.  */
3565   DECL_CONTEXT (decl) = current_function_decl;
3566   DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3567
3568   TREE_STATIC (decl) = 1;
3569   TREE_READONLY (decl) = 1;
3570   DECL_ARTIFICIAL (decl) = 1;
3571
3572   TREE_USED (decl) = 1;
3573
3574   if (current_function_decl)
3575     {
3576       struct cp_binding_level *b = current_binding_level;
3577       while (b->level_chain->kind != sk_function_parms)
3578         b = b->level_chain;
3579       pushdecl_with_scope (decl, b, /*is_friend=*/false);
3580       cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3581                       LOOKUP_ONLYCONVERTING);
3582     }
3583   else
3584     pushdecl_top_level_and_finish (decl, init);
3585
3586   return decl;
3587 }
3588
3589 static tree
3590 builtin_function_1 (tree decl, tree context, bool is_global)
3591 {
3592   tree          id = DECL_NAME (decl);
3593   const char *name = IDENTIFIER_POINTER (id);
3594
3595   retrofit_lang_decl (decl);
3596
3597   DECL_ARTIFICIAL (decl) = 1;
3598   SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3599   SET_DECL_LANGUAGE (decl, lang_c);
3600   /* Runtime library routines are, by definition, available in an
3601      external shared object.  */
3602   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3603   DECL_VISIBILITY_SPECIFIED (decl) = 1;
3604
3605   DECL_CONTEXT (decl) = context;
3606
3607   if (is_global)
3608     pushdecl_top_level (decl);
3609   else
3610     pushdecl (decl);
3611
3612   /* A function in the user's namespace should have an explicit
3613      declaration before it is used.  Mark the built-in function as
3614      anticipated but not actually declared.  */
3615   if (name[0] != '_' || name[1] != '_')
3616     DECL_ANTICIPATED (decl) = 1;
3617   else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3618     {
3619       size_t len = strlen (name);
3620
3621       /* Treat __*_chk fortification functions as anticipated as well,
3622          unless they are __builtin_*.  */
3623       if (len > strlen ("___chk")
3624           && memcmp (name + len - strlen ("_chk"),
3625                      "_chk", strlen ("_chk") + 1) == 0)
3626         DECL_ANTICIPATED (decl) = 1;
3627     }
3628
3629   return decl;
3630 }
3631
3632 tree
3633 cxx_builtin_function (tree decl)
3634 {
3635   tree          id = DECL_NAME (decl);
3636   const char *name = IDENTIFIER_POINTER (id);
3637   /* All builtins that don't begin with an '_' should additionally
3638      go in the 'std' namespace.  */
3639   if (name[0] != '_')
3640     {
3641       tree decl2 = copy_node(decl);
3642       push_namespace (std_identifier);
3643       builtin_function_1 (decl2, std_node, false);
3644       pop_namespace ();
3645     }
3646
3647   return builtin_function_1 (decl, NULL_TREE, false);
3648 }
3649
3650 /* Like cxx_builtin_function, but guarantee the function is added to the global
3651    scope.  This is to allow function specific options to add new machine
3652    dependent builtins when the target ISA changes via attribute((target(...)))
3653    which saves space on program startup if the program does not use non-generic
3654    ISAs.  */
3655
3656 tree
3657 cxx_builtin_function_ext_scope (tree decl)
3658 {
3659
3660   tree          id = DECL_NAME (decl);
3661   const char *name = IDENTIFIER_POINTER (id);
3662   /* All builtins that don't begin with an '_' should additionally
3663      go in the 'std' namespace.  */
3664   if (name[0] != '_')
3665     {
3666       tree decl2 = copy_node(decl);
3667       push_namespace (std_identifier);
3668       builtin_function_1 (decl2, std_node, true);
3669       pop_namespace ();
3670     }
3671
3672   return builtin_function_1 (decl, NULL_TREE, true);
3673 }
3674
3675 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3676    function.  Not called directly.  */
3677
3678 static tree
3679 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3680 {
3681   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3682   DECL_EXTERNAL (fn) = 1;
3683   TREE_PUBLIC (fn) = 1;
3684   DECL_ARTIFICIAL (fn) = 1;
3685   SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3686   SET_DECL_LANGUAGE (fn, lang_c);
3687   /* Runtime library routines are, by definition, available in an
3688      external shared object.  */
3689   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3690   DECL_VISIBILITY_SPECIFIED (fn) = 1;
3691   return fn;
3692 }
3693
3694 /* Returns the _DECL for a library function with C linkage.
3695    We assume that such functions never throw; if this is incorrect,
3696    callers should unset TREE_NOTHROW.  */
3697
3698 static tree
3699 build_library_fn (tree name, tree type)
3700 {
3701   tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3702   TREE_NOTHROW (fn) = 1;
3703   return fn;
3704 }
3705
3706 /* Returns the _DECL for a library function with C++ linkage.  */
3707
3708 static tree
3709 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3710 {
3711   tree fn = build_library_fn_1 (name, operator_code, type);
3712   TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3713   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3714   SET_DECL_LANGUAGE (fn, lang_cplusplus);
3715   return fn;
3716 }
3717
3718 /* Like build_library_fn, but takes a C string instead of an
3719    IDENTIFIER_NODE.  */
3720
3721 tree
3722 build_library_fn_ptr (const char* name, tree type)
3723 {
3724   return build_library_fn (get_identifier (name), type);
3725 }
3726
3727 /* Like build_cp_library_fn, but takes a C string instead of an
3728    IDENTIFIER_NODE.  */
3729
3730 tree
3731 build_cp_library_fn_ptr (const char* name, tree type)
3732 {
3733   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3734 }
3735
3736 /* Like build_library_fn, but also pushes the function so that we will
3737    be able to find it via IDENTIFIER_GLOBAL_VALUE.  Also, the function
3738    may throw exceptions listed in RAISES.  */
3739
3740 tree
3741 push_library_fn (tree name, tree type, tree raises)
3742 {
3743   tree fn;
3744
3745   if (raises)
3746     type = build_exception_variant (type, raises);
3747
3748   fn = build_library_fn (name, type);
3749   pushdecl_top_level (fn);
3750   return fn;
3751 }
3752
3753 /* Like build_cp_library_fn, but also pushes the function so that it
3754    will be found by normal lookup.  */
3755
3756 static tree
3757 push_cp_library_fn (enum tree_code operator_code, tree type)
3758 {
3759   tree fn = build_cp_library_fn (ansi_opname (operator_code),
3760                                  operator_code,
3761                                  type);
3762   pushdecl (fn);
3763   return fn;
3764 }
3765
3766 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3767    a FUNCTION_TYPE.  */
3768
3769 tree
3770 push_void_library_fn (tree name, tree parmtypes)
3771 {
3772   tree type = build_function_type (void_type_node, parmtypes);
3773   return push_library_fn (name, type, NULL_TREE);
3774 }
3775
3776 /* Like push_library_fn, but also note that this function throws
3777    and does not return.  Used for __throw_foo and the like.  */
3778
3779 tree
3780 push_throw_library_fn (tree name, tree type)
3781 {
3782   tree fn = push_library_fn (name, type, NULL_TREE);
3783   TREE_THIS_VOLATILE (fn) = 1;
3784   TREE_NOTHROW (fn) = 0;
3785   return fn;
3786 }
3787 \f
3788 /* When we call finish_struct for an anonymous union, we create
3789    default copy constructors and such.  But, an anonymous union
3790    shouldn't have such things; this function undoes the damage to the
3791    anonymous union type T.
3792
3793    (The reason that we create the synthesized methods is that we don't
3794    distinguish `union { int i; }' from `typedef union { int i; } U'.
3795    The first is an anonymous union; the second is just an ordinary
3796    union type.)  */
3797
3798 void
3799 fixup_anonymous_aggr (tree t)
3800 {
3801   tree *q;
3802
3803   /* Wipe out memory of synthesized methods.  */
3804   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
3805   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3806   TYPE_HAS_INIT_REF (t) = 0;
3807   TYPE_HAS_CONST_INIT_REF (t) = 0;
3808   TYPE_HAS_ASSIGN_REF (t) = 0;
3809   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3810
3811   /* Splice the implicitly generated functions out of the TYPE_METHODS
3812      list.  */
3813   q = &TYPE_METHODS (t);
3814   while (*q)
3815     {
3816       if (DECL_ARTIFICIAL (*q))
3817         *q = TREE_CHAIN (*q);
3818       else
3819         q = &TREE_CHAIN (*q);
3820     }
3821
3822   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
3823   if (TYPE_METHODS (t))
3824     {
3825       tree decl = TYPE_MAIN_DECL (t);
3826
3827       if (TREE_CODE (t) != UNION_TYPE)
3828         error_at (DECL_SOURCE_LOCATION (decl), 
3829                   "an anonymous struct cannot have function members");
3830       else
3831         error_at (DECL_SOURCE_LOCATION (decl),
3832                   "an anonymous union cannot have function members");
3833     }
3834
3835   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3836      assignment operators (because they cannot have these methods themselves).
3837      For anonymous unions this is already checked because they are not allowed
3838      in any union, otherwise we have to check it.  */
3839   if (TREE_CODE (t) != UNION_TYPE)
3840     {
3841       tree field, type;
3842
3843       for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3844         if (TREE_CODE (field) == FIELD_DECL)
3845           {
3846             type = TREE_TYPE (field);
3847             if (CLASS_TYPE_P (type))
3848               {
3849                 if (TYPE_NEEDS_CONSTRUCTING (type))
3850                   error ("member %q+#D with constructor not allowed "
3851                          "in anonymous aggregate", field);
3852                 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3853                   error ("member %q+#D with destructor not allowed "
3854                          "in anonymous aggregate", field);
3855                 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3856                   error ("member %q+#D with copy assignment operator "
3857                          "not allowed in anonymous aggregate", field);
3858               }
3859           }
3860     }
3861 }
3862
3863 /* Make sure that a declaration with no declarator is well-formed, i.e.
3864    just declares a tagged type or anonymous union.
3865
3866    Returns the type declared; or NULL_TREE if none.  */
3867
3868 tree
3869 check_tag_decl (cp_decl_specifier_seq *declspecs)
3870 {
3871   int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3872   int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3873   /* If a class, struct, or enum type is declared by the DECLSPECS
3874      (i.e, if a class-specifier, enum-specifier, or non-typename
3875      elaborated-type-specifier appears in the DECLSPECS),
3876      DECLARED_TYPE is set to the corresponding type.  */
3877   tree declared_type = NULL_TREE;
3878   bool error_p = false;
3879
3880   if (declspecs->multiple_types_p)
3881     error ("multiple types in one declaration");
3882   else if (declspecs->redefined_builtin_type)
3883     {
3884       if (!in_system_header)
3885         permerror (input_location, "redeclaration of C++ built-in type %qT",
3886                    declspecs->redefined_builtin_type);
3887       return NULL_TREE;
3888     }
3889
3890   if (declspecs->type
3891       && TYPE_P (declspecs->type)
3892       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3893            && MAYBE_CLASS_TYPE_P (declspecs->type))
3894           || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3895     declared_type = declspecs->type;
3896   else if (declspecs->type == error_mark_node)
3897     error_p = true;
3898   if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3899     permerror (input_location, "declaration does not declare anything");
3900   /* Check for an anonymous union.  */
3901   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
3902            && TYPE_ANONYMOUS_P (declared_type))
3903     {
3904       /* 7/3 In a simple-declaration, the optional init-declarator-list
3905          can be omitted only when declaring a class (clause 9) or
3906          enumeration (7.2), that is, when the decl-specifier-seq contains
3907          either a class-specifier, an elaborated-type-specifier with
3908          a class-key (9.1), or an enum-specifier.  In these cases and
3909          whenever a class-specifier or enum-specifier is present in the
3910          decl-specifier-seq, the identifiers in these specifiers are among
3911          the names being declared by the declaration (as class-name,
3912          enum-names, or enumerators, depending on the syntax).  In such
3913          cases, and except for the declaration of an unnamed bit-field (9.6),
3914          the decl-specifier-seq shall introduce one or more names into the
3915          program, or shall redeclare a name introduced by a previous
3916          declaration.  [Example:
3917              enum { };                  // ill-formed
3918              typedef class { };         // ill-formed
3919          --end example]  */
3920       if (saw_typedef)
3921         {
3922           error ("missing type-name in typedef-declaration");
3923           return NULL_TREE;
3924         }
3925       /* Anonymous unions are objects, so they can have specifiers.  */;
3926       SET_ANON_AGGR_TYPE_P (declared_type);
3927
3928       if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
3929         pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
3930     }
3931
3932   else
3933     {
3934       if (declspecs->specs[(int)ds_inline]
3935           || declspecs->specs[(int)ds_virtual])
3936         error ("%qs can only be specified for functions",
3937                declspecs->specs[(int)ds_inline]
3938                ? "inline" : "virtual");
3939       else if (saw_friend
3940                && (!current_class_type
3941                    || current_scope () != current_class_type))
3942         error ("%<friend%> can only be specified inside a class");
3943       else if (declspecs->specs[(int)ds_explicit])
3944         error ("%<explicit%> can only be specified for constructors");
3945       else if (declspecs->storage_class)
3946         error ("a storage class can only be specified for objects "
3947                "and functions");
3948       else if (declspecs->specs[(int)ds_const]
3949                || declspecs->specs[(int)ds_volatile]
3950                || declspecs->specs[(int)ds_restrict]
3951                || declspecs->specs[(int)ds_thread])
3952         error ("qualifiers can only be specified for objects "
3953                "and functions");
3954       else if (saw_typedef)
3955         warning (0, "%<typedef%> was ignored in this declaration");
3956       else if (declspecs->specs[(int) ds_constexpr])
3957         error ("%<constexpr> cannot be used for type declarations");
3958     }
3959
3960   return declared_type;
3961 }
3962
3963 /* Called when a declaration is seen that contains no names to declare.
3964    If its type is a reference to a structure, union or enum inherited
3965    from a containing scope, shadow that tag name for the current scope
3966    with a forward reference.
3967    If its type defines a new named structure or union
3968    or defines an enum, it is valid but we need not do anything here.
3969    Otherwise, it is an error.
3970
3971    C++: may have to grok the declspecs to learn about static,
3972    complain for anonymous unions.
3973
3974    Returns the TYPE declared -- or NULL_TREE if none.  */
3975
3976 tree
3977 shadow_tag (cp_decl_specifier_seq *declspecs)
3978 {
3979   tree t = check_tag_decl (declspecs);
3980
3981   if (!t)
3982     return NULL_TREE;
3983
3984   if (declspecs->attributes)
3985     {
3986       warning (0, "attribute ignored in declaration of %q+#T", t);
3987       warning (0, "attribute for %q+#T must follow the %qs keyword",
3988                t, class_key_or_enum_as_string (t));
3989
3990     }
3991
3992   if (maybe_process_partial_specialization (t) == error_mark_node)
3993     return NULL_TREE;
3994
3995   /* This is where the variables in an anonymous union are
3996      declared.  An anonymous union declaration looks like:
3997      union { ... } ;
3998      because there is no declarator after the union, the parser
3999      sends that declaration here.  */
4000   if (ANON_AGGR_TYPE_P (t))
4001     {
4002       fixup_anonymous_aggr (t);
4003
4004       if (TYPE_FIELDS (t))
4005         {
4006           tree decl = grokdeclarator (/*declarator=*/NULL,
4007                                       declspecs, NORMAL, 0, NULL);
4008           finish_anon_union (decl);
4009         }
4010     }
4011
4012   return t;
4013 }
4014 \f
4015 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
4016
4017 tree
4018 groktypename (cp_decl_specifier_seq *type_specifiers,
4019               const cp_declarator *declarator,
4020               bool is_template_arg)
4021 {
4022   tree attrs;
4023   tree type;
4024   enum decl_context context
4025     = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4026   attrs = type_specifiers->attributes;
4027   type_specifiers->attributes = NULL_TREE;
4028   type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4029   if (attrs && type != error_mark_node)
4030     {
4031       if (CLASS_TYPE_P (type))
4032         warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4033                  "outside of definition", type);
4034       else if (MAYBE_CLASS_TYPE_P (type))
4035         /* A template type parameter or other dependent type.  */
4036         warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4037                  "type %qT without an associated declaration", type);
4038       else
4039         cplus_decl_attributes (&type, attrs, 0);
4040     }
4041   return type;
4042 }
4043
4044 /* Process a DECLARATOR for a function-scope variable declaration,
4045    namespace-scope variable declaration, or function declaration.
4046    (Function definitions go through start_function; class member
4047    declarations appearing in the body of the class go through
4048    grokfield.)  The DECL corresponding to the DECLARATOR is returned.
4049    If an error occurs, the error_mark_node is returned instead.
4050    
4051    DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
4052    SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4053    for an explicitly defaulted function, or SD_DELETED for an explicitly
4054    deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4055    implicitly initialized via a default constructor.  ATTRIBUTES and
4056    PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4057    *PUSHED_SCOPE_P is set to the scope entered in this function, if any; if
4058    set, the caller is responsible for calling pop_scope.  */
4059
4060 tree
4061 start_decl (const cp_declarator *declarator,
4062             cp_decl_specifier_seq *declspecs,
4063             int initialized,
4064             tree attributes,
4065             tree prefix_attributes,
4066             tree *pushed_scope_p)
4067 {
4068   tree decl;
4069   tree type;
4070   tree context;
4071   bool was_public;
4072   int flags;
4073
4074   *pushed_scope_p = NULL_TREE;
4075
4076   /* An object declared as __attribute__((deprecated)) suppresses
4077      warnings of uses of other deprecated items.  */
4078   if (lookup_attribute ("deprecated", attributes))
4079     deprecated_state = DEPRECATED_SUPPRESS;
4080
4081   attributes = chainon (attributes, prefix_attributes);
4082
4083   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4084                          &attributes);
4085
4086   deprecated_state = DEPRECATED_NORMAL;
4087
4088   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4089       || decl == error_mark_node)
4090     return error_mark_node;
4091
4092   type = TREE_TYPE (decl);
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) = tree_cons (fns, args, NULL_TREE);
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       if (!TREE_SIDE_EFFECTS (size))
7276         {
7277           TYPE_DEPENDENT_P (itype) = 1;
7278           TYPE_DEPENDENT_P_VALID (itype) = 1;
7279         }
7280       SET_TYPE_STRUCTURAL_EQUALITY (itype);
7281       return itype;
7282     }
7283   
7284   if (!abi_version_at_least (2) && processing_template_decl)
7285     /* For abi-1, we handled all instances in templates the same way,
7286        even when they were non-dependent. This affects the manglings
7287        produced.  So, we do the normal checking for non-dependent
7288        sizes, but at the end we'll return the same type that abi-1
7289        would have, but with TYPE_CANONICAL set to the "right"
7290        value that the current ABI would provide. */
7291     abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7292                                                size, integer_one_node));
7293
7294   /* The size might be the result of a cast.  */
7295   STRIP_TYPE_NOPS (size);
7296
7297   /* It might be a const variable or enumeration constant.  */
7298   size = integral_constant_value (size);
7299
7300   /* Normally, the array-bound will be a constant.  */
7301   if (TREE_CODE (size) == INTEGER_CST)
7302     {
7303       /* Check to see if the array bound overflowed.  Make that an
7304          error, no matter how generous we're being.  */
7305       constant_expression_error (size);
7306
7307       /* An array must have a positive number of elements.  */
7308       if (INT_CST_LT (size, integer_zero_node))
7309         {
7310           if (name)
7311             error ("size of array %qD is negative", name);
7312           else
7313             error ("size of array is negative");
7314           size = integer_one_node;
7315         }
7316       /* As an extension we allow zero-sized arrays.  We always allow
7317          them in system headers because glibc uses them.  */
7318       else if (integer_zerop (size) && !in_system_header)
7319         {
7320           if (name)
7321             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
7322           else
7323             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
7324         }
7325     }
7326   else if (TREE_CONSTANT (size))
7327     {
7328       /* `(int) &fn' is not a valid array bound.  */
7329       if (name)
7330         error ("size of array %qD is not an integral constant-expression",
7331                name);
7332       else
7333         error ("size of array is not an integral constant-expression");
7334       size = integer_one_node;
7335     }
7336   else if (pedantic && warn_vla != 0)
7337     {
7338       if (name)
7339         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
7340       else
7341         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
7342     }
7343   else if (warn_vla > 0)
7344     {
7345       if (name)
7346         warning (OPT_Wvla, 
7347                  "variable length array %qD is used", name);
7348       else
7349         warning (OPT_Wvla, 
7350                  "variable length array is used");
7351     }
7352
7353   if (processing_template_decl && !TREE_CONSTANT (size))
7354     /* A variable sized array.  */
7355     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7356   else
7357     {
7358       HOST_WIDE_INT saved_processing_template_decl;
7359
7360       /* Compute the index of the largest element in the array.  It is
7361          one less than the number of elements in the array.  We save
7362          and restore PROCESSING_TEMPLATE_DECL so that computations in
7363          cp_build_binary_op will be appropriately folded.  */
7364       saved_processing_template_decl = processing_template_decl;
7365       processing_template_decl = 0;
7366       itype = cp_build_binary_op (input_location,
7367                                   MINUS_EXPR,
7368                                   cp_convert (ssizetype, size),
7369                                   cp_convert (ssizetype, integer_one_node),
7370                                   tf_warning_or_error);
7371       itype = fold (itype);
7372       processing_template_decl = saved_processing_template_decl;
7373
7374       if (!TREE_CONSTANT (itype))
7375         /* A variable sized array.  */
7376         itype = variable_size (itype);
7377       /* Make sure that there was no overflow when creating to a signed
7378          index type.  (For example, on a 32-bit machine, an array with
7379          size 2^32 - 1 is too big.)  */
7380       else if (TREE_CODE (itype) == INTEGER_CST
7381                && TREE_OVERFLOW (itype))
7382         {
7383           error ("overflow in array dimension");
7384           TREE_OVERFLOW (itype) = 0;
7385         }
7386     }
7387
7388   /* Create and return the appropriate index type.  */
7389   if (abi_1_itype)
7390     {
7391       tree t = build_index_type (itype);
7392       TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
7393       return abi_1_itype;
7394     }
7395   else
7396     return build_index_type (itype);
7397 }
7398
7399 /* Returns the scope (if any) in which the entity declared by
7400    DECLARATOR will be located.  If the entity was declared with an
7401    unqualified name, NULL_TREE is returned.  */
7402
7403 tree
7404 get_scope_of_declarator (const cp_declarator *declarator)
7405 {
7406   while (declarator && declarator->kind != cdk_id)
7407     declarator = declarator->declarator;
7408
7409   /* If the declarator-id is a SCOPE_REF, the scope in which the
7410      declaration occurs is the first operand.  */
7411   if (declarator
7412       && declarator->u.id.qualifying_scope)
7413     return declarator->u.id.qualifying_scope;
7414
7415   /* Otherwise, the declarator is not a qualified name; the entity will
7416      be declared in the current scope.  */
7417   return NULL_TREE;
7418 }
7419
7420 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
7421    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
7422    with this type.  */
7423
7424 static tree
7425 create_array_type_for_decl (tree name, tree type, tree size)
7426 {
7427   tree itype = NULL_TREE;
7428   const char* error_msg;
7429
7430   /* If things have already gone awry, bail now.  */
7431   if (type == error_mark_node || size == error_mark_node)
7432     return error_mark_node;
7433
7434   /* Assume that everything will go OK.  */
7435   error_msg = NULL;
7436
7437   /* There are some types which cannot be array elements.  */
7438   switch (TREE_CODE (type))
7439     {
7440     case VOID_TYPE:
7441       error_msg = "array of void";
7442       break;
7443
7444     case FUNCTION_TYPE:
7445       error_msg = "array of functions";
7446       break;
7447
7448     case REFERENCE_TYPE:
7449       error_msg = "array of references";
7450       break;
7451
7452     case METHOD_TYPE:
7453       error_msg = "array of function members";
7454       break;
7455
7456     default:
7457       break;
7458     }
7459
7460   /* If something went wrong, issue an error-message and return.  */
7461   if (error_msg)
7462     {
7463       if (name)
7464         error ("declaration of %qD as %s", name, error_msg);
7465       else
7466         error ("creating %s", error_msg);
7467
7468       return error_mark_node;
7469     }
7470
7471   /* [dcl.array]
7472
7473      The constant expressions that specify the bounds of the arrays
7474      can be omitted only for the first member of the sequence.  */
7475   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
7476     {
7477       if (name)
7478         error ("declaration of %qD as multidimensional array must "
7479                "have bounds for all dimensions except the first",
7480                name);
7481       else
7482         error ("multidimensional array must have bounds for all "
7483                "dimensions except the first");
7484
7485       return error_mark_node;
7486     }
7487
7488   /* Figure out the index type for the array.  */
7489   if (size)
7490     itype = compute_array_index_type (name, size);
7491
7492   /* [dcl.array]
7493      T is called the array element type; this type shall not be [...] an
7494      abstract class type.  */
7495   abstract_virtuals_error (name, type);
7496
7497   return build_cplus_array_type (type, itype);
7498 }
7499
7500 /* Check that it's OK to declare a function with the indicated TYPE.
7501    SFK indicates the kind of special function (if any) that this
7502    function is.  OPTYPE is the type given in a conversion operator
7503    declaration, or the class type for a constructor/destructor.
7504    Returns the actual return type of the function; that
7505    may be different than TYPE if an error occurs, or for certain
7506    special functions.  */
7507
7508 static tree
7509 check_special_function_return_type (special_function_kind sfk,
7510                                     tree type,
7511                                     tree optype)
7512 {
7513   switch (sfk)
7514     {
7515     case sfk_constructor:
7516       if (type)
7517         error ("return type specification for constructor invalid");
7518
7519       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7520         type = build_pointer_type (optype);
7521       else
7522         type = void_type_node;
7523       break;
7524
7525     case sfk_destructor:
7526       if (type)
7527         error ("return type specification for destructor invalid");
7528       /* We can't use the proper return type here because we run into
7529          problems with ambiguous bases and covariant returns.
7530          Java classes are left unchanged because (void *) isn't a valid
7531          Java type, and we don't want to change the Java ABI.  */
7532       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7533         type = build_pointer_type (void_type_node);
7534       else
7535         type = void_type_node;
7536       break;
7537
7538     case sfk_conversion:
7539       if (type)
7540         error ("return type specified for %<operator %T%>",  optype);
7541       type = optype;
7542       break;
7543
7544     default:
7545       gcc_unreachable ();
7546     }
7547
7548   return type;
7549 }
7550
7551 /* A variable or data member (whose unqualified name is IDENTIFIER)
7552    has been declared with the indicated TYPE.  If the TYPE is not
7553    acceptable, issue an error message and return a type to use for
7554    error-recovery purposes.  */
7555
7556 tree
7557 check_var_type (tree identifier, tree type)
7558 {
7559   if (VOID_TYPE_P (type))
7560     {
7561       if (!identifier)
7562         error ("unnamed variable or field declared void");
7563       else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
7564         {
7565           gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
7566           error ("variable or field %qE declared void", identifier);
7567         }
7568       else
7569         error ("variable or field declared void");
7570       type = error_mark_node;
7571     }
7572
7573   return type;
7574 }
7575
7576 /* Given declspecs and a declarator (abstract or otherwise), determine
7577    the name and type of the object declared and construct a DECL node
7578    for it.
7579
7580    DECLSPECS points to the representation of declaration-specifier
7581    sequence that precedes declarator.
7582
7583    DECL_CONTEXT says which syntactic context this declaration is in:
7584      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7585      FUNCDEF for a function definition.  Like NORMAL but a few different
7586       error messages in each case.  Return value may be zero meaning
7587       this definition is too screwy to try to parse.
7588      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
7589       handle member functions (which have FIELD context).
7590       Return value may be zero meaning this definition is too screwy to
7591       try to parse.
7592      PARM for a parameter declaration (either within a function prototype
7593       or before a function body).  Make a PARM_DECL, or return void_type_node.
7594      TPARM for a template parameter declaration.
7595      CATCHPARM for a parameter declaration before a catch clause.
7596      TYPENAME if for a typename (in a cast or sizeof).
7597       Don't make a DECL node; just return the ..._TYPE node.
7598      FIELD for a struct or union field; make a FIELD_DECL.
7599      BITFIELD for a field with specified width.
7600
7601    INITIALIZED is as for start_decl.
7602
7603    ATTRLIST is a pointer to the list of attributes, which may be NULL
7604    if there are none; *ATTRLIST may be modified if attributes from inside
7605    the declarator should be applied to the declaration.
7606
7607    When this function is called, scoping variables (such as
7608    CURRENT_CLASS_TYPE) should reflect the scope in which the
7609    declaration occurs, not the scope in which the new declaration will
7610    be placed.  For example, on:
7611
7612      void S::f() { ... }
7613
7614    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
7615    should not be `S'.
7616
7617    Returns a DECL (if a declarator is present), a TYPE (if there is no
7618    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
7619    error occurs. */
7620
7621 tree
7622 grokdeclarator (const cp_declarator *declarator,
7623                 const cp_decl_specifier_seq *declspecs,
7624                 enum decl_context decl_context,
7625                 int initialized,
7626                 tree* attrlist)
7627 {
7628   tree type = NULL_TREE;
7629   int longlong = 0;
7630   int virtualp, explicitp, friendp, inlinep, staticp;
7631   int explicit_int = 0;
7632   int explicit_char = 0;
7633   int defaulted_int = 0;
7634   tree dependent_name = NULL_TREE;
7635
7636   tree typedef_decl = NULL_TREE;
7637   const char *name = NULL;
7638   tree typedef_type = NULL_TREE;
7639   /* True if this declarator is a function definition.  */
7640   bool funcdef_flag = false;
7641   cp_declarator_kind innermost_code = cdk_error;
7642   int bitfield = 0;
7643 #if 0
7644   /* See the code below that used this.  */
7645   tree decl_attr = NULL_TREE;
7646 #endif
7647
7648   /* Keep track of what sort of function is being processed
7649      so that we can warn about default return values, or explicit
7650      return values which do not match prescribed defaults.  */
7651   special_function_kind sfk = sfk_none;
7652
7653   tree dname = NULL_TREE;
7654   tree ctor_return_type = NULL_TREE;
7655   enum overload_flags flags = NO_SPECIAL;
7656   /* cv-qualifiers that apply to the declarator, for a declaration of
7657      a member function.  */
7658   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
7659   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
7660   int type_quals;
7661   tree raises = NULL_TREE;
7662   int template_count = 0;
7663   tree returned_attrs = NULL_TREE;
7664   tree parms = NULL_TREE;
7665   const cp_declarator *id_declarator;
7666   /* The unqualified name of the declarator; either an
7667      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
7668   tree unqualified_id;
7669   /* The class type, if any, in which this entity is located,
7670      or NULL_TREE if none.  Note that this value may be different from
7671      the current class type; for example if an attempt is made to declare
7672      "A::f" inside "B", this value will be "A".  */
7673   tree ctype = current_class_type;
7674   /* The NAMESPACE_DECL for the namespace in which this entity is
7675      located.  If an unqualified name is used to declare the entity,
7676      this value will be NULL_TREE, even if the entity is located at
7677      namespace scope.  */
7678   tree in_namespace = NULL_TREE;
7679   cp_storage_class storage_class;
7680   bool unsigned_p, signed_p, short_p, long_p, thread_p;
7681   bool type_was_error_mark_node = false;
7682   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
7683   bool template_type_arg = false;
7684   bool template_parm_flag = false;
7685   bool constexpr_p = declspecs->specs[(int) ds_constexpr];
7686   const char *errmsg;
7687
7688   signed_p = declspecs->specs[(int)ds_signed];
7689   unsigned_p = declspecs->specs[(int)ds_unsigned];
7690   short_p = declspecs->specs[(int)ds_short];
7691   long_p = declspecs->specs[(int)ds_long];
7692   longlong = declspecs->specs[(int)ds_long] >= 2;
7693   thread_p = declspecs->specs[(int)ds_thread];
7694
7695   if (decl_context == FUNCDEF)
7696     funcdef_flag = true, decl_context = NORMAL;
7697   else if (decl_context == MEMFUNCDEF)
7698     funcdef_flag = true, decl_context = FIELD;
7699   else if (decl_context == BITFIELD)
7700     bitfield = 1, decl_context = FIELD;
7701   else if (decl_context == TEMPLATE_TYPE_ARG)
7702     template_type_arg = true, decl_context = TYPENAME;
7703   else if (decl_context == TPARM)
7704     template_parm_flag = true, decl_context = PARM;
7705
7706   if (initialized > 1)
7707     funcdef_flag = true;
7708
7709   /* Look inside a declarator for the name being declared
7710      and get it as a string, for an error message.  */
7711   for (id_declarator = declarator;
7712        id_declarator;
7713        id_declarator = id_declarator->declarator)
7714     {
7715       if (id_declarator->kind != cdk_id)
7716         innermost_code = id_declarator->kind;
7717
7718       switch (id_declarator->kind)
7719         {
7720         case cdk_function:
7721           if (id_declarator->declarator
7722               && id_declarator->declarator->kind == cdk_id)
7723             {
7724               sfk = id_declarator->declarator->u.id.sfk;
7725               if (sfk == sfk_destructor)
7726                 flags = DTOR_FLAG;
7727             }
7728           break;
7729
7730         case cdk_id:
7731           {
7732             tree qualifying_scope = id_declarator->u.id.qualifying_scope;
7733             tree decl = id_declarator->u.id.unqualified_name;
7734             if (!decl)
7735               break;
7736             if (qualifying_scope)
7737               {
7738                 if (at_function_scope_p ())
7739                   {
7740                     /* [dcl.meaning] 
7741
7742                        A declarator-id shall not be qualified except
7743                        for ... 
7744
7745                        None of the cases are permitted in block
7746                        scope.  */
7747                     if (qualifying_scope == global_namespace)
7748                       error ("invalid use of qualified-name %<::%D%>",
7749                              decl);
7750                     else if (TYPE_P (qualifying_scope))
7751                       error ("invalid use of qualified-name %<%T::%D%>",
7752                              qualifying_scope, decl);
7753                     else 
7754                       error ("invalid use of qualified-name %<%D::%D%>",
7755                              qualifying_scope, decl);
7756                     return error_mark_node;
7757                   }
7758                 else if (TYPE_P (qualifying_scope))
7759                   {
7760                     ctype = qualifying_scope;
7761                     if (innermost_code != cdk_function
7762                         && current_class_type
7763                         && !UNIQUELY_DERIVED_FROM_P (ctype,
7764                                                      current_class_type))
7765                       {
7766                         error ("type %qT is not derived from type %qT",
7767                                ctype, current_class_type);
7768                         return error_mark_node;
7769                       }
7770                   }
7771                 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
7772                   in_namespace = qualifying_scope;
7773               }
7774             switch (TREE_CODE (decl))
7775               {
7776               case BIT_NOT_EXPR:
7777                 {
7778                   tree type;
7779
7780                   if (innermost_code != cdk_function)
7781                     {
7782                       error ("declaration of %qD as non-function", decl);
7783                       return error_mark_node;
7784                     }
7785                   else if (!qualifying_scope
7786                            && !(current_class_type && at_class_scope_p ()))
7787                     {
7788                       error ("declaration of %qD as non-member", decl);
7789                       return error_mark_node;
7790                     }
7791
7792                   type = TREE_OPERAND (decl, 0);
7793                   if (TYPE_P (type))
7794                     type = constructor_name (type);
7795                   name = identifier_to_locale (IDENTIFIER_POINTER (type));
7796                   dname = decl;
7797                 }
7798                 break;
7799
7800               case TEMPLATE_ID_EXPR:
7801                 {
7802                   tree fns = TREE_OPERAND (decl, 0);
7803
7804                   dname = fns;
7805                   if (TREE_CODE (dname) != IDENTIFIER_NODE)
7806                     {
7807                       gcc_assert (is_overloaded_fn (dname));
7808                       dname = DECL_NAME (get_first_fn (dname));
7809                     }
7810                 }
7811                 /* Fall through.  */
7812
7813               case IDENTIFIER_NODE:
7814                 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7815                   dname = decl;
7816
7817                 if (C_IS_RESERVED_WORD (dname))
7818                   {
7819                     error ("declarator-id missing; using reserved word %qD",
7820                            dname);
7821                     name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7822                   }
7823                 else if (!IDENTIFIER_TYPENAME_P (dname))
7824                   name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7825                 else
7826                   {
7827                     gcc_assert (flags == NO_SPECIAL);
7828                     flags = TYPENAME_FLAG;
7829                     ctor_return_type = TREE_TYPE (dname);
7830                     sfk = sfk_conversion;
7831                     if (is_typename_at_global_scope (dname))
7832                       name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7833                     else
7834                       name = "<invalid operator>";
7835                   }
7836                 break;
7837
7838               default:
7839                 gcc_unreachable ();
7840               }
7841             break;
7842           }
7843
7844         case cdk_array:
7845         case cdk_pointer:
7846         case cdk_reference:
7847         case cdk_ptrmem:
7848           break;
7849
7850         case cdk_error:
7851           return error_mark_node;
7852
7853         default:
7854           gcc_unreachable ();
7855         }
7856       if (id_declarator->kind == cdk_id)
7857         break;
7858     }
7859
7860   /* [dcl.fct.edf]
7861
7862      The declarator in a function-definition shall have the form
7863      D1 ( parameter-declaration-clause) ...  */
7864   if (funcdef_flag && innermost_code != cdk_function)
7865     {
7866       error ("function definition does not declare parameters");
7867       return error_mark_node;
7868     }
7869
7870   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
7871       && innermost_code != cdk_function
7872       && ! (ctype && !declspecs->any_specifiers_p))
7873     {
7874       error ("declaration of %qD as non-function", dname);
7875       return error_mark_node;
7876     }
7877
7878   /* Anything declared one level down from the top level
7879      must be one of the parameters of a function
7880      (because the body is at least two levels down).  */
7881
7882   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7883      by not allowing C++ class definitions to specify their parameters
7884      with xdecls (must be spec.d in the parmlist).
7885
7886      Since we now wait to push a class scope until we are sure that
7887      we are in a legitimate method context, we must set oldcname
7888      explicitly (since current_class_name is not yet alive).
7889
7890      We also want to avoid calling this a PARM if it is in a namespace.  */
7891
7892   if (decl_context == NORMAL && !toplevel_bindings_p ())
7893     {
7894       struct cp_binding_level *b = current_binding_level;
7895       current_binding_level = b->level_chain;
7896       if (current_binding_level != 0 && toplevel_bindings_p ())
7897         decl_context = PARM;
7898       current_binding_level = b;
7899     }
7900
7901   if (name == NULL)
7902     name = decl_context == PARM ? "parameter" : "type name";
7903
7904   /* If there were multiple types specified in the decl-specifier-seq,
7905      issue an error message.  */
7906   if (declspecs->multiple_types_p)
7907     {
7908       error ("two or more data types in declaration of %qs", name);
7909       return error_mark_node;
7910     }
7911
7912   if (declspecs->conflicting_specifiers_p)
7913     {
7914       error ("conflicting specifiers in declaration of %qs", name);
7915       return error_mark_node;
7916     }
7917
7918   /* Extract the basic type from the decl-specifier-seq.  */
7919   type = declspecs->type;
7920   if (type == error_mark_node)
7921     {
7922       type = NULL_TREE;
7923       type_was_error_mark_node = true;
7924     }
7925   /* If the entire declaration is itself tagged as deprecated then
7926      suppress reports of deprecated items.  */
7927   if (type && TREE_DEPRECATED (type)
7928       && deprecated_state != DEPRECATED_SUPPRESS)
7929     warn_deprecated_use (type, NULL_TREE);
7930   if (type && TREE_CODE (type) == TYPE_DECL)
7931     {
7932       typedef_decl = type;
7933       type = TREE_TYPE (typedef_decl);
7934       if (TREE_DEPRECATED (type)
7935           && DECL_ARTIFICIAL (typedef_decl)
7936           && deprecated_state != DEPRECATED_SUPPRESS)
7937         warn_deprecated_use (type, NULL_TREE);
7938     }
7939   /* No type at all: default to `int', and set DEFAULTED_INT
7940      because it was not a user-defined typedef.  */
7941   if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
7942     {
7943       /* These imply 'int'.  */
7944       type = integer_type_node;
7945       defaulted_int = 1;
7946     }
7947   /* Gather flags.  */
7948   explicit_int = declspecs->explicit_int_p;
7949   explicit_char = declspecs->explicit_char_p;
7950
7951 #if 0
7952   /* See the code below that used this.  */
7953   if (typedef_decl)
7954     decl_attr = DECL_ATTRIBUTES (typedef_decl);
7955 #endif
7956   typedef_type = type;
7957
7958
7959   if (sfk != sfk_conversion)
7960     ctor_return_type = ctype;
7961
7962   if (sfk != sfk_none)
7963     type = check_special_function_return_type (sfk, type,
7964                                                ctor_return_type);
7965   else if (type == NULL_TREE)
7966     {
7967       int is_main;
7968
7969       explicit_int = -1;
7970
7971       /* We handle `main' specially here, because 'main () { }' is so
7972          common.  With no options, it is allowed.  With -Wreturn-type,
7973          it is a warning.  It is only an error with -pedantic-errors.  */
7974       is_main = (funcdef_flag
7975                  && dname && MAIN_NAME_P (dname)
7976                  && ctype == NULL_TREE
7977                  && in_namespace == NULL_TREE
7978                  && current_namespace == global_namespace);
7979
7980       if (type_was_error_mark_node)
7981         /* We've already issued an error, don't complain more.  */;
7982       else if (in_system_header || flag_ms_extensions)
7983         /* Allow it, sigh.  */;
7984       else if (! is_main)
7985         permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
7986       else if (pedantic)
7987         pedwarn (input_location, OPT_pedantic,
7988                  "ISO C++ forbids declaration of %qs with no type", name);
7989       else
7990         warning (OPT_Wreturn_type,
7991                  "ISO C++ forbids declaration of %qs with no type", name);
7992
7993       type = integer_type_node;
7994     }
7995
7996   ctype = NULL_TREE;
7997
7998   /* Now process the modifiers that were specified
7999      and check for invalid combinations.  */
8000
8001   /* Long double is a special combination.  */
8002   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8003     {
8004       long_p = false;
8005       type = build_qualified_type (long_double_type_node,
8006                                    cp_type_quals (type));
8007     }
8008
8009   /* Check all other uses of type modifiers.  */
8010
8011   if (unsigned_p || signed_p || long_p || short_p)
8012     {
8013       int ok = 0;
8014
8015       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
8016         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8017       else if (signed_p && unsigned_p)
8018         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
8019       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
8020         error ("%<long long%> invalid for %qs", name);
8021       else if (long_p && TREE_CODE (type) == REAL_TYPE)
8022         error ("%<long%> invalid for %qs", name);
8023       else if (short_p && TREE_CODE (type) == REAL_TYPE)
8024         error ("%<short%> invalid for %qs", name);
8025       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
8026         error ("%<long%> or %<short%> invalid for %qs", name);
8027       else if ((long_p || short_p) && explicit_char)
8028         error ("%<long%> or %<short%> specified with char for %qs", name);
8029       else if (long_p && short_p)
8030         error ("%<long%> and %<short%> specified together for %qs", name);
8031       else if (type == char16_type_node || type == char32_type_node)
8032         {
8033           if (signed_p || unsigned_p)
8034             error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8035           else if (short_p || long_p)
8036             error ("%<short%> or %<long%> invalid for %qs", name);
8037         }
8038       else
8039         {
8040           ok = 1;
8041           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8042             {
8043               pedwarn (input_location, OPT_pedantic, 
8044                        "long, short, signed or unsigned used invalidly for %qs",
8045                        name);
8046               if (flag_pedantic_errors)
8047                 ok = 0;
8048             }
8049         }
8050
8051       /* Discard the type modifiers if they are invalid.  */
8052       if (! ok)
8053         {
8054           unsigned_p = false;
8055           signed_p = false;
8056           long_p = false;
8057           short_p = false;
8058           longlong = 0;
8059         }
8060     }
8061
8062   /* Decide whether an integer type is signed or not.
8063      Optionally treat bitfields as signed by default.  */
8064   if (unsigned_p
8065       /* [class.bit]
8066
8067          It is implementation-defined whether a plain (neither
8068          explicitly signed or unsigned) char, short, int, or long
8069          bit-field is signed or unsigned.
8070
8071          Naturally, we extend this to long long as well.  Note that
8072          this does not include wchar_t.  */
8073       || (bitfield && !flag_signed_bitfields
8074           && !signed_p
8075           /* A typedef for plain `int' without `signed' can be
8076              controlled just like plain `int', but a typedef for
8077              `signed int' cannot be so controlled.  */
8078           && !(typedef_decl
8079                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8080           && TREE_CODE (type) == INTEGER_TYPE
8081           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8082     {
8083       if (longlong)
8084         type = long_long_unsigned_type_node;
8085       else if (long_p)
8086         type = long_unsigned_type_node;
8087       else if (short_p)
8088         type = short_unsigned_type_node;
8089       else if (type == char_type_node)
8090         type = unsigned_char_type_node;
8091       else if (typedef_decl)
8092         type = unsigned_type_for (type);
8093       else
8094         type = unsigned_type_node;
8095     }
8096   else if (signed_p && type == char_type_node)
8097     type = signed_char_type_node;
8098   else if (longlong)
8099     type = long_long_integer_type_node;
8100   else if (long_p)
8101     type = long_integer_type_node;
8102   else if (short_p)
8103     type = short_integer_type_node;
8104
8105   if (declspecs->specs[(int)ds_complex])
8106     {
8107       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8108         error ("complex invalid for %qs", name);
8109       /* If we just have "complex", it is equivalent to
8110          "complex double", but if any modifiers at all are specified it is
8111          the complex form of TYPE.  E.g, "complex short" is
8112          "complex short int".  */
8113
8114       else if (defaulted_int && ! longlong
8115                && ! (long_p || short_p || signed_p || unsigned_p))
8116         type = complex_double_type_node;
8117       else if (type == integer_type_node)
8118         type = complex_integer_type_node;
8119       else if (type == float_type_node)
8120         type = complex_float_type_node;
8121       else if (type == double_type_node)
8122         type = complex_double_type_node;
8123       else if (type == long_double_type_node)
8124         type = complex_long_double_type_node;
8125       else
8126         type = build_complex_type (type);
8127     }
8128
8129   type_quals = TYPE_UNQUALIFIED;
8130   if (declspecs->specs[(int)ds_const])
8131     type_quals |= TYPE_QUAL_CONST;
8132   /* A `constexpr' specifier used in an object declaration declares
8133      the object as `const'.  */
8134   if (constexpr_p)
8135     {
8136       if (innermost_code == cdk_function)
8137         ;
8138       else if (declspecs->specs[(int)ds_const] != 0)
8139         error ("both %<const%> and %<constexpr%> cannot be used here");
8140       else
8141         type_quals |= TYPE_QUAL_CONST;
8142     }
8143   if (declspecs->specs[(int)ds_volatile])
8144     type_quals |= TYPE_QUAL_VOLATILE;
8145   if (declspecs->specs[(int)ds_restrict])
8146     type_quals |= TYPE_QUAL_RESTRICT;
8147   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8148     error ("qualifiers are not allowed on declaration of %<operator %T%>",
8149            ctor_return_type);
8150
8151   if (TREE_CODE (type) == FUNCTION_TYPE
8152       && type_quals != TYPE_UNQUALIFIED)
8153     {
8154       /* This was an error in C++98 (cv-qualifiers cannot be added to
8155          a function type), but DR 295 makes the code well-formed by
8156          dropping the extra qualifiers. */
8157       if (pedantic)
8158         {
8159           tree bad_type = build_qualified_type (type, type_quals);
8160           pedwarn (input_location, OPT_pedantic, 
8161                    "ignoring %qV qualifiers added to function type %qT",
8162                    bad_type, type);
8163         }
8164       type_quals = TYPE_UNQUALIFIED;
8165     }
8166   type_quals |= cp_type_quals (type);
8167   type = cp_build_qualified_type_real
8168     (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8169                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8170   /* We might have ignored or rejected some of the qualifiers.  */
8171   type_quals = cp_type_quals (type);
8172
8173   staticp = 0;
8174   inlinep = !! declspecs->specs[(int)ds_inline];
8175   virtualp = !! declspecs->specs[(int)ds_virtual];
8176   explicitp = !! declspecs->specs[(int)ds_explicit];
8177
8178   storage_class = declspecs->storage_class;
8179   if (storage_class == sc_static)
8180     staticp = 1 + (decl_context == FIELD);
8181
8182   if (virtualp && staticp == 2)
8183     {
8184       error ("member %qD cannot be declared both virtual and static", dname);
8185       storage_class = sc_none;
8186       staticp = 0;
8187     }
8188   friendp = !! declspecs->specs[(int)ds_friend];
8189
8190   if (dependent_name && !friendp)
8191     {
8192       error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8193       return error_mark_node;
8194     }
8195
8196   /* Issue errors about use of storage classes for parameters.  */
8197   if (decl_context == PARM)
8198     {
8199       if (declspecs->specs[(int)ds_typedef])
8200         {
8201           error ("typedef declaration invalid in parameter declaration");
8202           return error_mark_node;
8203         }
8204       else if (template_parm_flag && storage_class != sc_none)
8205         {
8206           error ("storage class specified for template parameter %qs", name);
8207           return error_mark_node;
8208         }
8209       else if (storage_class == sc_static
8210                || storage_class == sc_extern
8211                || thread_p)
8212         error ("storage class specifiers invalid in parameter declarations");
8213
8214       if (type_uses_auto (type))
8215         {
8216           error ("parameter declared %<auto%>");
8217           type = error_mark_node;
8218         }
8219
8220       /* Function parameters cannot be constexpr.  If we saw one, moan
8221          and pretend it wasn't there.  */
8222       if (constexpr_p)
8223         {
8224           error ("a parameter cannot be declared %<constexpr%>");
8225           constexpr_p = 0;
8226         }
8227     }
8228
8229   /* Give error if `virtual' is used outside of class declaration.  */
8230   if (virtualp
8231       && (current_class_name == NULL_TREE || decl_context != FIELD))
8232     {
8233       error ("%<virtual%> outside class declaration");
8234       virtualp = 0;
8235     }
8236
8237   /* Static anonymous unions are dealt with here.  */
8238   if (staticp && decl_context == TYPENAME
8239       && declspecs->type
8240       && ANON_AGGR_TYPE_P (declspecs->type))
8241     decl_context = FIELD;
8242
8243   /* Warn about storage classes that are invalid for certain
8244      kinds of declarations (parameters, typenames, etc.).  */
8245   if (thread_p
8246       && ((storage_class
8247            && storage_class != sc_extern
8248            && storage_class != sc_static)
8249           || declspecs->specs[(int)ds_typedef]))
8250     {
8251       error ("multiple storage classes in declaration of %qs", name);
8252       thread_p = false;
8253     }
8254   if (decl_context != NORMAL
8255       && ((storage_class != sc_none
8256            && storage_class != sc_mutable)
8257           || thread_p))
8258     {
8259       if ((decl_context == PARM || decl_context == CATCHPARM)
8260           && (storage_class == sc_register
8261               || storage_class == sc_auto))
8262         ;
8263       else if (declspecs->specs[(int)ds_typedef])
8264         ;
8265       else if (decl_context == FIELD
8266                /* C++ allows static class elements.  */
8267                && storage_class == sc_static)
8268         /* C++ also allows inlines and signed and unsigned elements,
8269            but in those cases we don't come in here.  */
8270         ;
8271       else
8272         {
8273           if (decl_context == FIELD)
8274             error ("storage class specified for %qs", name);
8275           else
8276             {
8277               if (decl_context == PARM || decl_context == CATCHPARM)
8278                 error ("storage class specified for parameter %qs", name);
8279               else
8280                 error ("storage class specified for typename");
8281             }
8282           if (storage_class == sc_register
8283               || storage_class == sc_auto
8284               || storage_class == sc_extern
8285               || thread_p)
8286             storage_class = sc_none;
8287         }
8288     }
8289   else if (storage_class == sc_extern && funcdef_flag
8290            && ! toplevel_bindings_p ())
8291     error ("nested function %qs declared %<extern%>", name);
8292   else if (toplevel_bindings_p ())
8293     {
8294       if (storage_class == sc_auto)
8295         error ("top-level declaration of %qs specifies %<auto%>", name);
8296     }
8297   else if (thread_p
8298            && storage_class != sc_extern
8299            && storage_class != sc_static)
8300     {
8301       error ("function-scope %qs implicitly auto and declared %<__thread%>",
8302              name);
8303       thread_p = false;
8304     }
8305
8306   if (storage_class && friendp)
8307     {
8308       error ("storage class specifiers invalid in friend function declarations");
8309       storage_class = sc_none;
8310       staticp = 0;
8311     }
8312
8313   if (!id_declarator)
8314     unqualified_id = NULL_TREE;
8315   else
8316     {
8317       unqualified_id = id_declarator->u.id.unqualified_name;
8318       switch (TREE_CODE (unqualified_id))
8319         {
8320         case BIT_NOT_EXPR:
8321           unqualified_id = TREE_OPERAND (unqualified_id, 0);
8322           if (TYPE_P (unqualified_id))
8323             unqualified_id = constructor_name (unqualified_id);
8324           break;
8325
8326         case IDENTIFIER_NODE:
8327         case TEMPLATE_ID_EXPR:
8328           break;
8329
8330         default:
8331           gcc_unreachable ();
8332         }
8333     }
8334
8335   /* Determine the type of the entity declared by recurring on the
8336      declarator.  */
8337   for (; declarator; declarator = declarator->declarator)
8338     {
8339       const cp_declarator *inner_declarator;
8340       tree attrs;
8341
8342       if (type == error_mark_node)
8343         return error_mark_node;
8344
8345       attrs = declarator->attributes;
8346       if (attrs)
8347         {
8348           int attr_flags;
8349
8350           attr_flags = 0;
8351           if (declarator == NULL || declarator->kind == cdk_id)
8352             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8353           if (declarator->kind == cdk_function)
8354             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8355           if (declarator->kind == cdk_array)
8356             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8357           returned_attrs = decl_attributes (&type,
8358                                             chainon (returned_attrs, attrs),
8359                                             attr_flags);
8360         }
8361
8362       if (declarator->kind == cdk_id)
8363         break;
8364
8365       inner_declarator = declarator->declarator;
8366
8367       switch (declarator->kind)
8368         {
8369         case cdk_array:
8370           type = create_array_type_for_decl (dname, type,
8371                                              declarator->u.array.bounds);
8372           break;
8373
8374         case cdk_function:
8375           {
8376             tree arg_types;
8377             int funcdecl_p;
8378
8379             /* Declaring a function type.
8380                Make sure we have a valid type for the function to return.  */
8381
8382             if (type_quals != TYPE_UNQUALIFIED)
8383               {
8384                 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
8385                   warning (OPT_Wignored_qualifiers,
8386                            "type qualifiers ignored on function return type");
8387                 /* We now know that the TYPE_QUALS don't apply to the
8388                    decl, but to its return type.  */
8389                 type_quals = TYPE_UNQUALIFIED;
8390               }
8391             errmsg = targetm.invalid_return_type (type);
8392             if (errmsg)
8393               {
8394                 error (errmsg);
8395                 type = integer_type_node;
8396               }
8397
8398             /* Error about some types functions can't return.  */
8399
8400             if (TREE_CODE (type) == FUNCTION_TYPE)
8401               {
8402                 error ("%qs declared as function returning a function", name);
8403                 return error_mark_node;
8404               }
8405             if (TREE_CODE (type) == ARRAY_TYPE)
8406               {
8407                 error ("%qs declared as function returning an array", name);
8408                 return error_mark_node;
8409               }
8410
8411             /* Pick up type qualifiers which should be applied to `this'.  */
8412             memfn_quals = declarator->u.function.qualifiers;
8413
8414             /* Pick up the exception specifications.  */
8415             raises = declarator->u.function.exception_specification;
8416
8417             /* Say it's a definition only for the CALL_EXPR
8418                closest to the identifier.  */
8419             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
8420
8421             /* Handle a late-specified return type.  */
8422             if (funcdecl_p)
8423               {
8424                 if (type_uses_auto (type))
8425                   {
8426                     if (!declarator->u.function.late_return_type)
8427                       {
8428                         error ("%qs function uses %<auto%> type specifier without"
8429                                " late return type", name);
8430                         return error_mark_node;
8431                       }
8432                     else if (!is_auto (type))
8433                       {
8434                         error ("%qs function with late return type has"
8435                                " %qT as its type rather than plain %<auto%>",
8436                                name, type);
8437                         return error_mark_node;
8438                       }
8439                   }
8440                 else if (declarator->u.function.late_return_type)
8441                   {
8442                     error ("%qs function with late return type not declared"
8443                            " with %<auto%> type specifier", name);
8444                     return error_mark_node;
8445                   }
8446               }
8447             type = splice_late_return_type
8448               (type, declarator->u.function.late_return_type);
8449             if (type == error_mark_node)
8450               return error_mark_node;
8451
8452             if (ctype == NULL_TREE
8453                 && decl_context == FIELD
8454                 && funcdecl_p
8455                 && (friendp == 0 || dname == current_class_name))
8456               ctype = current_class_type;
8457
8458             if (ctype && (sfk == sfk_constructor
8459                           || sfk == sfk_destructor))
8460               {
8461                 /* We are within a class's scope. If our declarator name
8462                    is the same as the class name, and we are defining
8463                    a function, then it is a constructor/destructor, and
8464                    therefore returns a void type.  */
8465
8466                 /* ISO C++ 12.4/2.  A destructor may not be declared
8467                    const or volatile.  A destructor may not be
8468                    static.
8469
8470                    ISO C++ 12.1.  A constructor may not be declared
8471                    const or volatile.  A constructor may not be
8472                    virtual.  A constructor may not be static.  */
8473                 if (staticp == 2)
8474                   error ((flags == DTOR_FLAG)
8475                          ? "destructor cannot be static member function"
8476                          : "constructor cannot be static member function");
8477                 if (memfn_quals)
8478                   {
8479                     error ((flags == DTOR_FLAG)
8480                            ? "destructors may not be cv-qualified"
8481                            : "constructors may not be cv-qualified");
8482                     memfn_quals = TYPE_UNQUALIFIED;
8483                   }
8484
8485                 if (decl_context == FIELD
8486                     && !member_function_or_else (ctype,
8487                                                  current_class_type,
8488                                                  flags))
8489                   return error_mark_node;
8490
8491                 if (flags != DTOR_FLAG)
8492                   {
8493                     /* It's a constructor.  */
8494                     if (explicitp == 1)
8495                       explicitp = 2;
8496                     if (virtualp)
8497                       {
8498                         permerror (input_location, "constructors cannot be declared virtual");
8499                         virtualp = 0;
8500                       }
8501                     if (decl_context == FIELD
8502                         && sfk != sfk_constructor)
8503                       return error_mark_node;
8504                   }
8505                 if (decl_context == FIELD)
8506                   staticp = 0;
8507               }
8508             else if (friendp)
8509               {
8510                 if (initialized)
8511                   error ("can't initialize friend function %qs", name);
8512                 if (virtualp)
8513                   {
8514                     /* Cannot be both friend and virtual.  */
8515                     error ("virtual functions cannot be friends");
8516                     friendp = 0;
8517                   }
8518                 if (decl_context == NORMAL)
8519                   error ("friend declaration not in class definition");
8520                 if (current_function_decl && funcdef_flag)
8521                   error ("can't define friend function %qs in a local "
8522                          "class definition",
8523                          name);
8524               }
8525             else if (ctype && sfk == sfk_conversion)
8526               {
8527                 if (explicitp == 1)
8528                   {
8529                     maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
8530                     explicitp = 2;
8531                   }
8532               }
8533
8534             /* It is not allowed to use `constexpr' in a function
8535                declaration that is not a definition.
8536                That is too strict, though.  */
8537             if (constexpr_p && !funcdef_flag)
8538               {
8539                 error ("the %<constexpr%> specifier cannot be used in "
8540                        "a function declaration that is not a definition");
8541                 constexpr_p = false;
8542               }
8543
8544             /* A constexpr non-static member function is implicitly const.  */
8545             if (constexpr_p && decl_context == FIELD && staticp == 0
8546                 && sfk != sfk_constructor && sfk != sfk_destructor)
8547               memfn_quals |= TYPE_QUAL_CONST;
8548
8549             arg_types = grokparms (declarator->u.function.parameters,
8550                                    &parms);
8551
8552             if (inner_declarator
8553                 && inner_declarator->kind == cdk_id
8554                 && inner_declarator->u.id.sfk == sfk_destructor
8555                 && arg_types != void_list_node)
8556               {
8557                 error ("destructors may not have parameters");
8558                 arg_types = void_list_node;
8559                 parms = NULL_TREE;
8560               }
8561
8562             type = build_function_type (type, arg_types);
8563           }
8564           break;
8565
8566         case cdk_pointer:
8567         case cdk_reference:
8568         case cdk_ptrmem:
8569           /* Filter out pointers-to-references and references-to-references.
8570              We can get these if a TYPE_DECL is used.  */
8571
8572           if (TREE_CODE (type) == REFERENCE_TYPE)
8573             {
8574               if (declarator->kind != cdk_reference)
8575                 {
8576                   error ("cannot declare pointer to %q#T", type);
8577                   type = TREE_TYPE (type);
8578                 }
8579
8580               /* In C++0x, we allow reference to reference declarations
8581                  that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
8582                  and template type arguments [14.3.1/4 temp.arg.type]. The
8583                  check for direct reference to reference declarations, which
8584                  are still forbidden, occurs below. Reasoning behind the change
8585                  can be found in DR106, DR540, and the rvalue reference
8586                  proposals. */
8587               else if (cxx_dialect == cxx98)
8588                 {
8589                   error ("cannot declare reference to %q#T", type);
8590                   type = TREE_TYPE (type);
8591                 }
8592             }
8593           else if (VOID_TYPE_P (type))
8594             {
8595               if (declarator->kind == cdk_reference)
8596                 error ("cannot declare reference to %q#T", type);
8597               else if (declarator->kind == cdk_ptrmem)
8598                 error ("cannot declare pointer to %q#T member", type);
8599             }
8600
8601           /* We now know that the TYPE_QUALS don't apply to the decl,
8602              but to the target of the pointer.  */
8603           type_quals = TYPE_UNQUALIFIED;
8604
8605           if (declarator->kind == cdk_ptrmem
8606               && (TREE_CODE (type) == FUNCTION_TYPE
8607                   || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
8608             {
8609               memfn_quals |= cp_type_quals (type);
8610               type = build_memfn_type (type,
8611                                        declarator->u.pointer.class_type,
8612                                        memfn_quals);
8613               memfn_quals = TYPE_UNQUALIFIED;
8614             }
8615
8616           if (TREE_CODE (type) == FUNCTION_TYPE
8617               && cp_type_quals (type) != TYPE_UNQUALIFIED)
8618             error ("cannot declare %s to qualified function type %qT",
8619                    declarator->kind == cdk_reference ? "reference" : "pointer",
8620                    type);
8621
8622           if (declarator->kind == cdk_reference)
8623             {
8624               /* In C++0x, the type we are creating a reference to might be
8625                  a typedef which is itself a reference type. In that case,
8626                  we follow the reference collapsing rules in
8627                  [7.1.3/8 dcl.typedef] to create the final reference type:
8628
8629                  "If a typedef TD names a type that is a reference to a type
8630                  T, an attempt to create the type 'lvalue reference to cv TD'
8631                  creates the type 'lvalue reference to T,' while an attempt
8632                  to create the type "rvalue reference to cv TD' creates the
8633                  type TD."
8634               */
8635               if (!VOID_TYPE_P (type))
8636                 type = cp_build_reference_type
8637                        ((TREE_CODE (type) == REFERENCE_TYPE
8638                          ? TREE_TYPE (type) : type),
8639                         (declarator->u.reference.rvalue_ref
8640                          && (TREE_CODE(type) != REFERENCE_TYPE
8641                              || TYPE_REF_IS_RVALUE (type))));
8642
8643               /* In C++0x, we need this check for direct reference to
8644                  reference declarations, which are forbidden by
8645                  [8.3.2/5 dcl.ref]. Reference to reference declarations
8646                  are only allowed indirectly through typedefs and template
8647                  type arguments. Example:
8648
8649                    void foo(int & &);      // invalid ref-to-ref decl
8650
8651                    typedef int & int_ref;
8652                    void foo(int_ref &);    // valid ref-to-ref decl
8653               */
8654               if (inner_declarator && inner_declarator->kind == cdk_reference)
8655                 error ("cannot declare reference to %q#T, which is not "
8656                        "a typedef or a template type argument", type);
8657             }
8658           else if (TREE_CODE (type) == METHOD_TYPE)
8659             type = build_ptrmemfunc_type (build_pointer_type (type));
8660           else if (declarator->kind == cdk_ptrmem)
8661             {
8662               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
8663                           != NAMESPACE_DECL);
8664               if (declarator->u.pointer.class_type == error_mark_node)
8665                 /* We will already have complained.  */
8666                 type = error_mark_node;
8667               else
8668                 type = build_ptrmem_type (declarator->u.pointer.class_type,
8669                                           type);
8670             }
8671           else
8672             type = build_pointer_type (type);
8673
8674           /* Process a list of type modifier keywords (such as
8675              const or volatile) that were given inside the `*' or `&'.  */
8676
8677           if (declarator->u.pointer.qualifiers)
8678             {
8679               type
8680                 = cp_build_qualified_type (type,
8681                                            declarator->u.pointer.qualifiers);
8682               type_quals = cp_type_quals (type);
8683             }
8684           ctype = NULL_TREE;
8685           break;
8686
8687         case cdk_error:
8688           break;
8689
8690         default:
8691           gcc_unreachable ();
8692         }
8693     }
8694
8695   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
8696       && TREE_CODE (type) != FUNCTION_TYPE
8697       && TREE_CODE (type) != METHOD_TYPE)
8698     {
8699       error ("template-id %qD used as a declarator",
8700              unqualified_id);
8701       unqualified_id = dname;
8702     }
8703
8704   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
8705      qualified with a class-name, turn it into a METHOD_TYPE, unless
8706      we know that the function is static.  We take advantage of this
8707      opportunity to do other processing that pertains to entities
8708      explicitly declared to be class members.  Note that if DECLARATOR
8709      is non-NULL, we know it is a cdk_id declarator; otherwise, we
8710      would not have exited the loop above.  */
8711   if (declarator
8712       && declarator->u.id.qualifying_scope
8713       && TYPE_P (declarator->u.id.qualifying_scope))
8714     {
8715       tree t;
8716
8717       ctype = declarator->u.id.qualifying_scope;
8718       ctype = TYPE_MAIN_VARIANT (ctype);
8719       t = ctype;
8720       while (t != NULL_TREE && CLASS_TYPE_P (t))
8721         {
8722           /* You're supposed to have one `template <...>' for every
8723              template class, but you don't need one for a full
8724              specialization.  For example:
8725
8726                template <class T> struct S{};
8727                template <> struct S<int> { void f(); };
8728                void S<int>::f () {}
8729
8730              is correct; there shouldn't be a `template <>' for the
8731              definition of `S<int>::f'.  */
8732           if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
8733               && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
8734             /* T is an explicit (not partial) specialization.  All
8735                containing classes must therefore also be explicitly
8736                specialized.  */
8737             break;
8738           if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
8739               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
8740             template_count += 1;
8741
8742           t = TYPE_MAIN_DECL (t);
8743           t = DECL_CONTEXT (t);
8744         }
8745
8746       if (ctype == current_class_type)
8747         {
8748           if (friendp)
8749             {
8750               permerror (input_location, "member functions are implicitly friends of their class");
8751               friendp = 0;
8752             }
8753           else
8754             permerror (declarator->id_loc, 
8755                           "extra qualification %<%T::%> on member %qs",
8756                           ctype, name);
8757         }
8758       else if (/* If the qualifying type is already complete, then we
8759                   can skip the following checks.  */
8760                !COMPLETE_TYPE_P (ctype)
8761                && (/* If the function is being defined, then
8762                       qualifying type must certainly be complete.  */
8763                    funcdef_flag
8764                    /* A friend declaration of "T::f" is OK, even if
8765                       "T" is a template parameter.  But, if this
8766                       function is not a friend, the qualifying type
8767                       must be a class.  */
8768                    || (!friendp && !CLASS_TYPE_P (ctype))
8769                    /* For a declaration, the type need not be
8770                       complete, if either it is dependent (since there
8771                       is no meaningful definition of complete in that
8772                       case) or the qualifying class is currently being
8773                       defined.  */
8774                    || !(dependent_type_p (ctype)
8775                         || currently_open_class (ctype)))
8776                /* Check that the qualifying type is complete.  */
8777                && !complete_type_or_else (ctype, NULL_TREE))
8778         return error_mark_node;
8779       else if (TREE_CODE (type) == FUNCTION_TYPE)
8780         {
8781           tree sname = declarator->u.id.unqualified_name;
8782
8783           if (current_class_type
8784               && (!friendp || funcdef_flag))
8785             {
8786               error (funcdef_flag
8787                      ? "cannot define member function %<%T::%s%> within %<%T%>"
8788                      : "cannot declare member function %<%T::%s%> within %<%T%>",
8789                      ctype, name, current_class_type);
8790               return error_mark_node;
8791             }
8792
8793           /* It is not permitted to define a member function outside ist
8794              membership class as `constexpr'.  */
8795           if (constexpr_p)
8796             error ("a constexpr function cannot be defined "
8797                    "outside of its class.");
8798
8799           if (TREE_CODE (sname) == IDENTIFIER_NODE
8800               && NEW_DELETE_OPNAME_P (sname))
8801             /* Overloaded operator new and operator delete
8802                are always static functions.  */
8803             ;
8804           else
8805             type = build_memfn_type (type, ctype, memfn_quals);
8806         }
8807       else if (declspecs->specs[(int)ds_typedef]
8808                && current_class_type)
8809         {
8810           error ("cannot declare member %<%T::%s%> within %qT",
8811                  ctype, name, current_class_type);
8812           return error_mark_node;
8813         }
8814     }
8815
8816   /* Now TYPE has the actual type.  */
8817
8818   if (returned_attrs)
8819     {
8820       if (attrlist)
8821         *attrlist = chainon (returned_attrs, *attrlist);
8822       else
8823         attrlist = &returned_attrs;
8824     }
8825
8826   /* Handle parameter packs. */
8827   if (parameter_pack_p)
8828     {
8829       if (decl_context == PARM)
8830         /* Turn the type into a pack expansion.*/
8831         type = make_pack_expansion (type);
8832       else
8833         error ("non-parameter %qs cannot be a parameter pack", name);
8834     }
8835
8836   /* Did array size calculations overflow?  */
8837
8838   if (TREE_CODE (type) == ARRAY_TYPE
8839       && COMPLETE_TYPE_P (type)
8840       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8841       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
8842     {
8843       error ("size of array %qs is too large", name);
8844       /* If we proceed with the array type as it is, we'll eventually
8845          crash in tree_low_cst().  */
8846       type = error_mark_node;
8847     }
8848
8849   if ((decl_context == FIELD || decl_context == PARM)
8850       && !processing_template_decl
8851       && variably_modified_type_p (type, NULL_TREE))
8852     {
8853       if (decl_context == FIELD)
8854         error ("data member may not have variably modified type %qT", type);
8855       else
8856         error ("parameter may not have variably modified type %qT", type);
8857       type = error_mark_node;
8858     }
8859
8860   if (explicitp == 1 || (explicitp && friendp))
8861     {
8862       /* [dcl.fct.spec] The explicit specifier shall only be used in
8863          declarations of constructors within a class definition.  */
8864       error ("only declarations of constructors can be %<explicit%>");
8865       explicitp = 0;
8866     }
8867
8868   if (storage_class == sc_mutable)
8869     {
8870       if (decl_context != FIELD || friendp)
8871         {
8872           error ("non-member %qs cannot be declared %<mutable%>", name);
8873           storage_class = sc_none;
8874         }
8875       else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
8876         {
8877           error ("non-object member %qs cannot be declared %<mutable%>", name);
8878           storage_class = sc_none;
8879         }
8880       else if (TREE_CODE (type) == FUNCTION_TYPE
8881                || TREE_CODE (type) == METHOD_TYPE)
8882         {
8883           error ("function %qs cannot be declared %<mutable%>", name);
8884           storage_class = sc_none;
8885         }
8886       else if (staticp)
8887         {
8888           error ("static %qs cannot be declared %<mutable%>", name);
8889           storage_class = sc_none;
8890         }
8891       else if (type_quals & TYPE_QUAL_CONST)
8892         {
8893           error ("const %qs cannot be declared %<mutable%>", name);
8894           storage_class = sc_none;
8895         }
8896     }
8897
8898   /* If this is declaring a typedef name, return a TYPE_DECL.  */
8899   if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
8900     {
8901       tree decl;
8902
8903       /* Note that the grammar rejects storage classes
8904          in typenames, fields or parameters.  */
8905       if (current_lang_name == lang_name_java)
8906         TYPE_FOR_JAVA (type) = 1;
8907
8908       /* This declaration:
8909
8910            typedef void f(int) const;
8911
8912          declares a function type which is not a member of any
8913          particular class, but which is cv-qualified; for
8914          example "f S::*" declares a pointer to a const-qualified
8915          member function of S.  We record the cv-qualification in the
8916          function type.  */
8917       if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
8918         {
8919           type = cp_build_qualified_type (type, memfn_quals);
8920           
8921           /* We have now dealt with these qualifiers.  */
8922           memfn_quals = TYPE_UNQUALIFIED;
8923         }
8924
8925       if (decl_context == FIELD)
8926         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
8927       else
8928         decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
8929       if (id_declarator && declarator->u.id.qualifying_scope) {
8930         error_at (DECL_SOURCE_LOCATION (decl), 
8931                   "typedef name may not be a nested-name-specifier");
8932         TREE_TYPE (decl) = error_mark_node;
8933       }
8934
8935       if (decl_context != FIELD)
8936         {
8937           if (!current_function_decl)
8938             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8939           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
8940                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
8941                        (current_function_decl)))
8942             /* The TYPE_DECL is "abstract" because there will be
8943                clones of this constructor/destructor, and there will
8944                be copies of this TYPE_DECL generated in those
8945                clones.  */
8946             DECL_ABSTRACT (decl) = 1;
8947         }
8948       else if (constructor_name_p (unqualified_id, current_class_type))
8949         permerror (input_location, "ISO C++ forbids nested type %qD with same name "
8950                    "as enclosing class",
8951                    unqualified_id);
8952
8953       /* If the user declares "typedef struct {...} foo" then the
8954          struct will have an anonymous name.  Fill that name in now.
8955          Nothing can refer to it, so nothing needs know about the name
8956          change.  */
8957       if (type != error_mark_node
8958           && unqualified_id
8959           && TYPE_NAME (type)
8960           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
8961           && TYPE_ANONYMOUS_P (type)
8962           && cp_type_quals (type) == TYPE_UNQUALIFIED)
8963         {
8964           tree t;
8965
8966           /* Replace the anonymous name with the real name everywhere.  */
8967           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
8968             {
8969               if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8970                 {
8971                   debug_hooks->set_name (t, decl);
8972                   TYPE_NAME (t) = decl;
8973                 }
8974             }
8975
8976           if (TYPE_LANG_SPECIFIC (type))
8977             TYPE_WAS_ANONYMOUS (type) = 1;
8978
8979           /* If this is a typedef within a template class, the nested
8980              type is a (non-primary) template.  The name for the
8981              template needs updating as well.  */
8982           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
8983             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
8984               = TYPE_IDENTIFIER (type);
8985
8986           /* Adjust linkage now that we aren't anonymous anymore.  */
8987           set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
8988           determine_visibility (TYPE_MAIN_DECL (type));
8989
8990           /* FIXME remangle member functions; member functions of a
8991              type with external linkage have external linkage.  */
8992         }
8993
8994       if (signed_p
8995           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8996         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
8997
8998       bad_specifiers (decl, "type", virtualp,
8999                       memfn_quals != TYPE_UNQUALIFIED,
9000                       inlinep, friendp, raises != NULL_TREE);
9001
9002       return decl;
9003     }
9004
9005   /* Detect the case of an array type of unspecified size
9006      which came, as such, direct from a typedef name.
9007      We must copy the type, so that the array's domain can be
9008      individually set by the object's initializer.  */
9009
9010   if (type && typedef_type
9011       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
9012       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
9013     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
9014
9015   /* Detect where we're using a typedef of function type to declare a
9016      function. PARMS will not be set, so we must create it now.  */
9017
9018   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
9019     {
9020       tree decls = NULL_TREE;
9021       tree args;
9022
9023       for (args = TYPE_ARG_TYPES (type);
9024            args && args != void_list_node;
9025            args = TREE_CHAIN (args))
9026         {
9027           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
9028
9029           TREE_CHAIN (decl) = decls;
9030           decls = decl;
9031         }
9032
9033       parms = nreverse (decls);
9034
9035       if (decl_context != TYPENAME)
9036         {
9037           /* A cv-qualifier-seq shall only be part of the function type
9038              for a non-static member function. [8.3.5/4 dcl.fct] */
9039           if (cp_type_quals (type) != TYPE_UNQUALIFIED
9040               && (current_class_type == NULL_TREE || staticp) )
9041             {
9042               error (staticp
9043                      ? G_("qualified function types cannot be used to "
9044                           "declare static member functions")
9045                      : G_("qualified function types cannot be used to "
9046                           "declare free functions"));
9047               type = TYPE_MAIN_VARIANT (type);
9048             }
9049
9050           /* The qualifiers on the function type become the qualifiers on
9051              the non-static member function. */
9052           memfn_quals |= cp_type_quals (type);
9053         }
9054     }
9055
9056   /* If this is a type name (such as, in a cast or sizeof),
9057      compute the type and return it now.  */
9058
9059   if (decl_context == TYPENAME)
9060     {
9061       /* Note that the grammar rejects storage classes
9062          in typenames, fields or parameters.  */
9063       if (type_quals != TYPE_UNQUALIFIED)
9064         type_quals = TYPE_UNQUALIFIED;
9065
9066       /* Special case: "friend class foo" looks like a TYPENAME context.  */
9067       if (friendp)
9068         {
9069           if (type_quals != TYPE_UNQUALIFIED)
9070             {
9071               error ("type qualifiers specified for friend class declaration");
9072               type_quals = TYPE_UNQUALIFIED;
9073             }
9074           if (inlinep)
9075             {
9076               error ("%<inline%> specified for friend class declaration");
9077               inlinep = 0;
9078             }
9079
9080           if (!current_aggr)
9081             {
9082               /* Don't allow friend declaration without a class-key.  */
9083               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9084                 permerror (input_location, "template parameters cannot be friends");
9085               else if (TREE_CODE (type) == TYPENAME_TYPE)
9086                 permerror (input_location, "friend declaration requires class-key, "
9087                            "i.e. %<friend class %T::%D%>",
9088                            TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
9089               else
9090                 permerror (input_location, "friend declaration requires class-key, "
9091                            "i.e. %<friend %#T%>",
9092                            type);
9093             }
9094
9095           /* Only try to do this stuff if we didn't already give up.  */
9096           if (type != integer_type_node)
9097             {
9098               /* A friendly class?  */
9099               if (current_class_type)
9100                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9101                                    /*complain=*/true);
9102               else
9103                 error ("trying to make class %qT a friend of global scope",
9104                        type);
9105
9106               type = void_type_node;
9107             }
9108         }
9109       else if (memfn_quals)
9110         {
9111           if (ctype == NULL_TREE
9112               && TREE_CODE (type) == METHOD_TYPE)
9113             ctype = TYPE_METHOD_BASETYPE (type);
9114
9115           if (ctype)
9116             type = build_memfn_type (type, ctype, memfn_quals);
9117           /* Core issue #547: need to allow this in template type args.  */
9118           else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9119             type = cp_build_qualified_type (type, memfn_quals);
9120           else
9121             error ("invalid qualifiers on non-member function type");
9122         }
9123
9124       return type;
9125     }
9126   else if (unqualified_id == NULL_TREE && decl_context != PARM
9127            && decl_context != CATCHPARM
9128            && TREE_CODE (type) != UNION_TYPE
9129            && ! bitfield)
9130     {
9131       error ("abstract declarator %qT used as declaration", type);
9132       return error_mark_node;
9133     }
9134
9135   /* Only functions may be declared using an operator-function-id.  */
9136   if (unqualified_id
9137       && IDENTIFIER_OPNAME_P (unqualified_id)
9138       && TREE_CODE (type) != FUNCTION_TYPE
9139       && TREE_CODE (type) != METHOD_TYPE)
9140     {
9141       error ("declaration of %qD as non-function", unqualified_id);
9142       return error_mark_node;
9143     }
9144
9145   /* We don't check parameter types here because we can emit a better
9146      error message later.  */
9147   if (decl_context != PARM)
9148     {
9149       type = check_var_type (unqualified_id, type);
9150       if (type == error_mark_node)
9151         return error_mark_node;
9152     }
9153
9154   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9155      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
9156
9157   if (decl_context == PARM || decl_context == CATCHPARM)
9158     {
9159       if (ctype || in_namespace)
9160         error ("cannot use %<::%> in parameter declaration");
9161
9162       /* A parameter declared as an array of T is really a pointer to T.
9163          One declared as a function is really a pointer to a function.
9164          One declared as a member is really a pointer to member.  */
9165
9166       if (TREE_CODE (type) == ARRAY_TYPE)
9167         {
9168           /* Transfer const-ness of array into that of type pointed to.  */
9169           type = build_pointer_type (TREE_TYPE (type));
9170           type_quals = TYPE_UNQUALIFIED;
9171         }
9172       else if (TREE_CODE (type) == FUNCTION_TYPE)
9173         type = build_pointer_type (type);
9174     }
9175
9176   {
9177     tree decl;
9178
9179     if (decl_context == PARM)
9180       {
9181         decl = cp_build_parm_decl (unqualified_id, type);
9182
9183         bad_specifiers (decl, "parameter", virtualp,
9184                         memfn_quals != TYPE_UNQUALIFIED,
9185                         inlinep, friendp, raises != NULL_TREE);
9186       }
9187     else if (decl_context == FIELD)
9188       {
9189         /* The C99 flexible array extension.  */
9190         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
9191             && TYPE_DOMAIN (type) == NULL_TREE)
9192           {
9193             tree itype = compute_array_index_type (dname, integer_zero_node);
9194             type = build_cplus_array_type (TREE_TYPE (type), itype);
9195           }
9196
9197         if (type == error_mark_node)
9198           {
9199             /* Happens when declaring arrays of sizes which
9200                are error_mark_node, for example.  */
9201             decl = NULL_TREE;
9202           }
9203         else if (in_namespace && !friendp)
9204           {
9205             /* Something like struct S { int N::j; };  */
9206             error ("invalid use of %<::%>");
9207             return error_mark_node;
9208           }
9209         else if (TREE_CODE (type) == FUNCTION_TYPE)
9210           {
9211             int publicp = 0;
9212             tree function_context;
9213
9214             if (friendp == 0)
9215               {
9216                 if (ctype == NULL_TREE)
9217                   ctype = current_class_type;
9218
9219                 if (ctype == NULL_TREE)
9220                   {
9221                     error ("can't make %qD into a method -- not in a class",
9222                            unqualified_id);
9223                     return error_mark_node;
9224                   }
9225
9226                 /* ``A union may [ ... ] not [ have ] virtual functions.''
9227                    ARM 9.5 */
9228                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9229                   {
9230                     error ("function %qD declared virtual inside a union",
9231                            unqualified_id);
9232                     return error_mark_node;
9233                   }
9234
9235                 if (NEW_DELETE_OPNAME_P (unqualified_id))
9236                   {
9237                     if (virtualp)
9238                       {
9239                         error ("%qD cannot be declared virtual, since it "
9240                                "is always static",
9241                                unqualified_id);
9242                         virtualp = 0;
9243                       }
9244                   }
9245                 else if (staticp < 2)
9246                   type = build_memfn_type (type, ctype, memfn_quals);
9247               }
9248
9249             /* Check that the name used for a destructor makes sense.  */
9250             if (sfk == sfk_destructor)
9251               {
9252                 tree uqname = id_declarator->u.id.unqualified_name;
9253
9254                 if (!ctype)
9255                   {
9256                     gcc_assert (friendp);
9257                     error ("expected qualified name in friend declaration "
9258                            "for destructor %qD", uqname);
9259                     return error_mark_node;
9260                   }
9261
9262                 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
9263                   {
9264                     error ("declaration of %qD as member of %qT",
9265                            uqname, ctype);
9266                     return error_mark_node;
9267                   }
9268                 if (constexpr_p)
9269                   error ("a destructor cannot be %<constexpr%>");
9270               }
9271             else if (sfk == sfk_constructor && friendp)
9272               {
9273                 error ("expected qualified name in friend declaration "
9274                        "for constructor %qD",
9275                        id_declarator->u.id.unqualified_name);
9276                 return error_mark_node;
9277               }
9278
9279             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
9280             function_context = (ctype != NULL_TREE) ?
9281               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
9282             publicp = (! friendp || ! staticp)
9283               && function_context == NULL_TREE;
9284             decl = grokfndecl (ctype, type,
9285                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9286                                ? unqualified_id : dname,
9287                                parms,
9288                                unqualified_id,
9289                                virtualp, flags, memfn_quals, raises,
9290                                friendp ? -1 : 0, friendp, publicp,
9291                                inlinep || constexpr_p,
9292                                sfk,
9293                                funcdef_flag, template_count, in_namespace,
9294                                attrlist, declarator->id_loc);
9295             if (decl == NULL_TREE)
9296               return error_mark_node;
9297 #if 0
9298             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
9299             /* The decl and setting of decl_attr is also turned off.  */
9300             decl = build_decl_attribute_variant (decl, decl_attr);
9301 #endif
9302
9303             /* [class.conv.ctor]
9304
9305                A constructor declared without the function-specifier
9306                explicit that can be called with a single parameter
9307                specifies a conversion from the type of its first
9308                parameter to the type of its class.  Such a constructor
9309                is called a converting constructor.  */
9310             if (explicitp == 2)
9311               DECL_NONCONVERTING_P (decl) = 1;
9312           }
9313         else if (TREE_CODE (type) == METHOD_TYPE)
9314           {
9315             /* We only get here for friend declarations of
9316                members of other classes.  */
9317             /* All method decls are public, so tell grokfndecl to set
9318                TREE_PUBLIC, also.  */
9319             decl = grokfndecl (ctype, type,
9320                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9321                                ? unqualified_id : dname,
9322                                parms,
9323                                unqualified_id,
9324                                virtualp, flags, memfn_quals, raises,
9325                                friendp ? -1 : 0, friendp, 1, 0, sfk,
9326                                funcdef_flag, template_count, in_namespace,
9327                                attrlist,
9328                                declarator->id_loc);
9329             if (decl == NULL_TREE)
9330               return error_mark_node;
9331           }
9332         else if (!staticp && !dependent_type_p (type)
9333                  && !COMPLETE_TYPE_P (complete_type (type))
9334                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9335           {
9336             if (unqualified_id)
9337               error ("field %qD has incomplete type", unqualified_id);
9338             else
9339               error ("name %qT has incomplete type", type);
9340
9341             /* If we're instantiating a template, tell them which
9342                instantiation made the field's type be incomplete.  */
9343             if (current_class_type
9344                 && TYPE_NAME (current_class_type)
9345                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
9346                 && declspecs->type
9347                 && declspecs->type == type)
9348               error ("  in instantiation of template %qT",
9349                      current_class_type);
9350
9351             return error_mark_node;
9352           }
9353         else
9354           {
9355             if (friendp)
9356               {
9357                 error ("%qE is neither function nor member function; "
9358                        "cannot be declared friend", unqualified_id);
9359                 friendp = 0;
9360               }
9361             decl = NULL_TREE;
9362           }
9363
9364         if (friendp)
9365           {
9366             /* Friends are treated specially.  */
9367             if (ctype == current_class_type)
9368               ;  /* We already issued a permerror.  */
9369             else if (decl && DECL_NAME (decl))
9370               {
9371                 if (template_class_depth (current_class_type) == 0)
9372                   {
9373                     decl = check_explicit_specialization
9374                       (unqualified_id, decl, template_count,
9375                        2 * funcdef_flag + 4);
9376                     if (decl == error_mark_node)
9377                       return error_mark_node;
9378                   }
9379
9380                 DECL_DECLARED_CONSTEXPR_P (decl) = constexpr_p;
9381                 decl = do_friend (ctype, unqualified_id, decl,
9382                                   *attrlist, flags,
9383                                   funcdef_flag);
9384                 return decl;
9385               }
9386             else
9387               return error_mark_node;
9388           }
9389
9390         /* Structure field.  It may not be a function, except for C++.  */
9391
9392         if (decl == NULL_TREE)
9393           {
9394             if (initialized)
9395               {
9396                 if (!staticp)
9397                   {
9398                     /* An attempt is being made to initialize a non-static
9399                        member.  But, from [class.mem]:
9400
9401                        4 A member-declarator can contain a
9402                        constant-initializer only if it declares a static
9403                        member (_class.static_) of integral or enumeration
9404                        type, see _class.static.data_.
9405
9406                        This used to be relatively common practice, but
9407                        the rest of the compiler does not correctly
9408                        handle the initialization unless the member is
9409                        static so we make it static below.  */
9410                     permerror (input_location, "ISO C++ forbids initialization of member %qD",
9411                                unqualified_id);
9412                     permerror (input_location, "making %qD static", unqualified_id);
9413                     staticp = 1;
9414                   }
9415
9416                 if (uses_template_parms (type))
9417                   /* We'll check at instantiation time.  */
9418                   ;
9419                 else if (check_static_variable_definition (unqualified_id,
9420                                                            type))
9421                   /* If we just return the declaration, crashes
9422                      will sometimes occur.  We therefore return
9423                      void_type_node, as if this was a friend
9424                      declaration, to cause callers to completely
9425                      ignore this declaration.  */
9426                   return error_mark_node;
9427               }
9428
9429             if (staticp)
9430               {
9431                 /* C++ allows static class members.  All other work
9432                    for this is done by grokfield.  */
9433                 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
9434                 set_linkage_for_static_data_member (decl);
9435                 /* Even if there is an in-class initialization, DECL
9436                    is considered undefined until an out-of-class
9437                    definition is provided.  */
9438                 DECL_EXTERNAL (decl) = 1;
9439
9440                 if (thread_p)
9441                   DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
9442               }
9443             else
9444               {
9445                 if (constexpr_p)
9446                   error ("non-static data member %qE declared %<constexpr%>",
9447                          unqualified_id);
9448                 decl = build_decl (input_location,
9449                                    FIELD_DECL, unqualified_id, type);
9450                 DECL_NONADDRESSABLE_P (decl) = bitfield;
9451                 if (bitfield && !unqualified_id)
9452                   TREE_NO_WARNING (decl) = 1;
9453
9454                 if (storage_class == sc_mutable)
9455                   {
9456                     DECL_MUTABLE_P (decl) = 1;
9457                     storage_class = sc_none;
9458                   }
9459               }
9460
9461             bad_specifiers (decl, "field", virtualp,
9462                             memfn_quals != TYPE_UNQUALIFIED,
9463                             inlinep, friendp, raises != NULL_TREE);
9464           }
9465       }
9466     else if (TREE_CODE (type) == FUNCTION_TYPE
9467              || TREE_CODE (type) == METHOD_TYPE)
9468       {
9469         tree original_name;
9470         int publicp = 0;
9471
9472         if (!unqualified_id)
9473           return error_mark_node;
9474
9475         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
9476           original_name = dname;
9477         else
9478           original_name = unqualified_id;
9479
9480         if (storage_class == sc_auto)
9481           error ("storage class %<auto%> invalid for function %qs", name);
9482         else if (storage_class == sc_register)
9483           error ("storage class %<register%> invalid for function %qs", name);
9484         else if (thread_p)
9485           error ("storage class %<__thread%> invalid for function %qs", name);
9486
9487         /* Function declaration not at top level.
9488            Storage classes other than `extern' are not allowed
9489            and `extern' makes no difference.  */
9490         if (! toplevel_bindings_p ()
9491             && (storage_class == sc_static
9492                 || declspecs->specs[(int)ds_inline])
9493             && pedantic)
9494           {
9495             if (storage_class == sc_static)
9496               pedwarn (input_location, OPT_pedantic, 
9497                        "%<static%> specified invalid for function %qs "
9498                        "declared out of global scope", name);
9499             else
9500               pedwarn (input_location, OPT_pedantic, 
9501                        "%<inline%> specifier invalid for function %qs "
9502                        "declared out of global scope", name);
9503           }
9504
9505         if (ctype != NULL_TREE
9506             && TREE_CODE (ctype) != NAMESPACE_DECL && !MAYBE_CLASS_TYPE_P (ctype))
9507           {
9508             error ("%q#T is not a class or a namespace", ctype);
9509             ctype = NULL_TREE;
9510           }
9511
9512         if (ctype == NULL_TREE)
9513           {
9514             if (virtualp)
9515               {
9516                 error ("virtual non-class function %qs", name);
9517                 virtualp = 0;
9518               }
9519             else if (sfk == sfk_constructor
9520                      || sfk == sfk_destructor)
9521               {
9522                 error (funcdef_flag
9523                        ? "%qs defined in a non-class scope"
9524                        : "%qs declared in a non-class scope", name);
9525                 sfk = sfk_none;
9526               }
9527           }
9528         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9529                  && !NEW_DELETE_OPNAME_P (original_name))
9530           type = build_method_type_directly (ctype,
9531                                              TREE_TYPE (type),
9532                                              TYPE_ARG_TYPES (type));
9533
9534         /* Record presence of `static'.  */
9535         publicp = (ctype != NULL_TREE
9536                    || storage_class == sc_extern
9537                    || storage_class != sc_static);
9538
9539         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
9540                            virtualp, flags, memfn_quals, raises,
9541                            1, friendp,
9542                            publicp, inlinep || constexpr_p, sfk, funcdef_flag,
9543                            template_count, in_namespace, attrlist,
9544                            declarator->id_loc);
9545         if (decl == NULL_TREE)
9546           return error_mark_node;
9547
9548         if (staticp == 1)
9549           {
9550             int invalid_static = 0;
9551
9552             /* Don't allow a static member function in a class, and forbid
9553                declaring main to be static.  */
9554             if (TREE_CODE (type) == METHOD_TYPE)
9555               {
9556                 permerror (input_location, "cannot declare member function %qD to have "
9557                            "static linkage", decl);
9558                 invalid_static = 1;
9559               }
9560             else if (current_function_decl)
9561               {
9562                 /* FIXME need arm citation */
9563                 error ("cannot declare static function inside another function");
9564                 invalid_static = 1;
9565               }
9566
9567             if (invalid_static)
9568               {
9569                 staticp = 0;
9570                 storage_class = sc_none;
9571               }
9572           }
9573       }
9574     else
9575       {
9576         /* It's a variable.  */
9577
9578         /* An uninitialized decl with `extern' is a reference.  */
9579         decl = grokvardecl (type, unqualified_id,
9580                             declspecs,
9581                             initialized,
9582                             (type_quals & TYPE_QUAL_CONST) != 0,
9583                             ctype ? ctype : in_namespace);
9584         bad_specifiers (decl, "variable", virtualp,
9585                         memfn_quals != TYPE_UNQUALIFIED,
9586                         inlinep, friendp, raises != NULL_TREE);
9587
9588         if (ctype)
9589           {
9590             DECL_CONTEXT (decl) = ctype;
9591             if (staticp == 1)
9592               {
9593                 permerror (input_location, "%<static%> may not be used when defining "
9594                            "(as opposed to declaring) a static data member");
9595                 staticp = 0;
9596                 storage_class = sc_none;
9597               }
9598             if (storage_class == sc_register && TREE_STATIC (decl))
9599               {
9600                 error ("static member %qD declared %<register%>", decl);
9601                 storage_class = sc_none;
9602               }
9603             if (storage_class == sc_extern && pedantic)
9604               {
9605                 pedwarn (input_location, OPT_pedantic, 
9606                          "cannot explicitly declare member %q#D to have "
9607                          "extern linkage", decl);
9608                 storage_class = sc_none;
9609               }
9610           }
9611       }
9612
9613     if (storage_class == sc_extern && initialized && !funcdef_flag)
9614       {
9615         if (toplevel_bindings_p ())
9616           {
9617             /* It's common practice (and completely valid) to have a const
9618                be initialized and declared extern.  */
9619             if (!(type_quals & TYPE_QUAL_CONST))
9620               warning (0, "%qs initialized and declared %<extern%>", name);
9621           }
9622         else
9623           {
9624             error ("%qs has both %<extern%> and initializer", name);
9625             return error_mark_node;
9626           }
9627       }
9628
9629     /* Record `register' declaration for warnings on &
9630        and in case doing stupid register allocation.  */
9631
9632     if (storage_class == sc_register)
9633       DECL_REGISTER (decl) = 1;
9634     else if (storage_class == sc_extern)
9635       DECL_THIS_EXTERN (decl) = 1;
9636     else if (storage_class == sc_static)
9637       DECL_THIS_STATIC (decl) = 1;
9638
9639     /* Don't forget constexprness.  */
9640     if (VAR_OR_FUNCTION_DECL_P (decl))
9641       DECL_DECLARED_CONSTEXPR_P (decl) = constexpr_p;
9642
9643     /* Record constancy and volatility on the DECL itself .  There's
9644        no need to do this when processing a template; we'll do this
9645        for the instantiated declaration based on the type of DECL.  */
9646     if (!processing_template_decl)
9647       cp_apply_type_quals_to_decl (type_quals, decl);
9648
9649     return decl;
9650   }
9651 }
9652 \f
9653 /* Subroutine of start_function.  Ensure that each of the parameter
9654    types (as listed in PARMS) is complete, as is required for a
9655    function definition.  */
9656
9657 static void
9658 require_complete_types_for_parms (tree parms)
9659 {
9660   for (; parms; parms = TREE_CHAIN (parms))
9661     {
9662       if (dependent_type_p (TREE_TYPE (parms)))
9663         continue;
9664       if (!VOID_TYPE_P (TREE_TYPE (parms))
9665           && complete_type_or_else (TREE_TYPE (parms), parms))
9666         {
9667           relayout_decl (parms);
9668           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9669         }
9670       else
9671         /* grokparms or complete_type_or_else will have already issued
9672            an error.  */
9673         TREE_TYPE (parms) = error_mark_node;
9674     }
9675 }
9676
9677 /* Returns nonzero if T is a local variable.  */
9678
9679 int
9680 local_variable_p (const_tree t)
9681 {
9682   if ((TREE_CODE (t) == VAR_DECL
9683        /* A VAR_DECL with a context that is a _TYPE is a static data
9684           member.  */
9685        && !TYPE_P (CP_DECL_CONTEXT (t))
9686        /* Any other non-local variable must be at namespace scope.  */
9687        && !DECL_NAMESPACE_SCOPE_P (t))
9688       || (TREE_CODE (t) == PARM_DECL))
9689     return 1;
9690
9691   return 0;
9692 }
9693
9694 /* Like local_variable_p, but suitable for use as a tree-walking
9695    function.  */
9696
9697 static tree
9698 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9699                          void *data ATTRIBUTE_UNUSED)
9700 {
9701   if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
9702     return *tp;
9703   else if (TYPE_P (*tp))
9704     *walk_subtrees = 0;
9705
9706   return NULL_TREE;
9707 }
9708
9709
9710 /* Check that ARG, which is a default-argument expression for a
9711    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
9712    something goes wrong.  DECL may also be a _TYPE node, rather than a
9713    DECL, if there is no DECL available.  */
9714
9715 tree
9716 check_default_argument (tree decl, tree arg)
9717 {
9718   tree var;
9719   tree decl_type;
9720
9721   if (TREE_CODE (arg) == DEFAULT_ARG)
9722     /* We get a DEFAULT_ARG when looking at an in-class declaration
9723        with a default argument.  Ignore the argument for now; we'll
9724        deal with it after the class is complete.  */
9725     return arg;
9726
9727   if (TYPE_P (decl))
9728     {
9729       decl_type = decl;
9730       decl = NULL_TREE;
9731     }
9732   else
9733     decl_type = TREE_TYPE (decl);
9734
9735   if (arg == error_mark_node
9736       || decl == error_mark_node
9737       || TREE_TYPE (arg) == error_mark_node
9738       || decl_type == error_mark_node)
9739     /* Something already went wrong.  There's no need to check
9740        further.  */
9741     return error_mark_node;
9742
9743   /* [dcl.fct.default]
9744
9745      A default argument expression is implicitly converted to the
9746      parameter type.  */
9747   if (!TREE_TYPE (arg)
9748       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
9749     {
9750       if (decl)
9751         error ("default argument for %q#D has type %qT",
9752                decl, TREE_TYPE (arg));
9753       else
9754         error ("default argument for parameter of type %qT has type %qT",
9755                decl_type, TREE_TYPE (arg));
9756
9757       return error_mark_node;
9758     }
9759
9760   /* [dcl.fct.default]
9761
9762      Local variables shall not be used in default argument
9763      expressions.
9764
9765      The keyword `this' shall not be used in a default argument of a
9766      member function.  */
9767   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
9768   if (var)
9769     {
9770       error ("default argument %qE uses local variable %qD", arg, var);
9771       return error_mark_node;
9772     }
9773
9774   /* All is well.  */
9775   return arg;
9776 }
9777
9778 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
9779
9780 static tree
9781 type_is_deprecated (tree type)
9782 {
9783   enum tree_code code;
9784   if (TREE_DEPRECATED (type))
9785     return type;
9786   if (TYPE_NAME (type)
9787       && TREE_DEPRECATED (TYPE_NAME (type)))
9788     return type;
9789
9790   code = TREE_CODE (type);
9791
9792   if (code == POINTER_TYPE || code == REFERENCE_TYPE
9793       || code == OFFSET_TYPE || code == FUNCTION_TYPE
9794       || code == METHOD_TYPE || code == ARRAY_TYPE)
9795     return type_is_deprecated (TREE_TYPE (type));
9796
9797   if (TYPE_PTRMEMFUNC_P (type))
9798     return type_is_deprecated
9799       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
9800
9801   return NULL_TREE;
9802 }
9803
9804 /* Decode the list of parameter types for a function type.
9805    Given the list of things declared inside the parens,
9806    return a list of types.
9807
9808    If this parameter does not end with an ellipsis, we append
9809    void_list_node.
9810
9811    *PARMS is set to the chain of PARM_DECLs created.  */
9812
9813 static tree
9814 grokparms (tree parmlist, tree *parms)
9815 {
9816   tree result = NULL_TREE;
9817   tree decls = NULL_TREE;
9818   tree parm;
9819   int any_error = 0;
9820
9821   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
9822     {
9823       tree type = NULL_TREE;
9824       tree init = TREE_PURPOSE (parm);
9825       tree decl = TREE_VALUE (parm);
9826       const char *errmsg;
9827
9828       if (parm == void_list_node)
9829         break;
9830
9831       if (! decl || TREE_TYPE (decl) == error_mark_node)
9832         continue;
9833
9834       type = TREE_TYPE (decl);
9835       if (VOID_TYPE_P (type))
9836         {
9837           if (same_type_p (type, void_type_node)
9838               && DECL_SELF_REFERENCE_P (type)
9839               && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
9840             /* this is a parmlist of `(void)', which is ok.  */
9841             break;
9842           cxx_incomplete_type_error (decl, type);
9843           /* It's not a good idea to actually create parameters of
9844              type `void'; other parts of the compiler assume that a
9845              void type terminates the parameter list.  */
9846           type = error_mark_node;
9847           TREE_TYPE (decl) = error_mark_node;
9848         }
9849
9850       if (type != error_mark_node
9851           && TYPE_FOR_JAVA (type)
9852           && MAYBE_CLASS_TYPE_P (type))
9853         {
9854           error ("parameter %qD has Java class type", decl);
9855           type = error_mark_node;
9856           TREE_TYPE (decl) = error_mark_node;
9857           init = NULL_TREE;
9858         }
9859
9860       if (type != error_mark_node
9861           && (errmsg = targetm.invalid_parameter_type (type)))
9862         {
9863           error (errmsg);
9864           type = error_mark_node;
9865           TREE_TYPE (decl) = error_mark_node;
9866         }
9867
9868       if (type != error_mark_node)
9869         {
9870           if (deprecated_state != DEPRECATED_SUPPRESS)
9871             {
9872               tree deptype = type_is_deprecated (type);
9873               if (deptype)
9874                 warn_deprecated_use (deptype, NULL_TREE);
9875             }
9876
9877           /* Top-level qualifiers on the parameters are
9878              ignored for function types.  */
9879           type = cp_build_qualified_type (type, 0);
9880           if (TREE_CODE (type) == METHOD_TYPE)
9881             {
9882               error ("parameter %qD invalidly declared method type", decl);
9883               type = build_pointer_type (type);
9884               TREE_TYPE (decl) = type;
9885             }
9886           else if (abstract_virtuals_error (decl, type))
9887             any_error = 1;  /* Seems like a good idea.  */
9888           else if (POINTER_TYPE_P (type))
9889             {
9890               /* [dcl.fct]/6, parameter types cannot contain pointers
9891                  (references) to arrays of unknown bound.  */
9892               tree t = TREE_TYPE (type);
9893               int ptr = TYPE_PTR_P (type);
9894
9895               while (1)
9896                 {
9897                   if (TYPE_PTR_P (t))
9898                     ptr = 1;
9899                   else if (TREE_CODE (t) != ARRAY_TYPE)
9900                     break;
9901                   else if (!TYPE_DOMAIN (t))
9902                     break;
9903                   t = TREE_TYPE (t);
9904                 }
9905               if (TREE_CODE (t) == ARRAY_TYPE)
9906                 error ("parameter %qD includes %s to array of unknown "
9907                        "bound %qT",
9908                        decl, ptr ? "pointer" : "reference", t);
9909             }
9910
9911           if (any_error)
9912             init = NULL_TREE;
9913           else if (init && !processing_template_decl)
9914             init = check_default_argument (decl, init);
9915         }
9916
9917       if (TREE_CODE (decl) == PARM_DECL
9918           && FUNCTION_PARAMETER_PACK_P (decl)
9919           && TREE_CHAIN (parm)
9920           && TREE_CHAIN (parm) != void_list_node)
9921         error ("parameter packs must be at the end of the parameter list");
9922
9923       TREE_CHAIN (decl) = decls;
9924       decls = decl;
9925       result = tree_cons (init, type, result);
9926     }
9927   decls = nreverse (decls);
9928   result = nreverse (result);
9929   if (parm)
9930     result = chainon (result, void_list_node);
9931   *parms = decls;
9932
9933   return result;
9934 }
9935
9936 \f
9937 /* D is a constructor or overloaded `operator='.
9938
9939    Let T be the class in which D is declared. Then, this function
9940    returns:
9941
9942    -1 if D's is an ill-formed constructor or copy assignment operator
9943       whose first parameter is of type `T'.
9944    0  if D is not a copy constructor or copy assignment
9945       operator.
9946    1  if D is a copy constructor or copy assignment operator whose
9947       first parameter is a reference to non-const qualified T.
9948    2  if D is a copy constructor or copy assignment operator whose
9949       first parameter is a reference to const qualified T.
9950
9951    This function can be used as a predicate. Positive values indicate
9952    a copy constructor and nonzero values indicate a copy assignment
9953    operator.  */
9954
9955 int
9956 copy_fn_p (const_tree d)
9957 {
9958   tree args;
9959   tree arg_type;
9960   int result = 1;
9961
9962   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9963
9964   if (TREE_CODE (d) == TEMPLATE_DECL
9965       || (DECL_TEMPLATE_INFO (d)
9966           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9967     /* Instantiations of template member functions are never copy
9968        functions.  Note that member functions of templated classes are
9969        represented as template functions internally, and we must
9970        accept those as copy functions.  */
9971     return 0;
9972
9973   args = FUNCTION_FIRST_USER_PARMTYPE (d);
9974   if (!args)
9975     return 0;
9976
9977   arg_type = TREE_VALUE (args);
9978   if (arg_type == error_mark_node)
9979     return 0;
9980
9981   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
9982     {
9983       /* Pass by value copy assignment operator.  */
9984       result = -1;
9985     }
9986   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
9987            && !TYPE_REF_IS_RVALUE (arg_type)
9988            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
9989     {
9990       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
9991         result = 2;
9992     }
9993   else
9994     return 0;
9995
9996   args = TREE_CHAIN (args);
9997
9998   if (args && args != void_list_node && !TREE_PURPOSE (args))
9999     /* There are more non-optional args.  */
10000     return 0;
10001
10002   return result;
10003 }
10004
10005 /* D is a constructor or overloaded `operator='.
10006
10007    Let T be the class in which D is declared. Then, this function
10008    returns true when D is a move constructor or move assignment
10009    operator, false otherwise.  */
10010
10011 bool
10012 move_fn_p (const_tree d)
10013 {
10014   tree args;
10015   tree arg_type;
10016   bool result = false;
10017
10018   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10019
10020   if (cxx_dialect == cxx98)
10021     /* There are no move constructors if we are in C++98 mode.  */
10022     return false;
10023
10024   if (TREE_CODE (d) == TEMPLATE_DECL
10025       || (DECL_TEMPLATE_INFO (d)
10026          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10027     /* Instantiations of template member functions are never copy
10028        functions.  Note that member functions of templated classes are
10029        represented as template functions internally, and we must
10030        accept those as copy functions.  */
10031     return 0;
10032
10033   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10034   if (!args)
10035     return 0;
10036
10037   arg_type = TREE_VALUE (args);
10038   if (arg_type == error_mark_node)
10039     return 0;
10040
10041   if (TREE_CODE (arg_type) == REFERENCE_TYPE
10042       && TYPE_REF_IS_RVALUE (arg_type)
10043       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
10044                       DECL_CONTEXT (d)))
10045     result = true;
10046
10047   args = TREE_CHAIN (args);
10048
10049   if (args && args != void_list_node && !TREE_PURPOSE (args))
10050     /* There are more non-optional args.  */
10051     return false;
10052
10053   return result;
10054 }
10055
10056 /* Remember any special properties of member function DECL.  */
10057
10058 void
10059 grok_special_member_properties (tree decl)
10060 {
10061   tree class_type;
10062
10063   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10064     return;
10065
10066   class_type = DECL_CONTEXT (decl);
10067   if (DECL_CONSTRUCTOR_P (decl))
10068     {
10069       int ctor = copy_fn_p (decl);
10070
10071       if (!DECL_ARTIFICIAL (decl))
10072         TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
10073
10074       if (ctor > 0)
10075         {
10076           /* [class.copy]
10077
10078              A non-template constructor for class X is a copy
10079              constructor if its first parameter is of type X&, const
10080              X&, volatile X& or const volatile X&, and either there
10081              are no other parameters or else all other parameters have
10082              default arguments.  */
10083           TYPE_HAS_INIT_REF (class_type) = 1;
10084           if (user_provided_p (decl))
10085             TYPE_HAS_COMPLEX_INIT_REF (class_type) = 1;
10086           if (ctor > 1)
10087             TYPE_HAS_CONST_INIT_REF (class_type) = 1;
10088         }
10089       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
10090         {
10091           TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
10092           if (user_provided_p (decl))
10093             TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10094         }
10095       else if (is_list_ctor (decl))
10096         TYPE_HAS_LIST_CTOR (class_type) = 1;
10097     }
10098   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10099     {
10100       /* [class.copy]
10101
10102          A non-template assignment operator for class X is a copy
10103          assignment operator if its parameter is of type X, X&, const
10104          X&, volatile X& or const volatile X&.  */
10105
10106       int assop = copy_fn_p (decl);
10107
10108       if (assop)
10109         {
10110           TYPE_HAS_ASSIGN_REF (class_type) = 1;
10111           if (user_provided_p (decl))
10112             TYPE_HAS_COMPLEX_ASSIGN_REF (class_type) = 1;
10113           if (assop != 1)
10114             TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
10115         }
10116     }
10117 }
10118
10119 /* Check a constructor DECL has the correct form.  Complains
10120    if the class has a constructor of the form X(X).  */
10121
10122 int
10123 grok_ctor_properties (const_tree ctype, const_tree decl)
10124 {
10125   int ctor_parm = copy_fn_p (decl);
10126
10127   if (ctor_parm < 0)
10128     {
10129       /* [class.copy]
10130
10131          A declaration of a constructor for a class X is ill-formed if
10132          its first parameter is of type (optionally cv-qualified) X
10133          and either there are no other parameters or else all other
10134          parameters have default arguments.
10135
10136          We *don't* complain about member template instantiations that
10137          have this form, though; they can occur as we try to decide
10138          what constructor to use during overload resolution.  Since
10139          overload resolution will never prefer such a constructor to
10140          the non-template copy constructor (which is either explicitly
10141          or implicitly defined), there's no need to worry about their
10142          existence.  Theoretically, they should never even be
10143          instantiated, but that's hard to forestall.  */
10144       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
10145                 ctype, ctype);
10146       return 0;
10147     }
10148
10149   return 1;
10150 }
10151
10152 /* An operator with this code is unary, but can also be binary.  */
10153
10154 static int
10155 ambi_op_p (enum tree_code code)
10156 {
10157   return (code == INDIRECT_REF
10158           || code == ADDR_EXPR
10159           || code == UNARY_PLUS_EXPR
10160           || code == NEGATE_EXPR
10161           || code == PREINCREMENT_EXPR
10162           || code == PREDECREMENT_EXPR);
10163 }
10164
10165 /* An operator with this name can only be unary.  */
10166
10167 static int
10168 unary_op_p (enum tree_code code)
10169 {
10170   return (code == TRUTH_NOT_EXPR
10171           || code == BIT_NOT_EXPR
10172           || code == COMPONENT_REF
10173           || code == TYPE_EXPR);
10174 }
10175
10176 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
10177    errors are issued for invalid declarations.  */
10178
10179 bool
10180 grok_op_properties (tree decl, bool complain)
10181 {
10182   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
10183   tree argtype;
10184   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10185   tree name = DECL_NAME (decl);
10186   enum tree_code operator_code;
10187   int arity;
10188   bool ellipsis_p;
10189   tree class_type;
10190
10191   /* Count the number of arguments and check for ellipsis.  */
10192   for (argtype = argtypes, arity = 0;
10193        argtype && argtype != void_list_node;
10194        argtype = TREE_CHAIN (argtype))
10195     ++arity;
10196   ellipsis_p = !argtype;
10197
10198   class_type = DECL_CONTEXT (decl);
10199   if (class_type && !CLASS_TYPE_P (class_type))
10200     class_type = NULL_TREE;
10201
10202   if (DECL_CONV_FN_P (decl))
10203     operator_code = TYPE_EXPR;
10204   else
10205     do
10206       {
10207 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
10208         if (ansi_opname (CODE) == name)                         \
10209           {                                                     \
10210             operator_code = (CODE);                             \
10211             break;                                              \
10212           }                                                     \
10213         else if (ansi_assopname (CODE) == name)                 \
10214           {                                                     \
10215             operator_code = (CODE);                             \
10216             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
10217             break;                                              \
10218           }
10219
10220 #include "operators.def"
10221 #undef DEF_OPERATOR
10222
10223         gcc_unreachable ();
10224       }
10225     while (0);
10226   gcc_assert (operator_code != MAX_TREE_CODES);
10227   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10228
10229   if (class_type)
10230     switch (operator_code)
10231       {
10232       case NEW_EXPR:
10233         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
10234         break;
10235
10236       case DELETE_EXPR:
10237         TYPE_GETS_DELETE (class_type) |= 1;
10238         break;
10239
10240       case VEC_NEW_EXPR:
10241         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
10242         break;
10243
10244       case VEC_DELETE_EXPR:
10245         TYPE_GETS_DELETE (class_type) |= 2;
10246         break;
10247
10248       default:
10249         break;
10250       }
10251
10252     /* [basic.std.dynamic.allocation]/1:
10253
10254        A program is ill-formed if an allocation function is declared
10255        in a namespace scope other than global scope or declared static
10256        in global scope.
10257
10258        The same also holds true for deallocation functions.  */
10259   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
10260       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10261     {
10262       if (DECL_NAMESPACE_SCOPE_P (decl))
10263         {
10264           if (CP_DECL_CONTEXT (decl) != global_namespace)
10265             {
10266               error ("%qD may not be declared within a namespace", decl);
10267               return false;
10268             }
10269           else if (!TREE_PUBLIC (decl))
10270             {
10271               error ("%qD may not be declared as static", decl);
10272               return false;
10273             }
10274         }
10275     }
10276
10277   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
10278     {
10279       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10280       DECL_IS_OPERATOR_NEW (decl) = 1;
10281     }
10282   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10283     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
10284   else
10285     {
10286       /* An operator function must either be a non-static member function
10287          or have at least one parameter of a class, a reference to a class,
10288          an enumeration, or a reference to an enumeration.  13.4.0.6 */
10289       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
10290         {
10291           if (operator_code == TYPE_EXPR
10292               || operator_code == CALL_EXPR
10293               || operator_code == COMPONENT_REF
10294               || operator_code == ARRAY_REF
10295               || operator_code == NOP_EXPR)
10296             {
10297               if (class_type && LAMBDA_TYPE_P (class_type))
10298                 /* Lambdas can have static op() and conv ops.  */;
10299               else
10300                 {
10301                   error ("%qD must be a nonstatic member function", decl);
10302                   return false;
10303                 }
10304             }
10305           else
10306             {
10307               tree p;
10308
10309               if (DECL_STATIC_FUNCTION_P (decl))
10310                 {
10311                   error ("%qD must be either a non-static member "
10312                          "function or a non-member function", decl);
10313                   return false;
10314                 }
10315
10316               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
10317                 {
10318                   tree arg = non_reference (TREE_VALUE (p));
10319                   if (arg == error_mark_node)
10320                     return false;
10321
10322                   /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
10323                      because these checks are performed even on
10324                      template functions.  */
10325                   if (MAYBE_CLASS_TYPE_P (arg)
10326                       || TREE_CODE (arg) == ENUMERAL_TYPE)
10327                     break;
10328                 }
10329
10330               if (!p || p == void_list_node)
10331                 {
10332                   if (complain)
10333                     error ("%qD must have an argument of class or "
10334                            "enumerated type", decl);
10335                   return false;
10336                 }
10337             }
10338         }
10339
10340       /* There are no restrictions on the arguments to an overloaded
10341          "operator ()".  */
10342       if (operator_code == CALL_EXPR)
10343         return true;
10344
10345       /* Warn about conversion operators that will never be used.  */
10346       if (IDENTIFIER_TYPENAME_P (name)
10347           && ! DECL_TEMPLATE_INFO (decl)
10348           && warn_conversion
10349           /* Warn only declaring the function; there is no need to
10350              warn again about out-of-class definitions.  */
10351           && class_type == current_class_type)
10352         {
10353           tree t = TREE_TYPE (name);
10354           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
10355           const char *what = 0;
10356
10357           if (ref)
10358             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
10359
10360           if (TREE_CODE (t) == VOID_TYPE)
10361             what = "void";
10362           else if (class_type)
10363             {
10364               if (t == class_type)
10365                 what = "the same type";
10366               /* Don't force t to be complete here.  */
10367               else if (MAYBE_CLASS_TYPE_P (t)
10368                        && COMPLETE_TYPE_P (t)
10369                        && DERIVED_FROM_P (t, class_type))
10370                 what = "a base class";
10371             }
10372
10373           if (what)
10374             warning (OPT_Wconversion, "conversion to %s%s will never use a type "
10375                      "conversion operator",
10376                      ref ? "a reference to " : "", what);
10377         }
10378
10379       if (operator_code == COND_EXPR)
10380         {
10381           /* 13.4.0.3 */
10382           error ("ISO C++ prohibits overloading operator ?:");
10383           return false;
10384         }
10385       else if (ellipsis_p)
10386         {
10387           error ("%qD must not have variable number of arguments", decl);
10388           return false;
10389         }
10390       else if (ambi_op_p (operator_code))
10391         {
10392           if (arity == 1)
10393             /* We pick the one-argument operator codes by default, so
10394                we don't have to change anything.  */
10395             ;
10396           else if (arity == 2)
10397             {
10398               /* If we thought this was a unary operator, we now know
10399                  it to be a binary operator.  */
10400               switch (operator_code)
10401                 {
10402                 case INDIRECT_REF:
10403                   operator_code = MULT_EXPR;
10404                   break;
10405
10406                 case ADDR_EXPR:
10407                   operator_code = BIT_AND_EXPR;
10408                   break;
10409
10410                 case UNARY_PLUS_EXPR:
10411                   operator_code = PLUS_EXPR;
10412                   break;
10413
10414                 case NEGATE_EXPR:
10415                   operator_code = MINUS_EXPR;
10416                   break;
10417
10418                 case PREINCREMENT_EXPR:
10419                   operator_code = POSTINCREMENT_EXPR;
10420                   break;
10421
10422                 case PREDECREMENT_EXPR:
10423                   operator_code = POSTDECREMENT_EXPR;
10424                   break;
10425
10426                 default:
10427                   gcc_unreachable ();
10428                 }
10429
10430               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10431
10432               if ((operator_code == POSTINCREMENT_EXPR
10433                    || operator_code == POSTDECREMENT_EXPR)
10434                   && ! processing_template_decl
10435                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
10436                 {
10437                   if (methodp)
10438                     error ("postfix %qD must take %<int%> as its argument",
10439                            decl);
10440                   else
10441                     error ("postfix %qD must take %<int%> as its second "
10442                            "argument", decl);
10443                   return false;
10444                 }
10445             }
10446           else
10447             {
10448               if (methodp)
10449                 error ("%qD must take either zero or one argument", decl);
10450               else
10451                 error ("%qD must take either one or two arguments", decl);
10452               return false;
10453             }
10454
10455           /* More Effective C++ rule 6.  */
10456           if (warn_ecpp
10457               && (operator_code == POSTINCREMENT_EXPR
10458                   || operator_code == POSTDECREMENT_EXPR
10459                   || operator_code == PREINCREMENT_EXPR
10460                   || operator_code == PREDECREMENT_EXPR))
10461             {
10462               tree arg = TREE_VALUE (argtypes);
10463               tree ret = TREE_TYPE (TREE_TYPE (decl));
10464               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10465                 arg = TREE_TYPE (arg);
10466               arg = TYPE_MAIN_VARIANT (arg);
10467               if (operator_code == PREINCREMENT_EXPR
10468                   || operator_code == PREDECREMENT_EXPR)
10469                 {
10470                   if (TREE_CODE (ret) != REFERENCE_TYPE
10471                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10472                                        arg))
10473                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
10474                              build_reference_type (arg));
10475                 }
10476               else
10477                 {
10478                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
10479                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
10480                 }
10481             }
10482         }
10483       else if (unary_op_p (operator_code))
10484         {
10485           if (arity != 1)
10486             {
10487               if (methodp)
10488                 error ("%qD must take %<void%>", decl);
10489               else
10490                 error ("%qD must take exactly one argument", decl);
10491               return false;
10492             }
10493         }
10494       else /* if (binary_op_p (operator_code)) */
10495         {
10496           if (arity != 2)
10497             {
10498               if (methodp)
10499                 error ("%qD must take exactly one argument", decl);
10500               else
10501                 error ("%qD must take exactly two arguments", decl);
10502               return false;
10503             }
10504
10505           /* More Effective C++ rule 7.  */
10506           if (warn_ecpp
10507               && (operator_code == TRUTH_ANDIF_EXPR
10508                   || operator_code == TRUTH_ORIF_EXPR
10509                   || operator_code == COMPOUND_EXPR))
10510             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
10511                      decl);
10512         }
10513
10514       /* Effective C++ rule 23.  */
10515       if (warn_ecpp
10516           && arity == 2
10517           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
10518           && (operator_code == PLUS_EXPR
10519               || operator_code == MINUS_EXPR
10520               || operator_code == TRUNC_DIV_EXPR
10521               || operator_code == MULT_EXPR
10522               || operator_code == TRUNC_MOD_EXPR)
10523           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
10524         warning (OPT_Weffc__, "%qD should return by value", decl);
10525
10526       /* [over.oper]/8 */
10527       for (; argtypes && argtypes != void_list_node;
10528           argtypes = TREE_CHAIN (argtypes))
10529         if (TREE_PURPOSE (argtypes))
10530           {
10531             TREE_PURPOSE (argtypes) = NULL_TREE;
10532             if (operator_code == POSTINCREMENT_EXPR
10533                 || operator_code == POSTDECREMENT_EXPR)
10534               {
10535                 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments", 
10536                          decl);
10537               }
10538             else
10539               {
10540                 error ("%qD cannot have default arguments", decl);
10541                 return false;
10542               }
10543           }
10544     }
10545   return true;
10546 }
10547 \f
10548 /* Return a string giving the keyword associate with CODE.  */
10549
10550 static const char *
10551 tag_name (enum tag_types code)
10552 {
10553   switch (code)
10554     {
10555     case record_type:
10556       return "struct";
10557     case class_type:
10558       return "class";
10559     case union_type:
10560       return "union";
10561     case enum_type:
10562       return "enum";
10563     case typename_type:
10564       return "typename";
10565     default:
10566       gcc_unreachable ();
10567     }
10568 }
10569
10570 /* Name lookup in an elaborated-type-specifier (after the keyword
10571    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
10572    elaborated-type-specifier is invalid, issue a diagnostic and return
10573    error_mark_node; otherwise, return the *_TYPE to which it referred.
10574    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
10575
10576 tree
10577 check_elaborated_type_specifier (enum tag_types tag_code,
10578                                  tree decl,
10579                                  bool allow_template_p)
10580 {
10581   tree type;
10582
10583   /* In the case of:
10584
10585        struct S { struct S *p; };
10586
10587      name lookup will find the TYPE_DECL for the implicit "S::S"
10588      typedef.  Adjust for that here.  */
10589   if (DECL_SELF_REFERENCE_P (decl))
10590     decl = TYPE_NAME (TREE_TYPE (decl));
10591
10592   type = TREE_TYPE (decl);
10593
10594   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10595      is false for this case as well.  */
10596   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10597     {
10598       error ("using template type parameter %qT after %qs",
10599              type, tag_name (tag_code));
10600       return error_mark_node;
10601     }
10602   /*   [dcl.type.elab]
10603
10604        If the identifier resolves to a typedef-name or a template
10605        type-parameter, the elaborated-type-specifier is ill-formed.
10606
10607      In other words, the only legitimate declaration to use in the
10608      elaborated type specifier is the implicit typedef created when
10609      the type is declared.  */
10610   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
10611            && tag_code != typename_type)
10612     {
10613       error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
10614       error ("%q+D has a previous declaration here", decl);
10615       return error_mark_node;
10616     }
10617   else if (TREE_CODE (type) != RECORD_TYPE
10618            && TREE_CODE (type) != UNION_TYPE
10619            && tag_code != enum_type
10620            && tag_code != typename_type)
10621     {
10622       error ("%qT referred to as %qs", type, tag_name (tag_code));
10623       error ("%q+T has a previous declaration here", type);
10624       return error_mark_node;
10625     }
10626   else if (TREE_CODE (type) != ENUMERAL_TYPE
10627            && tag_code == enum_type)
10628     {
10629       error ("%qT referred to as enum", type);
10630       error ("%q+T has a previous declaration here", type);
10631       return error_mark_node;
10632     }
10633   else if (!allow_template_p
10634            && TREE_CODE (type) == RECORD_TYPE
10635            && CLASSTYPE_IS_TEMPLATE (type))
10636     {
10637       /* If a class template appears as elaborated type specifier
10638          without a template header such as:
10639
10640            template <class T> class C {};
10641            void f(class C);             // No template header here
10642
10643          then the required template argument is missing.  */
10644       error ("template argument required for %<%s %T%>",
10645              tag_name (tag_code),
10646              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
10647       return error_mark_node;
10648     }
10649
10650   return type;
10651 }
10652
10653 /* Lookup NAME in elaborate type specifier in scope according to
10654    SCOPE and issue diagnostics if necessary.
10655    Return *_TYPE node upon success, NULL_TREE when the NAME is not
10656    found, and ERROR_MARK_NODE for type error.  */
10657
10658 static tree
10659 lookup_and_check_tag (enum tag_types tag_code, tree name,
10660                       tag_scope scope, bool template_header_p)
10661 {
10662   tree t;
10663   tree decl;
10664   if (scope == ts_global)
10665     {
10666       /* First try ordinary name lookup, ignoring hidden class name
10667          injected via friend declaration.  */
10668       decl = lookup_name_prefer_type (name, 2);
10669       /* If that fails, the name will be placed in the smallest
10670          non-class, non-function-prototype scope according to 3.3.1/5.
10671          We may already have a hidden name declared as friend in this
10672          scope.  So lookup again but not ignoring hidden names.
10673          If we find one, that name will be made visible rather than
10674          creating a new tag.  */
10675       if (!decl)
10676         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10677     }
10678   else
10679     decl = lookup_type_scope (name, scope);
10680
10681   if (decl && DECL_CLASS_TEMPLATE_P (decl))
10682     decl = DECL_TEMPLATE_RESULT (decl);
10683
10684   if (decl && TREE_CODE (decl) == TYPE_DECL)
10685     {
10686       /* Look for invalid nested type:
10687            class C {
10688              class C {};
10689            };  */
10690       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
10691         {
10692           error ("%qD has the same name as the class in which it is "
10693                  "declared",
10694                  decl);
10695           return error_mark_node;
10696         }
10697
10698       /* Two cases we need to consider when deciding if a class
10699          template is allowed as an elaborated type specifier:
10700          1. It is a self reference to its own class.
10701          2. It comes with a template header.
10702
10703          For example:
10704
10705            template <class T> class C {
10706              class C *c1;               // DECL_SELF_REFERENCE_P is true
10707              class D;
10708            };
10709            template <class U> class C; // template_header_p is true
10710            template <class T> class C<T>::D {
10711              class C *c2;               // DECL_SELF_REFERENCE_P is true
10712            };  */
10713
10714       t = check_elaborated_type_specifier (tag_code,
10715                                            decl,
10716                                            template_header_p
10717                                            | DECL_SELF_REFERENCE_P (decl));
10718       return t;
10719     }
10720   else if (decl && TREE_CODE (decl) == TREE_LIST)
10721     {
10722       error ("reference to %qD is ambiguous", name);
10723       print_candidates (decl);
10724       return error_mark_node;
10725     }
10726   else
10727     return NULL_TREE;
10728 }
10729
10730 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
10731    Define the tag as a forward-reference if it is not defined.
10732
10733    If a declaration is given, process it here, and report an error if
10734    multiple declarations are not identical.
10735
10736    SCOPE is TS_CURRENT when this is also a definition.  Only look in
10737    the current frame for the name (since C++ allows new names in any
10738    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
10739    declaration.  Only look beginning from the current scope outward up
10740    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
10741
10742    TEMPLATE_HEADER_P is true when this declaration is preceded by
10743    a set of template parameters.  */
10744
10745 tree
10746 xref_tag (enum tag_types tag_code, tree name,
10747           tag_scope scope, bool template_header_p)
10748 {
10749   enum tree_code code;
10750   tree t;
10751   tree context = NULL_TREE;
10752
10753   timevar_push (TV_NAME_LOOKUP);
10754
10755   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
10756
10757   switch (tag_code)
10758     {
10759     case record_type:
10760     case class_type:
10761       code = RECORD_TYPE;
10762       break;
10763     case union_type:
10764       code = UNION_TYPE;
10765       break;
10766     case enum_type:
10767       code = ENUMERAL_TYPE;
10768       break;
10769     default:
10770       gcc_unreachable ();
10771     }
10772
10773   /* In case of anonymous name, xref_tag is only called to
10774      make type node and push name.  Name lookup is not required.  */
10775   if (ANON_AGGRNAME_P (name))
10776     t = NULL_TREE;
10777   else
10778     t = lookup_and_check_tag  (tag_code, name,
10779                                scope, template_header_p);
10780
10781   if (t == error_mark_node)
10782     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10783
10784   if (scope != ts_current && t && current_class_type
10785       && template_class_depth (current_class_type)
10786       && template_header_p)
10787     {
10788       /* Since SCOPE is not TS_CURRENT, we are not looking at a
10789          definition of this tag.  Since, in addition, we are currently
10790          processing a (member) template declaration of a template
10791          class, we must be very careful; consider:
10792
10793            template <class X>
10794            struct S1
10795
10796            template <class U>
10797            struct S2
10798            { template <class V>
10799            friend struct S1; };
10800
10801          Here, the S2::S1 declaration should not be confused with the
10802          outer declaration.  In particular, the inner version should
10803          have a template parameter of level 2, not level 1.  This
10804          would be particularly important if the member declaration
10805          were instead:
10806
10807            template <class V = U> friend struct S1;
10808
10809          say, when we should tsubst into `U' when instantiating
10810          S2.  On the other hand, when presented with:
10811
10812            template <class T>
10813            struct S1 {
10814              template <class U>
10815              struct S2 {};
10816              template <class U>
10817              friend struct S2;
10818            };
10819
10820          we must find the inner binding eventually.  We
10821          accomplish this by making sure that the new type we
10822          create to represent this declaration has the right
10823          TYPE_CONTEXT.  */
10824       context = TYPE_CONTEXT (t);
10825       t = NULL_TREE;
10826     }
10827
10828   if (! t)
10829     {
10830       /* If no such tag is yet defined, create a forward-reference node
10831          and record it as the "definition".
10832          When a real declaration of this type is found,
10833          the forward-reference will be altered into a real type.  */
10834       if (code == ENUMERAL_TYPE)
10835         {
10836           error ("use of enum %q#D without previous declaration", name);
10837           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10838         }
10839       else
10840         {
10841           t = make_class_type (code);
10842           TYPE_CONTEXT (t) = context;
10843           t = pushtag (name, t, scope);
10844         }
10845     }
10846   else
10847     {
10848       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
10849         {
10850           if (!redeclare_class_template (t, current_template_parms))
10851             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10852         }
10853       else if (!processing_template_decl
10854                && CLASS_TYPE_P (t)
10855                && CLASSTYPE_IS_TEMPLATE (t))
10856         {
10857           error ("redeclaration of %qT as a non-template", t);
10858           error ("previous declaration %q+D", t);
10859           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10860         }
10861
10862       /* Make injected friend class visible.  */
10863       if (scope != ts_within_enclosing_non_class
10864           && hidden_name_p (TYPE_NAME (t)))
10865         {
10866           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
10867           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
10868
10869           if (TYPE_TEMPLATE_INFO (t))
10870             {
10871               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
10872               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
10873             }
10874         }
10875     }
10876
10877   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
10878 }
10879
10880 tree
10881 xref_tag_from_type (tree old, tree id, tag_scope scope)
10882 {
10883   enum tag_types tag_kind;
10884
10885   if (TREE_CODE (old) == RECORD_TYPE)
10886     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
10887   else
10888     tag_kind  = union_type;
10889
10890   if (id == NULL_TREE)
10891     id = TYPE_IDENTIFIER (old);
10892
10893   return xref_tag (tag_kind, id, scope, false);
10894 }
10895
10896 /* Create the binfo hierarchy for REF with (possibly NULL) base list
10897    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
10898    access_* node, and the TREE_VALUE is the type of the base-class.
10899    Non-NULL TREE_TYPE indicates virtual inheritance.  
10900  
10901    Returns true if the binfo hierarchy was successfully created,
10902    false if an error was detected. */
10903
10904 bool
10905 xref_basetypes (tree ref, tree base_list)
10906 {
10907   tree *basep;
10908   tree binfo, base_binfo;
10909   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
10910   unsigned max_bases = 0;  /* Maximum direct bases.  */
10911   int i;
10912   tree default_access;
10913   tree igo_prev; /* Track Inheritance Graph Order.  */
10914
10915   if (ref == error_mark_node)
10916     return false;
10917
10918   /* The base of a derived class is private by default, all others are
10919      public.  */
10920   default_access = (TREE_CODE (ref) == RECORD_TYPE
10921                     && CLASSTYPE_DECLARED_CLASS (ref)
10922                     ? access_private_node : access_public_node);
10923
10924   /* First, make sure that any templates in base-classes are
10925      instantiated.  This ensures that if we call ourselves recursively
10926      we do not get confused about which classes are marked and which
10927      are not.  */
10928   basep = &base_list;
10929   while (*basep)
10930     {
10931       tree basetype = TREE_VALUE (*basep);
10932
10933       if (!(processing_template_decl && uses_template_parms (basetype))
10934           && !complete_type_or_else (basetype, NULL))
10935         /* An incomplete type.  Remove it from the list.  */
10936         *basep = TREE_CHAIN (*basep);
10937       else
10938         {
10939           max_bases++;
10940           if (TREE_TYPE (*basep))
10941             max_vbases++;
10942           if (CLASS_TYPE_P (basetype))
10943             max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
10944           basep = &TREE_CHAIN (*basep);
10945         }
10946     }
10947
10948   TYPE_MARKED_P (ref) = 1;
10949
10950   /* The binfo slot should be empty, unless this is an (ill-formed)
10951      redefinition.  */
10952   gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
10953   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
10954
10955   binfo = make_tree_binfo (max_bases);
10956
10957   TYPE_BINFO (ref) = binfo;
10958   BINFO_OFFSET (binfo) = size_zero_node;
10959   BINFO_TYPE (binfo) = ref;
10960
10961   /* Apply base-class info set up to the variants of this type.  */
10962   fixup_type_variants (ref);
10963
10964   if (max_bases)
10965     {
10966       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
10967       /* An aggregate cannot have baseclasses.  */
10968       CLASSTYPE_NON_AGGREGATE (ref) = 1;
10969
10970       if (TREE_CODE (ref) == UNION_TYPE)
10971         {
10972           error ("derived union %qT invalid", ref);
10973           return false;
10974         }
10975     }
10976
10977   if (max_bases > 1)
10978     {
10979       if (TYPE_FOR_JAVA (ref))
10980         {
10981           error ("Java class %qT cannot have multiple bases", ref);
10982           return false;
10983         }
10984     }
10985
10986   if (max_vbases)
10987     {
10988       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
10989
10990       if (TYPE_FOR_JAVA (ref))
10991         {
10992           error ("Java class %qT cannot have virtual bases", ref);
10993           return false;
10994         }
10995     }
10996
10997   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
10998     {
10999       tree access = TREE_PURPOSE (base_list);
11000       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
11001       tree basetype = TREE_VALUE (base_list);
11002
11003       if (access == access_default_node)
11004         access = default_access;
11005
11006       if (PACK_EXPANSION_P (basetype))
11007         basetype = PACK_EXPANSION_PATTERN (basetype);
11008       if (TREE_CODE (basetype) == TYPE_DECL)
11009         basetype = TREE_TYPE (basetype);
11010       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
11011         {
11012           error ("base type %qT fails to be a struct or class type",
11013                  basetype);
11014           return false;
11015         }
11016
11017       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
11018         TYPE_FOR_JAVA (ref) = 1;
11019
11020       base_binfo = NULL_TREE;
11021       if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
11022         {
11023           base_binfo = TYPE_BINFO (basetype);
11024           /* The original basetype could have been a typedef'd type.  */
11025           basetype = BINFO_TYPE (base_binfo);
11026
11027           /* Inherit flags from the base.  */
11028           TYPE_HAS_NEW_OPERATOR (ref)
11029             |= TYPE_HAS_NEW_OPERATOR (basetype);
11030           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
11031             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
11032           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
11033           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
11034           CLASSTYPE_DIAMOND_SHAPED_P (ref)
11035             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
11036           CLASSTYPE_REPEATED_BASE_P (ref)
11037             |= CLASSTYPE_REPEATED_BASE_P (basetype);
11038         }
11039
11040       /* We must do this test after we've seen through a typedef
11041          type.  */
11042       if (TYPE_MARKED_P (basetype))
11043         {
11044           if (basetype == ref)
11045             error ("recursive type %qT undefined", basetype);
11046           else
11047             error ("duplicate base type %qT invalid", basetype);
11048           return false;
11049         }
11050
11051       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
11052         /* Regenerate the pack expansion for the bases. */
11053         basetype = make_pack_expansion (basetype);
11054
11055       TYPE_MARKED_P (basetype) = 1;
11056
11057       base_binfo = copy_binfo (base_binfo, basetype, ref,
11058                                &igo_prev, via_virtual);
11059       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
11060         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
11061
11062       BINFO_BASE_APPEND (binfo, base_binfo);
11063       BINFO_BASE_ACCESS_APPEND (binfo, access);
11064     }
11065
11066   if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
11067     /* If we have space in the vbase vector, we must have shared at
11068        least one of them, and are therefore diamond shaped.  */
11069     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
11070
11071   /* Unmark all the types.  */
11072   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
11073     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11074   TYPE_MARKED_P (ref) = 0;
11075
11076   /* Now see if we have a repeated base type.  */
11077   if (!CLASSTYPE_REPEATED_BASE_P (ref))
11078     {
11079       for (base_binfo = binfo; base_binfo;
11080            base_binfo = TREE_CHAIN (base_binfo))
11081         {
11082           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11083             {
11084               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11085               break;
11086             }
11087           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11088         }
11089       for (base_binfo = binfo; base_binfo;
11090            base_binfo = TREE_CHAIN (base_binfo))
11091         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11092           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11093         else
11094           break;
11095     }
11096
11097   return true;
11098 }
11099
11100 \f
11101 /* Begin compiling the definition of an enumeration type.
11102    NAME is its name, 
11103
11104    UNDERLYING_TYPE is the type that will be used as the storage for
11105    the enumeration type. This should be NULL_TREE if no storage type
11106    was specified.
11107
11108    SCOPED_ENUM_P is true if this is a scoped enumeration type.
11109
11110    Returns the type object, as yet incomplete.
11111    Also records info about it so that build_enumerator
11112    may be used to declare the individual values as they are read.  */
11113
11114 tree
11115 start_enum (tree name, tree underlying_type, bool scoped_enum_p)
11116 {
11117   tree enumtype;
11118
11119   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11120
11121   /* If this is the real definition for a previous forward reference,
11122      fill in the contents in the same object that used to be the
11123      forward reference.  */
11124
11125   enumtype = lookup_and_check_tag (enum_type, name,
11126                                    /*tag_scope=*/ts_current,
11127                                    /*template_header_p=*/false);
11128
11129   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
11130     {
11131       error_at (input_location, "multiple definition of %q#T", enumtype);
11132       error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11133                 "previous definition here");
11134       /* Clear out TYPE_VALUES, and start again.  */
11135       TYPE_VALUES (enumtype) = NULL_TREE;
11136     }
11137   else
11138     {
11139       /* In case of error, make a dummy enum to allow parsing to
11140          continue.  */
11141       if (enumtype == error_mark_node)
11142         name = make_anon_name ();
11143
11144       enumtype = cxx_make_type (ENUMERAL_TYPE);
11145       enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
11146     }
11147
11148   if (enumtype == error_mark_node)
11149     return enumtype;
11150
11151   if (scoped_enum_p)
11152     {
11153       SET_SCOPED_ENUM_P (enumtype, 1);
11154       begin_scope (sk_scoped_enum, enumtype);
11155
11156       /* [C++0x dcl.enum]p5: 
11157
11158           If not explicitly specified, the underlying type of a scoped
11159           enumeration type is int.  */
11160       if (!underlying_type)
11161         underlying_type = integer_type_node;
11162     }
11163
11164   if (underlying_type)
11165     {
11166       if (CP_INTEGRAL_TYPE_P (underlying_type))
11167         {
11168           TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (underlying_type);
11169           TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (underlying_type);
11170           TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11171           TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11172           SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
11173           TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11174           TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11175           TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11176           TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11177           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11178         }
11179       else if (!dependent_type_p (underlying_type))
11180         error ("underlying type %<%T%> of %<%T%> must be an integral type", 
11181                underlying_type, enumtype);
11182     }
11183
11184   return enumtype;
11185 }
11186
11187 /* After processing and defining all the values of an enumeration type,
11188    install their decls in the enumeration type and finish it off.
11189    ENUMTYPE is the type object and VALUES a list of name-value pairs.  */
11190
11191 void
11192 finish_enum (tree enumtype)
11193 {
11194   tree values;
11195   tree decl;
11196   tree minnode;
11197   tree maxnode;
11198   tree value;
11199   tree t;
11200   bool unsignedp;
11201   bool use_short_enum;
11202   int lowprec;
11203   int highprec;
11204   int precision;
11205   unsigned int itk;
11206   tree underlying_type = NULL_TREE;
11207   bool fixed_underlying_type_p 
11208     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
11209
11210   /* We built up the VALUES in reverse order.  */
11211   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
11212
11213   /* For an enum defined in a template, just set the type of the values;
11214      all further processing is postponed until the template is
11215      instantiated.  We need to set the type so that tsubst of a CONST_DECL
11216      works.  */
11217   if (processing_template_decl)
11218     {
11219       for (values = TYPE_VALUES (enumtype);
11220            values;
11221            values = TREE_CHAIN (values))
11222         TREE_TYPE (TREE_VALUE (values)) = enumtype;
11223       if (at_function_scope_p ())
11224         add_stmt (build_min (TAG_DEFN, enumtype));
11225       if (SCOPED_ENUM_P (enumtype))
11226         finish_scope ();
11227       return;
11228     }
11229
11230   /* Determine the minimum and maximum values of the enumerators.  */
11231   if (TYPE_VALUES (enumtype))
11232     {
11233       minnode = maxnode = NULL_TREE;
11234
11235       for (values = TYPE_VALUES (enumtype);
11236            values;
11237            values = TREE_CHAIN (values))
11238         {
11239           decl = TREE_VALUE (values);
11240
11241           /* [dcl.enum]: Following the closing brace of an enum-specifier,
11242              each enumerator has the type of its enumeration.  Prior to the
11243              closing brace, the type of each enumerator is the type of its
11244              initializing value.  */
11245           TREE_TYPE (decl) = enumtype;
11246
11247           /* Update the minimum and maximum values, if appropriate.  */
11248           value = DECL_INITIAL (decl);
11249           if (value == error_mark_node)
11250             value = integer_zero_node;
11251           /* Figure out what the minimum and maximum values of the
11252              enumerators are.  */
11253           if (!minnode)
11254             minnode = maxnode = value;
11255           else if (tree_int_cst_lt (maxnode, value))
11256             maxnode = value;
11257           else if (tree_int_cst_lt (value, minnode))
11258             minnode = value;
11259         }
11260     }
11261   else
11262     /* [dcl.enum]
11263        
11264        If the enumerator-list is empty, the underlying type is as if
11265        the enumeration had a single enumerator with value 0.  */
11266     minnode = maxnode = integer_zero_node;
11267
11268   /* Compute the number of bits require to represent all values of the
11269      enumeration.  We must do this before the type of MINNODE and
11270      MAXNODE are transformed, since tree_int_cst_min_precision relies
11271      on the TREE_TYPE of the value it is passed.  */
11272   unsignedp = tree_int_cst_sgn (minnode) >= 0;
11273   lowprec = tree_int_cst_min_precision (minnode, unsignedp);
11274   highprec = tree_int_cst_min_precision (maxnode, unsignedp);
11275   precision = MAX (lowprec, highprec);
11276
11277   if (!fixed_underlying_type_p)
11278     {
11279       /* Determine the underlying type of the enumeration.
11280
11281          [dcl.enum]
11282
11283          The underlying type of an enumeration is an integral type that
11284          can represent all the enumerator values defined in the
11285          enumeration.  It is implementation-defined which integral type is
11286          used as the underlying type for an enumeration except that the
11287          underlying type shall not be larger than int unless the value of
11288          an enumerator cannot fit in an int or unsigned int.
11289
11290          We use "int" or an "unsigned int" as the underlying type, even if
11291          a smaller integral type would work, unless the user has
11292          explicitly requested that we use the smallest possible type.  The
11293          user can request that for all enumerations with a command line
11294          flag, or for just one enumeration with an attribute.  */
11295
11296       use_short_enum = flag_short_enums
11297         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
11298
11299       for (itk = (use_short_enum ? itk_char : itk_int);
11300            itk != itk_none;
11301            itk++)
11302         {
11303           underlying_type = integer_types[itk];
11304           if (TYPE_PRECISION (underlying_type) >= precision
11305               && TYPE_UNSIGNED (underlying_type) == unsignedp)
11306             break;
11307         }
11308       if (itk == itk_none)
11309         {
11310           /* DR 377
11311
11312              IF no integral type can represent all the enumerator values, the
11313              enumeration is ill-formed.  */
11314           error ("no integral type can represent all of the enumerator values "
11315                  "for %qT", enumtype);
11316           precision = TYPE_PRECISION (long_long_integer_type_node);
11317           underlying_type = integer_types[itk_unsigned_long_long];
11318         }
11319
11320       /* [dcl.enum]
11321
11322          The value of sizeof() applied to an enumeration type, an object
11323          of an enumeration type, or an enumerator, is the value of sizeof()
11324          applied to the underlying type.  */
11325       TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11326       TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11327       SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
11328       TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11329       TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11330       TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11331
11332       /* Set the underlying type of the enumeration type to the
11333          computed enumeration type, restricted to the enumerator
11334          values. */
11335       ENUM_UNDERLYING_TYPE (enumtype)
11336         = build_distinct_type_copy (underlying_type);
11337       set_min_and_max_values_for_integral_type 
11338         (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
11339     }
11340   else
11341     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
11342
11343   /* Compute the minimum and maximum values for the type.
11344
11345      [dcl.enum]
11346
11347      For an enumeration where emin is the smallest enumerator and emax
11348      is the largest, the values of the enumeration are the values of the
11349      underlying type in the range bmin to bmax, where bmin and bmax are,
11350      respectively, the smallest and largest values of the smallest bit-
11351      field that can store emin and emax.  */
11352   
11353   /* The middle-end currently assumes that types with TYPE_PRECISION
11354      narrower than their underlying type are suitably zero or sign
11355      extended to fill their mode.  g++ doesn't make these guarantees.
11356      Until the middle-end can represent such paradoxical types, we
11357      set the TYPE_PRECISION to the width of the underlying type.  */
11358   TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11359   
11360   set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
11361   
11362   /* Convert each of the enumerators to the type of the underlying
11363      type of the enumeration.  */
11364   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
11365     {
11366       location_t saved_location;
11367
11368       decl = TREE_VALUE (values);
11369       saved_location = input_location;
11370       input_location = DECL_SOURCE_LOCATION (decl);
11371       if (fixed_underlying_type_p)
11372         /* If the enumeration type has a fixed underlying type, we
11373            already checked all of the enumerator values.  */
11374         value = DECL_INITIAL (decl);
11375       else
11376         value = perform_implicit_conversion (underlying_type,
11377                                              DECL_INITIAL (decl),
11378                                              tf_warning_or_error);
11379       input_location = saved_location;
11380
11381       /* Do not clobber shared ints.  */
11382       value = copy_node (value);
11383
11384       TREE_TYPE (value) = enumtype;
11385       DECL_INITIAL (decl) = value;
11386     }
11387
11388   /* Fix up all variant types of this enum type.  */
11389   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
11390     {
11391       TYPE_VALUES (t) = TYPE_VALUES (enumtype);
11392       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
11393       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
11394       TYPE_SIZE (t) = TYPE_SIZE (enumtype);
11395       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
11396       SET_TYPE_MODE (t, TYPE_MODE (enumtype));
11397       TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
11398       TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
11399       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
11400       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
11401       ENUM_UNDERLYING_TYPE (t) = ENUM_UNDERLYING_TYPE (enumtype);
11402     }
11403
11404   /* Finish up the scope of a scoped enumeration.  */
11405   if (SCOPED_ENUM_P (enumtype))
11406     finish_scope ();
11407
11408   /* Finish debugging output for this type.  */
11409   rest_of_type_compilation (enumtype, namespace_bindings_p ());
11410 }
11411
11412 /* Build and install a CONST_DECL for an enumeration constant of the
11413    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
11414    Assignment of sequential values by default is handled here.  */
11415
11416 void
11417 build_enumerator (tree name, tree value, tree enumtype)
11418 {
11419   tree decl;
11420   tree context;
11421   tree type;
11422
11423   /* If the VALUE was erroneous, pretend it wasn't there; that will
11424      result in the enum being assigned the next value in sequence.  */
11425   if (value == error_mark_node)
11426     value = NULL_TREE;
11427
11428   /* Remove no-op casts from the value.  */
11429   if (value)
11430     STRIP_TYPE_NOPS (value);
11431
11432   if (! processing_template_decl)
11433     {
11434       /* Validate and default VALUE.  */
11435       if (value != NULL_TREE)
11436         {
11437           value = integral_constant_value (value);
11438
11439           if (TREE_CODE (value) == INTEGER_CST)
11440             {
11441               value = perform_integral_promotions (value);
11442               constant_expression_warning (value);
11443             }
11444           else
11445             {
11446               error ("enumerator value for %qD is not an integer constant", name);
11447               value = NULL_TREE;
11448             }
11449         }
11450
11451       /* Default based on previous value.  */
11452       if (value == NULL_TREE)
11453         {
11454           if (TYPE_VALUES (enumtype))
11455             {
11456               HOST_WIDE_INT hi;
11457               unsigned HOST_WIDE_INT lo;
11458               tree prev_value;
11459               bool overflowed;
11460
11461               /* The next value is the previous value plus one.
11462                  add_double doesn't know the type of the target expression,
11463                  so we must check with int_fits_type_p as well.  */
11464               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
11465               if (error_operand_p (prev_value))
11466                 value = error_mark_node;
11467               else
11468                 {
11469                   overflowed = add_double (TREE_INT_CST_LOW (prev_value),
11470                                            TREE_INT_CST_HIGH (prev_value),
11471                                            1, 0, &lo, &hi);
11472                   value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
11473                   overflowed
11474                     |= !int_fits_type_p (value, TREE_TYPE (prev_value));
11475
11476                   if (overflowed)
11477                     {
11478                       error ("overflow in enumeration values at %qD", name);
11479                       value = error_mark_node;
11480                     }
11481                 }
11482             }
11483           else
11484             value = integer_zero_node;
11485         }
11486
11487       /* Remove no-op casts from the value.  */
11488       STRIP_TYPE_NOPS (value);
11489
11490       /* If the underlying type of the enum is fixed, check whether
11491          the enumerator values fits in the underlying type.  If it
11492          does not fit, the program is ill-formed [C++0x dcl.enum].  */
11493       if (ENUM_UNDERLYING_TYPE (enumtype)
11494           && value
11495           && TREE_CODE (value) == INTEGER_CST
11496           && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
11497         {
11498           error ("enumerator value %E is too large for underlying type %<%T%>",
11499                  value, ENUM_UNDERLYING_TYPE (enumtype));
11500
11501           /* Silently convert the value so that we can continue.  */
11502           value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
11503                                                value, tf_none);
11504         }
11505     }
11506
11507   /* C++ associates enums with global, function, or class declarations.  */
11508   context = current_scope ();
11509
11510   /* Build the actual enumeration constant.  Note that the enumeration
11511      constants have the underlying type of the enum (if it is fixed)
11512      or the type of their initializer (if the underlying type of the
11513      enum is not fixed):
11514
11515       [ C++0x dcl.enum ]
11516
11517         If the underlying type is fixed, the type of each enumerator
11518         prior to the closing brace is the underlying type; if the
11519         initializing value of an enumerator cannot be represented by
11520         the underlying type, the program is ill-formed. If the
11521         underlying type is not fixed, the type of each enumerator is
11522         the type of its initializing value.
11523
11524     If the underlying type is not fixed, it will be computed by
11525     finish_enum and we will reset the type of this enumerator.  Of
11526     course, if we're processing a template, there may be no value.  */
11527   type = value ? TREE_TYPE (value) : NULL_TREE;
11528
11529   if (context && context == current_class_type)
11530     /* This enum declaration is local to the class.  We need the full
11531        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
11532     decl = build_lang_decl (CONST_DECL, name, type);
11533   else
11534     /* It's a global enum, or it's local to a function.  (Note local to
11535       a function could mean local to a class method.  */
11536     decl = build_decl (input_location, CONST_DECL, name, type);
11537
11538   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
11539   TREE_CONSTANT (decl) = 1;
11540   TREE_READONLY (decl) = 1;
11541   DECL_INITIAL (decl) = value;
11542
11543   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
11544     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
11545        on the TYPE_FIELDS list for `S'.  (That's so that you can say
11546        things like `S::i' later.)  */
11547     finish_member_declaration (decl);
11548   else
11549     pushdecl (decl);
11550
11551   /* Add this enumeration constant to the list for this type.  */
11552   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
11553 }
11554
11555 /* Look for an enumerator with the given NAME within the enumeration
11556    type ENUMTYPE.  This routine is used primarily for qualified name
11557    lookup into an enumerator in C++0x, e.g.,
11558
11559      enum class Color { Red, Green, Blue };
11560
11561      Color color = Color::Red;
11562
11563    Returns the value corresponding to the enumerator, or
11564    NULL_TREE if no such enumerator was found.  */
11565 tree
11566 lookup_enumerator (tree enumtype, tree name)
11567 {
11568   tree e;
11569   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
11570
11571   e = purpose_member (name, TYPE_VALUES (enumtype));
11572   return e? TREE_VALUE (e) : NULL_TREE;
11573 }
11574
11575 \f
11576 /* We're defining DECL.  Make sure that its type is OK.  */
11577
11578 static void
11579 check_function_type (tree decl, tree current_function_parms)
11580 {
11581   tree fntype = TREE_TYPE (decl);
11582   tree return_type = complete_type (TREE_TYPE (fntype));
11583
11584   /* In a function definition, arg types must be complete.  */
11585   require_complete_types_for_parms (current_function_parms);
11586
11587   /* constexpr functions must have literal argument types and
11588      literal return type.  */
11589   validate_constexpr_fundecl (decl);
11590
11591   if (dependent_type_p (return_type))
11592     return;
11593   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
11594       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
11595     {
11596       tree args = TYPE_ARG_TYPES (fntype);
11597
11598       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
11599         error ("return type %q#T is incomplete", return_type);
11600       else
11601         error ("return type has Java class type %q#T", return_type);
11602
11603       /* Make it return void instead.  */
11604       if (TREE_CODE (fntype) == METHOD_TYPE)
11605         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
11606                                              void_type_node,
11607                                              TREE_CHAIN (args));
11608       else
11609         fntype = build_function_type (void_type_node, args);
11610       fntype
11611         = build_exception_variant (fntype,
11612                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
11613       fntype = (cp_build_type_attribute_variant
11614                 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
11615       TREE_TYPE (decl) = fntype;
11616     }
11617   else
11618     abstract_virtuals_error (decl, TREE_TYPE (fntype));
11619 }
11620
11621 /* Create the FUNCTION_DECL for a function definition.
11622    DECLSPECS and DECLARATOR are the parts of the declaration;
11623    they describe the function's name and the type it returns,
11624    but twisted together in a fashion that parallels the syntax of C.
11625
11626    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
11627    DECLARATOR is really the DECL for the function we are about to
11628    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
11629    indicating that the function is an inline defined in-class.
11630
11631    This function creates a binding context for the function body
11632    as well as setting up the FUNCTION_DECL in current_function_decl.
11633
11634    For C++, we must first check whether that datum makes any sense.
11635    For example, "class A local_a(1,2);" means that variable local_a
11636    is an aggregate of type A, which should have a constructor
11637    applied to it with the argument list [1, 2].
11638
11639    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
11640    or may be a BLOCK if the function has been defined previously
11641    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
11642    error_mark_node if the function has never been defined, or
11643    a BLOCK if the function has been defined somewhere.  */
11644
11645 void
11646 start_preparsed_function (tree decl1, tree attrs, int flags)
11647 {
11648   tree ctype = NULL_TREE;
11649   tree fntype;
11650   tree restype;
11651   int doing_friend = 0;
11652   struct cp_binding_level *bl;
11653   tree current_function_parms;
11654   struct c_fileinfo *finfo
11655     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
11656   bool honor_interface;
11657
11658   /* Sanity check.  */
11659   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
11660   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
11661
11662   fntype = TREE_TYPE (decl1);
11663   if (TREE_CODE (fntype) == METHOD_TYPE)
11664     ctype = TYPE_METHOD_BASETYPE (fntype);
11665
11666   /* ISO C++ 11.4/5.  A friend function defined in a class is in
11667      the (lexical) scope of the class in which it is defined.  */
11668   if (!ctype && DECL_FRIEND_P (decl1))
11669     {
11670       ctype = DECL_FRIEND_CONTEXT (decl1);
11671
11672       /* CTYPE could be null here if we're dealing with a template;
11673          for example, `inline friend float foo()' inside a template
11674          will have no CTYPE set.  */
11675       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11676         ctype = NULL_TREE;
11677       else
11678         doing_friend = 1;
11679     }
11680
11681   if (DECL_DECLARED_INLINE_P (decl1)
11682       && lookup_attribute ("noinline", attrs))
11683     warning (0, "inline function %q+D given attribute noinline", decl1);
11684
11685   /* Handle gnu_inline attribute.  */
11686   if (GNU_INLINE_P (decl1))
11687     {
11688       DECL_EXTERNAL (decl1) = 1;
11689       DECL_NOT_REALLY_EXTERN (decl1) = 0;
11690       DECL_INTERFACE_KNOWN (decl1) = 1;
11691       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
11692     }
11693
11694   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
11695     /* This is a constructor, we must ensure that any default args
11696        introduced by this definition are propagated to the clones
11697        now. The clones are used directly in overload resolution.  */
11698     adjust_clone_args (decl1);
11699
11700   /* Sometimes we don't notice that a function is a static member, and
11701      build a METHOD_TYPE for it.  Fix that up now.  */
11702   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
11703       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
11704     {
11705       revert_static_member_fn (decl1);
11706       ctype = NULL_TREE;
11707     }
11708
11709   /* Set up current_class_type, and enter the scope of the class, if
11710      appropriate.  */
11711   if (ctype)
11712     push_nested_class (ctype);
11713   else if (DECL_STATIC_FUNCTION_P (decl1))
11714     push_nested_class (DECL_CONTEXT (decl1));
11715
11716   /* Now that we have entered the scope of the class, we must restore
11717      the bindings for any template parameters surrounding DECL1, if it
11718      is an inline member template.  (Order is important; consider the
11719      case where a template parameter has the same name as a field of
11720      the class.)  It is not until after this point that
11721      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
11722   if (flags & SF_INCLASS_INLINE)
11723     maybe_begin_member_template_processing (decl1);
11724
11725   /* Effective C++ rule 15.  */
11726   if (warn_ecpp
11727       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
11728       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
11729     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
11730
11731   /* Make the init_value nonzero so pushdecl knows this is not tentative.
11732      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
11733   if (!DECL_INITIAL (decl1))
11734     DECL_INITIAL (decl1) = error_mark_node;
11735
11736   /* This function exists in static storage.
11737      (This does not mean `static' in the C sense!)  */
11738   TREE_STATIC (decl1) = 1;
11739
11740   /* We must call push_template_decl after current_class_type is set
11741      up.  (If we are processing inline definitions after exiting a
11742      class scope, current_class_type will be NULL_TREE until set above
11743      by push_nested_class.)  */
11744   if (processing_template_decl)
11745     {
11746       /* FIXME: Handle error_mark_node more gracefully.  */
11747       tree newdecl1 = push_template_decl (decl1);
11748       if (newdecl1 != error_mark_node)
11749         decl1 = newdecl1;
11750     }
11751
11752   /* We are now in the scope of the function being defined.  */
11753   current_function_decl = decl1;
11754
11755   /* Save the parm names or decls from this function's declarator
11756      where store_parm_decls will find them.  */
11757   current_function_parms = DECL_ARGUMENTS (decl1);
11758
11759   /* Make sure the parameter and return types are reasonable.  When
11760      you declare a function, these types can be incomplete, but they
11761      must be complete when you define the function.  */
11762   check_function_type (decl1, current_function_parms);
11763
11764   /* Build the return declaration for the function.  */
11765   restype = TREE_TYPE (fntype);
11766   if (DECL_RESULT (decl1) == NULL_TREE)
11767     {
11768       tree resdecl;
11769
11770       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
11771       DECL_ARTIFICIAL (resdecl) = 1;
11772       DECL_IGNORED_P (resdecl) = 1;
11773       DECL_RESULT (decl1) = resdecl;
11774
11775       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
11776     }
11777
11778   /* Let the user know we're compiling this function.  */
11779   announce_function (decl1);
11780
11781   /* Record the decl so that the function name is defined.
11782      If we already have a decl for this name, and it is a FUNCTION_DECL,
11783      use the old decl.  */
11784   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
11785     {
11786       /* A specialization is not used to guide overload resolution.  */
11787       if (!DECL_FUNCTION_MEMBER_P (decl1)
11788           && !(DECL_USE_TEMPLATE (decl1) &&
11789                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
11790         {
11791           tree olddecl = pushdecl (decl1);
11792
11793           if (olddecl == error_mark_node)
11794             /* If something went wrong when registering the declaration,
11795                use DECL1; we have to have a FUNCTION_DECL to use when
11796                parsing the body of the function.  */
11797             ;
11798           else
11799             {
11800               /* Otherwise, OLDDECL is either a previous declaration
11801                  of the same function or DECL1 itself.  */
11802
11803               if (warn_missing_declarations
11804                   && olddecl == decl1
11805                   && !DECL_MAIN_P (decl1)
11806                   && TREE_PUBLIC (decl1)
11807                   && !DECL_DECLARED_INLINE_P (decl1))
11808                 {
11809                   tree context;
11810
11811                   /* Check whether DECL1 is in an anonymous
11812                      namespace.  */
11813                   for (context = DECL_CONTEXT (decl1);
11814                        context;
11815                        context = DECL_CONTEXT (context))
11816                     {
11817                       if (TREE_CODE (context) == NAMESPACE_DECL
11818                           && DECL_NAME (context) == NULL_TREE)
11819                         break;
11820                     }
11821
11822                   if (context == NULL)
11823                     warning (OPT_Wmissing_declarations,
11824                              "no previous declaration for %q+D", decl1);
11825                 }
11826
11827               decl1 = olddecl;
11828             }
11829         }
11830       else
11831         {
11832           /* We need to set the DECL_CONTEXT.  */
11833           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
11834             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
11835         }
11836       fntype = TREE_TYPE (decl1);
11837
11838       /* If #pragma weak applies, mark the decl appropriately now.
11839          The pragma only applies to global functions.  Because
11840          determining whether or not the #pragma applies involves
11841          computing the mangled name for the declaration, we cannot
11842          apply the pragma until after we have merged this declaration
11843          with any previous declarations; if the original declaration
11844          has a linkage specification, that specification applies to
11845          the definition as well, and may affect the mangled name.  */
11846       if (!DECL_CONTEXT (decl1))
11847         maybe_apply_pragma_weak (decl1);
11848     }
11849
11850   /* Reset this in case the call to pushdecl changed it.  */
11851   current_function_decl = decl1;
11852
11853   gcc_assert (DECL_INITIAL (decl1));
11854
11855   /* This function may already have been parsed, in which case just
11856      return; our caller will skip over the body without parsing.  */
11857   if (DECL_INITIAL (decl1) != error_mark_node)
11858     return;
11859
11860   /* Initialize RTL machinery.  We cannot do this until
11861      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
11862      even when processing a template; this is how we get
11863      CFUN set up, and our per-function variables initialized.
11864      FIXME factor out the non-RTL stuff.  */
11865   bl = current_binding_level;
11866   allocate_struct_function (decl1, processing_template_decl);
11867
11868   /* Initialize the language data structures.  Whenever we start
11869      a new function, we destroy temporaries in the usual way.  */
11870   cfun->language = GGC_CNEW (struct language_function);
11871   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11872   current_binding_level = bl;
11873
11874   /* Even though we're inside a function body, we still don't want to
11875      call expand_expr to calculate the size of a variable-sized array.
11876      We haven't necessarily assigned RTL to all variables yet, so it's
11877      not safe to try to expand expressions involving them.  */
11878   cfun->dont_save_pending_sizes_p = 1;
11879
11880   /* Start the statement-tree, start the tree now.  */
11881   DECL_SAVED_TREE (decl1) = push_stmt_list ();
11882
11883   /* If we are (erroneously) defining a function that we have already
11884      defined before, wipe out what we knew before.  */
11885   if (!DECL_PENDING_INLINE_P (decl1))
11886     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
11887
11888   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
11889     {
11890       /* We know that this was set up by `grokclassfn'.  We do not
11891          wait until `store_parm_decls', since evil parse errors may
11892          never get us to that point.  Here we keep the consistency
11893          between `current_class_type' and `current_class_ptr'.  */
11894       tree t = DECL_ARGUMENTS (decl1);
11895
11896       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
11897       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
11898
11899       cp_function_chain->x_current_class_ref
11900         = cp_build_indirect_ref (t, NULL, tf_warning_or_error);
11901       cp_function_chain->x_current_class_ptr = t;
11902
11903       /* Constructors and destructors need to know whether they're "in
11904          charge" of initializing virtual base classes.  */
11905       t = TREE_CHAIN (t);
11906       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
11907         {
11908           current_in_charge_parm = t;
11909           t = TREE_CHAIN (t);
11910         }
11911       if (DECL_HAS_VTT_PARM_P (decl1))
11912         {
11913           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
11914           current_vtt_parm = t;
11915         }
11916     }
11917
11918   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
11919                      /* Implicitly-defined methods (like the
11920                         destructor for a class in which no destructor
11921                         is explicitly declared) must not be defined
11922                         until their definition is needed.  So, we
11923                         ignore interface specifications for
11924                         compiler-generated functions.  */
11925                      && !DECL_ARTIFICIAL (decl1));
11926
11927   if (DECL_INTERFACE_KNOWN (decl1))
11928     {
11929       tree ctx = decl_function_context (decl1);
11930
11931       if (DECL_NOT_REALLY_EXTERN (decl1))
11932         DECL_EXTERNAL (decl1) = 0;
11933
11934       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
11935           && TREE_PUBLIC (ctx))
11936         /* This is a function in a local class in an extern inline
11937            function.  */
11938         comdat_linkage (decl1);
11939     }
11940   /* If this function belongs to an interface, it is public.
11941      If it belongs to someone else's interface, it is also external.
11942      This only affects inlines and template instantiations.  */
11943   else if (!finfo->interface_unknown && honor_interface)
11944     {
11945       if (DECL_DECLARED_INLINE_P (decl1)
11946           || DECL_TEMPLATE_INSTANTIATION (decl1)
11947           || processing_template_decl)
11948         {
11949           DECL_EXTERNAL (decl1)
11950             = (finfo->interface_only
11951                || (DECL_DECLARED_INLINE_P (decl1)
11952                    && ! flag_implement_inlines
11953                    && !DECL_VINDEX (decl1)));
11954
11955           /* For WIN32 we also want to put these in linkonce sections.  */
11956           maybe_make_one_only (decl1);
11957         }
11958       else
11959         DECL_EXTERNAL (decl1) = 0;
11960       DECL_INTERFACE_KNOWN (decl1) = 1;
11961       /* If this function is in an interface implemented in this file,
11962          make sure that the back end knows to emit this function
11963          here.  */
11964       if (!DECL_EXTERNAL (decl1))
11965         mark_needed (decl1);
11966     }
11967   else if (finfo->interface_unknown && finfo->interface_only
11968            && honor_interface)
11969     {
11970       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
11971          interface, we will have both finfo->interface_unknown and
11972          finfo->interface_only set.  In that case, we don't want to
11973          use the normal heuristics because someone will supply a
11974          #pragma implementation elsewhere, and deducing it here would
11975          produce a conflict.  */
11976       comdat_linkage (decl1);
11977       DECL_EXTERNAL (decl1) = 0;
11978       DECL_INTERFACE_KNOWN (decl1) = 1;
11979       DECL_DEFER_OUTPUT (decl1) = 1;
11980     }
11981   else
11982     {
11983       /* This is a definition, not a reference.
11984          So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
11985       if (!GNU_INLINE_P (decl1))
11986         DECL_EXTERNAL (decl1) = 0;
11987
11988       if ((DECL_DECLARED_INLINE_P (decl1)
11989            || DECL_TEMPLATE_INSTANTIATION (decl1))
11990           && ! DECL_INTERFACE_KNOWN (decl1)
11991           /* Don't try to defer nested functions for now.  */
11992           && ! decl_function_context (decl1))
11993         DECL_DEFER_OUTPUT (decl1) = 1;
11994       else
11995         DECL_INTERFACE_KNOWN (decl1) = 1;
11996     }
11997
11998   /* Determine the ELF visibility attribute for the function.  We must not
11999      do this before calling "pushdecl", as we must allow "duplicate_decls"
12000      to merge any attributes appropriately.  We also need to wait until
12001      linkage is set.  */
12002   if (!DECL_CLONED_FUNCTION_P (decl1))
12003     determine_visibility (decl1);
12004
12005   begin_scope (sk_function_parms, decl1);
12006
12007   ++function_depth;
12008
12009   if (DECL_DESTRUCTOR_P (decl1)
12010       || (DECL_CONSTRUCTOR_P (decl1)
12011           && targetm.cxx.cdtor_returns_this ()))
12012     {
12013       cdtor_label = build_decl (input_location, 
12014                                 LABEL_DECL, NULL_TREE, NULL_TREE);
12015       DECL_CONTEXT (cdtor_label) = current_function_decl;
12016     }
12017
12018   start_fname_decls ();
12019
12020   store_parm_decls (current_function_parms);
12021 }
12022
12023
12024 /* Like start_preparsed_function, except that instead of a
12025    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
12026
12027    Returns 1 on success.  If the DECLARATOR is not suitable for a function
12028    (it defines a datum instead), we return 0, which tells
12029    yyparse to report a parse error.  */
12030
12031 int
12032 start_function (cp_decl_specifier_seq *declspecs,
12033                 const cp_declarator *declarator,
12034                 tree attrs)
12035 {
12036   tree decl1;
12037
12038   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
12039   if (decl1 == error_mark_node)
12040     return 0;
12041   /* If the declarator is not suitable for a function definition,
12042      cause a syntax error.  */
12043   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
12044     {
12045       error ("invalid function declaration");
12046       return 0;
12047     }
12048
12049   if (DECL_MAIN_P (decl1))
12050     /* main must return int.  grokfndecl should have corrected it
12051        (and issued a diagnostic) if the user got it wrong.  */
12052     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
12053                              integer_type_node));
12054
12055   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
12056
12057   return 1;
12058 }
12059 \f
12060 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
12061    FN.  */
12062
12063 static bool
12064 use_eh_spec_block (tree fn)
12065 {
12066   return (flag_exceptions && flag_enforce_eh_specs
12067           && !processing_template_decl
12068           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
12069           /* We insert the EH_SPEC_BLOCK only in the original
12070              function; then, it is copied automatically to the
12071              clones.  */
12072           && !DECL_CLONED_FUNCTION_P (fn)
12073           /* Implicitly-generated constructors and destructors have
12074              exception specifications.  However, those specifications
12075              are the union of the possible exceptions specified by the
12076              constructors/destructors for bases and members, so no
12077              unallowed exception will ever reach this function.  By
12078              not creating the EH_SPEC_BLOCK we save a little memory,
12079              and we avoid spurious warnings about unreachable
12080              code.  */
12081           && !DECL_ARTIFICIAL (fn));
12082 }
12083
12084 /* Store the parameter declarations into the current function declaration.
12085    This is called after parsing the parameter declarations, before
12086    digesting the body of the function.
12087
12088    Also install to binding contour return value identifier, if any.  */
12089
12090 static void
12091 store_parm_decls (tree current_function_parms)
12092 {
12093   tree fndecl = current_function_decl;
12094   tree parm;
12095
12096   /* This is a chain of any other decls that came in among the parm
12097      declarations.  If a parm is declared with  enum {foo, bar} x;
12098      then CONST_DECLs for foo and bar are put here.  */
12099   tree nonparms = NULL_TREE;
12100
12101   if (current_function_parms)
12102     {
12103       /* This case is when the function was defined with an ANSI prototype.
12104          The parms already have decls, so we need not do anything here
12105          except record them as in effect
12106          and complain if any redundant old-style parm decls were written.  */
12107
12108       tree specparms = current_function_parms;
12109       tree next;
12110
12111       /* Must clear this because it might contain TYPE_DECLs declared
12112              at class level.  */
12113       current_binding_level->names = NULL;
12114
12115       /* If we're doing semantic analysis, then we'll call pushdecl
12116              for each of these.  We must do them in reverse order so that
12117              they end in the correct forward order.  */
12118       specparms = nreverse (specparms);
12119
12120       for (parm = specparms; parm; parm = next)
12121         {
12122           next = TREE_CHAIN (parm);
12123           if (TREE_CODE (parm) == PARM_DECL)
12124             {
12125               if (DECL_NAME (parm) == NULL_TREE
12126                   || TREE_CODE (parm) != VOID_TYPE)
12127                 pushdecl (parm);
12128               else
12129                 error ("parameter %qD declared void", parm);
12130             }
12131           else
12132             {
12133               /* If we find an enum constant or a type tag,
12134                  put it aside for the moment.  */
12135               TREE_CHAIN (parm) = NULL_TREE;
12136               nonparms = chainon (nonparms, parm);
12137             }
12138         }
12139
12140       /* Get the decls in their original chain order and record in the
12141          function.  This is all and only the PARM_DECLs that were
12142          pushed into scope by the loop above.  */
12143       DECL_ARGUMENTS (fndecl) = getdecls ();
12144     }
12145   else
12146     DECL_ARGUMENTS (fndecl) = NULL_TREE;
12147
12148   /* Now store the final chain of decls for the arguments
12149      as the decl-chain of the current lexical scope.
12150      Put the enumerators in as well, at the front so that
12151      DECL_ARGUMENTS is not modified.  */
12152   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
12153
12154   if (use_eh_spec_block (current_function_decl))
12155     current_eh_spec_block = begin_eh_spec_block ();
12156 }
12157
12158 \f
12159 /* We have finished doing semantic analysis on DECL, but have not yet
12160    generated RTL for its body.  Save away our current state, so that
12161    when we want to generate RTL later we know what to do.  */
12162
12163 static void
12164 save_function_data (tree decl)
12165 {
12166   struct language_function *f;
12167
12168   /* Save the language-specific per-function data so that we can
12169      get it back when we really expand this function.  */
12170   gcc_assert (!DECL_PENDING_INLINE_P (decl));
12171
12172   /* Make a copy.  */
12173   f = GGC_NEW (struct language_function);
12174   memcpy (f, cp_function_chain, sizeof (struct language_function));
12175   DECL_SAVED_FUNCTION_DATA (decl) = f;
12176
12177   /* Clear out the bits we don't need.  */
12178   f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
12179   f->bindings = NULL;
12180   f->x_local_names = NULL;
12181 }
12182
12183
12184 /* Set the return value of the constructor (if present).  */
12185
12186 static void
12187 finish_constructor_body (void)
12188 {
12189   tree val;
12190   tree exprstmt;
12191
12192   if (targetm.cxx.cdtor_returns_this ()
12193       && (! TYPE_FOR_JAVA (current_class_type)))
12194     {
12195       /* Any return from a constructor will end up here.  */
12196       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
12197
12198       val = DECL_ARGUMENTS (current_function_decl);
12199       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12200                     DECL_RESULT (current_function_decl), val);
12201       /* Return the address of the object.  */
12202       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
12203       add_stmt (exprstmt);
12204     }
12205 }
12206
12207 /* Do all the processing for the beginning of a destructor; set up the
12208    vtable pointers and cleanups for bases and members.  */
12209
12210 static void
12211 begin_destructor_body (void)
12212 {
12213   tree compound_stmt;
12214
12215   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
12216      issued an error message.  We still want to try to process the
12217      body of the function, but initialize_vtbl_ptrs will crash if
12218      TYPE_BINFO is NULL.  */
12219   if (COMPLETE_TYPE_P (current_class_type))
12220     {
12221       compound_stmt = begin_compound_stmt (0);
12222       /* Make all virtual function table pointers in non-virtual base
12223          classes point to CURRENT_CLASS_TYPE's virtual function
12224          tables.  */
12225       initialize_vtbl_ptrs (current_class_ptr);
12226       finish_compound_stmt (compound_stmt);
12227
12228       /* And insert cleanups for our bases and members so that they
12229          will be properly destroyed if we throw.  */
12230       push_base_cleanups ();
12231     }
12232 }
12233
12234 /* At the end of every destructor we generate code to delete the object if
12235    necessary.  Do that now.  */
12236
12237 static void
12238 finish_destructor_body (void)
12239 {
12240   tree exprstmt;
12241
12242   /* Any return from a destructor will end up here; that way all base
12243      and member cleanups will be run when the function returns.  */
12244   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
12245
12246   /* In a virtual destructor, we must call delete.  */
12247   if (DECL_VIRTUAL_P (current_function_decl))
12248     {
12249       tree if_stmt;
12250       tree virtual_size = cxx_sizeof (current_class_type);
12251
12252       /* [class.dtor]
12253
12254       At the point of definition of a virtual destructor (including
12255       an implicit definition), non-placement operator delete shall
12256       be looked up in the scope of the destructor's class and if
12257       found shall be accessible and unambiguous.  */
12258       exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
12259                                       virtual_size,
12260                                       /*global_p=*/false,
12261                                       /*placement=*/NULL_TREE,
12262                                       /*alloc_fn=*/NULL_TREE);
12263
12264       if_stmt = begin_if_stmt ();
12265       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
12266                                    current_in_charge_parm,
12267                                    integer_one_node),
12268                            if_stmt);
12269       finish_expr_stmt (exprstmt);
12270       finish_then_clause (if_stmt);
12271       finish_if_stmt (if_stmt);
12272     }
12273
12274   if (targetm.cxx.cdtor_returns_this ())
12275     {
12276       tree val;
12277
12278       val = DECL_ARGUMENTS (current_function_decl);
12279       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12280                     DECL_RESULT (current_function_decl), val);
12281       /* Return the address of the object.  */
12282       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
12283       add_stmt (exprstmt);
12284     }
12285 }
12286
12287 /* Do the necessary processing for the beginning of a function body, which
12288    in this case includes member-initializers, but not the catch clauses of
12289    a function-try-block.  Currently, this means opening a binding level
12290    for the member-initializers (in a ctor) and member cleanups (in a dtor).  */
12291
12292 tree
12293 begin_function_body (void)
12294 {
12295   tree stmt;
12296
12297   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12298     return NULL_TREE;
12299
12300   if (processing_template_decl)
12301     /* Do nothing now.  */;
12302   else
12303     /* Always keep the BLOCK node associated with the outermost pair of
12304        curly braces of a function.  These are needed for correct
12305        operation of dwarfout.c.  */
12306     keep_next_level (true);
12307
12308   stmt = begin_compound_stmt (BCS_FN_BODY);
12309
12310   if (processing_template_decl)
12311     /* Do nothing now.  */;
12312   else if (DECL_DESTRUCTOR_P (current_function_decl))
12313     begin_destructor_body ();
12314
12315   return stmt;
12316 }
12317
12318 /* Do the processing for the end of a function body.  Currently, this means
12319    closing out the cleanups for fully-constructed bases and members, and in
12320    the case of the destructor, deleting the object if desired.  Again, this
12321    is only meaningful for [cd]tors, since they are the only functions where
12322    there is a significant distinction between the main body and any
12323    function catch clauses.  Handling, say, main() return semantics here
12324    would be wrong, as flowing off the end of a function catch clause for
12325    main() would also need to return 0.  */
12326
12327 void
12328 finish_function_body (tree compstmt)
12329 {
12330   if (compstmt == NULL_TREE)
12331     return;
12332
12333   /* Close the block.  */
12334   finish_compound_stmt (compstmt);
12335
12336   if (processing_template_decl)
12337     /* Do nothing now.  */;
12338   else if (DECL_CONSTRUCTOR_P (current_function_decl))
12339     finish_constructor_body ();
12340   else if (DECL_DESTRUCTOR_P (current_function_decl))
12341     finish_destructor_body ();
12342 }
12343
12344 /* Given a function, returns the BLOCK corresponding to the outermost level
12345    of curly braces, skipping the artificial block created for constructor
12346    initializers.  */
12347
12348 tree
12349 outer_curly_brace_block (tree fndecl)
12350 {
12351   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
12352   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12353     /* Skip the artificial function body block.  */
12354     block = BLOCK_SUBBLOCKS (block);
12355   return block;
12356 }
12357
12358 /* Finish up a function declaration and compile that function
12359    all the way to assembler language output.  The free the storage
12360    for the function definition.
12361
12362    FLAGS is a bitwise or of the following values:
12363      2 - INCLASS_INLINE
12364        We just finished processing the body of an in-class inline
12365        function definition.  (This processing will have taken place
12366        after the class definition is complete.)  */
12367
12368 tree
12369 finish_function (int flags)
12370 {
12371   tree fndecl = current_function_decl;
12372   tree fntype, ctype = NULL_TREE;
12373   int inclass_inline = (flags & 2) != 0;
12374   int nested;
12375
12376   /* When we get some parse errors, we can end up without a
12377      current_function_decl, so cope.  */
12378   if (fndecl == NULL_TREE)
12379     return error_mark_node;
12380
12381   gcc_assert (!defer_mark_used_calls);
12382   defer_mark_used_calls = true;
12383
12384   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
12385       && DECL_VIRTUAL_P (fndecl)
12386       && !processing_template_decl)
12387     {
12388       tree fnclass = DECL_CONTEXT (fndecl);
12389       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
12390         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
12391     }
12392
12393   nested = function_depth > 1;
12394   fntype = TREE_TYPE (fndecl);
12395
12396   /*  TREE_READONLY (fndecl) = 1;
12397       This caused &foo to be of type ptr-to-const-function
12398       which then got a warning when stored in a ptr-to-function variable.  */
12399
12400   gcc_assert (building_stmt_tree ());
12401   /* The current function is being defined, so its DECL_INITIAL should
12402      be set, and unless there's a multiple definition, it should be
12403      error_mark_node.  */
12404   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
12405
12406   /* For a cloned function, we've already got all the code we need;
12407      there's no need to add any extra bits.  */
12408   if (!DECL_CLONED_FUNCTION_P (fndecl))
12409     {
12410       if (DECL_MAIN_P (current_function_decl))
12411         {
12412           tree stmt;
12413
12414           /* Make it so that `main' always returns 0 by default (or
12415              1 for VMS).  */
12416 #if VMS_TARGET
12417           stmt = finish_return_stmt (integer_one_node);
12418 #else
12419           stmt = finish_return_stmt (integer_zero_node);
12420 #endif
12421           /* Hack.  We don't want the middle-end to warn that this
12422              return is unreachable, so put the statement on the
12423              special line 0.  */
12424           {
12425             location_t linezero = linemap_line_start (line_table, 0, 1);
12426             SET_EXPR_LOCATION (stmt, linezero);
12427           }
12428         }
12429
12430       if (use_eh_spec_block (current_function_decl))
12431         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
12432                               (TREE_TYPE (current_function_decl)),
12433                               current_eh_spec_block);
12434     }
12435
12436   /* If we're saving up tree structure, tie off the function now.  */
12437   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
12438
12439   finish_fname_decls ();
12440
12441   /* If this function can't throw any exceptions, remember that.  */
12442   if (!processing_template_decl
12443       && !cp_function_chain->can_throw
12444       && !flag_non_call_exceptions
12445       && !DECL_REPLACEABLE_P (fndecl))
12446     TREE_NOTHROW (fndecl) = 1;
12447
12448   /* This must come after expand_function_end because cleanups might
12449      have declarations (from inline functions) that need to go into
12450      this function's blocks.  */
12451
12452   /* If the current binding level isn't the outermost binding level
12453      for this function, either there is a bug, or we have experienced
12454      syntax errors and the statement tree is malformed.  */
12455   if (current_binding_level->kind != sk_function_parms)
12456     {
12457       /* Make sure we have already experienced errors.  */
12458       gcc_assert (errorcount);
12459
12460       /* Throw away the broken statement tree and extra binding
12461          levels.  */
12462       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
12463
12464       while (current_binding_level->kind != sk_function_parms)
12465         {
12466           if (current_binding_level->kind == sk_class)
12467             pop_nested_class ();
12468           else
12469             poplevel (0, 0, 0);
12470         }
12471     }
12472   poplevel (1, 0, 1);
12473
12474   /* Statements should always be full-expressions at the outermost set
12475      of curly braces for a function.  */
12476   gcc_assert (stmts_are_full_exprs_p ());
12477
12478   /* Set up the named return value optimization, if we can.  Candidate
12479      variables are selected in check_return_expr.  */
12480   if (current_function_return_value)
12481     {
12482       tree r = current_function_return_value;
12483       tree outer;
12484
12485       if (r != error_mark_node
12486           /* This is only worth doing for fns that return in memory--and
12487              simpler, since we don't have to worry about promoted modes.  */
12488           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
12489           /* Only allow this for variables declared in the outer scope of
12490              the function so we know that their lifetime always ends with a
12491              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
12492              we were to do this optimization in tree-ssa.  */
12493           && (outer = outer_curly_brace_block (fndecl))
12494           && chain_member (r, BLOCK_VARS (outer)))
12495         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
12496
12497       current_function_return_value = NULL_TREE;
12498     }
12499
12500   /* Remember that we were in class scope.  */
12501   if (current_class_name)
12502     ctype = current_class_type;
12503
12504   /* Must mark the RESULT_DECL as being in this function.  */
12505   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12506
12507   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12508      to the FUNCTION_DECL node itself.  */
12509   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12510
12511   /* Save away current state, if appropriate.  */
12512   if (!processing_template_decl)
12513     save_function_data (fndecl);
12514
12515   /* Complain if there's just no return statement.  */
12516   if (warn_return_type
12517       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
12518       && !dependent_type_p (TREE_TYPE (fntype))
12519       && !current_function_returns_value && !current_function_returns_null
12520       /* Don't complain if we abort or throw.  */
12521       && !current_function_returns_abnormally
12522       && !DECL_NAME (DECL_RESULT (fndecl))
12523       && !TREE_NO_WARNING (fndecl)
12524       /* Structor return values (if any) are set by the compiler.  */
12525       && !DECL_CONSTRUCTOR_P (fndecl)
12526       && !DECL_DESTRUCTOR_P (fndecl))
12527     {
12528       warning (OPT_Wreturn_type,
12529                "no return statement in function returning non-void");
12530       TREE_NO_WARNING (fndecl) = 1;
12531     }
12532
12533   /* Store the end of the function, so that we get good line number
12534      info for the epilogue.  */
12535   cfun->function_end_locus = input_location;
12536
12537   /* Genericize before inlining.  */
12538   if (!processing_template_decl)
12539     {
12540       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
12541       invoke_plugin_callbacks (PLUGIN_CXX_CP_PRE_GENERICIZE, fndecl);
12542       cp_genericize (fndecl);
12543       /* Clear out the bits we don't need.  */
12544       f->x_current_class_ptr = NULL;
12545       f->x_current_class_ref = NULL;
12546       f->x_eh_spec_block = NULL;
12547       f->x_in_charge_parm = NULL;
12548       f->x_vtt_parm = NULL;
12549       f->x_return_value = NULL;
12550       f->bindings = NULL;
12551       f->extern_decl_map = NULL;
12552     }
12553   /* Clear out the bits we don't need.  */
12554   local_names = NULL;
12555
12556   /* We're leaving the context of this function, so zap cfun.  It's still in
12557      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
12558   set_cfun (NULL);
12559   current_function_decl = NULL;
12560
12561   /* If this is an in-class inline definition, we may have to pop the
12562      bindings for the template parameters that we added in
12563      maybe_begin_member_template_processing when start_function was
12564      called.  */
12565   if (inclass_inline)
12566     maybe_end_member_template_processing ();
12567
12568   /* Leave the scope of the class.  */
12569   if (ctype)
12570     pop_nested_class ();
12571
12572   --function_depth;
12573
12574   /* Clean up.  */
12575   if (! nested)
12576     /* Let the error reporting routines know that we're outside a
12577        function.  For a nested function, this value is used in
12578        cxx_pop_function_context and then reset via pop_function_context.  */
12579     current_function_decl = NULL_TREE;
12580
12581   defer_mark_used_calls = false;
12582   if (deferred_mark_used_calls)
12583     {
12584       unsigned int i;
12585       tree decl;
12586
12587       for (i = 0; VEC_iterate (tree, deferred_mark_used_calls, i, decl); i++)
12588         mark_used (decl);
12589       VEC_free (tree, gc, deferred_mark_used_calls);
12590     }
12591
12592   return fndecl;
12593 }
12594 \f
12595 /* Create the FUNCTION_DECL for a function definition.
12596    DECLSPECS and DECLARATOR are the parts of the declaration;
12597    they describe the return type and the name of the function,
12598    but twisted together in a fashion that parallels the syntax of C.
12599
12600    This function creates a binding context for the function body
12601    as well as setting up the FUNCTION_DECL in current_function_decl.
12602
12603    Returns a FUNCTION_DECL on success.
12604
12605    If the DECLARATOR is not suitable for a function (it defines a datum
12606    instead), we return 0, which tells yyparse to report a parse error.
12607
12608    May return void_type_node indicating that this method is actually
12609    a friend.  See grokfield for more details.
12610
12611    Came here with a `.pushlevel' .
12612
12613    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
12614    CHANGES TO CODE IN `grokfield'.  */
12615
12616 tree
12617 grokmethod (cp_decl_specifier_seq *declspecs,
12618             const cp_declarator *declarator, tree attrlist)
12619 {
12620   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
12621                                 &attrlist);
12622
12623   if (fndecl == error_mark_node)
12624     return error_mark_node;
12625
12626   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
12627     {
12628       error ("invalid member function declaration");
12629       return error_mark_node;
12630     }
12631
12632   if (attrlist)
12633     cplus_decl_attributes (&fndecl, attrlist, 0);
12634
12635   /* Pass friends other than inline friend functions back.  */
12636   if (fndecl == void_type_node)
12637     return fndecl;
12638
12639   if (DECL_IN_AGGR_P (fndecl))
12640     {
12641       if (DECL_CONTEXT (fndecl)
12642           && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
12643         error ("%qD is already defined in class %qT", fndecl,
12644                DECL_CONTEXT (fndecl));
12645       return error_mark_node;
12646     }
12647
12648   check_template_shadow (fndecl);
12649
12650   DECL_DECLARED_INLINE_P (fndecl) = 1;
12651   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
12652
12653   /* We process method specializations in finish_struct_1.  */
12654   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
12655     {
12656       fndecl = push_template_decl (fndecl);
12657       if (fndecl == error_mark_node)
12658         return fndecl;
12659     }
12660
12661   if (! DECL_FRIEND_P (fndecl))
12662     {
12663       if (TREE_CHAIN (fndecl))
12664         {
12665           fndecl = copy_node (fndecl);
12666           TREE_CHAIN (fndecl) = NULL_TREE;
12667         }
12668     }
12669
12670   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
12671
12672   DECL_IN_AGGR_P (fndecl) = 1;
12673   return fndecl;
12674 }
12675 \f
12676
12677 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
12678    we can lay it out later, when and if its type becomes complete.  */
12679
12680 void
12681 maybe_register_incomplete_var (tree var)
12682 {
12683   gcc_assert (TREE_CODE (var) == VAR_DECL);
12684
12685   /* Keep track of variables with incomplete types.  */
12686   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
12687       && DECL_EXTERNAL (var))
12688     {
12689       tree inner_type = TREE_TYPE (var);
12690
12691       while (TREE_CODE (inner_type) == ARRAY_TYPE)
12692         inner_type = TREE_TYPE (inner_type);
12693       inner_type = TYPE_MAIN_VARIANT (inner_type);
12694
12695       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
12696           /* RTTI TD entries are created while defining the type_info.  */
12697           || (TYPE_LANG_SPECIFIC (inner_type)
12698               && TYPE_BEING_DEFINED (inner_type)))
12699         incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
12700     }
12701 }
12702
12703 /* Called when a class type (given by TYPE) is defined.  If there are
12704    any existing VAR_DECLs whose type has been completed by this
12705    declaration, update them now.  */
12706
12707 void
12708 complete_vars (tree type)
12709 {
12710   tree *list = &incomplete_vars;
12711
12712   gcc_assert (CLASS_TYPE_P (type));
12713   while (*list)
12714     {
12715       if (same_type_p (type, TREE_PURPOSE (*list)))
12716         {
12717           tree var = TREE_VALUE (*list);
12718           tree type = TREE_TYPE (var);
12719           /* Complete the type of the variable.  The VAR_DECL itself
12720              will be laid out in expand_expr.  */
12721           complete_type (type);
12722           cp_apply_type_quals_to_decl (cp_type_quals (type), var);
12723           /* Remove this entry from the list.  */
12724           *list = TREE_CHAIN (*list);
12725         }
12726       else
12727         list = &TREE_CHAIN (*list);
12728     }
12729
12730   /* Check for pending declarations which may have abstract type.  */
12731   complete_type_check_abstract (type);
12732 }
12733
12734 /* If DECL is of a type which needs a cleanup, build and return an
12735    expression to perform that cleanup here.  Return NULL_TREE if no
12736    cleanup need be done.  */
12737
12738 tree
12739 cxx_maybe_build_cleanup (tree decl)
12740 {
12741   tree type;
12742   tree attr;
12743   tree cleanup;
12744
12745   /* Assume no cleanup is required.  */
12746   cleanup = NULL_TREE;
12747
12748   if (error_operand_p (decl))
12749     return cleanup;
12750
12751   /* Handle "__attribute__((cleanup))".  We run the cleanup function
12752      before the destructor since the destructor is what actually
12753      terminates the lifetime of the object.  */
12754   attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
12755   if (attr)
12756     {
12757       tree id;
12758       tree fn;
12759       tree arg;
12760
12761       /* Get the name specified by the user for the cleanup function.  */
12762       id = TREE_VALUE (TREE_VALUE (attr));
12763       /* Look up the name to find the cleanup function to call.  It is
12764          important to use lookup_name here because that is what is
12765          used in c-common.c:handle_cleanup_attribute when performing
12766          initial checks on the attribute.  Note that those checks
12767          include ensuring that the function found is not an overloaded
12768          function, or an object with an overloaded call operator,
12769          etc.; we can rely on the fact that the function found is an
12770          ordinary FUNCTION_DECL.  */
12771       fn = lookup_name (id);
12772       arg = build_address (decl);
12773       mark_used (decl);
12774       cleanup = cp_build_function_call (fn, build_tree_list (NULL_TREE,
12775                                                              arg),
12776                                         tf_warning_or_error);
12777     }
12778   /* Handle ordinary C++ destructors.  */
12779   type = TREE_TYPE (decl);
12780   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
12781     {
12782       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
12783       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
12784                          && CLASSTYPE_VBASECLASSES (type));
12785       tree addr;
12786       tree call;
12787
12788       if (TREE_CODE (type) == ARRAY_TYPE)
12789         addr = decl;
12790       else
12791         addr = build_address (decl);
12792
12793       /* Optimize for space over speed here.  */
12794       if (!has_vbases || flag_expensive_optimizations)
12795         flags |= LOOKUP_NONVIRTUAL;
12796
12797       call = build_delete (TREE_TYPE (addr), addr,
12798                            sfk_complete_destructor, flags, 0);
12799       if (cleanup)
12800         cleanup = build_compound_expr (input_location, cleanup, call);
12801       else
12802         cleanup = call;
12803     }
12804
12805   return cleanup;
12806 }
12807 \f
12808 /* When a stmt has been parsed, this function is called.  */
12809
12810 void
12811 finish_stmt (void)
12812 {
12813 }
12814
12815 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
12816    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
12817    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
12818
12819 tree
12820 static_fn_type (tree memfntype)
12821 {
12822   tree fntype;
12823   tree args;
12824   int quals;
12825
12826   if (TYPE_PTRMEMFUNC_P (memfntype))
12827     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
12828   if (POINTER_TYPE_P (memfntype)
12829       || TREE_CODE (memfntype) == FUNCTION_DECL)
12830     memfntype = TREE_TYPE (memfntype);
12831   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
12832     return memfntype;
12833   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
12834   args = TYPE_ARG_TYPES (memfntype);
12835   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
12836   quals = cp_type_quals (TREE_TYPE (TREE_VALUE (args)));
12837   fntype = build_qualified_type (fntype, quals);
12838   fntype = (cp_build_type_attribute_variant
12839             (fntype, TYPE_ATTRIBUTES (memfntype)));
12840   fntype = (build_exception_variant
12841             (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
12842   return fntype;
12843 }
12844
12845 /* DECL was originally constructed as a non-static member function,
12846    but turned out to be static.  Update it accordingly.  */
12847
12848 void
12849 revert_static_member_fn (tree decl)
12850 {
12851   TREE_TYPE (decl) = static_fn_type (decl);
12852
12853   if (cp_type_quals (TREE_TYPE (decl)) != TYPE_UNQUALIFIED)
12854     error ("static member function %q#D declared with type qualifiers", decl);
12855
12856   if (DECL_ARGUMENTS (decl))
12857     DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
12858   DECL_STATIC_FUNCTION_P (decl) = 1;
12859 }
12860
12861 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
12862    one of the language-independent trees.  */
12863
12864 enum cp_tree_node_structure_enum
12865 cp_tree_node_structure (union lang_tree_node * t)
12866 {
12867   switch (TREE_CODE (&t->generic))
12868     {
12869     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
12870     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
12871     case OVERLOAD:              return TS_CP_OVERLOAD;
12872     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
12873     case PTRMEM_CST:            return TS_CP_PTRMEM;
12874     case BASELINK:              return TS_CP_BASELINK;
12875     case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
12876     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
12877     case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
12878     case LAMBDA_EXPR:           return TS_CP_LAMBDA_EXPR;
12879     default:                    return TS_CP_GENERIC;
12880     }
12881 }
12882
12883 /* Build the void_list_node (void_type_node having been created).  */
12884 tree
12885 build_void_list_node (void)
12886 {
12887   tree t = build_tree_list (NULL_TREE, void_type_node);
12888   return t;
12889 }
12890
12891 bool
12892 cp_missing_noreturn_ok_p (tree decl)
12893 {
12894   /* A missing noreturn is ok for the `main' function.  */
12895   return DECL_MAIN_P (decl);
12896 }
12897
12898 /* Return the COMDAT group into which DECL should be placed.  */
12899
12900 tree
12901 cxx_comdat_group (tree decl)
12902 {
12903   tree name;
12904
12905   /* Virtual tables, construction virtual tables, and virtual table
12906      tables all go in a single COMDAT group, named after the primary
12907      virtual table.  */
12908   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
12909     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
12910   /* For all other DECLs, the COMDAT group is the mangled name of the
12911      declaration itself.  */
12912   else
12913     {
12914       while (DECL_THUNK_P (decl))
12915         {
12916           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
12917              into the same section as the target function.  In that case
12918              we must return target's name.  */
12919           tree target = THUNK_TARGET (decl);
12920           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
12921               && DECL_SECTION_NAME (target) != NULL
12922               && DECL_ONE_ONLY (target))
12923             decl = target;
12924           else
12925             break;
12926         }
12927       name = DECL_ASSEMBLER_NAME (decl);
12928     }
12929
12930   return name;
12931 }
12932
12933 #include "gt-cp-decl.h"