OSDN Git Service

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