OSDN Git Service

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