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