OSDN Git Service

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