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