OSDN Git Service

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