OSDN Git Service

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