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