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