2005-05-13 Josh Conner <jconner@apple.com>
[official-gcc.git] / gcc / cp / decl.c
blob15f74c08d3fa92992998a3d183c7ecdbc22065dc
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 Free Software Foundation, Inc.
4 Contributed by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
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. */
28 /* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "rtl.h"
37 #include "expr.h"
38 #include "flags.h"
39 #include "cp-tree.h"
40 #include "tree-inline.h"
41 #include "decl.h"
42 #include "output.h"
43 #include "except.h"
44 #include "toplev.h"
45 #include "hashtab.h"
46 #include "tm_p.h"
47 #include "target.h"
48 #include "c-common.h"
49 #include "c-pragma.h"
50 #include "diagnostic.h"
51 #include "debug.h"
52 #include "timevar.h"
53 #include "tree-flow.h"
55 static tree grokparms (cp_parameter_declarator *, tree *);
56 static const char *redeclaration_error_message (tree, tree);
58 static int decl_jump_unsafe (tree);
59 static void require_complete_types_for_parms (tree);
60 static int ambi_op_p (enum tree_code);
61 static int unary_op_p (enum tree_code);
62 static void push_local_name (tree);
63 static tree grok_reference_init (tree, tree, tree, tree *);
64 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
65 int, int, tree);
66 static void record_unknown_type (tree, const char *);
67 static tree builtin_function_1 (const char *, tree, tree,
68 enum built_in_function code,
69 enum built_in_class cl, const char *,
70 tree);
71 static tree build_library_fn_1 (tree, enum tree_code, tree);
72 static int member_function_or_else (tree, tree, enum overload_flags);
73 static void bad_specifiers (tree, const char *, int, int, int, int,
74 int);
75 static void check_for_uninitialized_const_var (tree);
76 static hashval_t typename_hash (const void *);
77 static int typename_compare (const void *, const void *);
78 static tree local_variable_p_walkfn (tree *, int *, void *);
79 static tree record_builtin_java_type (const char *, int);
80 static const char *tag_name (enum tag_types);
81 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
82 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
83 static tree make_label_decl (tree, int);
84 static void use_label (tree);
85 static void check_previous_goto_1 (tree, struct cp_binding_level *, tree,
86 const location_t *);
87 static void check_previous_goto (struct named_label_use_list *);
88 static void check_switch_goto (struct cp_binding_level *);
89 static void check_previous_gotos (tree);
90 static void pop_label (tree, tree);
91 static void pop_labels (tree);
92 static void maybe_deduce_size_from_array_init (tree, tree);
93 static void layout_var_decl (tree);
94 static void maybe_commonize_var (tree);
95 static tree check_initializer (tree, tree, int, tree *);
96 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
97 static void save_function_data (tree);
98 static void check_function_type (tree, tree);
99 static void finish_constructor_body (void);
100 static void begin_destructor_body (void);
101 static void finish_destructor_body (void);
102 static tree create_array_type_for_decl (tree, tree, tree);
103 static tree get_atexit_node (void);
104 static tree get_dso_handle_node (void);
105 static tree start_cleanup_fn (void);
106 static void end_cleanup_fn (void);
107 static tree cp_make_fname_decl (tree, int);
108 static void initialize_predefined_identifiers (void);
109 static tree check_special_function_return_type
110 (special_function_kind, tree, tree);
111 static tree push_cp_library_fn (enum tree_code, tree);
112 static tree build_cp_library_fn (tree, enum tree_code, tree);
113 static void store_parm_decls (tree);
114 static void initialize_local_var (tree, tree);
115 static void expand_static_init (tree, tree);
116 static tree next_initializable_field (tree);
117 static tree reshape_init (tree, tree *);
119 /* Erroneous argument lists can use this *IFF* they do not modify it. */
120 tree error_mark_list;
122 /* The following symbols are subsumed in the cp_global_trees array, and
123 listed here individually for documentation purposes.
125 C++ extensions
126 tree wchar_decl_node;
128 tree vtable_entry_type;
129 tree delta_type_node;
130 tree __t_desc_type_node;
131 tree ti_desc_type_node;
132 tree bltn_desc_type_node, ptr_desc_type_node;
133 tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
134 tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
135 tree ptm_desc_type_node;
136 tree base_desc_type_node;
138 tree class_type_node;
139 tree unknown_type_node;
141 Array type `vtable_entry_type[]'
143 tree vtbl_type_node;
144 tree vtbl_ptr_type_node;
146 Namespaces,
148 tree std_node;
149 tree abi_node;
151 A FUNCTION_DECL which can call `abort'. Not necessarily the
152 one that the user will declare, but sufficient to be called
153 by routines that want to abort the program.
155 tree abort_fndecl;
157 The FUNCTION_DECL for the default `::operator delete'.
159 tree global_delete_fndecl;
161 Used by RTTI
162 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
163 tree tinfo_var_id;
167 tree cp_global_trees[CPTI_MAX];
169 /* Indicates that there is a type value in some namespace, although
170 that is not necessarily in scope at the moment. */
172 tree global_type_node;
174 /* The node that holds the "name" of the global scope. */
175 tree global_scope_name;
177 /* Used only for jumps to as-yet undefined labels, since jumps to
178 defined labels can have their validity checked immediately. */
180 struct named_label_use_list GTY(())
182 struct cp_binding_level *binding_level;
183 tree names_in_scope;
184 tree label_decl;
185 location_t o_goto_locus;
186 struct named_label_use_list *next;
189 #define named_label_uses cp_function_chain->x_named_label_uses
191 #define local_names cp_function_chain->x_local_names
193 /* A list of objects which have constructors or destructors
194 which reside in the global scope. The decl is stored in
195 the TREE_VALUE slot and the initializer is stored
196 in the TREE_PURPOSE slot. */
197 tree static_aggregates;
199 /* -- end of C++ */
201 /* A node for the integer constants 2, and 3. */
203 tree integer_two_node, integer_three_node;
205 /* A list of all LABEL_DECLs in the function that have names. Here so
206 we can clear out their names' definitions at the end of the
207 function, and so we can check the validity of jumps to these labels. */
209 struct named_label_list GTY(())
211 struct cp_binding_level *binding_level;
212 tree names_in_scope;
213 tree old_value;
214 tree label_decl;
215 tree bad_decls;
216 struct named_label_list *next;
217 unsigned int in_try_scope : 1;
218 unsigned int in_catch_scope : 1;
221 #define named_labels cp_function_chain->x_named_labels
223 /* The number of function bodies which we are currently processing.
224 (Zero if we are at namespace scope, one inside the body of a
225 function, two inside the body of a function in a local class, etc.) */
226 int function_depth;
228 /* States indicating how grokdeclarator() should handle declspecs marked
229 with __attribute__((deprecated)). An object declared as
230 __attribute__((deprecated)) suppresses warnings of uses of other
231 deprecated items. */
233 enum deprecated_states {
234 DEPRECATED_NORMAL,
235 DEPRECATED_SUPPRESS
238 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
240 /* True if a declaration with an `extern' linkage specifier is being
241 processed. */
242 bool have_extern_spec;
245 /* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
246 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
247 time the VAR_DECL was declared, the type was incomplete. */
249 static GTY(()) tree incomplete_vars;
251 /* Returns the kind of template specialization we are currently
252 processing, given that it's declaration contained N_CLASS_SCOPES
253 explicit scope qualifications. */
255 tmpl_spec_kind
256 current_tmpl_spec_kind (int n_class_scopes)
258 int n_template_parm_scopes = 0;
259 int seen_specialization_p = 0;
260 int innermost_specialization_p = 0;
261 struct cp_binding_level *b;
263 /* Scan through the template parameter scopes. */
264 for (b = current_binding_level;
265 b->kind == sk_template_parms;
266 b = b->level_chain)
268 /* If we see a specialization scope inside a parameter scope,
269 then something is wrong. That corresponds to a declaration
270 like:
272 template <class T> template <> ...
274 which is always invalid since [temp.expl.spec] forbids the
275 specialization of a class member template if the enclosing
276 class templates are not explicitly specialized as well. */
277 if (b->explicit_spec_p)
279 if (n_template_parm_scopes == 0)
280 innermost_specialization_p = 1;
281 else
282 seen_specialization_p = 1;
284 else if (seen_specialization_p == 1)
285 return tsk_invalid_member_spec;
287 ++n_template_parm_scopes;
290 /* Handle explicit instantiations. */
291 if (processing_explicit_instantiation)
293 if (n_template_parm_scopes != 0)
294 /* We've seen a template parameter list during an explicit
295 instantiation. For example:
297 template <class T> template void f(int);
299 This is erroneous. */
300 return tsk_invalid_expl_inst;
301 else
302 return tsk_expl_inst;
305 if (n_template_parm_scopes < n_class_scopes)
306 /* We've not seen enough template headers to match all the
307 specialized classes present. For example:
309 template <class T> void R<T>::S<T>::f(int);
311 This is invalid; there needs to be one set of template
312 parameters for each class. */
313 return tsk_insufficient_parms;
314 else if (n_template_parm_scopes == n_class_scopes)
315 /* We're processing a non-template declaration (even though it may
316 be a member of a template class.) For example:
318 template <class T> void S<T>::f(int);
320 The `class T' maches the `S<T>', leaving no template headers
321 corresponding to the `f'. */
322 return tsk_none;
323 else if (n_template_parm_scopes > n_class_scopes + 1)
324 /* We've got too many template headers. For example:
326 template <> template <class T> void f (T);
328 There need to be more enclosing classes. */
329 return tsk_excessive_parms;
330 else
331 /* This must be a template. It's of the form:
333 template <class T> template <class U> void S<T>::f(U);
335 This is a specialization if the innermost level was a
336 specialization; otherwise it's just a definition of the
337 template. */
338 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
341 /* Exit the current scope. */
343 void
344 finish_scope (void)
346 poplevel (0, 0, 0);
349 /* When a label goes out of scope, check to see if that label was used
350 in a valid manner, and issue any appropriate warnings or errors. */
352 static void
353 pop_label (tree label, tree old_value)
355 if (!processing_template_decl)
357 if (DECL_INITIAL (label) == NULL_TREE)
359 location_t location;
361 cp_error_at ("label %qD used but not defined", label);
362 #ifdef USE_MAPPED_LOCATION
363 location = input_location; /* FIXME want (input_filename, (line)0) */
364 #else
365 location.file = input_filename;
366 location.line = 0;
367 #endif
368 /* Avoid crashing later. */
369 define_label (location, DECL_NAME (label));
371 else if (warn_unused_label && !TREE_USED (label))
372 cp_warning_at ("label %qD defined but not used", label);
375 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
378 /* At the end of a function, all labels declared within the function
379 go out of scope. BLOCK is the top-level block for the
380 function. */
382 static void
383 pop_labels (tree block)
385 struct named_label_list *link;
387 /* Clear out the definitions of all label names, since their scopes
388 end here. */
389 for (link = named_labels; link; link = link->next)
391 pop_label (link->label_decl, link->old_value);
392 /* Put the labels into the "variables" of the top-level block,
393 so debugger can see them. */
394 TREE_CHAIN (link->label_decl) = BLOCK_VARS (block);
395 BLOCK_VARS (block) = link->label_decl;
398 named_labels = NULL;
401 /* The following two routines are used to interface to Objective-C++.
402 The binding level is purposely treated as an opaque type. */
404 void *
405 objc_get_current_scope (void)
407 return current_binding_level;
410 /* The following routine is used by the NeXT-style SJLJ exceptions;
411 variables get marked 'volatile' so as to not be clobbered by
412 _setjmp()/_longjmp() calls. All variables in the current scope,
413 as well as parent scopes up to (but not including) ENCLOSING_BLK
414 shall be thusly marked. */
416 void
417 objc_mark_locals_volatile (void *enclosing_blk)
419 struct cp_binding_level *scope;
421 for (scope = current_binding_level;
422 scope && scope != enclosing_blk && scope->kind == sk_block;
423 scope = scope->level_chain)
425 tree decl;
427 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
429 if (TREE_CODE (decl) == VAR_DECL)
431 DECL_REGISTER (decl) = 0;
432 TREE_THIS_VOLATILE (decl) = 1;
438 /* Exit a binding level.
439 Pop the level off, and restore the state of the identifier-decl mappings
440 that were in effect when this level was entered.
442 If KEEP == 1, this level had explicit declarations, so
443 and create a "block" (a BLOCK node) for the level
444 to record its declarations and subblocks for symbol table output.
446 If FUNCTIONBODY is nonzero, this level is the body of a function,
447 so create a block as if KEEP were set and also clear out all
448 label names.
450 If REVERSE is nonzero, reverse the order of decls before putting
451 them into the BLOCK. */
453 tree
454 poplevel (int keep, int reverse, int functionbody)
456 tree link;
457 /* The chain of decls was accumulated in reverse order.
458 Put it into forward order, just for cleanliness. */
459 tree decls;
460 int tmp = functionbody;
461 int real_functionbody;
462 tree subblocks;
463 tree block;
464 tree decl;
465 int leaving_for_scope;
466 scope_kind kind;
468 timevar_push (TV_NAME_LOOKUP);
469 restart:
471 block = NULL_TREE;
473 gcc_assert (current_binding_level->kind != sk_class);
475 real_functionbody = (current_binding_level->kind == sk_cleanup
476 ? ((functionbody = 0), tmp) : functionbody);
477 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
479 gcc_assert (!VEC_length(cp_class_binding,
480 current_binding_level->class_shadowed));
482 /* We used to use KEEP == 2 to indicate that the new block should go
483 at the beginning of the list of blocks at this binding level,
484 rather than the end. This hack is no longer used. */
485 gcc_assert (keep == 0 || keep == 1);
487 if (current_binding_level->keep)
488 keep = 1;
490 /* Any uses of undefined labels, and any defined labels, now operate
491 under constraints of next binding contour. */
492 if (cfun && !functionbody)
494 struct cp_binding_level *level_chain;
495 level_chain = current_binding_level->level_chain;
496 if (level_chain)
498 struct named_label_use_list *uses;
499 struct named_label_list *labels;
500 for (labels = named_labels; labels; labels = labels->next)
501 if (labels->binding_level == current_binding_level)
503 tree decl;
504 if (current_binding_level->kind == sk_try)
505 labels->in_try_scope = 1;
506 if (current_binding_level->kind == sk_catch)
507 labels->in_catch_scope = 1;
508 for (decl = labels->names_in_scope; decl;
509 decl = TREE_CHAIN (decl))
510 if (decl_jump_unsafe (decl))
511 labels->bad_decls = tree_cons (NULL_TREE, decl,
512 labels->bad_decls);
513 labels->binding_level = level_chain;
514 labels->names_in_scope = level_chain->names;
517 for (uses = named_label_uses; uses; uses = uses->next)
518 if (uses->binding_level == current_binding_level)
520 uses->binding_level = level_chain;
521 uses->names_in_scope = level_chain->names;
526 /* Get the decls in the order they were written.
527 Usually current_binding_level->names is in reverse order.
528 But parameter decls were previously put in forward order. */
530 if (reverse)
531 current_binding_level->names
532 = decls = nreverse (current_binding_level->names);
533 else
534 decls = current_binding_level->names;
536 /* If there were any declarations or structure tags in that level,
537 or if this level is a function body,
538 create a BLOCK to record them for the life of this function. */
539 block = NULL_TREE;
540 if (keep == 1 || functionbody)
541 block = make_node (BLOCK);
542 if (block != NULL_TREE)
544 BLOCK_VARS (block) = decls;
545 BLOCK_SUBBLOCKS (block) = subblocks;
548 /* In each subblock, record that this is its superior. */
549 if (keep >= 0)
550 for (link = subblocks; link; link = TREE_CHAIN (link))
551 BLOCK_SUPERCONTEXT (link) = block;
553 /* We still support the old for-scope rules, whereby the variables
554 in a for-init statement were in scope after the for-statement
555 ended. We only use the new rules if flag_new_for_scope is
556 nonzero. */
557 leaving_for_scope
558 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
560 /* Before we remove the declarations first check for unused variables. */
561 if (warn_unused_variable
562 && !processing_template_decl)
563 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
564 if (TREE_CODE (decl) == VAR_DECL
565 && ! TREE_USED (decl)
566 && ! DECL_IN_SYSTEM_HEADER (decl)
567 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
568 warning (0, "%Junused variable %qD", decl, decl);
570 /* Remove declarations for all the DECLs in this level. */
571 for (link = decls; link; link = TREE_CHAIN (link))
573 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
574 && DECL_NAME (link))
576 tree name = DECL_NAME (link);
577 cxx_binding *ob;
578 tree ns_binding;
580 ob = outer_binding (name,
581 IDENTIFIER_BINDING (name),
582 /*class_p=*/true);
583 if (!ob)
584 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
585 else
586 ns_binding = NULL_TREE;
588 if (ob && ob->scope == current_binding_level->level_chain)
589 /* We have something like:
591 int i;
592 for (int i; ;);
594 and we are leaving the `for' scope. There's no reason to
595 keep the binding of the inner `i' in this case. */
596 pop_binding (name, link);
597 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
598 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
599 /* Here, we have something like:
601 typedef int I;
603 void f () {
604 for (int I; ;);
607 We must pop the for-scope binding so we know what's a
608 type and what isn't. */
609 pop_binding (name, link);
610 else
612 /* Mark this VAR_DECL as dead so that we can tell we left it
613 there only for backward compatibility. */
614 DECL_DEAD_FOR_LOCAL (link) = 1;
616 /* Keep track of what should have happened when we
617 popped the binding. */
618 if (ob && ob->value)
619 DECL_SHADOWED_FOR_VAR (link) = ob->value;
621 /* Add it to the list of dead variables in the next
622 outermost binding to that we can remove these when we
623 leave that binding. */
624 current_binding_level->level_chain->dead_vars_from_for
625 = tree_cons (NULL_TREE, link,
626 current_binding_level->level_chain->
627 dead_vars_from_for);
629 /* Although we don't pop the cxx_binding, we do clear
630 its SCOPE since the scope is going away now. */
631 IDENTIFIER_BINDING (name)->scope
632 = current_binding_level->level_chain;
635 else
637 tree name;
639 /* Remove the binding. */
640 decl = link;
642 if (TREE_CODE (decl) == TREE_LIST)
643 decl = TREE_VALUE (decl);
644 name = decl;
646 if (TREE_CODE (name) == OVERLOAD)
647 name = OVL_FUNCTION (name);
649 gcc_assert (DECL_P (name));
650 pop_binding (DECL_NAME (name), decl);
654 /* Remove declarations for any `for' variables from inner scopes
655 that we kept around. */
656 for (link = current_binding_level->dead_vars_from_for;
657 link; link = TREE_CHAIN (link))
658 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
660 /* Restore the IDENTIFIER_TYPE_VALUEs. */
661 for (link = current_binding_level->type_shadowed;
662 link; link = TREE_CHAIN (link))
663 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
665 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
666 for (link = current_binding_level->shadowed_labels;
667 link;
668 link = TREE_CHAIN (link))
669 pop_label (TREE_VALUE (link), TREE_PURPOSE (link));
671 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
672 list if a `using' declaration put them there. The debugging
673 back-ends won't understand OVERLOAD, so we remove them here.
674 Because the BLOCK_VARS are (temporarily) shared with
675 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
676 popped all the bindings. */
677 if (block)
679 tree* d;
681 for (d = &BLOCK_VARS (block); *d; )
683 if (TREE_CODE (*d) == TREE_LIST)
684 *d = TREE_CHAIN (*d);
685 else
686 d = &TREE_CHAIN (*d);
690 /* If the level being exited is the top level of a function,
691 check over all the labels. */
692 if (functionbody)
694 /* Since this is the top level block of a function, the vars are
695 the function's parameters. Don't leave them in the BLOCK
696 because they are found in the FUNCTION_DECL instead. */
697 BLOCK_VARS (block) = 0;
698 pop_labels (block);
701 kind = current_binding_level->kind;
702 if (kind == sk_cleanup)
704 tree stmt;
706 /* If this is a temporary binding created for a cleanup, then we'll
707 have pushed a statement list level. Pop that, create a new
708 BIND_EXPR for the block, and insert it into the stream. */
709 stmt = pop_stmt_list (current_binding_level->statement_list);
710 stmt = c_build_bind_expr (block, stmt);
711 add_stmt (stmt);
714 leave_scope ();
715 if (functionbody)
716 DECL_INITIAL (current_function_decl) = block;
717 else if (block)
718 current_binding_level->blocks
719 = chainon (current_binding_level->blocks, block);
721 /* If we did not make a block for the level just exited,
722 any blocks made for inner levels
723 (since they cannot be recorded as subblocks in that level)
724 must be carried forward so they will later become subblocks
725 of something else. */
726 else if (subblocks)
727 current_binding_level->blocks
728 = chainon (current_binding_level->blocks, subblocks);
730 /* Each and every BLOCK node created here in `poplevel' is important
731 (e.g. for proper debugging information) so if we created one
732 earlier, mark it as "used". */
733 if (block)
734 TREE_USED (block) = 1;
736 /* All temporary bindings created for cleanups are popped silently. */
737 if (kind == sk_cleanup)
738 goto restart;
740 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
743 /* Insert BLOCK at the end of the list of subblocks of the
744 current binding level. This is used when a BIND_EXPR is expanded,
745 to handle the BLOCK node inside the BIND_EXPR. */
747 void
748 insert_block (tree block)
750 TREE_USED (block) = 1;
751 current_binding_level->blocks
752 = chainon (current_binding_level->blocks, block);
755 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
756 itself, calling F for each. The DATA is passed to F as well. */
758 static int
759 walk_namespaces_r (tree namespace, walk_namespaces_fn f, void* data)
761 int result = 0;
762 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
764 result |= (*f) (namespace, data);
766 for (; current; current = TREE_CHAIN (current))
767 result |= walk_namespaces_r (current, f, data);
769 return result;
772 /* Walk all the namespaces, calling F for each. The DATA is passed to
773 F as well. */
776 walk_namespaces (walk_namespaces_fn f, void* data)
778 return walk_namespaces_r (global_namespace, f, data);
781 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
782 DATA is non-NULL, this is the last time we will call
783 wrapup_global_declarations for this NAMESPACE. */
786 wrapup_globals_for_namespace (tree namespace, void* data)
788 struct cp_binding_level *level = NAMESPACE_LEVEL (namespace);
789 VEC(tree,gc) *statics = level->static_decls;
790 tree *vec = VEC_address (tree, statics);
791 int len = VEC_length (tree, statics);
792 int last_time = (data != 0);
794 if (last_time)
796 check_global_declarations (vec, len);
797 return 0;
800 /* Write out any globals that need to be output. */
801 return wrapup_global_declarations (vec, len);
805 /* In C++, you don't have to write `struct S' to refer to `S'; you
806 can just use `S'. We accomplish this by creating a TYPE_DECL as
807 if the user had written `typedef struct S S'. Create and return
808 the TYPE_DECL for TYPE. */
810 tree
811 create_implicit_typedef (tree name, tree type)
813 tree decl;
815 decl = build_decl (TYPE_DECL, name, type);
816 DECL_ARTIFICIAL (decl) = 1;
817 /* There are other implicit type declarations, like the one *within*
818 a class that allows you to write `S::S'. We must distinguish
819 amongst these. */
820 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
821 TYPE_NAME (type) = decl;
823 return decl;
826 /* Remember a local name for name-mangling purposes. */
828 static void
829 push_local_name (tree decl)
831 size_t i, nelts;
832 tree t, name;
834 timevar_push (TV_NAME_LOOKUP);
836 name = DECL_NAME (decl);
838 nelts = VEC_length (tree, local_names);
839 for (i = 0; i < nelts; i++)
841 t = VEC_index (tree, local_names, i);
842 if (DECL_NAME (t) == name)
844 if (!DECL_LANG_SPECIFIC (decl))
845 retrofit_lang_decl (decl);
846 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
847 if (DECL_LANG_SPECIFIC (t))
848 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
849 else
850 DECL_DISCRIMINATOR (decl) = 1;
852 VEC_replace (tree, local_names, i, decl);
853 timevar_pop (TV_NAME_LOOKUP);
854 return;
858 VEC_safe_push (tree, gc, local_names, decl);
859 timevar_pop (TV_NAME_LOOKUP);
862 /* Subroutine of duplicate_decls: return truthvalue of whether
863 or not types of these decls match.
865 For C++, we must compare the parameter list so that `int' can match
866 `int&' in a parameter position, but `int&' is not confused with
867 `const int&'. */
870 decls_match (tree newdecl, tree olddecl)
872 int types_match;
874 if (newdecl == olddecl)
875 return 1;
877 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
878 /* If the two DECLs are not even the same kind of thing, we're not
879 interested in their types. */
880 return 0;
882 if (TREE_CODE (newdecl) == FUNCTION_DECL)
884 tree f1 = TREE_TYPE (newdecl);
885 tree f2 = TREE_TYPE (olddecl);
886 tree p1 = TYPE_ARG_TYPES (f1);
887 tree p2 = TYPE_ARG_TYPES (f2);
889 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
890 && ! (DECL_EXTERN_C_P (newdecl)
891 && DECL_EXTERN_C_P (olddecl)))
892 return 0;
894 if (TREE_CODE (f1) != TREE_CODE (f2))
895 return 0;
897 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
899 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
900 && (DECL_BUILT_IN (olddecl)
901 #ifndef NO_IMPLICIT_EXTERN_C
902 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
903 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
904 #endif
907 types_match = self_promoting_args_p (p1);
908 if (p1 == void_list_node)
909 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
911 #ifndef NO_IMPLICIT_EXTERN_C
912 else if (p1 == NULL_TREE
913 && (DECL_EXTERN_C_P (olddecl)
914 && DECL_IN_SYSTEM_HEADER (olddecl)
915 && !DECL_CLASS_SCOPE_P (olddecl))
916 && (DECL_EXTERN_C_P (newdecl)
917 && DECL_IN_SYSTEM_HEADER (newdecl)
918 && !DECL_CLASS_SCOPE_P (newdecl)))
920 types_match = self_promoting_args_p (p2);
921 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
923 #endif
924 else
925 types_match = compparms (p1, p2);
927 else
928 types_match = 0;
930 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
932 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
933 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
934 return 0;
936 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
937 DECL_TEMPLATE_PARMS (olddecl)))
938 return 0;
940 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
941 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
942 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
943 else
944 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
945 DECL_TEMPLATE_RESULT (newdecl));
947 else
949 /* Need to check scope for variable declaration (VAR_DECL).
950 For typedef (TYPE_DECL), scope is ignored. */
951 if (TREE_CODE (newdecl) == VAR_DECL
952 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
953 return 0;
955 if (TREE_TYPE (newdecl) == error_mark_node)
956 types_match = TREE_TYPE (olddecl) == error_mark_node;
957 else if (TREE_TYPE (olddecl) == NULL_TREE)
958 types_match = TREE_TYPE (newdecl) == NULL_TREE;
959 else if (TREE_TYPE (newdecl) == NULL_TREE)
960 types_match = 0;
961 else
962 types_match = comptypes (TREE_TYPE (newdecl),
963 TREE_TYPE (olddecl),
964 COMPARE_REDECLARATION);
967 return types_match;
970 /* If NEWDECL is `static' and an `extern' was seen previously,
971 warn about it. OLDDECL is the previous declaration.
973 Note that this does not apply to the C++ case of declaring
974 a variable `extern const' and then later `const'.
976 Don't complain about built-in functions, since they are beyond
977 the user's control. */
979 void
980 warn_extern_redeclared_static (tree newdecl, tree olddecl)
982 tree name;
984 if (TREE_CODE (newdecl) == TYPE_DECL
985 || TREE_CODE (newdecl) == TEMPLATE_DECL
986 || TREE_CODE (newdecl) == CONST_DECL
987 || TREE_CODE (newdecl) == NAMESPACE_DECL)
988 return;
990 /* Don't get confused by static member functions; that's a different
991 use of `static'. */
992 if (TREE_CODE (newdecl) == FUNCTION_DECL
993 && DECL_STATIC_FUNCTION_P (newdecl))
994 return;
996 /* If the old declaration was `static', or the new one isn't, then
997 then everything is OK. */
998 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
999 return;
1001 /* It's OK to declare a builtin function as `static'. */
1002 if (TREE_CODE (olddecl) == FUNCTION_DECL
1003 && DECL_ARTIFICIAL (olddecl))
1004 return;
1006 name = DECL_ASSEMBLER_NAME (newdecl);
1007 pedwarn ("%qD was declared %<extern%> and later %<static%>", newdecl);
1008 cp_pedwarn_at ("previous declaration of %qD", olddecl);
1011 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1012 If the redeclaration is invalid, a diagnostic is issued, and the
1013 error_mark_node is returned. Otherwise, OLDDECL is returned.
1015 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1016 returned. */
1018 tree
1019 duplicate_decls (tree newdecl, tree olddecl)
1021 unsigned olddecl_uid = DECL_UID (olddecl);
1022 int olddecl_friend = 0, types_match = 0;
1023 int new_defines_function = 0;
1025 if (newdecl == olddecl)
1026 return olddecl;
1028 types_match = decls_match (newdecl, olddecl);
1030 /* If either the type of the new decl or the type of the old decl is an
1031 error_mark_node, then that implies that we have already issued an
1032 error (earlier) for some bogus type specification, and in that case,
1033 it is rather pointless to harass the user with yet more error message
1034 about the same declaration, so just pretend the types match here. */
1035 if (TREE_TYPE (newdecl) == error_mark_node
1036 || TREE_TYPE (olddecl) == error_mark_node)
1037 types_match = 1;
1039 if (DECL_P (olddecl)
1040 && TREE_CODE (newdecl) == FUNCTION_DECL
1041 && TREE_CODE (olddecl) == FUNCTION_DECL
1042 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1044 if (DECL_DECLARED_INLINE_P (newdecl)
1045 && DECL_UNINLINABLE (newdecl)
1046 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1047 /* Already warned elsewhere. */;
1048 else if (DECL_DECLARED_INLINE_P (olddecl)
1049 && DECL_UNINLINABLE (olddecl)
1050 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1051 /* Already warned. */;
1052 else if (DECL_DECLARED_INLINE_P (newdecl)
1053 && DECL_UNINLINABLE (olddecl)
1054 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1056 warning (0, "%Jfunction %qD redeclared as inline", newdecl, newdecl);
1057 warning (0, "%Jprevious declaration of %qD with attribute noinline",
1058 olddecl, olddecl);
1060 else if (DECL_DECLARED_INLINE_P (olddecl)
1061 && DECL_UNINLINABLE (newdecl)
1062 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1064 warning (0, "%Jfunction %qD redeclared with attribute noinline",
1065 newdecl, newdecl);
1066 warning (0, "%Jprevious declaration of %qD was inline",
1067 olddecl, olddecl);
1071 /* Check for redeclaration and other discrepancies. */
1072 if (TREE_CODE (olddecl) == FUNCTION_DECL
1073 && DECL_ARTIFICIAL (olddecl))
1075 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1077 /* Avoid warnings redeclaring anticipated built-ins. */
1078 if (DECL_ANTICIPATED (olddecl))
1079 return NULL_TREE;
1081 /* If you declare a built-in or predefined function name as static,
1082 the old definition is overridden, but optionally warn this was a
1083 bad choice of name. */
1084 if (! TREE_PUBLIC (newdecl))
1086 if (warn_shadow)
1087 warning (0, "shadowing %s function %q#D",
1088 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1089 olddecl);
1090 /* Discard the old built-in function. */
1091 return NULL_TREE;
1093 /* If the built-in is not ansi, then programs can override
1094 it even globally without an error. */
1095 else if (! DECL_BUILT_IN (olddecl))
1096 warning (0, "library function %q#D redeclared as non-function %q#D",
1097 olddecl, newdecl);
1098 else
1100 error ("declaration of %q#D", newdecl);
1101 error ("conflicts with built-in declaration %q#D",
1102 olddecl);
1104 return NULL_TREE;
1106 else if (!types_match)
1108 /* Avoid warnings redeclaring anticipated built-ins. */
1109 if (DECL_ANTICIPATED (olddecl))
1111 /* Deal with fileptr_type_node. FILE type is not known
1112 at the time we create the builtins. */
1113 tree t1, t2;
1115 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1116 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1117 t1 || t2;
1118 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1119 if (!t1 || !t2)
1120 break;
1121 else if (TREE_VALUE (t2) == fileptr_type_node)
1123 tree t = TREE_VALUE (t1);
1125 if (TREE_CODE (t) == POINTER_TYPE
1126 && TYPE_NAME (TREE_TYPE (t))
1127 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1128 == get_identifier ("FILE")
1129 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1131 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1133 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1134 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1135 types_match = decls_match (newdecl, olddecl);
1136 if (types_match)
1137 return duplicate_decls (newdecl, olddecl);
1138 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1141 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1142 break;
1144 else if ((DECL_EXTERN_C_P (newdecl)
1145 && DECL_EXTERN_C_P (olddecl))
1146 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1147 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1149 /* A near match; override the builtin. */
1151 if (TREE_PUBLIC (newdecl))
1153 warning (0, "new declaration %q#D", newdecl);
1154 warning (0, "ambiguates built-in declaration %q#D",
1155 olddecl);
1157 else if (warn_shadow)
1158 warning (0, "shadowing %s function %q#D",
1159 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1160 olddecl);
1162 else
1163 /* Discard the old built-in function. */
1164 return NULL_TREE;
1166 /* Replace the old RTL to avoid problems with inlining. */
1167 COPY_DECL_RTL (newdecl, olddecl);
1169 /* Even if the types match, prefer the new declarations type
1170 for anticipated built-ins, for exception lists, etc... */
1171 else if (DECL_ANTICIPATED (olddecl))
1173 tree type = TREE_TYPE (newdecl);
1174 tree attribs = (*targetm.merge_type_attributes)
1175 (TREE_TYPE (olddecl), type);
1177 type = cp_build_type_attribute_variant (type, attribs);
1178 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1181 /* Whether or not the builtin can throw exceptions has no
1182 bearing on this declarator. */
1183 TREE_NOTHROW (olddecl) = 0;
1185 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1187 /* If a builtin function is redeclared as `static', merge
1188 the declarations, but make the original one static. */
1189 DECL_THIS_STATIC (olddecl) = 1;
1190 TREE_PUBLIC (olddecl) = 0;
1192 /* Make the old declaration consistent with the new one so
1193 that all remnants of the builtin-ness of this function
1194 will be banished. */
1195 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1196 COPY_DECL_RTL (newdecl, olddecl);
1199 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1201 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1202 && TREE_CODE (newdecl) != TYPE_DECL
1203 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
1204 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
1205 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1206 && TREE_CODE (olddecl) != TYPE_DECL
1207 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
1208 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1209 == TYPE_DECL))))
1211 /* We do nothing special here, because C++ does such nasty
1212 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1213 get shadowed, and know that if we need to find a TYPE_DECL
1214 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1215 slot of the identifier. */
1216 return NULL_TREE;
1219 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1220 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1221 || (TREE_CODE (olddecl) == FUNCTION_DECL
1222 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1223 return NULL_TREE;
1225 error ("%q#D redeclared as different kind of symbol", newdecl);
1226 if (TREE_CODE (olddecl) == TREE_LIST)
1227 olddecl = TREE_VALUE (olddecl);
1228 cp_error_at ("previous declaration of %q#D", olddecl);
1230 return error_mark_node;
1232 else if (!types_match)
1234 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1235 /* These are certainly not duplicate declarations; they're
1236 from different scopes. */
1237 return NULL_TREE;
1239 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1241 /* The name of a class template may not be declared to refer to
1242 any other template, class, function, object, namespace, value,
1243 or type in the same scope. */
1244 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1245 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1247 error ("declaration of template %q#D", newdecl);
1248 cp_error_at ("conflicts with previous declaration %q#D",
1249 olddecl);
1251 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1252 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1253 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1254 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1255 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1256 DECL_TEMPLATE_PARMS (olddecl))
1257 /* Template functions can be disambiguated by
1258 return type. */
1259 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1260 TREE_TYPE (TREE_TYPE (olddecl))))
1262 error ("new declaration %q#D", newdecl);
1263 cp_error_at ("ambiguates old declaration %q#D", olddecl);
1265 return NULL_TREE;
1267 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1269 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1271 error ("declaration of C function %q#D conflicts with",
1272 newdecl);
1273 cp_error_at ("previous declaration %q#D here", olddecl);
1275 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1276 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1278 error ("new declaration %q#D", newdecl);
1279 cp_error_at ("ambiguates old declaration %q#D", olddecl);
1281 else
1282 return NULL_TREE;
1284 else
1286 error ("conflicting declaration %q#D", newdecl);
1287 cp_error_at ("%qD has a previous declaration as %q#D",
1288 olddecl, olddecl);
1289 return error_mark_node;
1292 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1293 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1294 && (!DECL_TEMPLATE_INFO (newdecl)
1295 || (DECL_TI_TEMPLATE (newdecl)
1296 != DECL_TI_TEMPLATE (olddecl))))
1297 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1298 && (!DECL_TEMPLATE_INFO (olddecl)
1299 || (DECL_TI_TEMPLATE (olddecl)
1300 != DECL_TI_TEMPLATE (newdecl))))))
1301 /* It's OK to have a template specialization and a non-template
1302 with the same type, or to have specializations of two
1303 different templates with the same type. Note that if one is a
1304 specialization, and the other is an instantiation of the same
1305 template, that we do not exit at this point. That situation
1306 can occur if we instantiate a template class, and then
1307 specialize one of its methods. This situation is valid, but
1308 the declarations must be merged in the usual way. */
1309 return NULL_TREE;
1310 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1311 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1312 && !DECL_USE_TEMPLATE (newdecl))
1313 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1314 && !DECL_USE_TEMPLATE (olddecl))))
1315 /* One of the declarations is a template instantiation, and the
1316 other is not a template at all. That's OK. */
1317 return NULL_TREE;
1318 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1320 /* In [namespace.alias] we have:
1322 In a declarative region, a namespace-alias-definition can be
1323 used to redefine a namespace-alias declared in that declarative
1324 region to refer only to the namespace to which it already
1325 refers.
1327 Therefore, if we encounter a second alias directive for the same
1328 alias, we can just ignore the second directive. */
1329 if (DECL_NAMESPACE_ALIAS (newdecl)
1330 && (DECL_NAMESPACE_ALIAS (newdecl)
1331 == DECL_NAMESPACE_ALIAS (olddecl)))
1332 return olddecl;
1333 /* [namespace.alias]
1335 A namespace-name or namespace-alias shall not be declared as
1336 the name of any other entity in the same declarative region.
1337 A namespace-name defined at global scope shall not be
1338 declared as the name of any other entity in any global scope
1339 of the program. */
1340 error ("declaration of namespace %qD conflicts with", newdecl);
1341 cp_error_at ("previous declaration of namespace %qD here", olddecl);
1342 return error_mark_node;
1344 else
1346 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1347 if (errmsg)
1349 error (errmsg, newdecl);
1350 if (DECL_NAME (olddecl) != NULL_TREE)
1351 cp_error_at ((DECL_INITIAL (olddecl)
1352 && namespace_bindings_p ())
1353 ? "%q#D previously defined here"
1354 : "%q#D previously declared here", olddecl);
1355 return error_mark_node;
1357 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1358 && DECL_INITIAL (olddecl) != NULL_TREE
1359 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1360 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1362 /* Prototype decl follows defn w/o prototype. */
1363 cp_warning_at ("prototype for %q#D", newdecl);
1364 warning (0, "%Jfollows non-prototype definition here", olddecl);
1366 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1367 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1369 /* extern "C" int foo ();
1370 int foo () { bar (); }
1371 is OK. */
1372 if (current_lang_depth () == 0)
1373 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1374 else
1376 cp_error_at ("previous declaration of %q#D with %qL linkage",
1377 olddecl, DECL_LANGUAGE (olddecl));
1378 error ("conflicts with new declaration with %qL linkage",
1379 DECL_LANGUAGE (newdecl));
1383 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1385 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1387 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1388 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1389 int i = 1;
1391 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1392 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1394 for (; t1 && t1 != void_list_node;
1395 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1396 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1398 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1399 TREE_PURPOSE (t2)))
1401 pedwarn ("default argument given for parameter %d of %q#D",
1402 i, newdecl);
1403 cp_pedwarn_at ("after previous specification in %q#D",
1404 olddecl);
1406 else
1408 error ("default argument given for parameter %d of %q#D",
1409 i, newdecl);
1410 cp_error_at ("after previous specification in %q#D",
1411 olddecl);
1415 if (DECL_DECLARED_INLINE_P (newdecl)
1416 && ! DECL_DECLARED_INLINE_P (olddecl)
1417 && TREE_ADDRESSABLE (olddecl) && warn_inline)
1419 warning (0, "%q#D was used before it was declared inline", newdecl);
1420 warning (0, "%Jprevious non-inline declaration here", olddecl);
1425 /* Do not merge an implicit typedef with an explicit one. In:
1427 class A;
1429 typedef class A A __attribute__ ((foo));
1431 the attribute should apply only to the typedef. */
1432 if (TREE_CODE (olddecl) == TYPE_DECL
1433 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1434 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1435 return NULL_TREE;
1437 /* If new decl is `static' and an `extern' was seen previously,
1438 warn about it. */
1439 warn_extern_redeclared_static (newdecl, olddecl);
1441 /* We have committed to returning 1 at this point. */
1442 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1444 /* Now that functions must hold information normally held
1445 by field decls, there is extra work to do so that
1446 declaration information does not get destroyed during
1447 definition. */
1448 if (DECL_VINDEX (olddecl))
1449 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1450 if (DECL_CONTEXT (olddecl))
1451 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1452 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1453 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1454 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1455 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1456 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1457 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1458 SET_OVERLOADED_OPERATOR_CODE
1459 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1460 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1462 /* Optionally warn about more than one declaration for the same
1463 name, but don't warn about a function declaration followed by a
1464 definition. */
1465 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1466 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1467 /* Don't warn about extern decl followed by definition. */
1468 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1469 /* Don't warn about friends, let add_friend take care of it. */
1470 && ! (DECL_FRIEND_P (newdecl) || DECL_FRIEND_P (olddecl)))
1472 warning (0, "redundant redeclaration of %qD in same scope", newdecl);
1473 cp_warning_at ("previous declaration of %qD", olddecl);
1477 /* Deal with C++: must preserve virtual function table size. */
1478 if (TREE_CODE (olddecl) == TYPE_DECL)
1480 tree newtype = TREE_TYPE (newdecl);
1481 tree oldtype = TREE_TYPE (olddecl);
1483 if (newtype != error_mark_node && oldtype != error_mark_node
1484 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1485 CLASSTYPE_FRIEND_CLASSES (newtype)
1486 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1488 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1491 /* Copy all the DECL_... slots specified in the new decl
1492 except for any that we copy here from the old type. */
1493 DECL_ATTRIBUTES (newdecl)
1494 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1496 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1498 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
1499 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1500 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1501 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1503 /* If the new declaration is a definition, update the file and
1504 line information on the declaration. */
1505 if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)) == NULL_TREE
1506 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl)) != NULL_TREE)
1508 DECL_SOURCE_LOCATION (olddecl)
1509 = DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (olddecl))
1510 = DECL_SOURCE_LOCATION (newdecl);
1511 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1512 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (olddecl))
1513 = DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (newdecl));
1516 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1518 DECL_INLINE (DECL_TEMPLATE_RESULT (olddecl))
1519 |= DECL_INLINE (DECL_TEMPLATE_RESULT (newdecl));
1520 DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (olddecl))
1521 |= DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (newdecl));
1524 return olddecl;
1527 if (types_match)
1529 /* Automatically handles default parameters. */
1530 tree oldtype = TREE_TYPE (olddecl);
1531 tree newtype;
1533 /* Merge the data types specified in the two decls. */
1534 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1536 /* If merge_types produces a non-typedef type, just use the old type. */
1537 if (TREE_CODE (newdecl) == TYPE_DECL
1538 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1539 newtype = oldtype;
1541 if (TREE_CODE (newdecl) == VAR_DECL)
1543 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1544 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1545 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1546 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1549 /* Do this after calling `merge_types' so that default
1550 parameters don't confuse us. */
1551 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1552 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
1553 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
1555 TREE_TYPE (newdecl) = build_exception_variant (newtype,
1556 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
1557 TREE_TYPE (olddecl) = build_exception_variant (newtype,
1558 TYPE_RAISES_EXCEPTIONS (oldtype));
1560 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
1561 && ! DECL_IS_BUILTIN (olddecl)
1562 && flag_exceptions
1563 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
1564 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
1566 error ("declaration of %qF throws different exceptions",
1567 newdecl);
1568 cp_error_at ("than previous declaration %qF", olddecl);
1571 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1573 /* Lay the type out, unless already done. */
1574 if (! same_type_p (newtype, oldtype)
1575 && TREE_TYPE (newdecl) != error_mark_node
1576 && !(processing_template_decl && uses_template_parms (newdecl)))
1577 layout_type (TREE_TYPE (newdecl));
1579 if ((TREE_CODE (newdecl) == VAR_DECL
1580 || TREE_CODE (newdecl) == PARM_DECL
1581 || TREE_CODE (newdecl) == RESULT_DECL
1582 || TREE_CODE (newdecl) == FIELD_DECL
1583 || TREE_CODE (newdecl) == TYPE_DECL)
1584 && !(processing_template_decl && uses_template_parms (newdecl)))
1585 layout_decl (newdecl, 0);
1587 /* Merge the type qualifiers. */
1588 if (TREE_READONLY (newdecl))
1589 TREE_READONLY (olddecl) = 1;
1590 if (TREE_THIS_VOLATILE (newdecl))
1591 TREE_THIS_VOLATILE (olddecl) = 1;
1592 if (TREE_NOTHROW (newdecl))
1593 TREE_NOTHROW (olddecl) = 1;
1595 /* Merge deprecatedness. */
1596 if (TREE_DEPRECATED (newdecl))
1597 TREE_DEPRECATED (olddecl) = 1;
1599 /* Merge the initialization information. */
1600 if (DECL_INITIAL (newdecl) == NULL_TREE
1601 && DECL_INITIAL (olddecl) != NULL_TREE)
1603 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1604 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1605 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1606 && DECL_LANG_SPECIFIC (newdecl)
1607 && DECL_LANG_SPECIFIC (olddecl))
1609 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1610 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1614 /* Merge the section attribute.
1615 We want to issue an error if the sections conflict but that must be
1616 done later in decl_attributes since we are called before attributes
1617 are assigned. */
1618 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1619 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1621 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1623 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1624 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1625 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1626 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1627 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1628 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1629 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1630 DECL_IS_PURE (newdecl) |= DECL_IS_PURE (olddecl);
1631 /* Keep the old RTL. */
1632 COPY_DECL_RTL (olddecl, newdecl);
1634 else if (TREE_CODE (newdecl) == VAR_DECL
1635 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1637 /* Keep the old RTL. We cannot keep the old RTL if the old
1638 declaration was for an incomplete object and the new
1639 declaration is not since many attributes of the RTL will
1640 change. */
1641 COPY_DECL_RTL (olddecl, newdecl);
1644 /* If cannot merge, then use the new type and qualifiers,
1645 and don't preserve the old rtl. */
1646 else
1648 /* Clean out any memory we had of the old declaration. */
1649 tree oldstatic = value_member (olddecl, static_aggregates);
1650 if (oldstatic)
1651 TREE_VALUE (oldstatic) = error_mark_node;
1653 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1654 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1655 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1656 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1659 /* Merge the storage class information. */
1660 merge_weak (newdecl, olddecl);
1662 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
1663 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1664 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1665 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1666 if (! DECL_EXTERNAL (olddecl))
1667 DECL_EXTERNAL (newdecl) = 0;
1669 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1671 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1672 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1673 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1674 DECL_TEMPLATE_INSTANTIATED (newdecl)
1675 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1676 /* If the OLDDECL is an implicit instantiation, then the NEWDECL
1677 must be too. But, it may not yet be marked as such if the
1678 caller has created NEWDECL, but has not yet figured out that
1679 it is a redeclaration. */
1680 if (DECL_IMPLICIT_INSTANTIATION (olddecl)
1681 && !DECL_USE_TEMPLATE (newdecl))
1682 SET_DECL_IMPLICIT_INSTANTIATION (newdecl);
1683 /* Don't really know how much of the language-specific
1684 values we should copy from old to new. */
1685 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1686 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
1687 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
1688 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1689 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1690 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1691 DECL_INITIALIZED_IN_CLASS_P (newdecl)
1692 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1693 olddecl_friend = DECL_FRIEND_P (olddecl);
1695 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1696 if (TREE_CODE (newdecl) == FUNCTION_DECL
1697 || DECL_FUNCTION_TEMPLATE_P (newdecl))
1699 DECL_BEFRIENDING_CLASSES (newdecl)
1700 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1701 DECL_BEFRIENDING_CLASSES (olddecl));
1702 /* DECL_THUNKS is only valid for virtual functions,
1703 otherwise it is a DECL_FRIEND_CONTEXT. */
1704 if (DECL_VIRTUAL_P (newdecl))
1705 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
1709 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1711 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1712 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
1714 /* If newdecl is not a specialization, then it is not a
1715 template-related function at all. And that means that we
1716 should have exited above, returning 0. */
1717 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
1719 if (TREE_USED (olddecl))
1720 /* From [temp.expl.spec]:
1722 If a template, a member template or the member of a class
1723 template is explicitly specialized then that
1724 specialization shall be declared before the first use of
1725 that specialization that would cause an implicit
1726 instantiation to take place, in every translation unit in
1727 which such a use occurs. */
1728 error ("explicit specialization of %qD after first use",
1729 olddecl);
1731 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
1733 /* [temp.expl.spec/14] We don't inline explicit specialization
1734 just because the primary template says so. */
1736 else
1738 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1739 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
1741 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
1743 /* If either decl says `inline', this fn is inline, unless
1744 its definition was passed already. */
1745 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
1746 DECL_INLINE (olddecl) = 1;
1747 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
1749 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1750 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1753 /* Preserve abstractness on cloned [cd]tors. */
1754 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1756 if (! types_match)
1758 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1759 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
1760 COPY_DECL_RTL (newdecl, olddecl);
1762 if (! types_match || new_defines_function)
1764 /* These need to be copied so that the names are available.
1765 Note that if the types do match, we'll preserve inline
1766 info and other bits, but if not, we won't. */
1767 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1768 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
1770 if (new_defines_function)
1771 /* If defining a function declared with other language
1772 linkage, use the previously declared language linkage. */
1773 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1774 else if (types_match)
1776 /* If redeclaring a builtin function, and not a definition,
1777 it stays built in. */
1778 if (DECL_BUILT_IN (olddecl))
1780 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
1781 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
1782 /* If we're keeping the built-in definition, keep the rtl,
1783 regardless of declaration matches. */
1784 COPY_DECL_RTL (olddecl, newdecl);
1787 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1788 /* Don't clear out the arguments if we're redefining a function. */
1789 if (DECL_ARGUMENTS (olddecl))
1790 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1793 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1794 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
1796 /* Now preserve various other info from the definition. */
1797 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
1798 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
1799 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
1800 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
1802 /* Warn about conflicting visibility specifications. */
1803 if (DECL_VISIBILITY_SPECIFIED (olddecl)
1804 && DECL_VISIBILITY_SPECIFIED (newdecl)
1805 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
1807 warning (0, "%J%qD: visibility attribute ignored because it",
1808 newdecl, newdecl);
1809 warning (0, "%Jconflicts with previous declaration here", olddecl);
1811 /* Choose the declaration which specified visibility. */
1812 if (DECL_VISIBILITY_SPECIFIED (olddecl))
1814 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
1815 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
1818 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
1819 with that from NEWDECL below. */
1820 if (DECL_LANG_SPECIFIC (olddecl))
1822 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
1823 != DECL_LANG_SPECIFIC (newdecl));
1824 ggc_free (DECL_LANG_SPECIFIC (olddecl));
1827 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1829 int function_size;
1831 function_size = sizeof (struct tree_decl);
1833 memcpy ((char *) olddecl + sizeof (struct tree_common),
1834 (char *) newdecl + sizeof (struct tree_common),
1835 function_size - sizeof (struct tree_common));
1837 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
1838 /* If newdecl is a template instantiation, it is possible that
1839 the following sequence of events has occurred:
1841 o A friend function was declared in a class template. The
1842 class template was instantiated.
1844 o The instantiation of the friend declaration was
1845 recorded on the instantiation list, and is newdecl.
1847 o Later, however, instantiate_class_template called pushdecl
1848 on the newdecl to perform name injection. But, pushdecl in
1849 turn called duplicate_decls when it discovered that another
1850 declaration of a global function with the same name already
1851 existed.
1853 o Here, in duplicate_decls, we decided to clobber newdecl.
1855 If we're going to do that, we'd better make sure that
1856 olddecl, and not newdecl, is on the list of
1857 instantiations so that if we try to do the instantiation
1858 again we won't get the clobbered declaration. */
1859 reregister_specialization (newdecl,
1860 DECL_TI_TEMPLATE (newdecl),
1861 olddecl);
1863 else
1865 memcpy ((char *) olddecl + sizeof (struct tree_common),
1866 (char *) newdecl + sizeof (struct tree_common),
1867 sizeof (struct tree_decl) - sizeof (struct tree_common)
1868 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
1871 DECL_UID (olddecl) = olddecl_uid;
1872 if (olddecl_friend)
1873 DECL_FRIEND_P (olddecl) = 1;
1875 /* NEWDECL contains the merged attribute lists.
1876 Update OLDDECL to be the same. */
1877 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
1879 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
1880 so that encode_section_info has a chance to look at the new decl
1881 flags and attributes. */
1882 if (DECL_RTL_SET_P (olddecl)
1883 && (TREE_CODE (olddecl) == FUNCTION_DECL
1884 || (TREE_CODE (olddecl) == VAR_DECL
1885 && TREE_STATIC (olddecl))))
1886 make_decl_rtl (olddecl);
1888 /* The NEWDECL will no longer be needed. Because every out-of-class
1889 declaration of a member results in a call to duplicate_decls,
1890 freeing these nodes represents in a significant savings. */
1891 ggc_free (newdecl);
1893 return olddecl;
1896 /* Return zero if the declaration NEWDECL is valid
1897 when the declaration OLDDECL (assumed to be for the same name)
1898 has already been seen.
1899 Otherwise return an error message format string with a %s
1900 where the identifier should go. */
1902 static const char *
1903 redeclaration_error_message (tree newdecl, tree olddecl)
1905 if (TREE_CODE (newdecl) == TYPE_DECL)
1907 /* Because C++ can put things into name space for free,
1908 constructs like "typedef struct foo { ... } foo"
1909 would look like an erroneous redeclaration. */
1910 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
1911 return 0;
1912 else
1913 return "redefinition of %q#D";
1915 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1917 /* If this is a pure function, its olddecl will actually be
1918 the original initialization to `0' (which we force to call
1919 abort()). Don't complain about redefinition in this case. */
1920 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
1921 && DECL_INITIAL (olddecl) == NULL_TREE)
1922 return 0;
1924 /* If both functions come from different namespaces, this is not
1925 a redeclaration - this is a conflict with a used function. */
1926 if (DECL_NAMESPACE_SCOPE_P (olddecl)
1927 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
1928 && ! decls_match (olddecl, newdecl))
1929 return "%qD conflicts with used function";
1931 /* We'll complain about linkage mismatches in
1932 warn_extern_redeclared_static. */
1934 /* Defining the same name twice is no good. */
1935 if (DECL_INITIAL (olddecl) != NULL_TREE
1936 && DECL_INITIAL (newdecl) != NULL_TREE)
1938 if (DECL_NAME (olddecl) == NULL_TREE)
1939 return "%q#D not declared in class";
1940 else
1941 return "redefinition of %q#D";
1943 return 0;
1945 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1947 tree nt, ot;
1949 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1951 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
1952 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
1953 return "redefinition of %q#D";
1954 return NULL;
1957 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
1958 || (DECL_TEMPLATE_RESULT (newdecl)
1959 == DECL_TEMPLATE_RESULT (olddecl)))
1960 return NULL;
1962 nt = DECL_TEMPLATE_RESULT (newdecl);
1963 if (DECL_TEMPLATE_INFO (nt))
1964 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
1965 ot = DECL_TEMPLATE_RESULT (olddecl);
1966 if (DECL_TEMPLATE_INFO (ot))
1967 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
1968 if (DECL_INITIAL (nt) && DECL_INITIAL (ot))
1969 return "redefinition of %q#D";
1971 return NULL;
1973 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
1975 /* Objects declared at top level: */
1976 /* If at least one is a reference, it's ok. */
1977 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
1978 return 0;
1979 /* Reject two definitions. */
1980 return "redefinition of %q#D";
1982 else
1984 /* Objects declared with block scope: */
1985 /* Reject two definitions, and reject a definition
1986 together with an external reference. */
1987 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
1988 return "redeclaration of %q#D";
1989 return 0;
1993 /* Create a new label, named ID. */
1995 static tree
1996 make_label_decl (tree id, int local_p)
1998 tree decl;
2000 decl = build_decl (LABEL_DECL, id, void_type_node);
2002 DECL_CONTEXT (decl) = current_function_decl;
2003 DECL_MODE (decl) = VOIDmode;
2004 C_DECLARED_LABEL_FLAG (decl) = local_p;
2006 /* Say where one reference is to the label, for the sake of the
2007 error if it is not defined. */
2008 DECL_SOURCE_LOCATION (decl) = input_location;
2010 /* Record the fact that this identifier is bound to this label. */
2011 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2013 return decl;
2016 /* Record this label on the list of used labels so that we can check
2017 at the end of the function to see whether or not the label was
2018 actually defined, and so we can check when the label is defined whether
2019 this use is valid. */
2021 static void
2022 use_label (tree decl)
2024 if (named_label_uses == NULL
2025 || named_label_uses->names_in_scope != current_binding_level->names
2026 || named_label_uses->label_decl != decl)
2028 struct named_label_use_list *new_ent;
2029 new_ent = GGC_NEW (struct named_label_use_list);
2030 new_ent->label_decl = decl;
2031 new_ent->names_in_scope = current_binding_level->names;
2032 new_ent->binding_level = current_binding_level;
2033 new_ent->o_goto_locus = input_location;
2034 new_ent->next = named_label_uses;
2035 named_label_uses = new_ent;
2039 /* Look for a label named ID in the current function. If one cannot
2040 be found, create one. (We keep track of used, but undefined,
2041 labels, and complain about them at the end of a function.) */
2043 tree
2044 lookup_label (tree id)
2046 tree decl;
2047 struct named_label_list *ent;
2049 timevar_push (TV_NAME_LOOKUP);
2050 /* You can't use labels at global scope. */
2051 if (current_function_decl == NULL_TREE)
2053 error ("label %qE referenced outside of any function", id);
2054 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2057 /* See if we've already got this label. */
2058 decl = IDENTIFIER_LABEL_VALUE (id);
2059 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2060 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2062 /* Record this label on the list of labels used in this function.
2063 We do this before calling make_label_decl so that we get the
2064 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2065 ent = GGC_CNEW (struct named_label_list);
2066 ent->old_value = IDENTIFIER_LABEL_VALUE (id);
2067 ent->next = named_labels;
2068 named_labels = ent;
2070 /* We need a new label. */
2071 decl = make_label_decl (id, /*local_p=*/0);
2073 /* Now fill in the information we didn't have before. */
2074 ent->label_decl = decl;
2076 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2079 /* Declare a local label named ID. */
2081 tree
2082 declare_local_label (tree id)
2084 tree decl;
2086 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2087 this scope we can restore the old value of
2088 IDENTIFIER_TYPE_VALUE. */
2089 current_binding_level->shadowed_labels
2090 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2091 current_binding_level->shadowed_labels);
2092 /* Look for the label. */
2093 decl = make_label_decl (id, /*local_p=*/1);
2094 /* Now fill in the information we didn't have before. */
2095 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
2097 return decl;
2100 /* Returns nonzero if it is ill-formed to jump past the declaration of
2101 DECL. Returns 2 if it's also a real problem. */
2103 static int
2104 decl_jump_unsafe (tree decl)
2106 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
2107 return 0;
2109 if (DECL_INITIAL (decl) == NULL_TREE
2110 && pod_type_p (TREE_TYPE (decl)))
2111 return 0;
2113 /* This is really only important if we're crossing an initialization.
2114 The POD stuff is just pedantry; why should it matter if the class
2115 contains a field of pointer to member type? */
2116 if (DECL_INITIAL (decl)
2117 || (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))))
2118 return 2;
2119 return 1;
2122 /* Check that a single previously seen jump to a newly defined label
2123 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2124 the jump context; NAMES are the names in scope in LEVEL at the jump
2125 context; FILE and LINE are the source position of the jump or 0. */
2127 static void
2128 check_previous_goto_1 (tree decl,
2129 struct cp_binding_level* level,
2130 tree names, const location_t *locus)
2132 int identified = 0;
2133 int saw_eh = 0;
2134 struct cp_binding_level *b = current_binding_level;
2135 for (; b; b = b->level_chain)
2137 tree new_decls = b->names;
2138 tree old_decls = (b == level ? names : NULL_TREE);
2139 for (; new_decls != old_decls;
2140 new_decls = TREE_CHAIN (new_decls))
2142 int problem = decl_jump_unsafe (new_decls);
2143 if (! problem)
2144 continue;
2146 if (! identified)
2148 if (decl)
2149 pedwarn ("jump to label %qD", decl);
2150 else
2151 pedwarn ("jump to case label");
2153 if (locus)
2154 pedwarn ("%H from here", locus);
2155 identified = 1;
2158 if (problem > 1)
2159 cp_error_at (" crosses initialization of %q#D",
2160 new_decls);
2161 else
2162 cp_pedwarn_at (" enters scope of non-POD %q#D",
2163 new_decls);
2166 if (b == level)
2167 break;
2168 if ((b->kind == sk_try || b->kind == sk_catch) && ! saw_eh)
2170 if (! identified)
2172 if (decl)
2173 pedwarn ("jump to label %qD", decl);
2174 else
2175 pedwarn ("jump to case label");
2177 if (locus)
2178 pedwarn ("%H from here", locus);
2179 identified = 1;
2181 if (b->kind == sk_try)
2182 error (" enters try block");
2183 else
2184 error (" enters catch block");
2185 saw_eh = 1;
2190 static void
2191 check_previous_goto (struct named_label_use_list* use)
2193 check_previous_goto_1 (use->label_decl, use->binding_level,
2194 use->names_in_scope, &use->o_goto_locus);
2197 static void
2198 check_switch_goto (struct cp_binding_level* level)
2200 check_previous_goto_1 (NULL_TREE, level, level->names, NULL);
2203 /* Check that any previously seen jumps to a newly defined label DECL
2204 are OK. Called by define_label. */
2206 static void
2207 check_previous_gotos (tree decl)
2209 struct named_label_use_list **usep;
2211 if (! TREE_USED (decl))
2212 return;
2214 for (usep = &named_label_uses; *usep; )
2216 struct named_label_use_list *use = *usep;
2217 if (use->label_decl == decl)
2219 check_previous_goto (use);
2220 *usep = use->next;
2222 else
2223 usep = &(use->next);
2227 /* Check that a new jump to a label DECL is OK. Called by
2228 finish_goto_stmt. */
2230 void
2231 check_goto (tree decl)
2233 int identified = 0;
2234 tree bad;
2235 struct named_label_list *lab;
2237 /* We can't know where a computed goto is jumping. So we assume
2238 that it's OK. */
2239 if (! DECL_P (decl))
2240 return;
2242 /* If the label hasn't been defined yet, defer checking. */
2243 if (! DECL_INITIAL (decl))
2245 use_label (decl);
2246 return;
2249 for (lab = named_labels; lab; lab = lab->next)
2250 if (decl == lab->label_decl)
2251 break;
2253 /* If the label is not on named_labels it's a gcc local label, so
2254 it must be in an outer scope, so jumping to it is always OK. */
2255 if (lab == 0)
2256 return;
2258 if ((lab->in_try_scope || lab->in_catch_scope || lab->bad_decls)
2259 && !identified)
2261 cp_pedwarn_at ("jump to label %qD", decl);
2262 pedwarn (" from here");
2263 identified = 1;
2266 for (bad = lab->bad_decls; bad; bad = TREE_CHAIN (bad))
2268 tree b = TREE_VALUE (bad);
2269 int u = decl_jump_unsafe (b);
2271 if (u > 1 && DECL_ARTIFICIAL (b))
2272 /* Can't skip init of __exception_info. */
2273 error ("%J enters catch block", b);
2274 else if (u > 1)
2275 cp_error_at (" skips initialization of %q#D", b);
2276 else
2277 cp_pedwarn_at (" enters scope of non-POD %q#D", b);
2280 if (lab->in_try_scope)
2281 error (" enters try block");
2282 else if (lab->in_catch_scope)
2283 error (" enters catch block");
2286 /* Define a label, specifying the location in the source file.
2287 Return the LABEL_DECL node for the label. */
2289 tree
2290 define_label (location_t location, tree name)
2292 tree decl = lookup_label (name);
2293 struct named_label_list *ent;
2294 struct cp_binding_level *p;
2296 timevar_push (TV_NAME_LOOKUP);
2297 for (ent = named_labels; ent; ent = ent->next)
2298 if (ent->label_decl == decl)
2299 break;
2301 /* After labels, make any new cleanups in the function go into their
2302 own new (temporary) binding contour. */
2303 for (p = current_binding_level;
2304 p->kind != sk_function_parms;
2305 p = p->level_chain)
2306 p->more_cleanups_ok = 0;
2308 if (name == get_identifier ("wchar_t"))
2309 pedwarn ("label named wchar_t");
2311 if (DECL_INITIAL (decl) != NULL_TREE)
2312 error ("duplicate label %qD", decl);
2313 else
2315 /* Mark label as having been defined. */
2316 DECL_INITIAL (decl) = error_mark_node;
2317 /* Say where in the source. */
2318 DECL_SOURCE_LOCATION (decl) = location;
2319 if (ent)
2321 ent->names_in_scope = current_binding_level->names;
2322 ent->binding_level = current_binding_level;
2324 check_previous_gotos (decl);
2327 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2330 struct cp_switch
2332 struct cp_binding_level *level;
2333 struct cp_switch *next;
2334 /* The SWITCH_STMT being built. */
2335 tree switch_stmt;
2336 /* A splay-tree mapping the low element of a case range to the high
2337 element, or NULL_TREE if there is no high element. Used to
2338 determine whether or not a new case label duplicates an old case
2339 label. We need a tree, rather than simply a hash table, because
2340 of the GNU case range extension. */
2341 splay_tree cases;
2344 /* A stack of the currently active switch statements. The innermost
2345 switch statement is on the top of the stack. There is no need to
2346 mark the stack for garbage collection because it is only active
2347 during the processing of the body of a function, and we never
2348 collect at that point. */
2350 static struct cp_switch *switch_stack;
2352 /* Called right after a switch-statement condition is parsed.
2353 SWITCH_STMT is the switch statement being parsed. */
2355 void
2356 push_switch (tree switch_stmt)
2358 struct cp_switch *p = xmalloc (sizeof (struct cp_switch));
2359 p->level = current_binding_level;
2360 p->next = switch_stack;
2361 p->switch_stmt = switch_stmt;
2362 p->cases = splay_tree_new (case_compare, NULL, NULL);
2363 switch_stack = p;
2366 void
2367 pop_switch (void)
2369 struct cp_switch *cs = switch_stack;
2370 location_t switch_location;
2372 /* Emit warnings as needed. */
2373 if (EXPR_HAS_LOCATION (cs->switch_stmt))
2374 switch_location = EXPR_LOCATION (cs->switch_stmt);
2375 else
2376 switch_location = input_location;
2377 c_do_switch_warnings (cs->cases, switch_location,
2378 SWITCH_STMT_TYPE (cs->switch_stmt),
2379 SWITCH_STMT_COND (cs->switch_stmt));
2381 splay_tree_delete (cs->cases);
2382 switch_stack = switch_stack->next;
2383 free (cs);
2386 /* Note that we've seen a definition of a case label, and complain if this
2387 is a bad place for one. */
2389 tree
2390 finish_case_label (tree low_value, tree high_value)
2392 tree cond, r;
2393 struct cp_binding_level *p;
2395 if (processing_template_decl)
2397 tree label;
2399 /* For templates, just add the case label; we'll do semantic
2400 analysis at instantiation-time. */
2401 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
2402 return add_stmt (build_case_label (low_value, high_value, label));
2405 /* Find the condition on which this switch statement depends. */
2406 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
2407 if (cond && TREE_CODE (cond) == TREE_LIST)
2408 cond = TREE_VALUE (cond);
2410 r = c_add_case_label (switch_stack->cases, cond, TREE_TYPE (cond),
2411 low_value, high_value);
2413 check_switch_goto (switch_stack->level);
2415 /* After labels, make any new cleanups in the function go into their
2416 own new (temporary) binding contour. */
2417 for (p = current_binding_level;
2418 p->kind != sk_function_parms;
2419 p = p->level_chain)
2420 p->more_cleanups_ok = 0;
2422 return r;
2425 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2427 static hashval_t
2428 typename_hash (const void* k)
2430 hashval_t hash;
2431 tree t = (tree) k;
2433 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2434 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
2436 return hash;
2439 typedef struct typename_info {
2440 tree scope;
2441 tree name;
2442 tree template_id;
2443 bool enum_p;
2444 bool class_p;
2445 } typename_info;
2447 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
2449 static int
2450 typename_compare (const void * k1, const void * k2)
2452 tree t1;
2453 const typename_info *t2;
2455 t1 = (tree) k1;
2456 t2 = (const typename_info *) k2;
2458 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2459 && TYPE_CONTEXT (t1) == t2->scope
2460 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2461 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2462 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
2465 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
2466 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
2468 Returns the new TYPENAME_TYPE. */
2470 static GTY ((param_is (union tree_node))) htab_t typename_htab;
2472 static tree
2473 build_typename_type (tree context, tree name, tree fullname,
2474 enum tag_types tag_type)
2476 tree t;
2477 tree d;
2478 typename_info ti;
2479 void **e;
2480 hashval_t hash;
2482 if (typename_htab == NULL)
2483 typename_htab = htab_create_ggc (61, &typename_hash,
2484 &typename_compare, NULL);
2486 ti.scope = FROB_CONTEXT (context);
2487 ti.name = name;
2488 ti.template_id = fullname;
2489 ti.enum_p = tag_type == enum_type;
2490 ti.class_p = (tag_type == class_type
2491 || tag_type == record_type
2492 || tag_type == union_type);
2493 hash = (htab_hash_pointer (ti.scope)
2494 ^ htab_hash_pointer (ti.name));
2496 /* See if we already have this type. */
2497 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
2498 if (*e)
2499 t = (tree) *e;
2500 else
2502 /* Build the TYPENAME_TYPE. */
2503 t = make_aggr_type (TYPENAME_TYPE);
2504 TYPE_CONTEXT (t) = ti.scope;
2505 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2506 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2507 TYPENAME_IS_CLASS_P (t) = ti.class_p;
2509 /* Build the corresponding TYPE_DECL. */
2510 d = build_decl (TYPE_DECL, name, t);
2511 TYPE_NAME (TREE_TYPE (d)) = d;
2512 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2513 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2514 DECL_ARTIFICIAL (d) = 1;
2516 /* Store it in the hash table. */
2517 *e = t;
2520 return t;
2523 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
2524 provided to name the type. Returns an appropriate type, unless an
2525 error occurs, in which case error_mark_node is returned. If we
2526 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2527 return that, rather than the _TYPE it corresponds to, in other
2528 cases we look through the type decl. If TF_ERROR is set, complain
2529 about errors, otherwise be quiet. */
2531 tree
2532 make_typename_type (tree context, tree name, enum tag_types tag_type,
2533 tsubst_flags_t complain)
2535 tree fullname;
2537 if (name == error_mark_node
2538 || context == NULL_TREE
2539 || context == error_mark_node)
2540 return error_mark_node;
2542 if (TYPE_P (name))
2544 if (!(TYPE_LANG_SPECIFIC (name)
2545 && (CLASSTYPE_IS_TEMPLATE (name)
2546 || CLASSTYPE_USE_TEMPLATE (name))))
2547 name = TYPE_IDENTIFIER (name);
2548 else
2549 /* Create a TEMPLATE_ID_EXPR for the type. */
2550 name = build_nt (TEMPLATE_ID_EXPR,
2551 CLASSTYPE_TI_TEMPLATE (name),
2552 CLASSTYPE_TI_ARGS (name));
2554 else if (TREE_CODE (name) == TYPE_DECL)
2555 name = DECL_NAME (name);
2557 fullname = name;
2559 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2561 name = TREE_OPERAND (name, 0);
2562 if (TREE_CODE (name) == TEMPLATE_DECL)
2563 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
2565 if (TREE_CODE (name) == TEMPLATE_DECL)
2567 error ("%qD used without template parameters", name);
2568 return error_mark_node;
2570 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2571 gcc_assert (TYPE_P (context));
2573 if (!dependent_type_p (context)
2574 || currently_open_class (context))
2576 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
2578 tree tmpl = NULL_TREE;
2579 if (IS_AGGR_TYPE (context))
2580 tmpl = lookup_field (context, name, 0, false);
2581 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2583 if (complain & tf_error)
2584 error ("no class template named %q#T in %q#T",
2585 name, context);
2586 return error_mark_node;
2589 if (complain & tf_error)
2590 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2592 return lookup_template_class (tmpl,
2593 TREE_OPERAND (fullname, 1),
2594 NULL_TREE, context,
2595 /*entering_scope=*/0,
2596 tf_error | tf_warning | tf_user);
2598 else
2600 tree t;
2602 if (!IS_AGGR_TYPE (context))
2604 if (complain & tf_error)
2605 error ("no type named %q#T in %q#T", name, context);
2606 return error_mark_node;
2609 t = lookup_field (context, name, 0, true);
2610 if (t)
2612 if (TREE_CODE (t) != TYPE_DECL)
2614 if (complain & tf_error)
2615 error ("no type named %q#T in %q#T", name, context);
2616 return error_mark_node;
2619 if (complain & tf_error)
2620 perform_or_defer_access_check (TYPE_BINFO (context), t);
2622 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
2623 t = TREE_TYPE (t);
2625 return t;
2630 /* If the CONTEXT is not a template type, then either the field is
2631 there now or its never going to be. */
2632 if (!dependent_type_p (context))
2634 if (complain & tf_error)
2635 error ("no type named %q#T in %q#T", name, context);
2636 return error_mark_node;
2639 return build_typename_type (context, name, fullname, tag_type);
2642 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
2643 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
2644 in which case error_mark_node is returned.
2646 If PARM_LIST is non-NULL, also make sure that the template parameter
2647 list of TEMPLATE_DECL matches.
2649 If COMPLAIN zero, don't complain about any errors that occur. */
2651 tree
2652 make_unbound_class_template (tree context, tree name, tree parm_list,
2653 tsubst_flags_t complain)
2655 tree t;
2656 tree d;
2658 if (TYPE_P (name))
2659 name = TYPE_IDENTIFIER (name);
2660 else if (DECL_P (name))
2661 name = DECL_NAME (name);
2662 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2664 if (!dependent_type_p (context)
2665 || currently_open_class (context))
2667 tree tmpl = NULL_TREE;
2669 if (IS_AGGR_TYPE (context))
2670 tmpl = lookup_field (context, name, 0, false);
2672 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2674 if (complain & tf_error)
2675 error ("no class template named %q#T in %q#T", name, context);
2676 return error_mark_node;
2679 if (parm_list
2680 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
2682 if (complain & tf_error)
2684 error ("template parameters do not match template");
2685 cp_error_at ("%qD declared here", tmpl);
2687 return error_mark_node;
2690 if (complain & tf_error)
2691 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2693 return tmpl;
2696 /* Build the UNBOUND_CLASS_TEMPLATE. */
2697 t = make_aggr_type (UNBOUND_CLASS_TEMPLATE);
2698 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
2699 TREE_TYPE (t) = NULL_TREE;
2701 /* Build the corresponding TEMPLATE_DECL. */
2702 d = build_decl (TEMPLATE_DECL, name, t);
2703 TYPE_NAME (TREE_TYPE (d)) = d;
2704 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2705 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2706 DECL_ARTIFICIAL (d) = 1;
2707 DECL_TEMPLATE_PARMS (d) = parm_list;
2709 return t;
2714 /* Push the declarations of builtin types into the namespace.
2715 RID_INDEX is the index of the builtin type in the array
2716 RID_POINTERS. NAME is the name used when looking up the builtin
2717 type. TYPE is the _TYPE node for the builtin type. */
2719 void
2720 record_builtin_type (enum rid rid_index,
2721 const char* name,
2722 tree type)
2724 tree rname = NULL_TREE, tname = NULL_TREE;
2725 tree tdecl = NULL_TREE;
2727 if ((int) rid_index < (int) RID_MAX)
2728 rname = ridpointers[(int) rid_index];
2729 if (name)
2730 tname = get_identifier (name);
2732 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
2733 eliminated. Built-in types should not be looked up name; their
2734 names are keywords that the parser can recognize. However, there
2735 is code in c-common.c that uses identifier_global_value to look
2736 up built-in types by name. */
2737 if (tname)
2739 tdecl = build_decl (TYPE_DECL, tname, type);
2740 DECL_ARTIFICIAL (tdecl) = 1;
2741 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
2743 if (rname)
2745 if (!tdecl)
2747 tdecl = build_decl (TYPE_DECL, rname, type);
2748 DECL_ARTIFICIAL (tdecl) = 1;
2750 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
2753 if (!TYPE_NAME (type))
2754 TYPE_NAME (type) = tdecl;
2756 if (tdecl)
2757 debug_hooks->type_decl (tdecl, 0);
2760 /* Record one of the standard Java types.
2761 * Declare it as having the given NAME.
2762 * If SIZE > 0, it is the size of one of the integral types;
2763 * otherwise it is the negative of the size of one of the other types. */
2765 static tree
2766 record_builtin_java_type (const char* name, int size)
2768 tree type, decl;
2769 if (size > 0)
2770 type = make_signed_type (size);
2771 else if (size > -32)
2772 { /* "__java_char" or ""__java_boolean". */
2773 type = make_unsigned_type (-size);
2774 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
2776 else
2777 { /* "__java_float" or ""__java_double". */
2778 type = make_node (REAL_TYPE);
2779 TYPE_PRECISION (type) = - size;
2780 layout_type (type);
2782 record_builtin_type (RID_MAX, name, type);
2783 decl = TYPE_NAME (type);
2785 /* Suppress generate debug symbol entries for these types,
2786 since for normal C++ they are just clutter.
2787 However, push_lang_context undoes this if extern "Java" is seen. */
2788 DECL_IGNORED_P (decl) = 1;
2790 TYPE_FOR_JAVA (type) = 1;
2791 return type;
2794 /* Push a type into the namespace so that the back-ends ignore it. */
2796 static void
2797 record_unknown_type (tree type, const char* name)
2799 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
2800 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
2801 DECL_IGNORED_P (decl) = 1;
2802 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
2803 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
2804 TYPE_ALIGN (type) = 1;
2805 TYPE_USER_ALIGN (type) = 0;
2806 TYPE_MODE (type) = TYPE_MODE (void_type_node);
2809 /* An string for which we should create an IDENTIFIER_NODE at
2810 startup. */
2812 typedef struct predefined_identifier
2814 /* The name of the identifier. */
2815 const char *const name;
2816 /* The place where the IDENTIFIER_NODE should be stored. */
2817 tree *const node;
2818 /* Nonzero if this is the name of a constructor or destructor. */
2819 const int ctor_or_dtor_p;
2820 } predefined_identifier;
2822 /* Create all the predefined identifiers. */
2824 static void
2825 initialize_predefined_identifiers (void)
2827 const predefined_identifier *pid;
2829 /* A table of identifiers to create at startup. */
2830 static const predefined_identifier predefined_identifiers[] = {
2831 { "C++", &lang_name_cplusplus, 0 },
2832 { "C", &lang_name_c, 0 },
2833 { "Java", &lang_name_java, 0 },
2834 /* Some of these names have a trailing space so that it is
2835 impossible for them to conflict with names written by users. */
2836 { "__ct ", &ctor_identifier, 1 },
2837 { "__base_ctor ", &base_ctor_identifier, 1 },
2838 { "__comp_ctor ", &complete_ctor_identifier, 1 },
2839 { "__dt ", &dtor_identifier, 1 },
2840 { "__comp_dtor ", &complete_dtor_identifier, 1 },
2841 { "__base_dtor ", &base_dtor_identifier, 1 },
2842 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
2843 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
2844 { "nelts", &nelts_identifier, 0 },
2845 { THIS_NAME, &this_identifier, 0 },
2846 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
2847 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
2848 { "_vptr", &vptr_identifier, 0 },
2849 { "__vtt_parm", &vtt_parm_identifier, 0 },
2850 { "::", &global_scope_name, 0 },
2851 { "std", &std_identifier, 0 },
2852 { NULL, NULL, 0 }
2855 for (pid = predefined_identifiers; pid->name; ++pid)
2857 *pid->node = get_identifier (pid->name);
2858 if (pid->ctor_or_dtor_p)
2859 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
2863 /* Create the predefined scalar types of C,
2864 and some nodes representing standard constants (0, 1, (void *)0).
2865 Initialize the global binding level.
2866 Make definitions for built-in primitive functions. */
2868 void
2869 cxx_init_decl_processing (void)
2871 tree void_ftype;
2872 tree void_ftype_ptr;
2874 build_common_tree_nodes (flag_signed_char, false);
2876 /* Create all the identifiers we need. */
2877 initialize_predefined_identifiers ();
2879 /* Create the global variables. */
2880 push_to_top_level ();
2882 current_function_decl = NULL_TREE;
2883 current_binding_level = NULL;
2884 /* Enter the global namespace. */
2885 gcc_assert (global_namespace == NULL_TREE);
2886 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
2887 void_type_node);
2888 begin_scope (sk_namespace, global_namespace);
2890 current_lang_name = NULL_TREE;
2892 /* Adjust various flags based on command-line settings. */
2893 if (!flag_permissive)
2894 flag_pedantic_errors = 1;
2895 if (!flag_no_inline)
2897 flag_inline_trees = 1;
2898 flag_no_inline = 1;
2900 if (flag_inline_functions)
2901 flag_inline_trees = 2;
2903 /* Force minimum function alignment if using the least significant
2904 bit of function pointers to store the virtual bit. */
2905 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
2906 && force_align_functions_log < 1)
2907 force_align_functions_log = 1;
2909 /* Initially, C. */
2910 current_lang_name = lang_name_c;
2912 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
2913 TREE_TYPE (error_mark_list) = error_mark_node;
2915 /* Create the `std' namespace. */
2916 push_namespace (std_identifier);
2917 std_node = current_namespace;
2918 pop_namespace ();
2920 c_common_nodes_and_builtins ();
2922 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
2923 java_short_type_node = record_builtin_java_type ("__java_short", 16);
2924 java_int_type_node = record_builtin_java_type ("__java_int", 32);
2925 java_long_type_node = record_builtin_java_type ("__java_long", 64);
2926 java_float_type_node = record_builtin_java_type ("__java_float", -32);
2927 java_double_type_node = record_builtin_java_type ("__java_double", -64);
2928 java_char_type_node = record_builtin_java_type ("__java_char", -16);
2929 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
2931 integer_two_node = build_int_cst (NULL_TREE, 2);
2932 integer_three_node = build_int_cst (NULL_TREE, 3);
2934 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
2935 truthvalue_type_node = boolean_type_node;
2936 truthvalue_false_node = boolean_false_node;
2937 truthvalue_true_node = boolean_true_node;
2939 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
2941 #if 0
2942 record_builtin_type (RID_MAX, NULL, string_type_node);
2943 #endif
2945 delta_type_node = ptrdiff_type_node;
2946 vtable_index_type = ptrdiff_type_node;
2948 vtt_parm_type = build_pointer_type (const_ptr_type_node);
2949 void_ftype = build_function_type (void_type_node, void_list_node);
2950 void_ftype_ptr = build_function_type (void_type_node,
2951 tree_cons (NULL_TREE,
2952 ptr_type_node,
2953 void_list_node));
2954 void_ftype_ptr
2955 = build_exception_variant (void_ftype_ptr, empty_except_spec);
2957 /* C++ extensions */
2959 unknown_type_node = make_node (UNKNOWN_TYPE);
2960 record_unknown_type (unknown_type_node, "unknown type");
2962 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
2963 TREE_TYPE (unknown_type_node) = unknown_type_node;
2965 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
2966 result. */
2967 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
2968 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
2971 /* Make sure we get a unique function type, so we can give
2972 its pointer type a name. (This wins for gdb.) */
2973 tree vfunc_type = make_node (FUNCTION_TYPE);
2974 TREE_TYPE (vfunc_type) = integer_type_node;
2975 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
2976 layout_type (vfunc_type);
2978 vtable_entry_type = build_pointer_type (vfunc_type);
2980 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
2982 vtbl_type_node
2983 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
2984 layout_type (vtbl_type_node);
2985 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
2986 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
2987 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
2988 layout_type (vtbl_ptr_type_node);
2989 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
2991 push_namespace (get_identifier ("__cxxabiv1"));
2992 abi_node = current_namespace;
2993 pop_namespace ();
2995 global_type_node = make_node (LANG_TYPE);
2996 record_unknown_type (global_type_node, "global type");
2998 /* Now, C++. */
2999 current_lang_name = lang_name_cplusplus;
3002 tree bad_alloc_id;
3003 tree bad_alloc_type_node;
3004 tree bad_alloc_decl;
3005 tree newtype, deltype;
3006 tree ptr_ftype_sizetype;
3008 push_namespace (std_identifier);
3009 bad_alloc_id = get_identifier ("bad_alloc");
3010 bad_alloc_type_node = make_aggr_type (RECORD_TYPE);
3011 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3012 bad_alloc_decl
3013 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3014 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3015 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
3016 pop_namespace ();
3018 ptr_ftype_sizetype
3019 = build_function_type (ptr_type_node,
3020 tree_cons (NULL_TREE,
3021 size_type_node,
3022 void_list_node));
3023 newtype = build_exception_variant
3024 (ptr_ftype_sizetype, add_exception_specifier
3025 (NULL_TREE, bad_alloc_type_node, -1));
3026 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3027 push_cp_library_fn (NEW_EXPR, newtype);
3028 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3029 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3030 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3033 abort_fndecl
3034 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3036 /* Perform other language dependent initializations. */
3037 init_class_processing ();
3038 init_rtti_processing ();
3040 if (flag_exceptions)
3041 init_exception_processing ();
3043 if (! supports_one_only ())
3044 flag_weak = 0;
3046 make_fname_decl = cp_make_fname_decl;
3047 start_fname_decls ();
3049 /* Show we use EH for cleanups. */
3050 if (flag_exceptions)
3051 using_eh_for_cleanups ();
3054 /* Generate an initializer for a function naming variable from
3055 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3056 filled in with the type of the init. */
3058 tree
3059 cp_fname_init (const char* name, tree *type_p)
3061 tree domain = NULL_TREE;
3062 tree type;
3063 tree init = NULL_TREE;
3064 size_t length = 0;
3066 if (name)
3068 length = strlen (name);
3069 domain = build_index_type (size_int (length));
3070 init = build_string (length + 1, name);
3073 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3074 type = build_cplus_array_type (type, domain);
3076 *type_p = type;
3078 if (init)
3079 TREE_TYPE (init) = type;
3080 else
3081 init = error_mark_node;
3083 return init;
3086 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3087 decl, NAME is the initialization string and TYPE_DEP indicates whether
3088 NAME depended on the type of the function. We make use of that to detect
3089 __PRETTY_FUNCTION__ inside a template fn. This is being done
3090 lazily at the point of first use, so we mustn't push the decl now. */
3092 static tree
3093 cp_make_fname_decl (tree id, int type_dep)
3095 const char *const name = (type_dep && processing_template_decl
3096 ? NULL : fname_as_string (type_dep));
3097 tree type;
3098 tree init = cp_fname_init (name, &type);
3099 tree decl = build_decl (VAR_DECL, id, type);
3101 if (name)
3102 free ((char *) name);
3104 /* As we're using pushdecl_with_scope, we must set the context. */
3105 DECL_CONTEXT (decl) = current_function_decl;
3106 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3108 TREE_STATIC (decl) = 1;
3109 TREE_READONLY (decl) = 1;
3110 DECL_ARTIFICIAL (decl) = 1;
3111 DECL_INITIAL (decl) = init;
3113 TREE_USED (decl) = 1;
3115 if (current_function_decl)
3117 struct cp_binding_level *b = current_binding_level;
3118 while (b->level_chain->kind != sk_function_parms)
3119 b = b->level_chain;
3120 pushdecl_with_scope (decl, b);
3121 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
3123 else
3124 pushdecl_top_level_and_finish (decl, init);
3126 return decl;
3129 /* Make a definition for a builtin function named NAME in the current
3130 namespace, whose data type is TYPE and whose context is CONTEXT.
3131 TYPE should be a function type with argument types.
3133 CLASS and CODE tell later passes how to compile calls to this function.
3134 See tree.h for possible values.
3136 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3137 the name to be called if we can't opencode the function.
3138 If ATTRS is nonzero, use that for the function's attribute
3139 list. */
3141 static tree
3142 builtin_function_1 (const char* name,
3143 tree type,
3144 tree context,
3145 enum built_in_function code,
3146 enum built_in_class class,
3147 const char* libname,
3148 tree attrs)
3150 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
3151 DECL_BUILT_IN_CLASS (decl) = class;
3152 DECL_FUNCTION_CODE (decl) = code;
3153 DECL_CONTEXT (decl) = context;
3155 pushdecl (decl);
3157 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
3158 we cannot change DECL_ASSEMBLER_NAME until we have installed this
3159 function in the namespace. */
3160 if (libname)
3161 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
3163 /* Warn if a function in the namespace for users
3164 is used without an occasion to consider it declared. */
3165 if (name[0] != '_' || name[1] != '_')
3166 DECL_ANTICIPATED (decl) = 1;
3168 /* Possibly apply some default attributes to this built-in function. */
3169 if (attrs)
3170 decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
3171 else
3172 decl_attributes (&decl, NULL_TREE, 0);
3174 return decl;
3177 /* Entry point for the benefit of c_common_nodes_and_builtins.
3179 Make a definition for a builtin function named NAME and whose data type
3180 is TYPE. TYPE should be a function type with argument types. This
3181 function places the anticipated declaration in the global namespace
3182 and additionally in the std namespace if appropriate.
3184 CLASS and CODE tell later passes how to compile calls to this function.
3185 See tree.h for possible values.
3187 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3188 the name to be called if we can't opencode the function.
3190 If ATTRS is nonzero, use that for the function's attribute
3191 list. */
3193 tree
3194 builtin_function (const char* name,
3195 tree type,
3196 int code,
3197 enum built_in_class cl,
3198 const char* libname,
3199 tree attrs)
3201 /* All builtins that don't begin with an '_' should additionally
3202 go in the 'std' namespace. */
3203 if (name[0] != '_')
3205 push_namespace (std_identifier);
3206 builtin_function_1 (name, type, std_node, code, cl, libname, attrs);
3207 pop_namespace ();
3210 return builtin_function_1 (name, type, NULL_TREE, code,
3211 cl, libname, attrs);
3214 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3215 function. Not called directly. */
3217 static tree
3218 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3220 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3221 DECL_EXTERNAL (fn) = 1;
3222 TREE_PUBLIC (fn) = 1;
3223 DECL_ARTIFICIAL (fn) = 1;
3224 TREE_NOTHROW (fn) = 1;
3225 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3226 SET_DECL_LANGUAGE (fn, lang_c);
3227 /* Runtime library routines are, by definition, available in an
3228 external shared object. */
3229 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3230 DECL_VISIBILITY_SPECIFIED (fn) = 1;
3231 return fn;
3234 /* Returns the _DECL for a library function with C linkage.
3235 We assume that such functions never throw; if this is incorrect,
3236 callers should unset TREE_NOTHROW. */
3238 tree
3239 build_library_fn (tree name, tree type)
3241 return build_library_fn_1 (name, ERROR_MARK, type);
3244 /* Returns the _DECL for a library function with C++ linkage. */
3246 static tree
3247 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3249 tree fn = build_library_fn_1 (name, operator_code, type);
3250 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3251 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3252 SET_DECL_LANGUAGE (fn, lang_cplusplus);
3253 return fn;
3256 /* Like build_library_fn, but takes a C string instead of an
3257 IDENTIFIER_NODE. */
3259 tree
3260 build_library_fn_ptr (const char* name, tree type)
3262 return build_library_fn (get_identifier (name), type);
3265 /* Like build_cp_library_fn, but takes a C string instead of an
3266 IDENTIFIER_NODE. */
3268 tree
3269 build_cp_library_fn_ptr (const char* name, tree type)
3271 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3274 /* Like build_library_fn, but also pushes the function so that we will
3275 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
3277 tree
3278 push_library_fn (tree name, tree type)
3280 tree fn = build_library_fn (name, type);
3281 pushdecl_top_level (fn);
3282 return fn;
3285 /* Like build_cp_library_fn, but also pushes the function so that it
3286 will be found by normal lookup. */
3288 static tree
3289 push_cp_library_fn (enum tree_code operator_code, tree type)
3291 tree fn = build_cp_library_fn (ansi_opname (operator_code),
3292 operator_code,
3293 type);
3294 pushdecl (fn);
3295 return fn;
3298 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3299 a FUNCTION_TYPE. */
3301 tree
3302 push_void_library_fn (tree name, tree parmtypes)
3304 tree type = build_function_type (void_type_node, parmtypes);
3305 return push_library_fn (name, type);
3308 /* Like push_library_fn, but also note that this function throws
3309 and does not return. Used for __throw_foo and the like. */
3311 tree
3312 push_throw_library_fn (tree name, tree type)
3314 tree fn = push_library_fn (name, type);
3315 TREE_THIS_VOLATILE (fn) = 1;
3316 TREE_NOTHROW (fn) = 0;
3317 return fn;
3320 /* When we call finish_struct for an anonymous union, we create
3321 default copy constructors and such. But, an anonymous union
3322 shouldn't have such things; this function undoes the damage to the
3323 anonymous union type T.
3325 (The reason that we create the synthesized methods is that we don't
3326 distinguish `union { int i; }' from `typedef union { int i; } U'.
3327 The first is an anonymous union; the second is just an ordinary
3328 union type.) */
3330 void
3331 fixup_anonymous_aggr (tree t)
3333 tree *q;
3335 /* Wipe out memory of synthesized methods. */
3336 TYPE_HAS_CONSTRUCTOR (t) = 0;
3337 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3338 TYPE_HAS_INIT_REF (t) = 0;
3339 TYPE_HAS_CONST_INIT_REF (t) = 0;
3340 TYPE_HAS_ASSIGN_REF (t) = 0;
3341 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3343 /* Splice the implicitly generated functions out of the TYPE_METHODS
3344 list. */
3345 q = &TYPE_METHODS (t);
3346 while (*q)
3348 if (DECL_ARTIFICIAL (*q))
3349 *q = TREE_CHAIN (*q);
3350 else
3351 q = &TREE_CHAIN (*q);
3354 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
3355 if (TYPE_METHODS (t))
3356 error ("%Jan anonymous union cannot have function members",
3357 TYPE_MAIN_DECL (t));
3359 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3360 assignment operators (because they cannot have these methods themselves).
3361 For anonymous unions this is already checked because they are not allowed
3362 in any union, otherwise we have to check it. */
3363 if (TREE_CODE (t) != UNION_TYPE)
3365 tree field, type;
3367 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3368 if (TREE_CODE (field) == FIELD_DECL)
3370 type = TREE_TYPE (field);
3371 if (CLASS_TYPE_P (type))
3373 if (TYPE_NEEDS_CONSTRUCTING (type))
3374 cp_error_at ("member %q#D with constructor not allowed "
3375 "in anonymous aggregate",
3376 field);
3377 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3378 cp_error_at ("member %q#D with destructor not allowed "
3379 "in anonymous aggregate",
3380 field);
3381 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3382 cp_error_at ("member %q#D with copy assignment operator "
3383 "not allowed in anonymous aggregate",
3384 field);
3390 /* Make sure that a declaration with no declarator is well-formed, i.e.
3391 just declares a tagged type or anonymous union.
3393 Returns the type declared; or NULL_TREE if none. */
3395 tree
3396 check_tag_decl (cp_decl_specifier_seq *declspecs)
3398 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3399 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3400 /* If a class, struct, or enum type is declared by the DECLSPECS
3401 (i.e, if a class-specifier, enum-specifier, or non-typename
3402 elaborated-type-specifier appears in the DECLSPECS),
3403 DECLARED_TYPE is set to the corresponding type. */
3404 tree declared_type = NULL_TREE;
3405 bool error_p = false;
3407 if (declspecs->multiple_types_p)
3408 error ("multiple types in one declaration");
3409 else if (declspecs->redefined_builtin_type)
3411 if (!in_system_header)
3412 pedwarn ("redeclaration of C++ built-in type %qT",
3413 declspecs->redefined_builtin_type);
3414 return NULL_TREE;
3417 if (declspecs->type
3418 && TYPE_P (declspecs->type)
3419 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3420 && IS_AGGR_TYPE (declspecs->type))
3421 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3422 declared_type = declspecs->type;
3423 else if (declspecs->type == error_mark_node)
3424 error_p = true;
3425 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3426 pedwarn ("declaration does not declare anything");
3427 /* Check for an anonymous union. */
3428 else if (declared_type && IS_AGGR_TYPE_CODE (TREE_CODE (declared_type))
3429 && TYPE_ANONYMOUS_P (declared_type))
3431 /* 7/3 In a simple-declaration, the optional init-declarator-list
3432 can be omitted only when declaring a class (clause 9) or
3433 enumeration (7.2), that is, when the decl-specifier-seq contains
3434 either a class-specifier, an elaborated-type-specifier with
3435 a class-key (9.1), or an enum-specifier. In these cases and
3436 whenever a class-specifier or enum-specifier is present in the
3437 decl-specifier-seq, the identifiers in these specifiers are among
3438 the names being declared by the declaration (as class-name,
3439 enum-names, or enumerators, depending on the syntax). In such
3440 cases, and except for the declaration of an unnamed bit-field (9.6),
3441 the decl-specifier-seq shall introduce one or more names into the
3442 program, or shall redeclare a name introduced by a previous
3443 declaration. [Example:
3444 enum { }; // ill-formed
3445 typedef class { }; // ill-formed
3446 --end example] */
3447 if (saw_typedef)
3449 error ("missing type-name in typedef-declaration");
3450 return NULL_TREE;
3452 /* Anonymous unions are objects, so they can have specifiers. */;
3453 SET_ANON_AGGR_TYPE_P (declared_type);
3455 if (TREE_CODE (declared_type) != UNION_TYPE && pedantic
3456 && !in_system_header)
3457 pedwarn ("ISO C++ prohibits anonymous structs");
3460 else
3462 if (declspecs->specs[(int)ds_inline]
3463 || declspecs->specs[(int)ds_virtual])
3464 error ("%qs can only be specified for functions",
3465 declspecs->specs[(int)ds_inline]
3466 ? "inline" : "virtual");
3467 else if (saw_friend
3468 && (!current_class_type
3469 || current_scope () != current_class_type))
3470 error ("%<friend%> can only be specified inside a class");
3471 else if (declspecs->specs[(int)ds_explicit])
3472 error ("%<explicit%> can only be specified for constructors");
3473 else if (declspecs->storage_class)
3474 error ("a storage class can only be specified for objects "
3475 "and functions");
3476 else if (declspecs->specs[(int)ds_const]
3477 || declspecs->specs[(int)ds_volatile]
3478 || declspecs->specs[(int)ds_restrict]
3479 || declspecs->specs[(int)ds_thread])
3480 error ("qualifiers can only be specified for objects "
3481 "and functions");
3484 return declared_type;
3487 /* Called when a declaration is seen that contains no names to declare.
3488 If its type is a reference to a structure, union or enum inherited
3489 from a containing scope, shadow that tag name for the current scope
3490 with a forward reference.
3491 If its type defines a new named structure or union
3492 or defines an enum, it is valid but we need not do anything here.
3493 Otherwise, it is an error.
3495 C++: may have to grok the declspecs to learn about static,
3496 complain for anonymous unions.
3498 Returns the TYPE declared -- or NULL_TREE if none. */
3500 tree
3501 shadow_tag (cp_decl_specifier_seq *declspecs)
3503 tree t = check_tag_decl (declspecs);
3505 if (!t)
3506 return NULL_TREE;
3508 if (declspecs->attributes)
3510 cp_warning_at ("attribute ignored in declaration of %q#T", t);
3511 cp_warning_at ("attribute for %q#T must follow the %qs keyword",
3513 class_key_or_enum_as_string (t));
3517 maybe_process_partial_specialization (t);
3519 /* This is where the variables in an anonymous union are
3520 declared. An anonymous union declaration looks like:
3521 union { ... } ;
3522 because there is no declarator after the union, the parser
3523 sends that declaration here. */
3524 if (ANON_AGGR_TYPE_P (t))
3526 fixup_anonymous_aggr (t);
3528 if (TYPE_FIELDS (t))
3530 tree decl = grokdeclarator (/*declarator=*/NULL,
3531 declspecs, NORMAL, 0, NULL);
3532 finish_anon_union (decl);
3536 return t;
3539 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3541 tree
3542 groktypename (cp_decl_specifier_seq *type_specifiers,
3543 const cp_declarator *declarator)
3545 tree attrs;
3546 tree type;
3547 attrs = type_specifiers->attributes;
3548 type_specifiers->attributes = NULL_TREE;
3549 type = grokdeclarator (declarator, type_specifiers, TYPENAME, 0, &attrs);
3550 if (attrs)
3551 cplus_decl_attributes (&type, attrs, 0);
3552 return type;
3555 /* Decode a declarator in an ordinary declaration or data definition.
3556 This is called as soon as the type information and variable name
3557 have been parsed, before parsing the initializer if any.
3558 Here we create the ..._DECL node, fill in its type,
3559 and put it on the list of decls for the current context.
3560 The ..._DECL node is returned as the value.
3562 Exception: for arrays where the length is not specified,
3563 the type is left null, to be filled in by `cp_finish_decl'.
3565 Function definitions do not come here; they go to start_function
3566 instead. However, external and forward declarations of functions
3567 do go through here. Structure field declarations are done by
3568 grokfield and not through here. */
3570 tree
3571 start_decl (const cp_declarator *declarator,
3572 cp_decl_specifier_seq *declspecs,
3573 int initialized,
3574 tree attributes,
3575 tree prefix_attributes,
3576 tree *pushed_scope_p)
3578 tree decl;
3579 tree type, tem;
3580 tree context;
3582 *pushed_scope_p = NULL_TREE;
3584 /* This should only be done once on the top most decl. */
3585 if (have_extern_spec)
3587 declspecs->storage_class = sc_extern;
3588 have_extern_spec = false;
3591 /* An object declared as __attribute__((deprecated)) suppresses
3592 warnings of uses of other deprecated items. */
3593 if (lookup_attribute ("deprecated", attributes))
3594 deprecated_state = DEPRECATED_SUPPRESS;
3596 attributes = chainon (attributes, prefix_attributes);
3598 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
3599 &attributes);
3601 deprecated_state = DEPRECATED_NORMAL;
3603 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
3604 return error_mark_node;
3606 type = TREE_TYPE (decl);
3608 if (type == error_mark_node)
3609 return error_mark_node;
3611 context = DECL_CONTEXT (decl);
3613 if (context)
3615 *pushed_scope_p = push_scope (context);
3617 /* We are only interested in class contexts, later. */
3618 if (TREE_CODE (context) == NAMESPACE_DECL)
3619 context = NULL_TREE;
3622 if (initialized)
3623 /* Is it valid for this decl to have an initializer at all?
3624 If not, set INITIALIZED to zero, which will indirectly
3625 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3626 switch (TREE_CODE (decl))
3628 case TYPE_DECL:
3629 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
3630 initialized = 0;
3631 break;
3633 case FUNCTION_DECL:
3634 error ("function %q#D is initialized like a variable", decl);
3635 initialized = 0;
3636 break;
3638 default:
3639 break;
3642 if (initialized)
3644 if (! toplevel_bindings_p ()
3645 && DECL_EXTERNAL (decl))
3646 warning (0, "declaration of %q#D has %<extern%> and is initialized",
3647 decl);
3648 DECL_EXTERNAL (decl) = 0;
3649 if (toplevel_bindings_p ())
3650 TREE_STATIC (decl) = 1;
3652 /* Tell `pushdecl' this is an initialized decl
3653 even though we don't yet have the initializer expression.
3654 Also tell `cp_finish_decl' it may store the real initializer. */
3655 DECL_INITIAL (decl) = error_mark_node;
3658 /* Set attributes here so if duplicate decl, will have proper attributes. */
3659 cplus_decl_attributes (&decl, attributes, 0);
3661 /* If #pragma weak was used, mark the decl weak now. */
3662 maybe_apply_pragma_weak (decl);
3664 if (TREE_CODE (decl) == FUNCTION_DECL
3665 && DECL_DECLARED_INLINE_P (decl)
3666 && DECL_UNINLINABLE (decl)
3667 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3668 warning (0, "%Jinline function %qD given attribute noinline", decl, decl);
3670 if (context && COMPLETE_TYPE_P (complete_type (context)))
3672 if (TREE_CODE (decl) == VAR_DECL)
3674 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
3675 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
3676 error ("%q#D is not a static member of %q#T", decl, context);
3677 else
3679 if (DECL_CONTEXT (field) != context)
3681 if (!same_type_p (DECL_CONTEXT (field), context))
3682 pedwarn ("ISO C++ does not permit %<%T::%D%> "
3683 "to be defined as %<%T::%D%>",
3684 DECL_CONTEXT (field), DECL_NAME (decl),
3685 context, DECL_NAME (decl));
3686 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
3688 if (processing_specialization
3689 && template_class_depth (context) == 0
3690 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
3691 error ("template header not allowed in member definition "
3692 "of explicitly specialized class");
3693 /* Static data member are tricky; an in-class initialization
3694 still doesn't provide a definition, so the in-class
3695 declaration will have DECL_EXTERNAL set, but will have an
3696 initialization. Thus, duplicate_decls won't warn
3697 about this situation, and so we check here. */
3698 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
3699 error ("duplicate initialization of %qD", decl);
3700 if (duplicate_decls (decl, field))
3701 decl = field;
3704 else
3706 tree field = check_classfn (context, decl,
3707 (processing_template_decl
3708 > template_class_depth (context))
3709 ? current_template_parms
3710 : NULL_TREE);
3711 if (field && duplicate_decls (decl, field))
3712 decl = field;
3715 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
3716 DECL_IN_AGGR_P (decl) = 0;
3717 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
3718 || CLASSTYPE_TEMPLATE_INSTANTIATION (context))
3720 /* Do not mark DECL as an explicit specialization if it was
3721 not already marked as an instantiation; a declaration
3722 should never be marked as a specialization unless we know
3723 what template is being specialized. */
3724 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
3725 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
3726 /* [temp.expl.spec] An explicit specialization of a static data
3727 member of a template is a definition if the declaration
3728 includes an initializer; otherwise, it is a declaration.
3730 We check for processing_specialization so this only applies
3731 to the new specialization syntax. */
3732 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
3733 DECL_EXTERNAL (decl) = 1;
3736 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
3737 pedwarn ("declaration of %q#D outside of class is not definition",
3738 decl);
3741 /* Enter this declaration into the symbol table. */
3742 tem = maybe_push_decl (decl);
3744 if (processing_template_decl)
3745 tem = push_template_decl (tem);
3746 if (tem == error_mark_node)
3747 return error_mark_node;
3749 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
3750 /* Tell the back-end to use or not use .common as appropriate. If we say
3751 -fconserve-space, we want this to save .data space, at the expense of
3752 wrong semantics. If we say -fno-conserve-space, we want this to
3753 produce errors about redefs; to do this we force variables into the
3754 data segment. */
3755 DECL_COMMON (tem) = ((TREE_CODE (tem) != VAR_DECL
3756 || !DECL_THREAD_LOCAL (tem))
3757 && (flag_conserve_space || ! TREE_PUBLIC (tem)));
3758 #endif
3760 if (! processing_template_decl)
3761 start_decl_1 (tem);
3763 return tem;
3766 void
3767 start_decl_1 (tree decl)
3769 tree type = TREE_TYPE (decl);
3770 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
3772 if (type == error_mark_node)
3773 return;
3775 if (initialized)
3776 /* Is it valid for this decl to have an initializer at all?
3777 If not, set INITIALIZED to zero, which will indirectly
3778 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3780 /* Don't allow initializations for incomplete types except for
3781 arrays which might be completed by the initialization. */
3782 if (COMPLETE_TYPE_P (complete_type (type)))
3783 ; /* A complete type is ok. */
3784 else if (TREE_CODE (type) != ARRAY_TYPE)
3786 error ("variable %q#D has initializer but incomplete type", decl);
3787 initialized = 0;
3788 type = TREE_TYPE (decl) = error_mark_node;
3790 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
3792 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
3793 error ("elements of array %q#D have incomplete type", decl);
3794 /* else we already gave an error in start_decl. */
3795 initialized = 0;
3799 if (!initialized
3800 && TREE_CODE (decl) != TYPE_DECL
3801 && TREE_CODE (decl) != TEMPLATE_DECL
3802 && type != error_mark_node
3803 && IS_AGGR_TYPE (type)
3804 && ! DECL_EXTERNAL (decl))
3806 if ((! processing_template_decl || ! uses_template_parms (type))
3807 && !COMPLETE_TYPE_P (complete_type (type)))
3809 error ("aggregate %q#D has incomplete type and cannot be defined",
3810 decl);
3811 /* Change the type so that assemble_variable will give
3812 DECL an rtl we can live with: (mem (const_int 0)). */
3813 type = TREE_TYPE (decl) = error_mark_node;
3815 else
3817 /* If any base type in the hierarchy of TYPE needs a constructor,
3818 then we set initialized to 1. This way any nodes which are
3819 created for the purposes of initializing this aggregate
3820 will live as long as it does. This is necessary for global
3821 aggregates which do not have their initializers processed until
3822 the end of the file. */
3823 initialized = TYPE_NEEDS_CONSTRUCTING (type);
3827 if (! initialized)
3828 DECL_INITIAL (decl) = NULL_TREE;
3830 /* Create a new scope to hold this declaration if necessary.
3831 Whether or not a new scope is necessary cannot be determined
3832 until after the type has been completed; if the type is a
3833 specialization of a class template it is not until after
3834 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
3835 will be set correctly. */
3836 maybe_push_cleanup_level (type);
3839 /* Handle initialization of references. DECL, TYPE, and INIT have the
3840 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
3841 but will be set to a new CLEANUP_STMT if a temporary is created
3842 that must be destroyed subsequently.
3844 Returns an initializer expression to use to initialize DECL, or
3845 NULL if the initialization can be performed statically.
3847 Quotes on semantics can be found in ARM 8.4.3. */
3849 static tree
3850 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
3852 tree tmp;
3854 if (init == NULL_TREE)
3856 if ((DECL_LANG_SPECIFIC (decl) == 0
3857 || DECL_IN_AGGR_P (decl) == 0)
3858 && ! DECL_THIS_EXTERN (decl))
3859 error ("%qD declared as reference but not initialized", decl);
3860 return NULL_TREE;
3863 if (TREE_CODE (init) == CONSTRUCTOR)
3865 error ("ISO C++ forbids use of initializer list to "
3866 "initialize reference %qD", decl);
3867 return NULL_TREE;
3870 if (TREE_CODE (init) == TREE_LIST)
3871 init = build_x_compound_expr_from_list (init, "initializer");
3873 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
3874 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
3875 /* Note: default conversion is only called in very special cases. */
3876 init = decay_conversion (init);
3878 /* Convert INIT to the reference type TYPE. This may involve the
3879 creation of a temporary, whose lifetime must be the same as that
3880 of the reference. If so, a DECL_EXPR for the temporary will be
3881 added just after the DECL_EXPR for DECL. That's why we don't set
3882 DECL_INITIAL for local references (instead assigning to them
3883 explicitly); we need to allow the temporary to be initialized
3884 first. */
3885 tmp = initialize_reference (type, init, decl, cleanup);
3887 if (tmp == error_mark_node)
3888 return NULL_TREE;
3889 else if (tmp == NULL_TREE)
3891 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
3892 return NULL_TREE;
3895 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
3896 return tmp;
3898 DECL_INITIAL (decl) = tmp;
3900 return NULL_TREE;
3903 /* When parsing `int a[] = {1, 2};' we don't know the size of the
3904 array until we finish parsing the initializer. If that's the
3905 situation we're in, update DECL accordingly. */
3907 static void
3908 maybe_deduce_size_from_array_init (tree decl, tree init)
3910 tree type = TREE_TYPE (decl);
3912 if (TREE_CODE (type) == ARRAY_TYPE
3913 && TYPE_DOMAIN (type) == NULL_TREE
3914 && TREE_CODE (decl) != TYPE_DECL)
3916 /* do_default is really a C-ism to deal with tentative definitions.
3917 But let's leave it here to ease the eventual merge. */
3918 int do_default = !DECL_EXTERNAL (decl);
3919 tree initializer = init ? init : DECL_INITIAL (decl);
3920 int failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
3921 do_default);
3923 if (failure == 1)
3924 error ("initializer fails to determine size of %qD", decl);
3926 if (failure == 2)
3928 if (do_default)
3929 error ("array size missing in %qD", decl);
3930 /* If a `static' var's size isn't known, make it extern as
3931 well as static, so it does not get allocated. If it's not
3932 `static', then don't mark it extern; finish_incomplete_decl
3933 will give it a default size and it will get allocated. */
3934 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
3935 DECL_EXTERNAL (decl) = 1;
3938 if (failure == 3)
3939 error ("zero-size array %qD", decl);
3941 layout_decl (decl, 0);
3945 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
3946 any appropriate error messages regarding the layout. */
3948 static void
3949 layout_var_decl (tree decl)
3951 tree type = TREE_TYPE (decl);
3953 /* If we haven't already layed out this declaration, do so now.
3954 Note that we must not call complete type for an external object
3955 because it's type might involve templates that we are not
3956 supposed to instantiate yet. (And it's perfectly valid to say
3957 `extern X x' for some incomplete type `X'.) */
3958 if (!DECL_EXTERNAL (decl))
3959 complete_type (type);
3960 if (!DECL_SIZE (decl)
3961 && TREE_TYPE (decl) != error_mark_node
3962 && (COMPLETE_TYPE_P (type)
3963 || (TREE_CODE (type) == ARRAY_TYPE
3964 && !TYPE_DOMAIN (type)
3965 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
3966 layout_decl (decl, 0);
3968 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
3970 /* An automatic variable with an incomplete type: that is an error.
3971 Don't talk about array types here, since we took care of that
3972 message in grokdeclarator. */
3973 error ("storage size of %qD isn't known", decl);
3974 TREE_TYPE (decl) = error_mark_node;
3976 #if 0
3977 /* Keep this code around in case we later want to control debug info
3978 based on whether a type is "used". (jason 1999-11-11) */
3980 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
3981 /* Let debugger know it should output info for this type. */
3982 note_debug_info_needed (ttype);
3984 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
3985 note_debug_info_needed (DECL_CONTEXT (decl));
3986 #endif
3988 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
3989 && DECL_SIZE (decl) != NULL_TREE
3990 && ! TREE_CONSTANT (DECL_SIZE (decl)))
3992 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
3993 constant_expression_warning (DECL_SIZE (decl));
3994 else
3995 error ("storage size of %qD isn't constant", decl);
3998 if (TREE_STATIC (decl)
3999 && !DECL_ARTIFICIAL (decl)
4000 && current_function_decl
4001 && DECL_CONTEXT (decl) == current_function_decl)
4002 push_local_name (decl);
4005 /* If a local static variable is declared in an inline function, or if
4006 we have a weak definition, we must endeavor to create only one
4007 instance of the variable at link-time. */
4009 static void
4010 maybe_commonize_var (tree decl)
4012 /* Static data in a function with comdat linkage also has comdat
4013 linkage. */
4014 if (TREE_STATIC (decl)
4015 /* Don't mess with __FUNCTION__. */
4016 && ! DECL_ARTIFICIAL (decl)
4017 && DECL_FUNCTION_SCOPE_P (decl)
4018 /* Unfortunately, import_export_decl has not always been called
4019 before the function is processed, so we cannot simply check
4020 DECL_COMDAT. */
4021 && (DECL_COMDAT (DECL_CONTEXT (decl))
4022 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4023 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4024 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
4026 if (flag_weak)
4028 /* With weak symbols, we simply make the variable COMDAT;
4029 that will cause copies in multiple translations units to
4030 be merged. */
4031 comdat_linkage (decl);
4033 else
4035 if (DECL_INITIAL (decl) == NULL_TREE
4036 || DECL_INITIAL (decl) == error_mark_node)
4038 /* Without weak symbols, we can use COMMON to merge
4039 uninitialized variables. */
4040 TREE_PUBLIC (decl) = 1;
4041 DECL_COMMON (decl) = 1;
4043 else
4045 /* While for initialized variables, we must use internal
4046 linkage -- which means that multiple copies will not
4047 be merged. */
4048 TREE_PUBLIC (decl) = 0;
4049 DECL_COMMON (decl) = 0;
4050 cp_warning_at ("sorry: semantics of inline function static "
4051 "data %q#D are wrong (you'll wind up "
4052 "with multiple copies)", decl);
4053 warning (0, "%J you can work around this by removing "
4054 "the initializer",
4055 decl);
4059 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4060 /* Set it up again; we might have set DECL_INITIAL since the last
4061 time. */
4062 comdat_linkage (decl);
4065 /* Issue an error message if DECL is an uninitialized const variable. */
4067 static void
4068 check_for_uninitialized_const_var (tree decl)
4070 tree type = TREE_TYPE (decl);
4072 /* ``Unless explicitly declared extern, a const object does not have
4073 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4074 7.1.6 */
4075 if (TREE_CODE (decl) == VAR_DECL
4076 && TREE_CODE (type) != REFERENCE_TYPE
4077 && CP_TYPE_CONST_P (type)
4078 && !TYPE_NEEDS_CONSTRUCTING (type)
4079 && !DECL_INITIAL (decl))
4080 error ("uninitialized const %qD", decl);
4083 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4084 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4085 initialized. If there are no more such fields, the return value
4086 will be NULL. */
4088 static tree
4089 next_initializable_field (tree field)
4091 while (field
4092 && (TREE_CODE (field) != FIELD_DECL
4093 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4094 || DECL_ARTIFICIAL (field)))
4095 field = TREE_CHAIN (field);
4097 return field;
4100 /* Subroutine of reshape_init. Reshape the constructor for an array. INITP
4101 is the pointer to the old constructor list (to the CONSTRUCTOR_ELTS of
4102 the CONSTRUCTOR we are processing), while NEW_INIT is the CONSTRUCTOR we
4103 are building.
4104 ELT_TYPE is the element type of the array. MAX_INDEX is an INTEGER_CST
4105 representing the size of the array minus one (the maximum index), or
4106 NULL_TREE if the array was declared without specifying the size. */
4108 static bool
4109 reshape_init_array (tree elt_type, tree max_index,
4110 tree *initp, tree new_init)
4112 bool sized_array_p = (max_index != NULL_TREE);
4113 unsigned HOST_WIDE_INT max_index_cst = 0;
4114 unsigned HOST_WIDE_INT index;
4116 if (sized_array_p)
4118 if (host_integerp (max_index, 1))
4119 max_index_cst = tree_low_cst (max_index, 1);
4120 /* sizetype is sign extended, not zero extended. */
4121 else
4122 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4126 /* Loop until there are no more initializers. */
4127 for (index = 0;
4128 *initp && (!sized_array_p || index <= max_index_cst);
4129 ++index)
4131 tree element_init;
4132 tree designated_index;
4134 element_init = reshape_init (elt_type, initp);
4135 if (element_init == error_mark_node)
4136 return false;
4137 TREE_CHAIN (element_init) = CONSTRUCTOR_ELTS (new_init);
4138 CONSTRUCTOR_ELTS (new_init) = element_init;
4139 designated_index = TREE_PURPOSE (element_init);
4140 if (designated_index)
4142 /* Handle array designated initializers (GNU extension). */
4143 if (TREE_CODE (designated_index) == IDENTIFIER_NODE)
4145 error ("name %qD used in a GNU-style designated "
4146 "initializer for an array", designated_index);
4147 TREE_PURPOSE (element_init) = NULL_TREE;
4149 else
4150 gcc_unreachable ();
4154 return true;
4157 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
4158 brace-enclosed aggregate initializer.
4160 *INITP is one of a list of initializers describing a brace-enclosed
4161 initializer for an entity of the indicated aggregate TYPE. It may
4162 not presently match the shape of the TYPE; for example:
4164 struct S { int a; int b; };
4165 struct S a[] = { 1, 2, 3, 4 };
4167 Here *INITP will point to TREE_LIST of four elements, rather than a
4168 list of two elements, each itself a list of two elements. This
4169 routine transforms INIT from the former form into the latter. The
4170 revised initializer is returned. */
4172 static tree
4173 reshape_init (tree type, tree *initp)
4175 tree inits;
4176 tree old_init;
4177 tree old_init_value;
4178 tree new_init;
4179 bool brace_enclosed_p;
4180 bool string_init_p;
4182 old_init = *initp;
4183 old_init_value = (TREE_CODE (*initp) == TREE_LIST
4184 ? TREE_VALUE (*initp) : old_init);
4186 gcc_assert (old_init_value);
4188 /* If the initializer is brace-enclosed, pull initializers from the
4189 enclosed elements. Advance past the brace-enclosed initializer
4190 now. */
4191 if (TREE_CODE (old_init_value) == CONSTRUCTOR
4192 && BRACE_ENCLOSED_INITIALIZER_P (old_init_value))
4194 *initp = TREE_CHAIN (old_init);
4195 TREE_CHAIN (old_init) = NULL_TREE;
4196 inits = CONSTRUCTOR_ELTS (old_init_value);
4197 initp = &inits;
4198 brace_enclosed_p = true;
4200 else
4202 inits = NULL_TREE;
4203 brace_enclosed_p = false;
4206 /* A non-aggregate type is always initialized with a single
4207 initializer. */
4208 if (!CP_AGGREGATE_TYPE_P (type))
4210 *initp = TREE_CHAIN (old_init);
4211 TREE_CHAIN (old_init) = NULL_TREE;
4212 /* It is invalid to initialize a non-aggregate type with a
4213 brace-enclosed initializer. */
4214 if (brace_enclosed_p)
4216 error ("brace-enclosed initializer used to initialize %qT",
4217 type);
4218 if (TREE_CODE (old_init) == TREE_LIST)
4219 TREE_VALUE (old_init) = error_mark_node;
4220 else
4221 old_init = error_mark_node;
4224 return old_init;
4227 /* [dcl.init.aggr]
4229 All implicit type conversions (clause _conv_) are considered when
4230 initializing the aggregate member with an initializer from an
4231 initializer-list. If the initializer can initialize a member,
4232 the member is initialized. Otherwise, if the member is itself a
4233 non-empty subaggregate, brace elision is assumed and the
4234 initializer is considered for the initialization of the first
4235 member of the subaggregate. */
4236 if (!brace_enclosed_p
4237 && can_convert_arg (type, TREE_TYPE (old_init_value), old_init_value))
4239 *initp = TREE_CHAIN (old_init);
4240 TREE_CHAIN (old_init) = NULL_TREE;
4241 return old_init;
4244 string_init_p = false;
4245 if (TREE_CODE (old_init_value) == STRING_CST
4246 && TREE_CODE (type) == ARRAY_TYPE
4247 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4249 /* [dcl.init.string]
4251 A char array (whether plain char, signed char, or unsigned char)
4252 can be initialized by a string-literal (optionally enclosed in
4253 braces); a wchar_t array can be initialized by a wide
4254 string-literal (optionally enclosed in braces). */
4255 new_init = old_init;
4256 /* Move past the initializer. */
4257 *initp = TREE_CHAIN (old_init);
4258 TREE_CHAIN (old_init) = NULL_TREE;
4259 string_init_p = true;
4261 else
4263 /* Build a CONSTRUCTOR to hold the contents of the aggregate. */
4264 new_init = build_constructor (NULL_TREE, NULL_TREE);
4266 if (CLASS_TYPE_P (type))
4268 tree field;
4270 field = next_initializable_field (TYPE_FIELDS (type));
4272 if (!field)
4274 /* [dcl.init.aggr]
4276 An initializer for an aggregate member that is an
4277 empty class shall have the form of an empty
4278 initializer-list {}. */
4279 if (!brace_enclosed_p)
4281 error ("initializer for %qT must be brace-enclosed", type);
4282 return error_mark_node;
4285 else
4287 /* Loop through the initializable fields, gathering
4288 initializers. */
4289 while (*initp)
4291 tree field_init;
4293 /* Handle designated initializers, as an extension. */
4294 if (TREE_PURPOSE (*initp))
4296 if (pedantic)
4297 pedwarn ("ISO C++ does not allow designated initializers");
4298 field = lookup_field_1 (type, TREE_PURPOSE (*initp),
4299 /*want_type=*/false);
4300 if (!field || TREE_CODE (field) != FIELD_DECL)
4301 error ("%qT has no non-static data member named %qD",
4302 type, TREE_PURPOSE (*initp));
4304 if (!field)
4305 break;
4307 field_init = reshape_init (TREE_TYPE (field), initp);
4308 if (field_init == error_mark_node)
4309 return error_mark_node;
4310 TREE_CHAIN (field_init) = CONSTRUCTOR_ELTS (new_init);
4311 CONSTRUCTOR_ELTS (new_init) = field_init;
4312 /* [dcl.init.aggr]
4314 When a union is initialized with a brace-enclosed
4315 initializer, the braces shall only contain an
4316 initializer for the first member of the union. */
4317 if (TREE_CODE (type) == UNION_TYPE)
4318 break;
4319 field = next_initializable_field (TREE_CHAIN (field));
4323 else if (TREE_CODE (type) == ARRAY_TYPE
4324 || TREE_CODE (type) == VECTOR_TYPE)
4326 /* If the bound of the array is known, take no more initializers
4327 than are allowed. */
4328 tree max_index = NULL_TREE;
4329 if (TREE_CODE (type) == ARRAY_TYPE)
4331 if (TYPE_DOMAIN (type))
4332 max_index = array_type_nelts (type);
4334 else
4336 /* For a vector, the representation type is a struct
4337 containing a single member which is an array of the
4338 appropriate size. */
4339 tree rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4340 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4341 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS
4342 (rtype)));
4345 if (!reshape_init_array (TREE_TYPE (type), max_index,
4346 initp, new_init))
4347 return error_mark_node;
4349 else
4350 gcc_unreachable ();
4352 /* The initializers were placed in reverse order in the
4353 CONSTRUCTOR. */
4354 CONSTRUCTOR_ELTS (new_init) = nreverse (CONSTRUCTOR_ELTS (new_init));
4356 if (TREE_CODE (old_init) == TREE_LIST)
4357 new_init = build_tree_list (TREE_PURPOSE (old_init), new_init);
4360 /* If there are more initializers than necessary, issue a
4361 diagnostic. */
4362 if (*initp)
4364 if (brace_enclosed_p)
4365 error ("too many initializers for %qT", type);
4366 else if (warn_missing_braces && !string_init_p)
4367 warning (0, "missing braces around initializer");
4370 return new_init;
4373 /* Verify INIT (the initializer for DECL), and record the
4374 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
4375 grok_reference_init.
4377 If the return value is non-NULL, it is an expression that must be
4378 evaluated dynamically to initialize DECL. */
4380 static tree
4381 check_initializer (tree decl, tree init, int flags, tree *cleanup)
4383 tree type = TREE_TYPE (decl);
4384 tree init_code = NULL;
4386 /* If `start_decl' didn't like having an initialization, ignore it now. */
4387 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
4388 init = NULL_TREE;
4390 /* If an initializer is present, DECL_INITIAL has been
4391 error_mark_node, to indicate that an as-of-yet unevaluated
4392 initialization will occur. From now on, DECL_INITIAL reflects
4393 the static initialization -- if any -- of DECL. */
4394 DECL_INITIAL (decl) = NULL_TREE;
4396 /* Things that are going to be initialized need to have complete
4397 type. */
4398 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
4400 if (type == error_mark_node)
4401 /* We will have already complained. */
4402 init = NULL_TREE;
4403 else if (init && COMPLETE_TYPE_P (type)
4404 && !TREE_CONSTANT (TYPE_SIZE (type)))
4406 error ("variable-sized object %qD may not be initialized", decl);
4407 init = NULL_TREE;
4409 else if (TREE_CODE (type) == ARRAY_TYPE
4410 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4412 error ("elements of array %q#D have incomplete type", decl);
4413 init = NULL_TREE;
4415 else if (TREE_CODE (type) != ARRAY_TYPE && !COMPLETE_TYPE_P (type))
4417 error ("%qD has incomplete type", decl);
4418 TREE_TYPE (decl) = error_mark_node;
4419 init = NULL_TREE;
4422 if (TREE_CODE (decl) == CONST_DECL)
4424 gcc_assert (TREE_CODE (decl) != REFERENCE_TYPE);
4426 DECL_INITIAL (decl) = init;
4428 gcc_assert (init != NULL_TREE);
4429 init = NULL_TREE;
4431 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
4432 init = grok_reference_init (decl, type, init, cleanup);
4433 else if (init)
4435 if (TREE_CODE (init) == CONSTRUCTOR
4436 && BRACE_ENCLOSED_INITIALIZER_P (init))
4438 /* [dcl.init] paragraph 13,
4439 If T is a scalar type, then a declaration of the form
4440 T x = { a };
4441 is equivalent to
4442 T x = a;
4444 reshape_init will complain about the extra braces,
4445 and doesn't do anything useful in the case where TYPE is
4446 scalar, so just don't call it. */
4447 if (CP_AGGREGATE_TYPE_P (type))
4448 init = reshape_init (type, &init);
4450 if ((*targetm.vector_opaque_p) (type))
4452 error ("opaque vector types cannot be initialized");
4453 init = error_mark_node;
4457 /* If DECL has an array type without a specific bound, deduce the
4458 array size from the initializer. */
4459 maybe_deduce_size_from_array_init (decl, init);
4460 type = TREE_TYPE (decl);
4462 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
4464 if (TREE_CODE (type) == ARRAY_TYPE)
4465 goto initialize_aggr;
4466 else if (TREE_CODE (init) == CONSTRUCTOR
4467 && BRACE_ENCLOSED_INITIALIZER_P (init))
4469 if (TYPE_NON_AGGREGATE_CLASS (type))
4471 error ("%qD must be initialized by constructor, "
4472 "not by %<{...}%>",
4473 decl);
4474 init = error_mark_node;
4476 else
4477 goto dont_use_constructor;
4479 else
4481 int saved_stmts_are_full_exprs_p;
4483 initialize_aggr:
4484 saved_stmts_are_full_exprs_p = 0;
4485 if (building_stmt_tree ())
4487 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4488 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4490 init = build_aggr_init (decl, init, flags);
4491 if (building_stmt_tree ())
4492 current_stmt_tree ()->stmts_are_full_exprs_p =
4493 saved_stmts_are_full_exprs_p;
4494 return init;
4497 else
4499 dont_use_constructor:
4500 if (TREE_CODE (init) != TREE_VEC)
4502 init_code = store_init_value (decl, init);
4503 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
4504 && DECL_INITIAL (decl)
4505 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
4506 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
4507 warning (0, "array %qD initialized by parenthesized string literal %qE",
4508 decl, DECL_INITIAL (decl));
4509 init = NULL;
4513 else if (DECL_EXTERNAL (decl))
4515 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
4516 goto initialize_aggr;
4517 else if (IS_AGGR_TYPE (type))
4519 tree core_type = strip_array_types (type);
4521 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
4522 error ("structure %qD with uninitialized const members", decl);
4523 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
4524 error ("structure %qD with uninitialized reference members", decl);
4526 check_for_uninitialized_const_var (decl);
4528 else
4529 check_for_uninitialized_const_var (decl);
4531 if (init && init != error_mark_node)
4532 init_code = build2 (INIT_EXPR, type, decl, init);
4534 return init_code;
4537 /* If DECL is not a local variable, give it RTL. */
4539 static void
4540 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
4542 int toplev = toplevel_bindings_p ();
4543 int defer_p;
4544 const char *filename;
4546 /* Set the DECL_ASSEMBLER_NAME for the object. */
4547 if (asmspec)
4549 /* The `register' keyword, when used together with an
4550 asm-specification, indicates that the variable should be
4551 placed in a particular register. */
4552 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
4554 change_decl_assembler_name (decl, get_identifier (asmspec));
4555 DECL_HARD_REGISTER (decl) = 1;
4557 else
4559 if (TREE_CODE (decl) == FUNCTION_DECL
4560 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
4561 set_builtin_user_assembler_name (decl, asmspec);
4562 set_user_assembler_name (decl, asmspec);
4566 /* Handle non-variables up front. */
4567 if (TREE_CODE (decl) != VAR_DECL)
4569 rest_of_decl_compilation (decl, toplev, at_eof);
4570 return;
4573 /* If we see a class member here, it should be a static data
4574 member. */
4575 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
4577 gcc_assert (TREE_STATIC (decl));
4578 /* An in-class declaration of a static data member should be
4579 external; it is only a declaration, and not a definition. */
4580 if (init == NULL_TREE)
4581 gcc_assert (DECL_EXTERNAL (decl));
4584 /* We don't create any RTL for local variables. */
4585 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
4586 return;
4588 /* We defer emission of local statics until the corresponding
4589 DECL_EXPR is expanded. */
4590 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
4592 /* We try to defer namespace-scope static constants so that they are
4593 not emitted into the object file unnecessarily. */
4594 filename = input_filename;
4595 if (!DECL_VIRTUAL_P (decl)
4596 && TREE_READONLY (decl)
4597 && DECL_INITIAL (decl) != NULL_TREE
4598 && DECL_INITIAL (decl) != error_mark_node
4599 && filename != NULL
4600 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
4601 && toplev
4602 && !TREE_PUBLIC (decl))
4604 /* Fool with the linkage of static consts according to #pragma
4605 interface. */
4606 struct c_fileinfo *finfo = get_fileinfo (lbasename (filename));
4607 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
4609 TREE_PUBLIC (decl) = 1;
4610 DECL_EXTERNAL (decl) = finfo->interface_only;
4613 defer_p = 1;
4615 /* Likewise for template instantiations. */
4616 else if (DECL_LANG_SPECIFIC (decl)
4617 && DECL_IMPLICIT_INSTANTIATION (decl))
4618 defer_p = 1;
4620 /* If we're not deferring, go ahead and assemble the variable. */
4621 if (!defer_p)
4622 rest_of_decl_compilation (decl, toplev, at_eof);
4625 /* Generate code to initialize DECL (a local variable). */
4627 static void
4628 initialize_local_var (tree decl, tree init)
4630 tree type = TREE_TYPE (decl);
4631 tree cleanup;
4633 gcc_assert (TREE_CODE (decl) == VAR_DECL
4634 || TREE_CODE (decl) == RESULT_DECL);
4635 gcc_assert (!TREE_STATIC (decl));
4637 if (DECL_SIZE (decl) == NULL_TREE)
4639 /* If we used it already as memory, it must stay in memory. */
4640 DECL_INITIAL (decl) = NULL_TREE;
4641 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4644 if (DECL_SIZE (decl) && type != error_mark_node)
4646 int already_used;
4648 /* Compute and store the initial value. */
4649 already_used = TREE_USED (decl) || TREE_USED (type);
4651 /* Perform the initialization. */
4652 if (init)
4654 int saved_stmts_are_full_exprs_p;
4656 gcc_assert (building_stmt_tree ());
4657 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4658 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4659 finish_expr_stmt (init);
4660 current_stmt_tree ()->stmts_are_full_exprs_p =
4661 saved_stmts_are_full_exprs_p;
4664 /* Set this to 0 so we can tell whether an aggregate which was
4665 initialized was ever used. Don't do this if it has a
4666 destructor, so we don't complain about the 'resource
4667 allocation is initialization' idiom. Now set
4668 attribute((unused)) on types so decls of that type will be
4669 marked used. (see TREE_USED, above.) */
4670 if (TYPE_NEEDS_CONSTRUCTING (type)
4671 && ! already_used
4672 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
4673 && DECL_NAME (decl))
4674 TREE_USED (decl) = 0;
4675 else if (already_used)
4676 TREE_USED (decl) = 1;
4679 /* Generate a cleanup, if necessary. */
4680 cleanup = cxx_maybe_build_cleanup (decl);
4681 if (DECL_SIZE (decl) && cleanup)
4682 finish_decl_cleanup (decl, cleanup);
4685 /* DECL is a VAR_DECL for a compiler-generated variable with static
4686 storage duration (like a virtual table) whose initializer is a
4687 compile-time constant. Initialize the variable and provide it to
4688 the back end. */
4690 void
4691 initialize_artificial_var (tree decl, tree init)
4693 DECL_INITIAL (decl) = build_constructor (NULL_TREE, init);
4694 DECL_INITIALIZED_P (decl) = 1;
4695 determine_visibility (decl);
4696 layout_var_decl (decl);
4697 maybe_commonize_var (decl);
4698 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
4701 /* Finish processing of a declaration;
4702 install its line number and initial value.
4703 If the length of an array type is not known before,
4704 it must be determined now, from the initial value, or it is an error.
4706 INIT holds the value of an initializer that should be allowed to escape
4707 the normal rules.
4709 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
4710 if the (init) syntax was used. */
4712 void
4713 cp_finish_decl (tree decl, tree init, tree asmspec_tree, int flags)
4715 tree type;
4716 tree cleanup;
4717 const char *asmspec = NULL;
4718 int was_readonly = 0;
4719 bool var_definition_p = false;
4721 if (decl == error_mark_node)
4722 return;
4723 else if (! decl)
4725 if (init)
4726 error ("assignment (not initialization) in declaration");
4727 return;
4730 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
4732 /* Assume no cleanup is required. */
4733 cleanup = NULL_TREE;
4735 /* If a name was specified, get the string. */
4736 if (global_scope_p (current_binding_level))
4737 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4738 if (asmspec_tree)
4739 asmspec = TREE_STRING_POINTER (asmspec_tree);
4741 if (init && TREE_CODE (init) == NAMESPACE_DECL)
4743 error ("cannot initialize %qD to namespace %qD", decl, init);
4744 init = NULL_TREE;
4747 if (current_class_type
4748 && CP_DECL_CONTEXT (decl) == current_class_type
4749 && TYPE_BEING_DEFINED (current_class_type)
4750 && (DECL_INITIAL (decl) || init))
4751 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
4753 type = TREE_TYPE (decl);
4755 if (type == error_mark_node)
4756 goto finish_end;
4758 if (processing_template_decl)
4760 /* Add this declaration to the statement-tree. */
4761 if (at_function_scope_p ())
4762 add_decl_expr (decl);
4764 if (init && DECL_INITIAL (decl))
4765 DECL_INITIAL (decl) = init;
4766 if (TREE_CODE (decl) == VAR_DECL
4767 && !DECL_PRETTY_FUNCTION_P (decl)
4768 && !dependent_type_p (TREE_TYPE (decl)))
4769 maybe_deduce_size_from_array_init (decl, init);
4771 goto finish_end;
4774 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
4775 gcc_assert (TREE_CODE (decl) != PARM_DECL);
4777 /* Take care of TYPE_DECLs up front. */
4778 if (TREE_CODE (decl) == TYPE_DECL)
4780 if (type != error_mark_node
4781 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
4783 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
4784 warning (0, "shadowing previous type declaration of %q#D", decl);
4785 set_identifier_type_value (DECL_NAME (decl), decl);
4788 /* If we have installed this as the canonical typedef for this
4789 type, and that type has not been defined yet, delay emitting
4790 the debug information for it, as we will emit it later. */
4791 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
4792 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
4793 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
4795 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
4796 at_eof);
4797 goto finish_end;
4800 /* A reference will be modified here, as it is initialized. */
4801 if (! DECL_EXTERNAL (decl)
4802 && TREE_READONLY (decl)
4803 && TREE_CODE (type) == REFERENCE_TYPE)
4805 was_readonly = 1;
4806 TREE_READONLY (decl) = 0;
4809 if (TREE_CODE (decl) == VAR_DECL)
4811 /* Only PODs can have thread-local storage. Other types may require
4812 various kinds of non-trivial initialization. */
4813 if (DECL_THREAD_LOCAL (decl) && !pod_type_p (TREE_TYPE (decl)))
4814 error ("%qD cannot be thread-local because it has non-POD type %qT",
4815 decl, TREE_TYPE (decl));
4816 /* Convert the initializer to the type of DECL, if we have not
4817 already initialized DECL. */
4818 if (!DECL_INITIALIZED_P (decl)
4819 /* If !DECL_EXTERNAL then DECL is being defined. In the
4820 case of a static data member initialized inside the
4821 class-specifier, there can be an initializer even if DECL
4822 is *not* defined. */
4823 && (!DECL_EXTERNAL (decl) || init))
4825 init = check_initializer (decl, init, flags, &cleanup);
4826 /* Thread-local storage cannot be dynamically initialized. */
4827 if (DECL_THREAD_LOCAL (decl) && init)
4829 error ("%qD is thread-local and so cannot be dynamically "
4830 "initialized", decl);
4831 init = NULL_TREE;
4833 /* Handle:
4835 [dcl.init]
4837 The memory occupied by any object of static storage
4838 duration is zero-initialized at program startup before
4839 any other initialization takes place.
4841 We cannot create an appropriate initializer until after
4842 the type of DECL is finalized. If DECL_INITIAL is set,
4843 then the DECL is statically initialized, and any
4844 necessary zero-initialization has already been performed. */
4845 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
4846 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
4847 /*nelts=*/NULL_TREE,
4848 /*static_storage_p=*/true);
4849 /* Remember that the initialization for this variable has
4850 taken place. */
4851 DECL_INITIALIZED_P (decl) = 1;
4852 /* This declaration is the definition of this variable,
4853 unless we are initializing a static data member within
4854 the class specifier. */
4855 if (!DECL_EXTERNAL (decl))
4856 var_definition_p = true;
4857 /* The variable is being defined, so determine its
4858 visibility. */
4859 determine_visibility (decl);
4861 /* If the variable has an array type, lay out the type, even if
4862 there is no initializer. It is valid to index through the
4863 array, and we must get TYPE_ALIGN set correctly on the array
4864 type. */
4865 else if (TREE_CODE (type) == ARRAY_TYPE)
4866 layout_type (type);
4869 /* Add this declaration to the statement-tree. This needs to happen
4870 after the call to check_initializer so that the DECL_EXPR for a
4871 reference temp is added before the DECL_EXPR for the reference itself. */
4872 if (at_function_scope_p ())
4873 add_decl_expr (decl);
4875 if (TREE_CODE (decl) == VAR_DECL)
4876 layout_var_decl (decl);
4878 /* Output the assembler code and/or RTL code for variables and functions,
4879 unless the type is an undefined structure or union.
4880 If not, it will get done when the type is completed. */
4881 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
4883 if (TREE_CODE (decl) == VAR_DECL)
4884 maybe_commonize_var (decl);
4886 make_rtl_for_nonlocal_decl (decl, init, asmspec);
4888 /* Check for abstractness of the type. Notice that there is no
4889 need to strip array types here since the check for those types
4890 is already done within create_array_type_for_decl. */
4891 if (TREE_CODE (type) == FUNCTION_TYPE
4892 || TREE_CODE (type) == METHOD_TYPE)
4893 abstract_virtuals_error (decl, TREE_TYPE (type));
4894 else
4895 abstract_virtuals_error (decl, type);
4897 if (TREE_CODE (decl) == FUNCTION_DECL
4898 || TREE_TYPE (decl) == error_mark_node)
4899 /* No initialization required. */
4901 else if (DECL_EXTERNAL (decl)
4902 && ! (DECL_LANG_SPECIFIC (decl)
4903 && DECL_NOT_REALLY_EXTERN (decl)))
4905 if (init)
4906 DECL_INITIAL (decl) = init;
4908 else
4910 /* A variable definition. */
4911 if (DECL_FUNCTION_SCOPE_P (decl))
4913 /* Initialize the local variable. */
4914 if (processing_template_decl)
4916 if (init || DECL_INITIAL (decl) == error_mark_node)
4917 DECL_INITIAL (decl) = init;
4919 else if (!TREE_STATIC (decl))
4920 initialize_local_var (decl, init);
4923 /* If a variable is defined, and then a subsequent
4924 definition with external linkage is encountered, we will
4925 get here twice for the same variable. We want to avoid
4926 calling expand_static_init more than once. For variables
4927 that are not static data members, we can call
4928 expand_static_init only when we actually process the
4929 initializer. It is not legal to redeclare a static data
4930 member, so this issue does not arise in that case. */
4931 if (var_definition_p && TREE_STATIC (decl))
4932 expand_static_init (decl, init);
4936 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
4937 reference, insert it in the statement-tree now. */
4938 if (cleanup)
4939 push_cleanup (decl, cleanup, false);
4941 finish_end:
4943 if (was_readonly)
4944 TREE_READONLY (decl) = 1;
4946 /* If this was marked 'used', be sure it will be output. */
4947 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
4948 mark_decl_referenced (decl);
4951 /* This is here for a midend callback from c-common.c. */
4953 void
4954 finish_decl (tree decl, tree init, tree asmspec_tree)
4956 cp_finish_decl (decl, init, asmspec_tree, 0);
4959 /* Returns a declaration for a VAR_DECL as if:
4961 extern "C" TYPE NAME;
4963 had been seen. Used to create compiler-generated global
4964 variables. */
4966 tree
4967 declare_global_var (tree name, tree type)
4969 tree decl;
4971 push_to_top_level ();
4972 decl = build_decl (VAR_DECL, name, type);
4973 TREE_PUBLIC (decl) = 1;
4974 DECL_EXTERNAL (decl) = 1;
4975 DECL_ARTIFICIAL (decl) = 1;
4976 /* If the user has explicitly declared this variable (perhaps
4977 because the code we are compiling is part of a low-level runtime
4978 library), then it is possible that our declaration will be merged
4979 with theirs by pushdecl. */
4980 decl = pushdecl (decl);
4981 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
4982 pop_from_top_level ();
4984 return decl;
4987 /* Returns a pointer to the `atexit' function. Note that if
4988 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
4989 `__cxa_atexit' function specified in the IA64 C++ ABI. */
4991 static tree
4992 get_atexit_node (void)
4994 tree atexit_fndecl;
4995 tree arg_types;
4996 tree fn_type;
4997 tree fn_ptr_type;
4998 const char *name;
4999 bool use_aeabi_atexit;
5001 if (atexit_node)
5002 return atexit_node;
5004 if (flag_use_cxa_atexit)
5006 /* The declaration for `__cxa_atexit' is:
5008 int __cxa_atexit (void (*)(void *), void *, void *)
5010 We build up the argument types and then then function type
5011 itself. */
5013 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
5014 /* First, build the pointer-to-function type for the first
5015 argument. */
5016 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5017 fn_type = build_function_type (void_type_node, arg_types);
5018 fn_ptr_type = build_pointer_type (fn_type);
5019 /* Then, build the rest of the argument types. */
5020 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5021 if (use_aeabi_atexit)
5023 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5024 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5026 else
5028 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5029 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5031 /* And the final __cxa_atexit type. */
5032 fn_type = build_function_type (integer_type_node, arg_types);
5033 fn_ptr_type = build_pointer_type (fn_type);
5034 if (use_aeabi_atexit)
5035 name = "__aeabi_atexit";
5036 else
5037 name = "__cxa_atexit";
5039 else
5041 /* The declaration for `atexit' is:
5043 int atexit (void (*)());
5045 We build up the argument types and then then function type
5046 itself. */
5047 fn_type = build_function_type (void_type_node, void_list_node);
5048 fn_ptr_type = build_pointer_type (fn_type);
5049 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5050 /* Build the final atexit type. */
5051 fn_type = build_function_type (integer_type_node, arg_types);
5052 name = "atexit";
5055 /* Now, build the function declaration. */
5056 push_lang_context (lang_name_c);
5057 atexit_fndecl = build_library_fn_ptr (name, fn_type);
5058 mark_used (atexit_fndecl);
5059 pop_lang_context ();
5060 atexit_node = decay_conversion (atexit_fndecl);
5062 return atexit_node;
5065 /* Returns the __dso_handle VAR_DECL. */
5067 static tree
5068 get_dso_handle_node (void)
5070 if (dso_handle_node)
5071 return dso_handle_node;
5073 /* Declare the variable. */
5074 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5075 ptr_type_node);
5077 return dso_handle_node;
5080 /* Begin a new function with internal linkage whose job will be simply
5081 to destroy some particular variable. */
5083 static GTY(()) int start_cleanup_cnt;
5085 static tree
5086 start_cleanup_fn (void)
5088 char name[32];
5089 tree parmtypes;
5090 tree fntype;
5091 tree fndecl;
5093 push_to_top_level ();
5095 /* No need to mangle this. */
5096 push_lang_context (lang_name_c);
5098 /* Build the parameter-types. */
5099 parmtypes = void_list_node;
5100 /* Functions passed to __cxa_atexit take an additional parameter.
5101 We'll just ignore it. After we implement the new calling
5102 convention for destructors, we can eliminate the use of
5103 additional cleanup functions entirely in the -fnew-abi case. */
5104 if (flag_use_cxa_atexit)
5105 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
5106 /* Build the function type itself. */
5107 fntype = build_function_type (void_type_node, parmtypes);
5108 /* Build the name of the function. */
5109 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
5110 /* Build the function declaration. */
5111 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5112 /* It's a function with internal linkage, generated by the
5113 compiler. */
5114 TREE_PUBLIC (fndecl) = 0;
5115 DECL_ARTIFICIAL (fndecl) = 1;
5116 /* Make the function `inline' so that it is only emitted if it is
5117 actually needed. It is unlikely that it will be inlined, since
5118 it is only called via a function pointer, but we avoid unnecessary
5119 emissions this way. */
5120 DECL_INLINE (fndecl) = 1;
5121 DECL_DECLARED_INLINE_P (fndecl) = 1;
5122 DECL_INTERFACE_KNOWN (fndecl) = 1;
5123 /* Build the parameter. */
5124 if (flag_use_cxa_atexit)
5126 tree parmdecl;
5128 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
5129 DECL_CONTEXT (parmdecl) = fndecl;
5130 TREE_USED (parmdecl) = 1;
5131 DECL_ARGUMENTS (fndecl) = parmdecl;
5134 pushdecl (fndecl);
5135 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
5137 pop_lang_context ();
5139 return current_function_decl;
5142 /* Finish the cleanup function begun by start_cleanup_fn. */
5144 static void
5145 end_cleanup_fn (void)
5147 expand_or_defer_fn (finish_function (0));
5149 pop_from_top_level ();
5152 /* Generate code to handle the destruction of DECL, an object with
5153 static storage duration. */
5155 tree
5156 register_dtor_fn (tree decl)
5158 tree cleanup;
5159 tree compound_stmt;
5160 tree args;
5161 tree fcall;
5163 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5164 return void_zero_node;
5166 /* Call build_cleanup before we enter the anonymous function so that
5167 any access checks will be done relative to the current scope,
5168 rather than the scope of the anonymous function. */
5169 build_cleanup (decl);
5171 /* Now start the function. */
5172 cleanup = start_cleanup_fn ();
5174 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
5175 to the original function, rather than the anonymous one. That
5176 will make the back-end think that nested functions are in use,
5177 which causes confusion. */
5179 push_deferring_access_checks (dk_no_check);
5180 fcall = build_cleanup (decl);
5181 pop_deferring_access_checks ();
5183 /* Create the body of the anonymous function. */
5184 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
5185 finish_expr_stmt (fcall);
5186 finish_compound_stmt (compound_stmt);
5187 end_cleanup_fn ();
5189 /* Call atexit with the cleanup function. */
5190 cxx_mark_addressable (cleanup);
5191 mark_used (cleanup);
5192 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
5193 if (flag_use_cxa_atexit)
5195 args = tree_cons (NULL_TREE,
5196 build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
5197 NULL_TREE);
5198 if (targetm.cxx.use_aeabi_atexit ())
5200 args = tree_cons (NULL_TREE, cleanup, args);
5201 args = tree_cons (NULL_TREE, null_pointer_node, args);
5203 else
5205 args = tree_cons (NULL_TREE, null_pointer_node, args);
5206 args = tree_cons (NULL_TREE, cleanup, args);
5209 else
5210 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5211 return build_function_call (get_atexit_node (), args);
5214 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
5215 is its initializer. Generate code to handle the construction
5216 and destruction of DECL. */
5218 static void
5219 expand_static_init (tree decl, tree init)
5221 gcc_assert (TREE_CODE (decl) == VAR_DECL);
5222 gcc_assert (TREE_STATIC (decl));
5224 /* Some variables require no initialization. */
5225 if (!init
5226 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
5227 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5228 return;
5230 if (DECL_FUNCTION_SCOPE_P (decl))
5232 /* Emit code to perform this initialization but once. */
5233 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
5234 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
5235 tree guard, guard_addr, guard_addr_list;
5236 tree acquire_fn, release_fn, abort_fn;
5237 tree flag, begin;
5239 /* Emit code to perform this initialization but once. This code
5240 looks like:
5242 static <type> guard;
5243 if (!guard.first_byte) {
5244 if (__cxa_guard_acquire (&guard)) {
5245 bool flag = false;
5246 try {
5247 // Do initialization.
5248 flag = true; __cxa_guard_release (&guard);
5249 // Register variable for destruction at end of program.
5250 } catch {
5251 if (!flag) __cxa_guard_abort (&guard);
5255 Note that the `flag' variable is only set to 1 *after* the
5256 initialization is complete. This ensures that an exception,
5257 thrown during the construction, will cause the variable to
5258 reinitialized when we pass through this code again, as per:
5260 [stmt.dcl]
5262 If the initialization exits by throwing an exception, the
5263 initialization is not complete, so it will be tried again
5264 the next time control enters the declaration.
5266 This process should be thread-safe, too; multiple threads
5267 should not be able to initialize the variable more than
5268 once. */
5270 /* Create the guard variable. */
5271 guard = get_guard (decl);
5273 /* This optimization isn't safe on targets with relaxed memory
5274 consistency. On such targets we force synchronization in
5275 __cxa_guard_acquire. */
5276 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5278 /* Begin the conditional initialization. */
5279 if_stmt = begin_if_stmt ();
5280 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
5281 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5284 if (flag_threadsafe_statics)
5286 guard_addr = build_address (guard);
5287 guard_addr_list = build_tree_list (NULL_TREE, guard_addr);
5289 acquire_fn = get_identifier ("__cxa_guard_acquire");
5290 release_fn = get_identifier ("__cxa_guard_release");
5291 abort_fn = get_identifier ("__cxa_guard_abort");
5292 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
5294 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
5295 void_list_node);
5296 tree vfntype = build_function_type (void_type_node, argtypes);
5297 acquire_fn = push_library_fn
5298 (acquire_fn, build_function_type (integer_type_node, argtypes));
5299 release_fn = push_library_fn (release_fn, vfntype);
5300 abort_fn = push_library_fn (abort_fn, vfntype);
5302 else
5304 release_fn = identifier_global_value (release_fn);
5305 abort_fn = identifier_global_value (abort_fn);
5308 inner_if_stmt = begin_if_stmt ();
5309 finish_if_stmt_cond (build_call (acquire_fn, guard_addr_list),
5310 inner_if_stmt);
5312 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5313 begin = get_target_expr (boolean_false_node);
5314 flag = TARGET_EXPR_SLOT (begin);
5316 TARGET_EXPR_CLEANUP (begin)
5317 = build3 (COND_EXPR, void_type_node, flag,
5318 void_zero_node,
5319 build_call (abort_fn, guard_addr_list));
5320 CLEANUP_EH_ONLY (begin) = 1;
5322 /* Do the initialization itself. */
5323 init = add_stmt_to_compound (begin, init);
5324 init = add_stmt_to_compound
5325 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
5326 init = add_stmt_to_compound
5327 (init, build_call (release_fn, guard_addr_list));
5329 else
5330 init = add_stmt_to_compound (init, set_guard (guard));
5332 /* Use atexit to register a function for destroying this static
5333 variable. */
5334 init = add_stmt_to_compound (init, register_dtor_fn (decl));
5336 finish_expr_stmt (init);
5338 if (flag_threadsafe_statics)
5340 finish_compound_stmt (inner_then_clause);
5341 finish_then_clause (inner_if_stmt);
5342 finish_if_stmt (inner_if_stmt);
5345 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5347 finish_compound_stmt (then_clause);
5348 finish_then_clause (if_stmt);
5349 finish_if_stmt (if_stmt);
5352 else
5353 static_aggregates = tree_cons (init, decl, static_aggregates);
5357 /* Make TYPE a complete type based on INITIAL_VALUE.
5358 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
5359 2 if there was no information (in which case assume 0 if DO_DEFAULT),
5360 3 if the initializer list is empty (in pedantic mode). */
5363 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
5365 int failure;
5366 tree type, elt_type;
5368 if (initial_value)
5370 /* An array of character type can be initialized from a
5371 brace-enclosed string constant. */
5372 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
5373 && TREE_CODE (initial_value) == CONSTRUCTOR
5374 && CONSTRUCTOR_ELTS (initial_value)
5375 && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value)))
5376 == STRING_CST)
5377 && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value)) == NULL_TREE)
5378 initial_value = TREE_VALUE (CONSTRUCTOR_ELTS (initial_value));
5381 failure = complete_array_type (ptype, initial_value, do_default);
5383 /* We can create the array before the element type is complete, which
5384 means that we didn't have these two bits set in the original type
5385 either. In completing the type, we are expected to propagate these
5386 bits. See also complete_type which does the same thing for arrays
5387 of fixed size. */
5388 type = *ptype;
5389 if (TYPE_DOMAIN (type))
5391 elt_type = TREE_TYPE (type);
5392 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
5393 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5394 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
5397 return failure;
5400 /* Return zero if something is declared to be a member of type
5401 CTYPE when in the context of CUR_TYPE. STRING is the error
5402 message to print in that case. Otherwise, quietly return 1. */
5404 static int
5405 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
5407 if (ctype && ctype != cur_type)
5409 if (flags == DTOR_FLAG)
5410 error ("destructor for alien class %qT cannot be a member", ctype);
5411 else
5412 error ("constructor for alien class %qT cannot be a member", ctype);
5413 return 0;
5415 return 1;
5418 /* Subroutine of `grokdeclarator'. */
5420 /* Generate errors possibly applicable for a given set of specifiers.
5421 This is for ARM $7.1.2. */
5423 static void
5424 bad_specifiers (tree object,
5425 const char* type,
5426 int virtualp,
5427 int quals,
5428 int inlinep,
5429 int friendp,
5430 int raises)
5432 if (virtualp)
5433 error ("%qD declared as a %<virtual%> %s", object, type);
5434 if (inlinep)
5435 error ("%qD declared as an %<inline%> %s", object, type);
5436 if (quals)
5437 error ("%<const%> and %<volatile%> function specifiers on "
5438 "%qD invalid in %s declaration",
5439 object, type);
5440 if (friendp)
5441 cp_error_at ("%qD declared as a friend", object);
5442 if (raises
5443 && (TREE_CODE (object) == TYPE_DECL
5444 || (!TYPE_PTRFN_P (TREE_TYPE (object))
5445 && !TYPE_REFFN_P (TREE_TYPE (object))
5446 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
5447 cp_error_at ("%qD declared with an exception specification", object);
5450 /* CTYPE is class type, or null if non-class.
5451 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5452 or METHOD_TYPE.
5453 DECLARATOR is the function's name.
5454 PARMS is a chain of PARM_DECLs for the function.
5455 VIRTUALP is truthvalue of whether the function is virtual or not.
5456 FLAGS are to be passed through to `grokclassfn'.
5457 QUALS are qualifiers indicating whether the function is `const'
5458 or `volatile'.
5459 RAISES is a list of exceptions that this function can raise.
5460 CHECK is 1 if we must find this method in CTYPE, 0 if we should
5461 not look, and -1 if we should not call `grokclassfn' at all.
5463 SFK is the kind of special function (if any) for the new function.
5465 Returns `NULL_TREE' if something goes wrong, after issuing
5466 applicable error messages. */
5468 static tree
5469 grokfndecl (tree ctype,
5470 tree type,
5471 tree declarator,
5472 tree parms,
5473 tree orig_declarator,
5474 int virtualp,
5475 enum overload_flags flags,
5476 cp_cv_quals quals,
5477 tree raises,
5478 int check,
5479 int friendp,
5480 int publicp,
5481 int inlinep,
5482 special_function_kind sfk,
5483 int funcdef_flag,
5484 int template_count,
5485 tree in_namespace,
5486 tree* attrlist)
5488 tree decl;
5489 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
5490 int has_default_arg = 0;
5491 tree t;
5493 if (raises)
5494 type = build_exception_variant (type, raises);
5496 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
5497 DECL_ARGUMENTS (decl) = parms;
5498 /* Propagate volatile out from type to decl. */
5499 if (TYPE_VOLATILE (type))
5500 TREE_THIS_VOLATILE (decl) = 1;
5502 /* If this decl has namespace scope, set that up. */
5503 if (in_namespace)
5504 set_decl_namespace (decl, in_namespace, friendp);
5505 else if (!ctype)
5506 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5508 /* `main' and builtins have implicit 'C' linkage. */
5509 if ((MAIN_NAME_P (declarator)
5510 || (IDENTIFIER_LENGTH (declarator) > 10
5511 && IDENTIFIER_POINTER (declarator)[0] == '_'
5512 && IDENTIFIER_POINTER (declarator)[1] == '_'
5513 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
5514 && current_lang_name == lang_name_cplusplus
5515 && ctype == NULL_TREE
5516 /* NULL_TREE means global namespace. */
5517 && DECL_CONTEXT (decl) == NULL_TREE)
5518 SET_DECL_LANGUAGE (decl, lang_c);
5520 /* Should probably propagate const out from type to decl I bet (mrs). */
5521 if (staticp)
5523 DECL_STATIC_FUNCTION_P (decl) = 1;
5524 DECL_CONTEXT (decl) = ctype;
5527 if (ctype)
5528 DECL_CONTEXT (decl) = ctype;
5530 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
5532 if (processing_template_decl)
5533 error ("cannot declare %<::main%> to be a template");
5534 if (inlinep)
5535 error ("cannot declare %<::main%> to be inline");
5536 if (!publicp)
5537 error ("cannot declare %<::main%> to be static");
5538 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
5539 integer_type_node))
5541 error ("%<::main%> must return %<int%>");
5542 TREE_TYPE (TREE_TYPE (decl)) = integer_type_node;
5544 inlinep = 0;
5545 publicp = 1;
5548 /* Members of anonymous types and local classes have no linkage; make
5549 them internal. If a typedef is made later, this will be changed. */
5550 if (ctype && (TYPE_ANONYMOUS_P (ctype)
5551 || decl_function_context (TYPE_MAIN_DECL (ctype))))
5552 publicp = 0;
5554 if (publicp)
5556 /* [basic.link]: A name with no linkage (notably, the name of a class
5557 or enumeration declared in a local scope) shall not be used to
5558 declare an entity with linkage.
5560 Only check this for public decls for now. See core 319, 389. */
5561 t = no_linkage_check (TREE_TYPE (decl),
5562 /*relaxed_p=*/false);
5563 if (t)
5565 if (TYPE_ANONYMOUS_P (t))
5567 if (DECL_EXTERN_C_P (decl))
5568 /* Allow this; it's pretty common in C. */;
5569 else
5571 pedwarn ("non-local function %q#D uses anonymous type",
5572 decl);
5573 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
5574 cp_pedwarn_at ("%q#D does not refer to the unqualified "
5575 "type, so it is not used for linkage",
5576 TYPE_NAME (t));
5579 else
5580 pedwarn ("non-local function %q#D uses local type %qT", decl, t);
5584 TREE_PUBLIC (decl) = publicp;
5585 if (! publicp)
5587 DECL_INTERFACE_KNOWN (decl) = 1;
5588 DECL_NOT_REALLY_EXTERN (decl) = 1;
5591 /* If the declaration was declared inline, mark it as such. */
5592 if (inlinep)
5593 DECL_DECLARED_INLINE_P (decl) = 1;
5594 /* We inline functions that are explicitly declared inline, or, when
5595 the user explicitly asks us to, all functions. */
5596 if (DECL_DECLARED_INLINE_P (decl)
5597 || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
5598 DECL_INLINE (decl) = 1;
5600 DECL_EXTERNAL (decl) = 1;
5601 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
5603 error ("%smember function %qD cannot have cv-qualifier",
5604 (ctype ? "static " : "non-"), decl);
5605 quals = TYPE_UNQUALIFIED;
5608 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
5609 grok_op_properties (decl, friendp, /*complain=*/true);
5611 if (ctype && decl_function_context (decl))
5612 DECL_NO_STATIC_CHAIN (decl) = 1;
5614 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
5615 if (TREE_PURPOSE (t)
5616 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
5618 has_default_arg = 1;
5619 break;
5622 if (friendp
5623 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
5625 if (funcdef_flag)
5626 error
5627 ("defining explicit specialization %qD in friend declaration",
5628 orig_declarator);
5629 else
5631 tree fns = TREE_OPERAND (orig_declarator, 0);
5632 tree args = TREE_OPERAND (orig_declarator, 1);
5634 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5636 /* Something like `template <class T> friend void f<T>()'. */
5637 error ("invalid use of template-id %qD in declaration "
5638 "of primary template",
5639 orig_declarator);
5640 return NULL_TREE;
5644 /* A friend declaration of the form friend void f<>(). Record
5645 the information in the TEMPLATE_ID_EXPR. */
5646 SET_DECL_IMPLICIT_INSTANTIATION (decl);
5648 if (TREE_CODE (fns) == COMPONENT_REF)
5650 /* Due to bison parser ickiness, we will have already looked
5651 up an operator_name or PFUNCNAME within the current class
5652 (see template_id in parse.y). If the current class contains
5653 such a name, we'll get a COMPONENT_REF here. Undo that. */
5655 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
5656 == current_class_type);
5657 fns = TREE_OPERAND (fns, 1);
5659 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
5660 || TREE_CODE (fns) == OVERLOAD);
5661 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
5663 if (has_default_arg)
5665 error ("default arguments are not allowed in declaration "
5666 "of friend template specialization %qD",
5667 decl);
5668 return NULL_TREE;
5671 if (inlinep)
5673 error ("%<inline%> is not allowed in declaration of friend "
5674 "template specialization %qD",
5675 decl);
5676 return NULL_TREE;
5681 if (funcdef_flag)
5682 /* Make the init_value nonzero so pushdecl knows this is not
5683 tentative. error_mark_node is replaced later with the BLOCK. */
5684 DECL_INITIAL (decl) = error_mark_node;
5686 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
5687 TREE_NOTHROW (decl) = 1;
5689 /* Caller will do the rest of this. */
5690 if (check < 0)
5691 return decl;
5693 if (ctype != NULL_TREE)
5695 if (sfk == sfk_constructor)
5696 DECL_CONSTRUCTOR_P (decl) = 1;
5698 grokclassfn (ctype, decl, flags, quals);
5701 decl = check_explicit_specialization (orig_declarator, decl,
5702 template_count,
5703 2 * (funcdef_flag != 0) +
5704 4 * (friendp != 0));
5705 if (decl == error_mark_node)
5706 return NULL_TREE;
5708 if (attrlist)
5710 cplus_decl_attributes (&decl, *attrlist, 0);
5711 *attrlist = NULL_TREE;
5714 if (ctype != NULL_TREE
5715 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
5716 && check)
5718 tree old_decl;
5720 old_decl = check_classfn (ctype, decl,
5721 (processing_template_decl
5722 > template_class_depth (ctype))
5723 ? current_template_parms
5724 : NULL_TREE);
5726 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
5727 /* Because grokfndecl is always supposed to return a
5728 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
5729 here. We depend on our callers to figure out that its
5730 really a template that's being returned. */
5731 old_decl = DECL_TEMPLATE_RESULT (old_decl);
5733 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
5734 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
5735 /* Remove the `this' parm added by grokclassfn.
5736 XXX Isn't this done in start_function, too? */
5737 revert_static_member_fn (decl);
5738 if (old_decl && DECL_ARTIFICIAL (old_decl))
5739 error ("definition of implicitly-declared %qD", old_decl);
5741 if (old_decl)
5743 tree ok;
5744 tree pushed_scope;
5746 /* Since we've smashed OLD_DECL to its
5747 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
5748 if (TREE_CODE (decl) == TEMPLATE_DECL)
5749 decl = DECL_TEMPLATE_RESULT (decl);
5751 /* Attempt to merge the declarations. This can fail, in
5752 the case of some invalid specialization declarations. */
5753 pushed_scope = push_scope (ctype);
5754 ok = duplicate_decls (decl, old_decl);
5755 if (pushed_scope)
5756 pop_scope (pushed_scope);
5757 if (!ok)
5759 error ("no %q#D member function declared in class %qT",
5760 decl, ctype);
5761 return NULL_TREE;
5763 return old_decl;
5767 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
5768 return NULL_TREE;
5770 if (ctype == NULL_TREE || check)
5771 return decl;
5773 if (virtualp)
5774 DECL_VIRTUAL_P (decl) = 1;
5776 return decl;
5779 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
5780 the linkage that DECL will receive in the object file. */
5782 static void
5783 set_linkage_for_static_data_member (tree decl)
5785 /* A static data member always has static storage duration and
5786 external linkage. Note that static data members are forbidden in
5787 local classes -- the only situation in which a class has
5788 non-external linkage. */
5789 TREE_PUBLIC (decl) = 1;
5790 TREE_STATIC (decl) = 1;
5791 /* For non-template classes, static data members are always put
5792 out in exactly those files where they are defined, just as
5793 with ordinary namespace-scope variables. */
5794 if (!processing_template_decl)
5795 DECL_INTERFACE_KNOWN (decl) = 1;
5798 /* Create a VAR_DECL named NAME with the indicated TYPE.
5800 If SCOPE is non-NULL, it is the class type or namespace containing
5801 the variable. If SCOPE is NULL, the variable should is created in
5802 the innermost enclosings scope. */
5804 static tree
5805 grokvardecl (tree type,
5806 tree name,
5807 const cp_decl_specifier_seq *declspecs,
5808 int initialized,
5809 int constp,
5810 tree scope)
5812 tree decl;
5813 tree explicit_scope;
5815 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
5817 /* Compute the scope in which to place the variable, but remember
5818 whether or not that scope was explicitly specified by the user. */
5819 explicit_scope = scope;
5820 if (!scope)
5822 /* An explicit "extern" specifier indicates a namespace-scope
5823 variable. */
5824 if (declspecs->storage_class == sc_extern)
5825 scope = current_namespace;
5826 else if (!at_function_scope_p ())
5827 scope = current_scope ();
5830 if (scope
5831 && (/* If the variable is a namespace-scope variable declared in a
5832 template, we need DECL_LANG_SPECIFIC. */
5833 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
5834 /* Similarly for namespace-scope variables with language linkage
5835 other than C++. */
5836 || (TREE_CODE (scope) == NAMESPACE_DECL
5837 && current_lang_name != lang_name_cplusplus)
5838 /* Similarly for static data members. */
5839 || TYPE_P (scope)))
5840 decl = build_lang_decl (VAR_DECL, name, type);
5841 else
5842 decl = build_decl (VAR_DECL, name, type);
5844 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
5845 set_decl_namespace (decl, explicit_scope, 0);
5846 else
5847 DECL_CONTEXT (decl) = scope;
5849 if (declspecs->storage_class == sc_extern)
5851 DECL_THIS_EXTERN (decl) = 1;
5852 DECL_EXTERNAL (decl) = !initialized;
5855 if (DECL_CLASS_SCOPE_P (decl))
5857 set_linkage_for_static_data_member (decl);
5858 /* This function is only called with out-of-class definitions. */
5859 DECL_EXTERNAL (decl) = 0;
5861 /* At top level, either `static' or no s.c. makes a definition
5862 (perhaps tentative), and absence of `static' makes it public. */
5863 else if (toplevel_bindings_p ())
5865 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
5866 && (DECL_THIS_EXTERN (decl) || ! constp));
5867 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
5869 /* Not at top level, only `static' makes a static definition. */
5870 else
5872 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
5873 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
5876 if (declspecs->specs[(int)ds_thread])
5878 if (targetm.have_tls)
5879 DECL_THREAD_LOCAL (decl) = 1;
5880 else
5881 /* A mere warning is sure to result in improper semantics
5882 at runtime. Don't bother to allow this to compile. */
5883 error ("thread-local storage not supported for this target");
5886 if (TREE_PUBLIC (decl))
5888 /* [basic.link]: A name with no linkage (notably, the name of a class
5889 or enumeration declared in a local scope) shall not be used to
5890 declare an entity with linkage.
5892 Only check this for public decls for now. */
5893 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
5894 if (t)
5896 if (TYPE_ANONYMOUS_P (t))
5898 if (DECL_EXTERN_C_P (decl))
5899 /* Allow this; it's pretty common in C. */
5901 else
5903 /* DRs 132, 319 and 389 seem to indicate types with
5904 no linkage can only be used to declare extern "C"
5905 entities. Since it's not always an error in the
5906 ISO C++ 90 Standard, we only issue a warning. */
5907 warning (0, "non-local variable %q#D uses anonymous type",
5908 decl);
5909 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
5910 cp_warning_at ("%q#D does not refer to the unqualified "
5911 "type, so it is not used for linkage",
5912 TYPE_NAME (t));
5915 else
5916 warning (0, "non-local variable %q#D uses local type %qT", decl, t);
5919 else
5920 DECL_INTERFACE_KNOWN (decl) = 1;
5922 return decl;
5925 /* Create and return a canonical pointer to member function type, for
5926 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
5928 tree
5929 build_ptrmemfunc_type (tree type)
5931 tree field, fields;
5932 tree t;
5933 tree unqualified_variant = NULL_TREE;
5935 if (type == error_mark_node)
5936 return type;
5938 /* If a canonical type already exists for this type, use it. We use
5939 this method instead of type_hash_canon, because it only does a
5940 simple equality check on the list of field members. */
5942 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
5943 return t;
5945 /* Make sure that we always have the unqualified pointer-to-member
5946 type first. */
5947 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
5948 unqualified_variant
5949 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
5951 t = make_aggr_type (RECORD_TYPE);
5952 xref_basetypes (t, NULL_TREE);
5954 /* Let the front-end know this is a pointer to member function... */
5955 TYPE_PTRMEMFUNC_FLAG (t) = 1;
5956 /* ... and not really an aggregate. */
5957 SET_IS_AGGR_TYPE (t, 0);
5959 field = build_decl (FIELD_DECL, pfn_identifier, type);
5960 fields = field;
5962 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
5963 TREE_CHAIN (field) = fields;
5964 fields = field;
5966 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
5968 /* Zap out the name so that the back-end will give us the debugging
5969 information for this anonymous RECORD_TYPE. */
5970 TYPE_NAME (t) = NULL_TREE;
5972 /* If this is not the unqualified form of this pointer-to-member
5973 type, set the TYPE_MAIN_VARIANT for this type to be the
5974 unqualified type. Since they are actually RECORD_TYPEs that are
5975 not variants of each other, we must do this manually. */
5976 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
5978 t = build_qualified_type (t, cp_type_quals (type));
5979 TYPE_MAIN_VARIANT (t) = unqualified_variant;
5980 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
5981 TYPE_NEXT_VARIANT (unqualified_variant) = t;
5984 /* Cache this pointer-to-member type so that we can find it again
5985 later. */
5986 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
5988 return t;
5991 /* Create and return a pointer to data member type. */
5993 tree
5994 build_ptrmem_type (tree class_type, tree member_type)
5996 if (TREE_CODE (member_type) == METHOD_TYPE)
5998 tree arg_types;
6000 arg_types = TYPE_ARG_TYPES (member_type);
6001 class_type = (cp_build_qualified_type
6002 (class_type,
6003 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
6004 member_type
6005 = build_method_type_directly (class_type,
6006 TREE_TYPE (member_type),
6007 TREE_CHAIN (arg_types));
6008 return build_ptrmemfunc_type (build_pointer_type (member_type));
6010 else
6012 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
6013 return build_offset_type (class_type, member_type);
6017 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
6018 Check to see that the definition is valid. Issue appropriate error
6019 messages. Return 1 if the definition is particularly bad, or 0
6020 otherwise. */
6023 check_static_variable_definition (tree decl, tree type)
6025 /* Motion 10 at San Diego: If a static const integral data member is
6026 initialized with an integral constant expression, the initializer
6027 may appear either in the declaration (within the class), or in
6028 the definition, but not both. If it appears in the class, the
6029 member is a member constant. The file-scope definition is always
6030 required. */
6031 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
6033 error ("invalid in-class initialization of static data member "
6034 "of non-integral type %qT",
6035 type);
6036 /* If we just return the declaration, crashes will sometimes
6037 occur. We therefore return void_type_node, as if this were a
6038 friend declaration, to cause callers to completely ignore
6039 this declaration. */
6040 return 1;
6042 else if (!CP_TYPE_CONST_P (type))
6043 error ("ISO C++ forbids in-class initialization of non-const "
6044 "static member %qD",
6045 decl);
6046 else if (pedantic && !INTEGRAL_TYPE_P (type))
6047 pedwarn ("ISO C++ forbids initialization of member constant "
6048 "%qD of non-integral type %qT", decl, type);
6050 return 0;
6053 /* Given the SIZE (i.e., number of elements) in an array, compute an
6054 appropriate index type for the array. If non-NULL, NAME is the
6055 name of the thing being declared. */
6057 tree
6058 compute_array_index_type (tree name, tree size)
6060 tree type = TREE_TYPE (size);
6061 tree itype;
6063 /* The array bound must be an integer type. */
6064 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
6066 if (name)
6067 error ("size of array %qD has non-integral type %qT", name, type);
6068 else
6069 error ("size of array has non-integral type %qT", type);
6070 size = integer_one_node;
6071 type = TREE_TYPE (size);
6074 if (abi_version_at_least (2)
6075 /* We should only handle value dependent expressions specially. */
6076 ? value_dependent_expression_p (size)
6077 /* But for abi-1, we handled all instances in templates. This
6078 effects the manglings produced. */
6079 : processing_template_decl)
6080 return build_index_type (build_min (MINUS_EXPR, sizetype,
6081 size, integer_one_node));
6083 /* The size might be the result of a cast. */
6084 STRIP_TYPE_NOPS (size);
6086 /* It might be a const variable or enumeration constant. */
6087 size = integral_constant_value (size);
6089 /* Normally, the array-bound will be a constant. */
6090 if (TREE_CODE (size) == INTEGER_CST)
6092 /* Check to see if the array bound overflowed. Make that an
6093 error, no matter how generous we're being. */
6094 int old_flag_pedantic_errors = flag_pedantic_errors;
6095 int old_pedantic = pedantic;
6096 pedantic = flag_pedantic_errors = 1;
6097 constant_expression_warning (size);
6098 pedantic = old_pedantic;
6099 flag_pedantic_errors = old_flag_pedantic_errors;
6101 /* An array must have a positive number of elements. */
6102 if (INT_CST_LT (size, integer_zero_node))
6104 if (name)
6105 error ("size of array %qD is negative", name);
6106 else
6107 error ("size of array is negative");
6108 size = integer_one_node;
6110 /* As an extension we allow zero-sized arrays. We always allow
6111 them in system headers because glibc uses them. */
6112 else if (integer_zerop (size) && pedantic && !in_system_header)
6114 if (name)
6115 pedwarn ("ISO C++ forbids zero-size array %qD", name);
6116 else
6117 pedwarn ("ISO C++ forbids zero-size array");
6120 else if (TREE_CONSTANT (size))
6122 /* `(int) &fn' is not a valid array bound. */
6123 if (name)
6124 error ("size of array %qD is not an integral constant-expression",
6125 name);
6126 else
6127 error ("size of array is not an integral constant-expression");
6129 else if (pedantic)
6131 if (name)
6132 pedwarn ("ISO C++ forbids variable-size array %qD", name);
6133 else
6134 pedwarn ("ISO C++ forbids variable-size array");
6137 if (processing_template_decl && !TREE_CONSTANT (size))
6138 /* A variable sized array. */
6139 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
6140 else
6142 HOST_WIDE_INT saved_processing_template_decl;
6144 /* Compute the index of the largest element in the array. It is
6145 one less than the number of elements in the array. We save
6146 and restore PROCESSING_TEMPLATE_DECL so that computations in
6147 cp_build_binary_op will be appropriately folded. */
6148 saved_processing_template_decl = processing_template_decl;
6149 processing_template_decl = 0;
6150 itype = cp_build_binary_op (MINUS_EXPR,
6151 cp_convert (ssizetype, size),
6152 cp_convert (ssizetype, integer_one_node));
6153 itype = fold (itype);
6154 processing_template_decl = saved_processing_template_decl;
6156 if (!TREE_CONSTANT (itype))
6157 /* A variable sized array. */
6158 itype = variable_size (itype);
6159 /* Make sure that there was no overflow when creating to a signed
6160 index type. (For example, on a 32-bit machine, an array with
6161 size 2^32 - 1 is too big.) */
6162 else if (TREE_OVERFLOW (itype))
6164 error ("overflow in array dimension");
6165 TREE_OVERFLOW (itype) = 0;
6169 /* Create and return the appropriate index type. */
6170 return build_index_type (itype);
6173 /* Returns the scope (if any) in which the entity declared by
6174 DECLARATOR will be located. If the entity was declared with an
6175 unqualified name, NULL_TREE is returned. */
6177 tree
6178 get_scope_of_declarator (const cp_declarator *declarator)
6180 while (declarator && declarator->kind != cdk_id)
6181 declarator = declarator->declarator;
6183 /* If the declarator-id is a SCOPE_REF, the scope in which the
6184 declaration occurs is the first operand. */
6185 if (declarator
6186 && declarator->u.id.qualifying_scope)
6187 return declarator->u.id.qualifying_scope;
6189 /* Otherwise, the declarator is not a qualified name; the entity will
6190 be declared in the current scope. */
6191 return NULL_TREE;
6194 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
6195 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
6196 with this type. */
6198 static tree
6199 create_array_type_for_decl (tree name, tree type, tree size)
6201 tree itype = NULL_TREE;
6202 const char* error_msg;
6204 /* If things have already gone awry, bail now. */
6205 if (type == error_mark_node || size == error_mark_node)
6206 return error_mark_node;
6208 /* Assume that everything will go OK. */
6209 error_msg = NULL;
6211 /* There are some types which cannot be array elements. */
6212 switch (TREE_CODE (type))
6214 case VOID_TYPE:
6215 error_msg = "array of void";
6216 break;
6218 case FUNCTION_TYPE:
6219 error_msg = "array of functions";
6220 break;
6222 case REFERENCE_TYPE:
6223 error_msg = "array of references";
6224 break;
6226 case METHOD_TYPE:
6227 error_msg = "array of function members";
6228 break;
6230 default:
6231 break;
6234 /* If something went wrong, issue an error-message and return. */
6235 if (error_msg)
6237 if (name)
6238 error ("declaration of %qD as %s", name, error_msg);
6239 else
6240 error ("creating %s", error_msg);
6242 return error_mark_node;
6245 /* [dcl.array]
6247 The constant expressions that specify the bounds of the arrays
6248 can be omitted only for the first member of the sequence. */
6249 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
6251 if (name)
6252 error ("declaration of %qD as multidimensional array must "
6253 "have bounds for all dimensions except the first",
6254 name);
6255 else
6256 error ("multidimensional array must have bounds for all "
6257 "dimensions except the first");
6259 return error_mark_node;
6262 /* Figure out the index type for the array. */
6263 if (size)
6264 itype = compute_array_index_type (name, size);
6266 /* [dcl.array]
6267 T is called the array element type; this type shall not be [...] an
6268 abstract class type. */
6269 abstract_virtuals_error (name, type);
6271 return build_cplus_array_type (type, itype);
6274 /* Check that it's OK to declare a function with the indicated TYPE.
6275 SFK indicates the kind of special function (if any) that this
6276 function is. OPTYPE is the type given in a conversion operator
6277 declaration, or the class type for a constructor/destructor.
6278 Returns the actual return type of the function; that
6279 may be different than TYPE if an error occurs, or for certain
6280 special functions. */
6282 static tree
6283 check_special_function_return_type (special_function_kind sfk,
6284 tree type,
6285 tree optype)
6287 switch (sfk)
6289 case sfk_constructor:
6290 if (type)
6291 error ("return type specification for constructor invalid");
6293 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6294 type = build_pointer_type (optype);
6295 else
6296 type = void_type_node;
6297 break;
6299 case sfk_destructor:
6300 if (type)
6301 error ("return type specification for destructor invalid");
6302 /* We can't use the proper return type here because we run into
6303 problems with ambiguous bases and covariant returns.
6304 Java classes are left unchanged because (void *) isn't a valid
6305 Java type, and we don't want to change the Java ABI. */
6306 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6307 type = build_pointer_type (void_type_node);
6308 else
6309 type = void_type_node;
6310 break;
6312 case sfk_conversion:
6313 if (type && !same_type_p (type, optype))
6314 error ("operator %qT declared to return %qT", optype, type);
6315 else if (type)
6316 pedwarn ("return type specified for %<operator %T%>", optype);
6317 type = optype;
6318 break;
6320 default:
6321 gcc_unreachable ();
6324 return type;
6327 /* A variable or data member (whose unqualified name is IDENTIFIER)
6328 has been declared with the indicated TYPE. If the TYPE is not
6329 acceptable, issue an error message and return a type to use for
6330 error-recovery purposes. */
6332 tree
6333 check_var_type (tree identifier, tree type)
6335 if (VOID_TYPE_P (type))
6337 if (!identifier)
6338 error ("unnamed variable or field declared void");
6339 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
6341 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
6342 error ("variable or field %qE declared void", identifier);
6344 else
6345 error ("variable or field declared void");
6346 type = integer_type_node;
6349 return type;
6352 /* Given declspecs and a declarator (abstract or otherwise), determine
6353 the name and type of the object declared and construct a DECL node
6354 for it.
6356 DECLSPECS is a chain of tree_list nodes whose value fields
6357 are the storage classes and type specifiers.
6359 DECL_CONTEXT says which syntactic context this declaration is in:
6360 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6361 FUNCDEF for a function definition. Like NORMAL but a few different
6362 error messages in each case. Return value may be zero meaning
6363 this definition is too screwy to try to parse.
6364 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
6365 handle member functions (which have FIELD context).
6366 Return value may be zero meaning this definition is too screwy to
6367 try to parse.
6368 PARM for a parameter declaration (either within a function prototype
6369 or before a function body). Make a PARM_DECL, or return void_type_node.
6370 CATCHPARM for a parameter declaration before a catch clause.
6371 TYPENAME if for a typename (in a cast or sizeof).
6372 Don't make a DECL node; just return the ..._TYPE node.
6373 FIELD for a struct or union field; make a FIELD_DECL.
6374 BITFIELD for a field with specified width.
6375 INITIALIZED is 1 if the decl has an initializer.
6377 ATTRLIST is a pointer to the list of attributes, which may be NULL
6378 if there are none; *ATTRLIST may be modified if attributes from inside
6379 the declarator should be applied to the declaration.
6381 When this function is called, scoping variables (such as
6382 CURRENT_CLASS_TYPE) should reflect the scope in which the
6383 declaration occurs, not the scope in which the new declaration will
6384 be placed. For example, on:
6386 void S::f() { ... }
6388 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6389 should not be `S'. */
6391 tree
6392 grokdeclarator (const cp_declarator *declarator,
6393 const cp_decl_specifier_seq *declspecs,
6394 enum decl_context decl_context,
6395 int initialized,
6396 tree* attrlist)
6398 tree type = NULL_TREE;
6399 int longlong = 0;
6400 int type_quals;
6401 int virtualp, explicitp, friendp, inlinep, staticp;
6402 int explicit_int = 0;
6403 int explicit_char = 0;
6404 int defaulted_int = 0;
6405 tree dependant_name = NULL_TREE;
6407 tree typedef_decl = NULL_TREE;
6408 const char *name = NULL;
6409 tree typedef_type = NULL_TREE;
6410 int funcdef_flag = 0;
6411 cp_declarator_kind innermost_code = cdk_error;
6412 int bitfield = 0;
6413 #if 0
6414 /* See the code below that used this. */
6415 tree decl_attr = NULL_TREE;
6416 #endif
6418 /* Keep track of what sort of function is being processed
6419 so that we can warn about default return values, or explicit
6420 return values which do not match prescribed defaults. */
6421 special_function_kind sfk = sfk_none;
6423 tree dname = NULL_TREE;
6424 tree ctor_return_type = NULL_TREE;
6425 enum overload_flags flags = NO_SPECIAL;
6426 cp_cv_quals quals = TYPE_UNQUALIFIED;
6427 tree raises = NULL_TREE;
6428 int template_count = 0;
6429 tree returned_attrs = NULL_TREE;
6430 tree parms = NULL_TREE;
6431 const cp_declarator *id_declarator;
6432 /* The unqualified name of the declarator; either an
6433 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
6434 tree unqualified_id;
6435 /* The class type, if any, in which this entity is located,
6436 or NULL_TREE if none. Note that this value may be different from
6437 the current class type; for example if an attempt is made to declare
6438 "A::f" inside "B", this value will be "A". */
6439 tree ctype = current_class_type;
6440 /* The NAMESPACE_DECL for the namespace in which this entity is
6441 located. If an unqualified name is used to declare the entity,
6442 this value will be NULL_TREE, even if the entity is located at
6443 namespace scope. */
6444 tree in_namespace = NULL_TREE;
6445 cp_decl_spec ds;
6446 cp_storage_class storage_class;
6447 bool unsigned_p, signed_p, short_p, long_p, thread_p;
6448 bool type_was_error_mark_node = false;
6450 signed_p = declspecs->specs[(int)ds_signed];
6451 unsigned_p = declspecs->specs[(int)ds_unsigned];
6452 short_p = declspecs->specs[(int)ds_short];
6453 long_p = declspecs->specs[(int)ds_long];
6454 thread_p = declspecs->specs[(int)ds_thread];
6456 if (decl_context == FUNCDEF)
6457 funcdef_flag = 1, decl_context = NORMAL;
6458 else if (decl_context == MEMFUNCDEF)
6459 funcdef_flag = -1, decl_context = FIELD;
6460 else if (decl_context == BITFIELD)
6461 bitfield = 1, decl_context = FIELD;
6463 /* Look inside a declarator for the name being declared
6464 and get it as a string, for an error message. */
6465 for (id_declarator = declarator;
6466 id_declarator;
6467 id_declarator = id_declarator->declarator)
6469 if (id_declarator->kind != cdk_id)
6470 innermost_code = id_declarator->kind;
6472 switch (id_declarator->kind)
6474 case cdk_function:
6475 if (id_declarator->declarator
6476 && id_declarator->declarator->kind == cdk_id)
6478 sfk = id_declarator->declarator->u.id.sfk;
6479 if (sfk == sfk_destructor)
6480 flags = DTOR_FLAG;
6482 break;
6484 case cdk_id:
6486 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
6487 tree decl = id_declarator->u.id.unqualified_name;
6488 if (!decl)
6489 break;
6490 if (qualifying_scope)
6492 if (TYPE_P (qualifying_scope))
6494 ctype = qualifying_scope;
6495 if (innermost_code != cdk_function
6496 && current_class_type
6497 && !UNIQUELY_DERIVED_FROM_P (ctype,
6498 current_class_type))
6500 error ("type %qT is not derived from type %qT",
6501 ctype, current_class_type);
6502 return error_mark_node;
6505 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
6506 in_namespace = qualifying_scope;
6508 if (TREE_CODE (decl) == BASELINK)
6509 decl = BASELINK_FUNCTIONS (decl);
6510 if (decl == error_mark_node)
6511 return error_mark_node;
6512 switch (TREE_CODE (decl))
6514 case BIT_NOT_EXPR:
6516 tree type;
6518 if (innermost_code != cdk_function)
6520 error ("declaration of %qD as non-function", decl);
6521 return error_mark_node;
6523 else if (!qualifying_scope
6524 && !(current_class_type && at_class_scope_p ()))
6526 error ("declaration of %qD as non-member", decl);
6527 return error_mark_node;
6530 type = TREE_OPERAND (decl, 0);
6531 name = IDENTIFIER_POINTER (constructor_name (type));
6533 break;
6535 case TEMPLATE_ID_EXPR:
6537 tree fns = TREE_OPERAND (decl, 0);
6539 dname = fns;
6540 if (TREE_CODE (dname) == COMPONENT_REF)
6541 dname = TREE_OPERAND (dname, 1);
6542 if (TREE_CODE (dname) != IDENTIFIER_NODE)
6544 gcc_assert (is_overloaded_fn (dname));
6545 dname = DECL_NAME (get_first_fn (dname));
6548 /* Fall through. */
6550 case IDENTIFIER_NODE:
6551 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6552 dname = decl;
6554 if (C_IS_RESERVED_WORD (dname))
6556 error ("declarator-id missing; using reserved word %qD",
6557 dname);
6558 name = IDENTIFIER_POINTER (dname);
6560 else if (!IDENTIFIER_TYPENAME_P (dname))
6561 name = IDENTIFIER_POINTER (dname);
6562 else
6564 gcc_assert (flags == NO_SPECIAL);
6565 flags = TYPENAME_FLAG;
6566 ctor_return_type = TREE_TYPE (dname);
6567 sfk = sfk_conversion;
6568 if (is_typename_at_global_scope (dname))
6569 name = IDENTIFIER_POINTER (dname);
6570 else
6571 name = "<invalid operator>";
6573 break;
6575 case TYPE_DECL:
6576 dname = constructor_name (TREE_TYPE (decl));
6577 name = IDENTIFIER_POINTER (dname);
6578 break;
6580 default:
6581 gcc_unreachable ();
6583 break;
6585 case cdk_array:
6586 case cdk_pointer:
6587 case cdk_reference:
6588 case cdk_ptrmem:
6589 break;
6591 case cdk_error:
6592 break;
6594 default:
6595 gcc_unreachable ();
6598 if (id_declarator->kind == cdk_id)
6599 break;
6602 /* A function definition's declarator must have the form of
6603 a function declarator. */
6605 if (funcdef_flag && innermost_code != cdk_function)
6606 return 0;
6608 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
6609 && innermost_code != cdk_function
6610 && ! (ctype && !declspecs->any_specifiers_p))
6612 error ("declaration of %qD as non-function", dname);
6613 return error_mark_node;
6616 /* Anything declared one level down from the top level
6617 must be one of the parameters of a function
6618 (because the body is at least two levels down). */
6620 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
6621 by not allowing C++ class definitions to specify their parameters
6622 with xdecls (must be spec.d in the parmlist).
6624 Since we now wait to push a class scope until we are sure that
6625 we are in a legitimate method context, we must set oldcname
6626 explicitly (since current_class_name is not yet alive).
6628 We also want to avoid calling this a PARM if it is in a namespace. */
6630 if (decl_context == NORMAL && !toplevel_bindings_p ())
6632 struct cp_binding_level *b = current_binding_level;
6633 current_binding_level = b->level_chain;
6634 if (current_binding_level != 0 && toplevel_bindings_p ())
6635 decl_context = PARM;
6636 current_binding_level = b;
6639 if (name == NULL)
6640 name = decl_context == PARM ? "parameter" : "type name";
6642 /* If there were multiple types specified in the decl-specifier-seq,
6643 issue an error message. */
6644 if (declspecs->multiple_types_p)
6645 error ("two or more data types in declaration of %qs", name);
6646 /* Extract the basic type from the decl-specifier-seq. */
6647 type = declspecs->type;
6648 if (type == error_mark_node)
6650 type = NULL_TREE;
6651 type_was_error_mark_node = true;
6653 /* If the entire declaration is itself tagged as deprecated then
6654 suppress reports of deprecated items. */
6655 if (type && TREE_DEPRECATED (type)
6656 && deprecated_state != DEPRECATED_SUPPRESS)
6657 warn_deprecated_use (type);
6658 if (type && TREE_CODE (type) == TYPE_DECL)
6660 typedef_decl = type;
6661 type = TREE_TYPE (typedef_decl);
6663 /* No type at all: default to `int', and set DEFAULTED_INT
6664 because it was not a user-defined typedef. */
6665 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
6667 /* These imply 'int'. */
6668 type = integer_type_node;
6669 defaulted_int = 1;
6671 /* Gather flags. */
6672 explicit_int = declspecs->explicit_int_p;
6673 explicit_char = declspecs->explicit_char_p;
6675 /* Check for repeated decl-specifiers. */
6676 for (ds = ds_first; ds != ds_last; ++ds)
6678 unsigned count = declspecs->specs[(int)ds];
6679 if (count < 2)
6680 continue;
6681 /* The "long" specifier is a special case because of
6682 "long long". */
6683 if (ds == ds_long)
6685 if (count > 2)
6686 error ("%<long long long%> is too long for GCC");
6687 else if (pedantic && !in_system_header && warn_long_long)
6688 pedwarn ("ISO C++ does not support %<long long%>");
6689 else
6690 longlong = 1;
6692 else if (declspecs->specs[(int)ds] > 1)
6694 static const char *const decl_spec_names[] = {
6695 "signed",
6696 "unsigned",
6697 "short",
6698 "long",
6699 "const",
6700 "volatile",
6701 "restrict",
6702 "inline",
6703 "virtual",
6704 "explicit",
6705 "friend",
6706 "typedef",
6707 "__complex",
6708 "__thread"
6710 error ("duplicate %qs", decl_spec_names[(int)ds]);
6714 #if 0
6715 /* See the code below that used this. */
6716 if (typedef_decl)
6717 decl_attr = DECL_ATTRIBUTES (typedef_decl);
6718 #endif
6719 typedef_type = type;
6722 if (sfk != sfk_conversion)
6723 ctor_return_type = ctype;
6725 if (sfk != sfk_none)
6726 type = check_special_function_return_type (sfk, type,
6727 ctor_return_type);
6728 else if (type == NULL_TREE)
6730 int is_main;
6732 explicit_int = -1;
6734 /* We handle `main' specially here, because 'main () { }' is so
6735 common. With no options, it is allowed. With -Wreturn-type,
6736 it is a warning. It is only an error with -pedantic-errors. */
6737 is_main = (funcdef_flag
6738 && dname && MAIN_NAME_P (dname)
6739 && ctype == NULL_TREE
6740 && in_namespace == NULL_TREE
6741 && current_namespace == global_namespace);
6743 if (type_was_error_mark_node)
6744 /* We've already issued an error, don't complain more. */;
6745 else if (in_system_header || flag_ms_extensions)
6746 /* Allow it, sigh. */;
6747 else if (pedantic || ! is_main)
6748 pedwarn ("ISO C++ forbids declaration of %qs with no type", name);
6749 else if (warn_return_type)
6750 warning (0, "ISO C++ forbids declaration of %qs with no type", name);
6752 type = integer_type_node;
6755 ctype = NULL_TREE;
6757 /* Now process the modifiers that were specified
6758 and check for invalid combinations. */
6760 /* Long double is a special combination. */
6761 if (long_p && TYPE_MAIN_VARIANT (type) == double_type_node)
6763 long_p = false;
6764 type = build_qualified_type (long_double_type_node,
6765 cp_type_quals (type));
6768 /* Check all other uses of type modifiers. */
6770 if (unsigned_p || signed_p || long_p || short_p)
6772 int ok = 0;
6774 if (TREE_CODE (type) == REAL_TYPE)
6775 error ("short, signed or unsigned invalid for %qs", name);
6776 else if (TREE_CODE (type) != INTEGER_TYPE)
6777 error ("long, short, signed or unsigned invalid for %qs", name);
6778 else if (long_p && short_p)
6779 error ("long and short specified together for %qs", name);
6780 else if ((long_p || short_p) && explicit_char)
6781 error ("long or short specified with char for %qs", name);
6782 else if ((long_p|| short_p) && TREE_CODE (type) == REAL_TYPE)
6783 error ("long or short specified with floating type for %qs", name);
6784 else if (signed_p && unsigned_p)
6785 error ("signed and unsigned given together for %qs", name);
6786 else
6788 ok = 1;
6789 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
6791 pedwarn ("long, short, signed or unsigned used invalidly for %qs",
6792 name);
6793 if (flag_pedantic_errors)
6794 ok = 0;
6798 /* Discard the type modifiers if they are invalid. */
6799 if (! ok)
6801 unsigned_p = false;
6802 signed_p = false;
6803 long_p = false;
6804 short_p = false;
6805 longlong = 0;
6809 /* Decide whether an integer type is signed or not.
6810 Optionally treat bitfields as signed by default. */
6811 if (unsigned_p
6812 /* [class.bit]
6814 It is implementation-defined whether a plain (neither
6815 explicitly signed or unsigned) char, short, int, or long
6816 bit-field is signed or unsigned.
6818 Naturally, we extend this to long long as well. Note that
6819 this does not include wchar_t. */
6820 || (bitfield && !flag_signed_bitfields
6821 && !signed_p
6822 /* A typedef for plain `int' without `signed' can be
6823 controlled just like plain `int', but a typedef for
6824 `signed int' cannot be so controlled. */
6825 && !(typedef_decl
6826 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
6827 && (TREE_CODE (type) == INTEGER_TYPE
6828 || TREE_CODE (type) == CHAR_TYPE)
6829 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
6831 if (longlong)
6832 type = long_long_unsigned_type_node;
6833 else if (long_p)
6834 type = long_unsigned_type_node;
6835 else if (short_p)
6836 type = short_unsigned_type_node;
6837 else if (type == char_type_node)
6838 type = unsigned_char_type_node;
6839 else if (typedef_decl)
6840 type = c_common_unsigned_type (type);
6841 else
6842 type = unsigned_type_node;
6844 else if (signed_p && type == char_type_node)
6845 type = signed_char_type_node;
6846 else if (longlong)
6847 type = long_long_integer_type_node;
6848 else if (long_p)
6849 type = long_integer_type_node;
6850 else if (short_p)
6851 type = short_integer_type_node;
6853 if (declspecs->specs[(int)ds_complex])
6855 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
6856 error ("complex invalid for %qs", name);
6857 /* If we just have "complex", it is equivalent to
6858 "complex double", but if any modifiers at all are specified it is
6859 the complex form of TYPE. E.g, "complex short" is
6860 "complex short int". */
6862 else if (defaulted_int && ! longlong
6863 && ! (long_p || short_p || signed_p || unsigned_p))
6864 type = complex_double_type_node;
6865 else if (type == integer_type_node)
6866 type = complex_integer_type_node;
6867 else if (type == float_type_node)
6868 type = complex_float_type_node;
6869 else if (type == double_type_node)
6870 type = complex_double_type_node;
6871 else if (type == long_double_type_node)
6872 type = complex_long_double_type_node;
6873 else
6874 type = build_complex_type (type);
6877 type_quals = TYPE_UNQUALIFIED;
6878 if (declspecs->specs[(int)ds_const])
6879 type_quals |= TYPE_QUAL_CONST;
6880 if (declspecs->specs[(int)ds_volatile])
6881 type_quals |= TYPE_QUAL_VOLATILE;
6882 if (declspecs->specs[(int)ds_restrict])
6883 type_quals |= TYPE_QUAL_RESTRICT;
6884 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
6885 error ("qualifiers are not allowed on declaration of %<operator %T%>",
6886 ctor_return_type);
6888 if (TREE_CODE (type) == FUNCTION_TYPE
6889 && type_quals != TYPE_UNQUALIFIED)
6891 /* This was an error in C++98 (cv-qualifiers cannot be added to
6892 a function type), but DR 295 makes the code well-formed by
6893 dropping the extra qualifiers. */
6894 if (pedantic)
6896 tree bad_type = build_qualified_type (type, type_quals);
6897 pedwarn ("ignoring %qV qualifiers added to function type %qT",
6898 bad_type, type);
6900 type_quals = TYPE_UNQUALIFIED;
6902 type_quals |= cp_type_quals (type);
6903 type = cp_build_qualified_type_real
6904 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
6905 ? tf_ignore_bad_quals : 0) | tf_error | tf_warning));
6906 /* We might have ignored or rejected some of the qualifiers. */
6907 type_quals = cp_type_quals (type);
6909 staticp = 0;
6910 inlinep = !! declspecs->specs[(int)ds_inline];
6911 virtualp = !! declspecs->specs[(int)ds_virtual];
6912 explicitp = !! declspecs->specs[(int)ds_explicit];
6914 storage_class = declspecs->storage_class;
6915 if (storage_class == sc_static)
6916 staticp = 1 + (decl_context == FIELD);
6918 if (virtualp && staticp == 2)
6920 error ("member %qD cannot be declared both virtual and static", dname);
6921 staticp = 0;
6923 friendp = !! declspecs->specs[(int)ds_friend];
6925 if (dependant_name && !friendp)
6927 error ("%<%T::%D%> is not a valid declarator", ctype, dependant_name);
6928 return void_type_node;
6931 /* Issue errors about use of storage classes for parameters. */
6932 if (decl_context == PARM)
6934 if (declspecs->specs[(int)ds_typedef])
6935 error ("typedef declaration invalid in parameter declaration");
6936 else if (storage_class == sc_static
6937 || storage_class == sc_extern
6938 || thread_p)
6939 error ("storage class specifiers invalid in parameter declarations");
6942 /* Give error if `virtual' is used outside of class declaration. */
6943 if (virtualp
6944 && (current_class_name == NULL_TREE || decl_context != FIELD))
6946 error ("virtual outside class declaration");
6947 virtualp = 0;
6950 /* Static anonymous unions are dealt with here. */
6951 if (staticp && decl_context == TYPENAME
6952 && declspecs->type
6953 && ANON_AGGR_TYPE_P (declspecs->type))
6954 decl_context = FIELD;
6956 /* Warn about storage classes that are invalid for certain
6957 kinds of declarations (parameters, typenames, etc.). */
6958 if (declspecs->multiple_storage_classes_p)
6959 error ("multiple storage classes in declaration of %qs", name);
6960 else if (thread_p
6961 && ((storage_class
6962 && storage_class != sc_extern
6963 && storage_class != sc_static)
6964 || declspecs->specs[(int)ds_typedef]))
6966 error ("multiple storage classes in declaration of %qs", name);
6967 thread_p = false;
6969 else if (decl_context != NORMAL
6970 && ((storage_class != sc_none
6971 && storage_class != sc_mutable)
6972 || thread_p))
6974 if ((decl_context == PARM || decl_context == CATCHPARM)
6975 && (storage_class == sc_register
6976 || storage_class == sc_auto))
6978 else if (declspecs->specs[(int)ds_typedef])
6980 else if (decl_context == FIELD
6981 /* C++ allows static class elements. */
6982 && storage_class == sc_static)
6983 /* C++ also allows inlines and signed and unsigned elements,
6984 but in those cases we don't come in here. */
6986 else
6988 if (decl_context == FIELD)
6990 tree tmp = NULL_TREE;
6991 int op = 0;
6993 if (declarator)
6995 /* Avoid trying to get an operand off an identifier node. */
6996 if (declarator->kind != cdk_id)
6997 tmp = declarator->declarator->u.id.unqualified_name;
6998 else
6999 tmp = declarator->u.id.unqualified_name;
7000 op = IDENTIFIER_OPNAME_P (tmp);
7001 if (IDENTIFIER_TYPENAME_P (tmp))
7003 if (is_typename_at_global_scope (tmp))
7004 name = IDENTIFIER_POINTER (tmp);
7005 else
7006 name = "<invalid operator>";
7009 error ("storage class specified for %s %qs",
7010 op ? "member operator" : "field",
7011 name);
7013 else
7015 if (decl_context == PARM || decl_context == CATCHPARM)
7016 error ("storage class specified for parameter %qs", name);
7017 else
7018 error ("storage class specified for typename");
7020 if (storage_class == sc_register
7021 || storage_class == sc_auto
7022 || storage_class == sc_extern
7023 || thread_p)
7024 storage_class = sc_none;
7027 else if (storage_class == sc_extern && initialized
7028 && !funcdef_flag)
7030 if (toplevel_bindings_p ())
7032 /* It's common practice (and completely valid) to have a const
7033 be initialized and declared extern. */
7034 if (!(type_quals & TYPE_QUAL_CONST))
7035 warning (0, "%qs initialized and declared %<extern%>", name);
7037 else
7038 error ("%qs has both %<extern%> and initializer", name);
7040 else if (storage_class == sc_extern && funcdef_flag
7041 && ! toplevel_bindings_p ())
7042 error ("nested function %qs declared %<extern%>", name);
7043 else if (toplevel_bindings_p ())
7045 if (storage_class == sc_auto)
7046 error ("top-level declaration of %qs specifies %<auto%>", name);
7048 else if (thread_p
7049 && storage_class != sc_extern
7050 && storage_class != sc_static)
7052 error ("function-scope %qs implicitly auto and declared %<__thread%>",
7053 name);
7054 thread_p = false;
7057 if (storage_class && friendp)
7058 error ("storage class specifiers invalid in friend function declarations");
7060 if (!id_declarator)
7061 unqualified_id = NULL_TREE;
7062 else
7064 unqualified_id = id_declarator->u.id.unqualified_name;
7065 if (TREE_CODE (unqualified_id) == BASELINK)
7066 unqualified_id = BASELINK_FUNCTIONS (unqualified_id);
7067 switch (TREE_CODE (unqualified_id))
7069 case BIT_NOT_EXPR:
7070 unqualified_id
7071 = constructor_name (TREE_OPERAND (unqualified_id, 0));
7072 break;
7074 case TYPE_DECL:
7075 unqualified_id
7076 = constructor_name (TREE_TYPE (unqualified_id));
7077 break;
7079 case IDENTIFIER_NODE:
7080 case TEMPLATE_ID_EXPR:
7081 break;
7083 default:
7084 gcc_unreachable ();
7088 /* Determine the type of the entity declared by recurring on the
7089 declarator. */
7090 for (; declarator; declarator = declarator->declarator)
7092 const cp_declarator *inner_declarator;
7093 tree attrs;
7095 if (type == error_mark_node)
7096 return error_mark_node;
7098 attrs = declarator->attributes;
7099 if (attrs)
7101 int attr_flags;
7103 attr_flags = 0;
7104 if (declarator == NULL || declarator->kind == cdk_id)
7105 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
7106 if (declarator->kind == cdk_function)
7107 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
7108 if (declarator->kind == cdk_array)
7109 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
7110 returned_attrs = decl_attributes (&type,
7111 chainon (returned_attrs, attrs),
7112 attr_flags);
7115 if (declarator->kind == cdk_id)
7116 break;
7118 inner_declarator = declarator->declarator;
7120 switch (declarator->kind)
7122 case cdk_array:
7123 type = create_array_type_for_decl (dname, type,
7124 declarator->u.array.bounds);
7125 break;
7127 case cdk_function:
7129 tree arg_types;
7130 int funcdecl_p;
7132 /* Declaring a function type.
7133 Make sure we have a valid type for the function to return. */
7135 /* We now know that the TYPE_QUALS don't apply to the
7136 decl, but to its return type. */
7137 type_quals = TYPE_UNQUALIFIED;
7139 /* Warn about some types functions can't return. */
7141 if (TREE_CODE (type) == FUNCTION_TYPE)
7143 error ("%qs declared as function returning a function", name);
7144 type = integer_type_node;
7146 if (TREE_CODE (type) == ARRAY_TYPE)
7148 error ("%qs declared as function returning an array", name);
7149 type = integer_type_node;
7152 /* Pick up type qualifiers which should be applied to `this'. */
7153 quals = declarator->u.function.qualifiers;
7155 /* Pick up the exception specifications. */
7156 raises = declarator->u.function.exception_specification;
7158 /* Say it's a definition only for the CALL_EXPR
7159 closest to the identifier. */
7160 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
7162 if (ctype == NULL_TREE
7163 && decl_context == FIELD
7164 && funcdecl_p
7165 && (friendp == 0 || dname == current_class_name))
7166 ctype = current_class_type;
7168 if (ctype && sfk == sfk_conversion)
7169 TYPE_HAS_CONVERSION (ctype) = 1;
7170 if (ctype && (sfk == sfk_constructor
7171 || sfk == sfk_destructor))
7173 /* We are within a class's scope. If our declarator name
7174 is the same as the class name, and we are defining
7175 a function, then it is a constructor/destructor, and
7176 therefore returns a void type. */
7178 if (flags == DTOR_FLAG)
7180 /* ISO C++ 12.4/2. A destructor may not be
7181 declared const or volatile. A destructor may
7182 not be static. */
7183 if (staticp == 2)
7184 error ("destructor cannot be static member function");
7185 if (quals)
7187 error ("destructors may not be cv-qualified");
7188 quals = TYPE_UNQUALIFIED;
7190 if (decl_context == FIELD)
7192 if (! member_function_or_else (ctype,
7193 current_class_type,
7194 flags))
7195 return void_type_node;
7198 else /* It's a constructor. */
7200 if (explicitp == 1)
7201 explicitp = 2;
7202 /* ISO C++ 12.1. A constructor may not be
7203 declared const or volatile. A constructor may
7204 not be virtual. A constructor may not be
7205 static. */
7206 if (staticp == 2)
7207 error ("constructor cannot be static member function");
7208 if (virtualp)
7210 pedwarn ("constructors cannot be declared virtual");
7211 virtualp = 0;
7213 if (quals)
7215 error ("constructors may not be cv-qualified");
7216 quals = TYPE_UNQUALIFIED;
7218 if (decl_context == FIELD)
7220 if (! member_function_or_else (ctype,
7221 current_class_type,
7222 flags))
7223 return void_type_node;
7224 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
7225 if (sfk != sfk_constructor)
7226 return NULL_TREE;
7229 if (decl_context == FIELD)
7230 staticp = 0;
7232 else if (friendp)
7234 if (initialized)
7235 error ("can't initialize friend function %qs", name);
7236 if (virtualp)
7238 /* Cannot be both friend and virtual. */
7239 error ("virtual functions cannot be friends");
7240 friendp = 0;
7242 if (decl_context == NORMAL)
7243 error ("friend declaration not in class definition");
7244 if (current_function_decl && funcdef_flag)
7245 error ("can't define friend function %qs in a local "
7246 "class definition",
7247 name);
7250 arg_types = grokparms (declarator->u.function.parameters,
7251 &parms);
7253 if (inner_declarator
7254 && inner_declarator->kind == cdk_id
7255 && inner_declarator->u.id.sfk == sfk_destructor
7256 && arg_types != void_list_node)
7258 error ("destructors may not have parameters");
7259 arg_types = void_list_node;
7260 parms = NULL_TREE;
7263 type = build_function_type (type, arg_types);
7264 type = cp_build_qualified_type (type, quals);
7266 break;
7268 case cdk_pointer:
7269 case cdk_reference:
7270 case cdk_ptrmem:
7271 /* Filter out pointers-to-references and references-to-references.
7272 We can get these if a TYPE_DECL is used. */
7274 if (TREE_CODE (type) == REFERENCE_TYPE)
7276 error (declarator->kind == cdk_reference
7277 ? "cannot declare reference to %q#T"
7278 : "cannot declare pointer to %q#T", type);
7279 type = TREE_TYPE (type);
7281 else if (VOID_TYPE_P (type))
7283 if (declarator->kind == cdk_reference)
7284 error ("cannot declare reference to %q#T", type);
7285 else if (declarator->kind == cdk_ptrmem)
7286 error ("cannot declare pointer to %q#T member", type);
7289 /* We now know that the TYPE_QUALS don't apply to the decl,
7290 but to the target of the pointer. */
7291 type_quals = TYPE_UNQUALIFIED;
7293 if (declarator->kind == cdk_ptrmem
7294 && (TREE_CODE (type) == FUNCTION_TYPE
7295 || (quals && TREE_CODE (type) == METHOD_TYPE)))
7297 tree dummy;
7299 /* If the type is a FUNCTION_TYPE, pick up the
7300 qualifiers from that function type. No other
7301 qualifiers may be supplied. */
7302 if (TREE_CODE (type) == FUNCTION_TYPE)
7303 quals = cp_type_quals (type);
7305 dummy = build_decl (TYPE_DECL, NULL_TREE, type);
7306 grok_method_quals (declarator->u.pointer.class_type,
7307 dummy, quals);
7308 type = TREE_TYPE (dummy);
7309 quals = TYPE_UNQUALIFIED;
7312 if (declarator->kind == cdk_reference)
7314 if (!VOID_TYPE_P (type))
7315 type = build_reference_type (type);
7317 else if (TREE_CODE (type) == METHOD_TYPE)
7318 type = build_ptrmemfunc_type (build_pointer_type (type));
7319 else if (declarator->kind == cdk_ptrmem)
7321 /* We might have parsed a namespace as the class type. */
7322 if (TREE_CODE (declarator->u.pointer.class_type)
7323 == NAMESPACE_DECL)
7325 error ("%qD is a namespace",
7326 declarator->u.pointer.class_type);
7327 type = build_pointer_type (type);
7329 else if (declarator->u.pointer.class_type == error_mark_node)
7330 /* We will already have complained. */
7331 type = error_mark_node;
7332 else
7333 type = build_ptrmem_type (declarator->u.pointer.class_type,
7334 type);
7336 else
7337 type = build_pointer_type (type);
7339 /* Process a list of type modifier keywords (such as
7340 const or volatile) that were given inside the `*' or `&'. */
7342 if (declarator->u.pointer.qualifiers)
7344 type
7345 = cp_build_qualified_type (type,
7346 declarator->u.pointer.qualifiers);
7347 type_quals = cp_type_quals (type);
7349 ctype = NULL_TREE;
7350 break;
7352 case cdk_error:
7353 break;
7355 default:
7356 gcc_unreachable ();
7360 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
7361 && TREE_CODE (type) != FUNCTION_TYPE
7362 && TREE_CODE (type) != METHOD_TYPE)
7364 error ("template-id %qD used as a declarator",
7365 unqualified_id);
7366 unqualified_id = dname;
7369 /* If DECLARATOR is non-NULL, we know it is a cdk_id declarator;
7370 otherwise, we would not have exited the loop above. */
7371 if (declarator
7372 && declarator->u.id.qualifying_scope
7373 && TYPE_P (declarator->u.id.qualifying_scope))
7375 tree t;
7377 ctype = declarator->u.id.qualifying_scope;
7378 ctype = TYPE_MAIN_VARIANT (ctype);
7379 t = ctype;
7380 while (t != NULL_TREE && CLASS_TYPE_P (t))
7382 /* You're supposed to have one `template <...>' for every
7383 template class, but you don't need one for a full
7384 specialization. For example:
7386 template <class T> struct S{};
7387 template <> struct S<int> { void f(); };
7388 void S<int>::f () {}
7390 is correct; there shouldn't be a `template <>' for the
7391 definition of `S<int>::f'. */
7392 if (CLASSTYPE_TEMPLATE_INFO (t)
7393 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
7394 || uses_template_parms (CLASSTYPE_TI_ARGS (t)))
7395 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
7396 template_count += 1;
7398 t = TYPE_MAIN_DECL (t);
7399 t = DECL_CONTEXT (t);
7402 if (ctype == current_class_type)
7404 /* class A {
7405 void A::f ();
7408 Is this ill-formed? */
7410 if (pedantic)
7411 pedwarn ("extra qualification %<%T::%> on member %qs ignored",
7412 ctype, name);
7414 else if (TREE_CODE (type) == FUNCTION_TYPE)
7416 tree sname = declarator->u.id.unqualified_name;
7418 if (TREE_CODE (sname) == IDENTIFIER_NODE
7419 && NEW_DELETE_OPNAME_P (sname))
7420 /* Overloaded operator new and operator delete
7421 are always static functions. */
7423 else if (current_class_type == NULL_TREE || friendp)
7424 type
7425 = build_method_type_directly (ctype,
7426 TREE_TYPE (type),
7427 TYPE_ARG_TYPES (type));
7428 else
7430 error ("cannot declare member function %<%T::%s%> within %<%T%>",
7431 ctype, name, current_class_type);
7432 return error_mark_node;
7435 else if (declspecs->specs[(int)ds_typedef]
7436 || COMPLETE_TYPE_P (complete_type (ctype)))
7438 /* Have to move this code elsewhere in this function.
7439 this code is used for i.e., typedef int A::M; M *pm;
7441 It is? How? jason 10/2/94 */
7443 if (current_class_type)
7445 error ("cannot declare member %<%T::%s%> within %qT",
7446 ctype, name, current_class_type);
7447 return void_type_node;
7450 else
7452 cxx_incomplete_type_error (NULL_TREE, ctype);
7453 return error_mark_node;
7457 if (returned_attrs)
7459 if (attrlist)
7460 *attrlist = chainon (returned_attrs, *attrlist);
7461 else
7462 attrlist = &returned_attrs;
7465 /* Now TYPE has the actual type. */
7467 /* Did array size calculations overflow? */
7469 if (TREE_CODE (type) == ARRAY_TYPE
7470 && COMPLETE_TYPE_P (type)
7471 && TREE_OVERFLOW (TYPE_SIZE (type)))
7473 error ("size of array %qs is too large", name);
7474 /* If we proceed with the array type as it is, we'll eventually
7475 crash in tree_low_cst(). */
7476 type = error_mark_node;
7479 if ((decl_context == FIELD || decl_context == PARM)
7480 && !processing_template_decl
7481 && variably_modified_type_p (type, NULL_TREE))
7483 if (decl_context == FIELD)
7484 error ("data member may not have variably modified type %qT", type);
7485 else
7486 error ("parameter may not have variably modified type %qT", type);
7487 type = error_mark_node;
7490 if (explicitp == 1 || (explicitp && friendp))
7492 /* [dcl.fct.spec] The explicit specifier shall only be used in
7493 declarations of constructors within a class definition. */
7494 error ("only declarations of constructors can be %<explicit%>");
7495 explicitp = 0;
7498 if (storage_class == sc_mutable)
7500 if (decl_context != FIELD || friendp)
7502 error ("non-member %qs cannot be declared %<mutable%>", name);
7503 storage_class = sc_none;
7505 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
7507 error ("non-object member %qs cannot be declared %<mutable%>", name);
7508 storage_class = sc_none;
7510 else if (TREE_CODE (type) == FUNCTION_TYPE
7511 || TREE_CODE (type) == METHOD_TYPE)
7513 error ("function %qs cannot be declared %<mutable%>", name);
7514 storage_class = sc_none;
7516 else if (staticp)
7518 error ("static %qs cannot be declared %<mutable%>", name);
7519 storage_class = sc_none;
7521 else if (type_quals & TYPE_QUAL_CONST)
7523 error ("const %qs cannot be declared %<mutable%>", name);
7524 storage_class = sc_none;
7528 /* If this is declaring a typedef name, return a TYPE_DECL. */
7529 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
7531 tree decl;
7533 /* Note that the grammar rejects storage classes
7534 in typenames, fields or parameters. */
7535 if (current_lang_name == lang_name_java)
7536 TYPE_FOR_JAVA (type) = 1;
7538 if (decl_context == FIELD)
7539 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
7540 else
7541 decl = build_decl (TYPE_DECL, unqualified_id, type);
7542 if (id_declarator && declarator->u.id.qualifying_scope)
7543 error ("%Jtypedef name may not be a nested-name-specifier", decl);
7545 if (decl_context != FIELD)
7547 if (!current_function_decl)
7548 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7549 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
7550 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
7551 (current_function_decl)))
7552 /* The TYPE_DECL is "abstract" because there will be
7553 clones of this constructor/destructor, and there will
7554 be copies of this TYPE_DECL generated in those
7555 clones. */
7556 DECL_ABSTRACT (decl) = 1;
7558 else if (constructor_name_p (unqualified_id, current_class_type))
7559 pedwarn ("ISO C++ forbids nested type %qD with same name "
7560 "as enclosing class",
7561 unqualified_id);
7563 /* If the user declares "typedef struct {...} foo" then the
7564 struct will have an anonymous name. Fill that name in now.
7565 Nothing can refer to it, so nothing needs know about the name
7566 change. */
7567 if (type != error_mark_node
7568 && unqualified_id
7569 && TYPE_NAME (type)
7570 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7571 && TYPE_ANONYMOUS_P (type)
7572 /* Don't do this if there are attributes. */
7573 && (!attrlist || !*attrlist)
7574 && cp_type_quals (type) == TYPE_UNQUALIFIED)
7576 tree oldname = TYPE_NAME (type);
7577 tree t;
7579 /* Replace the anonymous name with the real name everywhere. */
7580 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
7581 if (TYPE_NAME (t) == oldname)
7582 TYPE_NAME (t) = decl;
7584 if (TYPE_LANG_SPECIFIC (type))
7585 TYPE_WAS_ANONYMOUS (type) = 1;
7587 /* If this is a typedef within a template class, the nested
7588 type is a (non-primary) template. The name for the
7589 template needs updating as well. */
7590 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
7591 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
7592 = TYPE_IDENTIFIER (type);
7594 /* FIXME remangle member functions; member functions of a
7595 type with external linkage have external linkage. */
7598 if (quals)
7600 if (ctype == NULL_TREE)
7602 if (TREE_CODE (type) == METHOD_TYPE)
7603 ctype = TYPE_METHOD_BASETYPE (type);
7604 /* Any qualifiers on a function type typedef have
7605 already been dealt with. */
7606 else if (TREE_CODE (type) == FUNCTION_TYPE)
7607 quals = TYPE_UNQUALIFIED;
7609 if (ctype != NULL_TREE)
7610 grok_method_quals (ctype, decl, quals);
7613 if (signed_p
7614 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
7615 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
7617 bad_specifiers (decl, "type", virtualp, quals != TYPE_UNQUALIFIED,
7618 inlinep, friendp, raises != NULL_TREE);
7620 return decl;
7623 /* Detect the case of an array type of unspecified size
7624 which came, as such, direct from a typedef name.
7625 We must copy the type, so that the array's domain can be
7626 individually set by the object's initializer. */
7628 if (type && typedef_type
7629 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
7630 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
7631 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
7633 /* Detect where we're using a typedef of function type to declare a
7634 function. PARMS will not be set, so we must create it now. */
7636 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
7638 tree decls = NULL_TREE;
7639 tree args;
7641 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
7643 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
7645 TREE_CHAIN (decl) = decls;
7646 decls = decl;
7649 parms = nreverse (decls);
7651 if (decl_context != TYPENAME)
7653 /* A cv-qualifier-seq shall only be part of the function type
7654 for a non-static member function. [8.3.5/4 dcl.fct] */
7655 if (cp_type_quals (type) != TYPE_UNQUALIFIED
7656 && (current_class_type == NULL_TREE || staticp) )
7658 error ("qualified function types cannot be used to declare %s functions",
7659 (staticp? "static member" : "free"));
7660 type = TYPE_MAIN_VARIANT (type);
7663 /* The qualifiers on the function type become the qualifiers on
7664 the non-static member function. */
7665 quals |= cp_type_quals (type);
7669 /* If this is a type name (such as, in a cast or sizeof),
7670 compute the type and return it now. */
7672 if (decl_context == TYPENAME)
7674 /* Note that the grammar rejects storage classes
7675 in typenames, fields or parameters. */
7676 if (type_quals != TYPE_UNQUALIFIED)
7677 type_quals = TYPE_UNQUALIFIED;
7679 /* Special case: "friend class foo" looks like a TYPENAME context. */
7680 if (friendp)
7682 if (type_quals != TYPE_UNQUALIFIED)
7684 error ("type qualifiers specified for friend class declaration");
7685 type_quals = TYPE_UNQUALIFIED;
7687 if (inlinep)
7689 error ("%<inline%> specified for friend class declaration");
7690 inlinep = 0;
7693 if (!current_aggr)
7695 /* Don't allow friend declaration without a class-key. */
7696 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
7697 pedwarn ("template parameters cannot be friends");
7698 else if (TREE_CODE (type) == TYPENAME_TYPE)
7699 pedwarn ("friend declaration requires class-key, "
7700 "i.e. %<friend class %T::%D%>",
7701 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
7702 else
7703 pedwarn ("friend declaration requires class-key, "
7704 "i.e. %<friend %#T%>",
7705 type);
7708 /* Only try to do this stuff if we didn't already give up. */
7709 if (type != integer_type_node)
7711 /* A friendly class? */
7712 if (current_class_type)
7713 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
7714 /*complain=*/true);
7715 else
7716 error ("trying to make class %qT a friend of global scope",
7717 type);
7719 type = void_type_node;
7722 else if (quals)
7724 if (ctype == NULL_TREE)
7726 if (TREE_CODE (type) != METHOD_TYPE)
7727 error ("invalid qualifiers on non-member function type");
7728 else
7729 ctype = TYPE_METHOD_BASETYPE (type);
7731 if (ctype)
7733 tree dummy = build_decl (TYPE_DECL, unqualified_id, type);
7734 grok_method_quals (ctype, dummy, quals);
7735 type = TREE_TYPE (dummy);
7739 return type;
7741 else if (unqualified_id == NULL_TREE && decl_context != PARM
7742 && decl_context != CATCHPARM
7743 && TREE_CODE (type) != UNION_TYPE
7744 && ! bitfield)
7746 error ("abstract declarator %qT used as declaration", type);
7747 return error_mark_node;
7750 /* Only functions may be declared using an operator-function-id. */
7751 if (unqualified_id
7752 && IDENTIFIER_OPNAME_P (unqualified_id)
7753 && TREE_CODE (type) != FUNCTION_TYPE
7754 && TREE_CODE (type) != METHOD_TYPE)
7756 error ("declaration of %qD as non-function", unqualified_id);
7757 return error_mark_node;
7760 /* We don't check parameter types here because we can emit a better
7761 error message later. */
7762 if (decl_context != PARM)
7763 type = check_var_type (unqualified_id, type);
7765 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
7766 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
7768 if (decl_context == PARM || decl_context == CATCHPARM)
7770 if (ctype || in_namespace)
7771 error ("cannot use %<::%> in parameter declaration");
7773 /* A parameter declared as an array of T is really a pointer to T.
7774 One declared as a function is really a pointer to a function.
7775 One declared as a member is really a pointer to member. */
7777 if (TREE_CODE (type) == ARRAY_TYPE)
7779 /* Transfer const-ness of array into that of type pointed to. */
7780 type = build_pointer_type (TREE_TYPE (type));
7781 type_quals = TYPE_UNQUALIFIED;
7783 else if (TREE_CODE (type) == FUNCTION_TYPE)
7784 type = build_pointer_type (type);
7788 tree decl;
7790 if (decl_context == PARM)
7792 decl = cp_build_parm_decl (unqualified_id, type);
7794 bad_specifiers (decl, "parameter", virtualp, quals != TYPE_UNQUALIFIED,
7795 inlinep, friendp, raises != NULL_TREE);
7797 else if (decl_context == FIELD)
7799 /* The C99 flexible array extension. */
7800 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
7801 && TYPE_DOMAIN (type) == NULL_TREE)
7803 tree itype = compute_array_index_type (dname, integer_zero_node);
7804 type = build_cplus_array_type (TREE_TYPE (type), itype);
7807 if (type == error_mark_node)
7809 /* Happens when declaring arrays of sizes which
7810 are error_mark_node, for example. */
7811 decl = NULL_TREE;
7813 else if (in_namespace && !friendp)
7815 /* Something like struct S { int N::j; }; */
7816 error ("invalid use of %<::%>");
7817 decl = NULL_TREE;
7819 else if (TREE_CODE (type) == FUNCTION_TYPE)
7821 int publicp = 0;
7822 tree function_context;
7824 if (friendp == 0)
7826 if (ctype == NULL_TREE)
7827 ctype = current_class_type;
7829 if (ctype == NULL_TREE)
7831 error ("can't make %qD into a method -- not in a class",
7832 unqualified_id);
7833 return void_type_node;
7836 /* ``A union may [ ... ] not [ have ] virtual functions.''
7837 ARM 9.5 */
7838 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
7840 error ("function %qD declared virtual inside a union",
7841 unqualified_id);
7842 return void_type_node;
7845 if (NEW_DELETE_OPNAME_P (unqualified_id))
7847 if (virtualp)
7849 error ("%qD cannot be declared virtual, since it "
7850 "is always static",
7851 unqualified_id);
7852 virtualp = 0;
7855 else if (staticp < 2)
7856 type = build_method_type_directly (ctype,
7857 TREE_TYPE (type),
7858 TYPE_ARG_TYPES (type));
7861 /* Check that the name used for a destructor makes sense. */
7862 if (sfk == sfk_destructor
7863 && !same_type_p (TREE_OPERAND
7864 (id_declarator->u.id.unqualified_name, 0),
7865 ctype))
7867 error ("declaration of %qD as member of %qT",
7868 id_declarator->u.id.unqualified_name,
7869 ctype);
7870 return error_mark_node;
7873 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
7874 function_context = (ctype != NULL_TREE) ?
7875 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
7876 publicp = (! friendp || ! staticp)
7877 && function_context == NULL_TREE;
7878 decl = grokfndecl (ctype, type,
7879 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
7880 ? unqualified_id : dname,
7881 parms,
7882 unqualified_id,
7883 virtualp, flags, quals, raises,
7884 friendp ? -1 : 0, friendp, publicp, inlinep,
7885 sfk,
7886 funcdef_flag, template_count, in_namespace, attrlist);
7887 if (decl == NULL_TREE)
7888 return decl;
7889 #if 0
7890 /* This clobbers the attrs stored in `decl' from `attrlist'. */
7891 /* The decl and setting of decl_attr is also turned off. */
7892 decl = build_decl_attribute_variant (decl, decl_attr);
7893 #endif
7895 /* [class.conv.ctor]
7897 A constructor declared without the function-specifier
7898 explicit that can be called with a single parameter
7899 specifies a conversion from the type of its first
7900 parameter to the type of its class. Such a constructor
7901 is called a converting constructor. */
7902 if (explicitp == 2)
7903 DECL_NONCONVERTING_P (decl) = 1;
7904 else if (DECL_CONSTRUCTOR_P (decl))
7906 /* The constructor can be called with exactly one
7907 parameter if there is at least one parameter, and
7908 any subsequent parameters have default arguments.
7909 Ignore any compiler-added parms. */
7910 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
7912 if (arg_types == void_list_node
7913 || (arg_types
7914 && TREE_CHAIN (arg_types)
7915 && TREE_CHAIN (arg_types) != void_list_node
7916 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
7917 DECL_NONCONVERTING_P (decl) = 1;
7920 else if (TREE_CODE (type) == METHOD_TYPE)
7922 /* We only get here for friend declarations of
7923 members of other classes. */
7924 /* All method decls are public, so tell grokfndecl to set
7925 TREE_PUBLIC, also. */
7926 decl = grokfndecl (ctype, type,
7927 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
7928 ? unqualified_id : dname,
7929 parms,
7930 unqualified_id,
7931 virtualp, flags, quals, raises,
7932 friendp ? -1 : 0, friendp, 1, 0, sfk,
7933 funcdef_flag, template_count, in_namespace,
7934 attrlist);
7935 if (decl == NULL_TREE)
7936 return NULL_TREE;
7938 else if (!staticp && !dependent_type_p (type)
7939 && !COMPLETE_TYPE_P (complete_type (type))
7940 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
7942 if (unqualified_id)
7943 error ("field %qD has incomplete type", unqualified_id);
7944 else
7945 error ("name %qT has incomplete type", type);
7947 /* If we're instantiating a template, tell them which
7948 instantiation made the field's type be incomplete. */
7949 if (current_class_type
7950 && TYPE_NAME (current_class_type)
7951 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
7952 && declspecs->type
7953 && declspecs->type == type)
7954 error (" in instantiation of template %qT",
7955 current_class_type);
7957 type = error_mark_node;
7958 decl = NULL_TREE;
7960 else
7962 if (friendp)
7964 error ("%qE is neither function nor member function; "
7965 "cannot be declared friend", unqualified_id);
7966 friendp = 0;
7968 decl = NULL_TREE;
7971 if (friendp)
7973 /* Friends are treated specially. */
7974 if (ctype == current_class_type)
7975 warning (0, "member functions are implicitly friends of their class");
7976 else if (decl && DECL_NAME (decl))
7978 if (template_class_depth (current_class_type) == 0)
7980 decl = check_explicit_specialization
7981 (unqualified_id, decl, template_count,
7982 2 * (funcdef_flag != 0) + 4);
7983 if (decl == error_mark_node)
7984 return error_mark_node;
7987 decl = do_friend (ctype, unqualified_id, decl,
7988 *attrlist, flags, quals, funcdef_flag);
7989 return decl;
7991 else
7992 return void_type_node;
7995 /* Structure field. It may not be a function, except for C++. */
7997 if (decl == NULL_TREE)
7999 if (initialized)
8001 if (!staticp)
8003 /* An attempt is being made to initialize a non-static
8004 member. But, from [class.mem]:
8006 4 A member-declarator can contain a
8007 constant-initializer only if it declares a static
8008 member (_class.static_) of integral or enumeration
8009 type, see _class.static.data_.
8011 This used to be relatively common practice, but
8012 the rest of the compiler does not correctly
8013 handle the initialization unless the member is
8014 static so we make it static below. */
8015 pedwarn ("ISO C++ forbids initialization of member %qD",
8016 unqualified_id);
8017 pedwarn ("making %qD static", unqualified_id);
8018 staticp = 1;
8021 if (uses_template_parms (type))
8022 /* We'll check at instantiation time. */
8024 else if (check_static_variable_definition (unqualified_id,
8025 type))
8026 /* If we just return the declaration, crashes
8027 will sometimes occur. We therefore return
8028 void_type_node, as if this was a friend
8029 declaration, to cause callers to completely
8030 ignore this declaration. */
8031 return void_type_node;
8034 if (staticp)
8036 /* C++ allows static class members. All other work
8037 for this is done by grokfield. */
8038 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
8039 set_linkage_for_static_data_member (decl);
8040 /* Even if there is an in-class initialization, DECL
8041 is considered undefined until an out-of-class
8042 definition is provided. */
8043 DECL_EXTERNAL (decl) = 1;
8045 else
8047 decl = build_decl (FIELD_DECL, unqualified_id, type);
8048 DECL_NONADDRESSABLE_P (decl) = bitfield;
8049 if (storage_class == sc_mutable)
8051 DECL_MUTABLE_P (decl) = 1;
8052 storage_class = sc_none;
8056 bad_specifiers (decl, "field", virtualp, quals != TYPE_UNQUALIFIED,
8057 inlinep, friendp, raises != NULL_TREE);
8060 else if (TREE_CODE (type) == FUNCTION_TYPE
8061 || TREE_CODE (type) == METHOD_TYPE)
8063 tree original_name;
8064 int publicp = 0;
8066 if (!unqualified_id)
8067 return NULL_TREE;
8069 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
8070 original_name = dname;
8071 else
8072 original_name = unqualified_id;
8074 if (storage_class == sc_auto)
8075 error ("storage class %<auto%> invalid for function %qs", name);
8076 else if (storage_class == sc_register)
8077 error ("storage class %<register%> invalid for function %qs", name);
8078 else if (thread_p)
8079 error ("storage class %<__thread%> invalid for function %qs", name);
8081 /* Function declaration not at top level.
8082 Storage classes other than `extern' are not allowed
8083 and `extern' makes no difference. */
8084 if (! toplevel_bindings_p ()
8085 && (storage_class == sc_static
8086 || declspecs->specs[(int)ds_inline])
8087 && pedantic)
8089 if (storage_class == sc_static)
8090 pedwarn ("%<static%> specified invalid for function %qs "
8091 "declared out of global scope", name);
8092 else
8093 pedwarn ("%<inline%> specifier invalid for function %qs "
8094 "declared out of global scope", name);
8097 if (ctype == NULL_TREE)
8099 if (virtualp)
8101 error ("virtual non-class function %qs", name);
8102 virtualp = 0;
8105 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
8106 && !NEW_DELETE_OPNAME_P (original_name))
8107 type = build_method_type_directly (ctype,
8108 TREE_TYPE (type),
8109 TYPE_ARG_TYPES (type));
8111 /* Record presence of `static'. */
8112 publicp = (ctype != NULL_TREE
8113 || storage_class == sc_extern
8114 || storage_class != sc_static);
8116 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
8117 virtualp, flags, quals, raises,
8118 1, friendp,
8119 publicp, inlinep, sfk, funcdef_flag,
8120 template_count, in_namespace, attrlist);
8121 if (decl == NULL_TREE)
8122 return NULL_TREE;
8124 if (staticp == 1)
8126 int invalid_static = 0;
8128 /* Don't allow a static member function in a class, and forbid
8129 declaring main to be static. */
8130 if (TREE_CODE (type) == METHOD_TYPE)
8132 pedwarn ("cannot declare member function %qD to have "
8133 "static linkage", decl);
8134 invalid_static = 1;
8136 else if (current_function_decl)
8138 /* FIXME need arm citation */
8139 error ("cannot declare static function inside another function");
8140 invalid_static = 1;
8143 if (invalid_static)
8145 staticp = 0;
8146 storage_class = sc_none;
8150 else
8152 /* It's a variable. */
8154 /* An uninitialized decl with `extern' is a reference. */
8155 decl = grokvardecl (type, unqualified_id,
8156 declspecs,
8157 initialized,
8158 (type_quals & TYPE_QUAL_CONST) != 0,
8159 ctype ? ctype : in_namespace);
8160 bad_specifiers (decl, "variable", virtualp, quals != TYPE_UNQUALIFIED,
8161 inlinep, friendp, raises != NULL_TREE);
8163 if (ctype)
8165 DECL_CONTEXT (decl) = ctype;
8166 if (staticp == 1)
8168 pedwarn ("%<static%> may not be used when defining "
8169 "(as opposed to declaring) a static data member");
8170 staticp = 0;
8171 storage_class = sc_none;
8173 if (storage_class == sc_register && TREE_STATIC (decl))
8175 error ("static member %qD declared %<register%>", decl);
8176 storage_class = sc_none;
8178 if (storage_class == sc_extern && pedantic)
8180 pedwarn ("cannot explicitly declare member %q#D to have "
8181 "extern linkage",
8182 decl);
8183 storage_class = sc_none;
8188 /* Record `register' declaration for warnings on &
8189 and in case doing stupid register allocation. */
8191 if (storage_class == sc_register)
8192 DECL_REGISTER (decl) = 1;
8193 else if (storage_class == sc_extern)
8194 DECL_THIS_EXTERN (decl) = 1;
8195 else if (storage_class == sc_static)
8196 DECL_THIS_STATIC (decl) = 1;
8198 /* Record constancy and volatility. There's no need to do this
8199 when processing a template; we'll do this for the instantiated
8200 declaration based on the type of DECL. */
8201 if (!processing_template_decl)
8202 cp_apply_type_quals_to_decl (type_quals, decl);
8204 return decl;
8208 /* Subroutine of start_function. Ensure that each of the parameter
8209 types (as listed in PARMS) is complete, as is required for a
8210 function definition. */
8212 static void
8213 require_complete_types_for_parms (tree parms)
8215 for (; parms; parms = TREE_CHAIN (parms))
8217 if (dependent_type_p (TREE_TYPE (parms)))
8218 continue;
8219 if (VOID_TYPE_P (TREE_TYPE (parms)))
8220 /* grokparms will have already issued an error. */
8221 TREE_TYPE (parms) = error_mark_node;
8222 else if (complete_type_or_else (TREE_TYPE (parms), parms))
8224 layout_decl (parms, 0);
8225 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8230 /* Returns nonzero if T is a local variable. */
8233 local_variable_p (tree t)
8235 if ((TREE_CODE (t) == VAR_DECL
8236 /* A VAR_DECL with a context that is a _TYPE is a static data
8237 member. */
8238 && !TYPE_P (CP_DECL_CONTEXT (t))
8239 /* Any other non-local variable must be at namespace scope. */
8240 && !DECL_NAMESPACE_SCOPE_P (t))
8241 || (TREE_CODE (t) == PARM_DECL))
8242 return 1;
8244 return 0;
8247 /* Returns nonzero if T is an automatic local variable or a label.
8248 (These are the declarations that need to be remapped when the code
8249 containing them is duplicated.) */
8252 nonstatic_local_decl_p (tree t)
8254 return ((local_variable_p (t) && !TREE_STATIC (t))
8255 || TREE_CODE (t) == LABEL_DECL
8256 || TREE_CODE (t) == RESULT_DECL);
8259 /* Like local_variable_p, but suitable for use as a tree-walking
8260 function. */
8262 static tree
8263 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
8264 void *data ATTRIBUTE_UNUSED)
8266 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8267 return *tp;
8268 else if (TYPE_P (*tp))
8269 *walk_subtrees = 0;
8271 return NULL_TREE;
8275 /* Check that ARG, which is a default-argument expression for a
8276 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
8277 something goes wrong. DECL may also be a _TYPE node, rather than a
8278 DECL, if there is no DECL available. */
8280 tree
8281 check_default_argument (tree decl, tree arg)
8283 tree var;
8284 tree decl_type;
8286 if (TREE_CODE (arg) == DEFAULT_ARG)
8287 /* We get a DEFAULT_ARG when looking at an in-class declaration
8288 with a default argument. Ignore the argument for now; we'll
8289 deal with it after the class is complete. */
8290 return arg;
8292 if (processing_template_decl || uses_template_parms (arg))
8293 /* We don't do anything checking until instantiation-time. Note
8294 that there may be uninstantiated arguments even for an
8295 instantiated function, since default arguments are not
8296 instantiated until they are needed. */
8297 return arg;
8299 if (TYPE_P (decl))
8301 decl_type = decl;
8302 decl = NULL_TREE;
8304 else
8305 decl_type = TREE_TYPE (decl);
8307 if (arg == error_mark_node
8308 || decl == error_mark_node
8309 || TREE_TYPE (arg) == error_mark_node
8310 || decl_type == error_mark_node)
8311 /* Something already went wrong. There's no need to check
8312 further. */
8313 return error_mark_node;
8315 /* [dcl.fct.default]
8317 A default argument expression is implicitly converted to the
8318 parameter type. */
8319 if (!TREE_TYPE (arg)
8320 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
8322 if (decl)
8323 error ("default argument for %q#D has type %qT",
8324 decl, TREE_TYPE (arg));
8325 else
8326 error ("default argument for parameter of type %qT has type %qT",
8327 decl_type, TREE_TYPE (arg));
8329 return error_mark_node;
8332 /* [dcl.fct.default]
8334 Local variables shall not be used in default argument
8335 expressions.
8337 The keyword `this' shall not be used in a default argument of a
8338 member function. */
8339 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
8340 NULL);
8341 if (var)
8343 error ("default argument %qE uses local variable %qD", arg, var);
8344 return error_mark_node;
8347 /* All is well. */
8348 return arg;
8351 /* Decode the list of parameter types for a function type.
8352 Given the list of things declared inside the parens,
8353 return a list of types.
8355 If this parameter does not end with an ellipsis, we append
8356 void_list_node.
8358 *PARMS is set to the chain of PARM_DECLs created. */
8360 static tree
8361 grokparms (cp_parameter_declarator *first_parm, tree *parms)
8363 tree result = NULL_TREE;
8364 tree decls = NULL_TREE;
8365 int ellipsis = !first_parm || first_parm->ellipsis_p;
8366 cp_parameter_declarator *parm;
8367 int any_error = 0;
8369 for (parm = first_parm; parm != NULL; parm = parm->next)
8371 tree type = NULL_TREE;
8372 tree init = parm->default_argument;
8373 tree attrs;
8374 tree decl;
8376 if (parm == no_parameters)
8377 break;
8379 attrs = parm->decl_specifiers.attributes;
8380 parm->decl_specifiers.attributes = NULL_TREE;
8381 decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
8382 PARM, init != NULL_TREE, &attrs);
8383 if (! decl || TREE_TYPE (decl) == error_mark_node)
8384 continue;
8386 if (attrs)
8387 cplus_decl_attributes (&decl, attrs, 0);
8389 type = TREE_TYPE (decl);
8390 if (VOID_TYPE_P (type))
8392 if (same_type_p (type, void_type_node)
8393 && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
8394 /* this is a parmlist of `(void)', which is ok. */
8395 break;
8396 cxx_incomplete_type_error (decl, type);
8397 /* It's not a good idea to actually create parameters of
8398 type `void'; other parts of the compiler assume that a
8399 void type terminates the parameter list. */
8400 type = error_mark_node;
8401 TREE_TYPE (decl) = error_mark_node;
8404 if (type != error_mark_node)
8406 /* Top-level qualifiers on the parameters are
8407 ignored for function types. */
8408 type = cp_build_qualified_type (type, 0);
8409 if (TREE_CODE (type) == METHOD_TYPE)
8411 error ("parameter %qD invalidly declared method type", decl);
8412 type = build_pointer_type (type);
8413 TREE_TYPE (decl) = type;
8415 else if (abstract_virtuals_error (decl, type))
8416 any_error = 1; /* Seems like a good idea. */
8417 else if (POINTER_TYPE_P (type))
8419 /* [dcl.fct]/6, parameter types cannot contain pointers
8420 (references) to arrays of unknown bound. */
8421 tree t = TREE_TYPE (type);
8422 int ptr = TYPE_PTR_P (type);
8424 while (1)
8426 if (TYPE_PTR_P (t))
8427 ptr = 1;
8428 else if (TREE_CODE (t) != ARRAY_TYPE)
8429 break;
8430 else if (!TYPE_DOMAIN (t))
8431 break;
8432 t = TREE_TYPE (t);
8434 if (TREE_CODE (t) == ARRAY_TYPE)
8435 error ("parameter %qD includes %s to array of unknown "
8436 "bound %qT",
8437 decl, ptr ? "pointer" : "reference", t);
8440 if (!any_error && init)
8441 init = check_default_argument (decl, init);
8442 else
8443 init = NULL_TREE;
8446 TREE_CHAIN (decl) = decls;
8447 decls = decl;
8448 result = tree_cons (init, type, result);
8450 decls = nreverse (decls);
8451 result = nreverse (result);
8452 if (!ellipsis)
8453 result = chainon (result, void_list_node);
8454 *parms = decls;
8456 return result;
8460 /* D is a constructor or overloaded `operator='.
8462 Let T be the class in which D is declared. Then, this function
8463 returns:
8465 -1 if D's is an ill-formed constructor or copy assignment operator
8466 whose first parameter is of type `T'.
8467 0 if D is not a copy constructor or copy assignment
8468 operator.
8469 1 if D is a copy constructor or copy assignment operator whose
8470 first parameter is a reference to const qualified T.
8471 2 if D is a copy constructor or copy assignment operator whose
8472 first parameter is a reference to non-const qualified T.
8474 This function can be used as a predicate. Positive values indicate
8475 a copy constructor and nonzero values indicate a copy assignment
8476 operator. */
8479 copy_fn_p (tree d)
8481 tree args;
8482 tree arg_type;
8483 int result = 1;
8485 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
8487 if (DECL_TEMPLATE_INFO (d)
8488 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d)))
8489 /* Instantiations of template member functions are never copy
8490 functions. Note that member functions of templated classes are
8491 represented as template functions internally, and we must
8492 accept those as copy functions. */
8493 return 0;
8495 args = FUNCTION_FIRST_USER_PARMTYPE (d);
8496 if (!args)
8497 return 0;
8499 arg_type = TREE_VALUE (args);
8501 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8503 /* Pass by value copy assignment operator. */
8504 result = -1;
8506 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8507 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8509 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8510 result = 2;
8512 else
8513 return 0;
8515 args = TREE_CHAIN (args);
8517 if (args && args != void_list_node && !TREE_PURPOSE (args))
8518 /* There are more non-optional args. */
8519 return 0;
8521 return result;
8524 /* Remember any special properties of member function DECL. */
8526 void grok_special_member_properties (tree decl)
8528 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P(decl))
8529 ; /* Not special. */
8530 else if (DECL_CONSTRUCTOR_P (decl))
8532 int ctor = copy_fn_p (decl);
8534 if (ctor > 0)
8536 /* [class.copy]
8538 A non-template constructor for class X is a copy
8539 constructor if its first parameter is of type X&, const
8540 X&, volatile X& or const volatile X&, and either there
8541 are no other parameters or else all other parameters have
8542 default arguments. */
8543 TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
8544 if (ctor > 1)
8545 TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
8547 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
8548 TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
8550 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8552 /* [class.copy]
8554 A non-template assignment operator for class X is a copy
8555 assignment operator if its parameter is of type X, X&, const
8556 X&, volatile X& or const volatile X&. */
8558 int assop = copy_fn_p (decl);
8560 if (assop)
8562 TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8563 if (assop != 1)
8564 TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8569 /* Check a constructor DECL has the correct form. Complains
8570 if the class has a constructor of the form X(X). */
8573 grok_ctor_properties (tree ctype, tree decl)
8575 int ctor_parm = copy_fn_p (decl);
8577 if (ctor_parm < 0)
8579 /* [class.copy]
8581 A declaration of a constructor for a class X is ill-formed if
8582 its first parameter is of type (optionally cv-qualified) X
8583 and either there are no other parameters or else all other
8584 parameters have default arguments.
8586 We *don't* complain about member template instantiations that
8587 have this form, though; they can occur as we try to decide
8588 what constructor to use during overload resolution. Since
8589 overload resolution will never prefer such a constructor to
8590 the non-template copy constructor (which is either explicitly
8591 or implicitly defined), there's no need to worry about their
8592 existence. Theoretically, they should never even be
8593 instantiated, but that's hard to forestall. */
8594 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
8595 ctype, ctype);
8596 return 0;
8599 return 1;
8602 /* An operator with this code is unary, but can also be binary. */
8604 static int
8605 ambi_op_p (enum tree_code code)
8607 return (code == INDIRECT_REF
8608 || code == ADDR_EXPR
8609 || code == CONVERT_EXPR
8610 || code == NEGATE_EXPR
8611 || code == PREINCREMENT_EXPR
8612 || code == PREDECREMENT_EXPR);
8615 /* An operator with this name can only be unary. */
8617 static int
8618 unary_op_p (enum tree_code code)
8620 return (code == TRUTH_NOT_EXPR
8621 || code == BIT_NOT_EXPR
8622 || code == COMPONENT_REF
8623 || code == TYPE_EXPR);
8626 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
8627 errors are issued for invalid declarations. */
8629 void
8630 grok_op_properties (tree decl, int friendp, bool complain)
8632 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
8633 tree argtype;
8634 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
8635 tree name = DECL_NAME (decl);
8636 enum tree_code operator_code;
8637 int arity;
8639 /* Count the number of arguments. */
8640 for (argtype = argtypes, arity = 0;
8641 argtype && argtype != void_list_node;
8642 argtype = TREE_CHAIN (argtype))
8643 ++arity;
8645 if (current_class_type == NULL_TREE)
8646 friendp = 1;
8648 if (DECL_CONV_FN_P (decl))
8649 operator_code = TYPE_EXPR;
8650 else
8653 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
8654 if (ansi_opname (CODE) == name) \
8656 operator_code = (CODE); \
8657 break; \
8659 else if (ansi_assopname (CODE) == name) \
8661 operator_code = (CODE); \
8662 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
8663 break; \
8666 #include "operators.def"
8667 #undef DEF_OPERATOR
8669 gcc_unreachable ();
8671 while (0);
8672 gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
8673 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
8675 if (! friendp)
8677 switch (operator_code)
8679 case NEW_EXPR:
8680 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
8681 break;
8683 case DELETE_EXPR:
8684 TYPE_GETS_DELETE (current_class_type) |= 1;
8685 break;
8687 case VEC_NEW_EXPR:
8688 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
8689 break;
8691 case VEC_DELETE_EXPR:
8692 TYPE_GETS_DELETE (current_class_type) |= 2;
8693 break;
8695 default:
8696 break;
8700 /* [basic.std.dynamic.allocation]/1:
8702 A program is ill-formed if an allocation function is declared
8703 in a namespace scope other than global scope or declared static
8704 in global scope.
8706 The same also holds true for deallocation functions. */
8707 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
8708 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8710 if (DECL_NAMESPACE_SCOPE_P (decl))
8712 if (CP_DECL_CONTEXT (decl) != global_namespace)
8713 error ("%qD may not be declared within a namespace", decl);
8714 else if (!TREE_PUBLIC (decl))
8715 error ("%qD may not be declared as static", decl);
8719 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
8720 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8721 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8722 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8723 else
8725 /* An operator function must either be a non-static member function
8726 or have at least one parameter of a class, a reference to a class,
8727 an enumeration, or a reference to an enumeration. 13.4.0.6 */
8728 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8730 if (operator_code == TYPE_EXPR
8731 || operator_code == CALL_EXPR
8732 || operator_code == COMPONENT_REF
8733 || operator_code == ARRAY_REF
8734 || operator_code == NOP_EXPR)
8736 error ("%qD must be a nonstatic member function", decl);
8737 return;
8739 else
8741 tree p;
8743 if (DECL_STATIC_FUNCTION_P (decl))
8745 error ("%qD must be either a non-static member "
8746 "function or a non-member function", decl);
8747 return;
8750 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
8752 tree arg = non_reference (TREE_VALUE (p));
8753 /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
8754 because these checks are performed even on
8755 template functions. */
8756 if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
8757 break;
8760 if (!p || p == void_list_node)
8762 if (!complain)
8763 return;
8765 error ("%qD must have an argument of class or "
8766 "enumerated type",
8767 decl);
8772 /* There are no restrictions on the arguments to an overloaded
8773 "operator ()". */
8774 if (operator_code == CALL_EXPR)
8775 return;
8777 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
8779 tree t = TREE_TYPE (name);
8780 if (! friendp)
8782 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
8783 const char *what = 0;
8785 if (ref)
8786 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
8788 if (TREE_CODE (t) == VOID_TYPE)
8789 what = "void";
8790 else if (t == current_class_type)
8791 what = "the same type";
8792 /* Don't force t to be complete here. */
8793 else if (IS_AGGR_TYPE (t)
8794 && COMPLETE_TYPE_P (t)
8795 && DERIVED_FROM_P (t, current_class_type))
8796 what = "a base class";
8798 if (what && warn_conversion)
8799 warning (0, "conversion to %s%s will never use a type "
8800 "conversion operator",
8801 ref ? "a reference to " : "", what);
8804 if (operator_code == COND_EXPR)
8806 /* 13.4.0.3 */
8807 error ("ISO C++ prohibits overloading operator ?:");
8809 else if (ambi_op_p (operator_code))
8811 if (arity == 1)
8812 /* We pick the one-argument operator codes by default, so
8813 we don't have to change anything. */
8815 else if (arity == 2)
8817 /* If we thought this was a unary operator, we now know
8818 it to be a binary operator. */
8819 switch (operator_code)
8821 case INDIRECT_REF:
8822 operator_code = MULT_EXPR;
8823 break;
8825 case ADDR_EXPR:
8826 operator_code = BIT_AND_EXPR;
8827 break;
8829 case CONVERT_EXPR:
8830 operator_code = PLUS_EXPR;
8831 break;
8833 case NEGATE_EXPR:
8834 operator_code = MINUS_EXPR;
8835 break;
8837 case PREINCREMENT_EXPR:
8838 operator_code = POSTINCREMENT_EXPR;
8839 break;
8841 case PREDECREMENT_EXPR:
8842 operator_code = POSTDECREMENT_EXPR;
8843 break;
8845 default:
8846 gcc_unreachable ();
8849 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
8851 if ((operator_code == POSTINCREMENT_EXPR
8852 || operator_code == POSTDECREMENT_EXPR)
8853 && ! processing_template_decl
8854 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8856 if (methodp)
8857 error ("postfix %qD must take %<int%> as its argument",
8858 decl);
8859 else
8860 error
8861 ("postfix %qD must take %<int%> as its second argument",
8862 decl);
8865 else
8867 if (methodp)
8868 error ("%qD must take either zero or one argument", decl);
8869 else
8870 error ("%qD must take either one or two arguments", decl);
8873 /* More Effective C++ rule 6. */
8874 if (warn_ecpp
8875 && (operator_code == POSTINCREMENT_EXPR
8876 || operator_code == POSTDECREMENT_EXPR
8877 || operator_code == PREINCREMENT_EXPR
8878 || operator_code == PREDECREMENT_EXPR))
8880 tree arg = TREE_VALUE (argtypes);
8881 tree ret = TREE_TYPE (TREE_TYPE (decl));
8882 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
8883 arg = TREE_TYPE (arg);
8884 arg = TYPE_MAIN_VARIANT (arg);
8885 if (operator_code == PREINCREMENT_EXPR
8886 || operator_code == PREDECREMENT_EXPR)
8888 if (TREE_CODE (ret) != REFERENCE_TYPE
8889 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
8890 arg))
8891 warning (0, "prefix %qD should return %qT", decl,
8892 build_reference_type (arg));
8894 else
8896 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
8897 warning (0, "postfix %qD should return %qT", decl, arg);
8901 else if (unary_op_p (operator_code))
8903 if (arity != 1)
8905 if (methodp)
8906 error ("%qD must take %<void%>", decl);
8907 else
8908 error ("%qD must take exactly one argument", decl);
8911 else /* if (binary_op_p (operator_code)) */
8913 if (arity != 2)
8915 if (methodp)
8916 error ("%qD must take exactly one argument", decl);
8917 else
8918 error ("%qD must take exactly two arguments", decl);
8921 /* More Effective C++ rule 7. */
8922 if (warn_ecpp
8923 && (operator_code == TRUTH_ANDIF_EXPR
8924 || operator_code == TRUTH_ORIF_EXPR
8925 || operator_code == COMPOUND_EXPR))
8926 warning (0, "user-defined %qD always evaluates both arguments",
8927 decl);
8930 /* Effective C++ rule 23. */
8931 if (warn_ecpp
8932 && arity == 2
8933 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
8934 && (operator_code == PLUS_EXPR
8935 || operator_code == MINUS_EXPR
8936 || operator_code == TRUNC_DIV_EXPR
8937 || operator_code == MULT_EXPR
8938 || operator_code == TRUNC_MOD_EXPR)
8939 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
8940 warning (0, "%qD should return by value", decl);
8942 /* [over.oper]/8 */
8943 for (; argtypes && argtypes != void_list_node;
8944 argtypes = TREE_CHAIN (argtypes))
8945 if (TREE_PURPOSE (argtypes))
8947 TREE_PURPOSE (argtypes) = NULL_TREE;
8948 if (operator_code == POSTINCREMENT_EXPR
8949 || operator_code == POSTDECREMENT_EXPR)
8951 if (pedantic)
8952 pedwarn ("%qD cannot have default arguments", decl);
8954 else
8955 error ("%qD cannot have default arguments", decl);
8962 /* Return a string giving the keyword associate with CODE. */
8964 static const char *
8965 tag_name (enum tag_types code)
8967 switch (code)
8969 case record_type:
8970 return "struct";
8971 case class_type:
8972 return "class";
8973 case union_type:
8974 return "union";
8975 case enum_type:
8976 return "enum";
8977 case typename_type:
8978 return "typename";
8979 default:
8980 gcc_unreachable ();
8984 /* Name lookup in an elaborated-type-specifier (after the keyword
8985 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
8986 elaborated-type-specifier is invalid, issue a diagnostic and return
8987 error_mark_node; otherwise, return the *_TYPE to which it referred.
8988 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
8990 tree
8991 check_elaborated_type_specifier (enum tag_types tag_code,
8992 tree decl,
8993 bool allow_template_p)
8995 tree type;
8997 /* In the case of:
8999 struct S { struct S *p; };
9001 name lookup will find the TYPE_DECL for the implicit "S::S"
9002 typedef. Adjust for that here. */
9003 if (DECL_SELF_REFERENCE_P (decl))
9004 decl = TYPE_NAME (TREE_TYPE (decl));
9006 type = TREE_TYPE (decl);
9008 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
9009 is false for this case as well. */
9010 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9012 error ("using template type parameter %qT after %qs",
9013 type, tag_name (tag_code));
9014 return error_mark_node;
9016 /* [dcl.type.elab]
9018 If the identifier resolves to a typedef-name or a template
9019 type-parameter, the elaborated-type-specifier is ill-formed.
9021 In other words, the only legitimate declaration to use in the
9022 elaborated type specifier is the implicit typedef created when
9023 the type is declared. */
9024 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
9025 && tag_code != typename_type)
9027 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
9028 cp_error_at ("%qD has a previous declaration here", decl);
9029 return error_mark_node;
9031 else if (TREE_CODE (type) != RECORD_TYPE
9032 && TREE_CODE (type) != UNION_TYPE
9033 && tag_code != enum_type
9034 && tag_code != typename_type)
9036 error ("%qT referred to as %qs", type, tag_name (tag_code));
9037 cp_error_at ("%qT has a previous declaration here", type);
9038 return error_mark_node;
9040 else if (TREE_CODE (type) != ENUMERAL_TYPE
9041 && tag_code == enum_type
9042 && tag_code != typename_type)
9044 error ("%qT referred to as enum", type);
9045 cp_error_at ("%qT has a previous declaration here", type);
9046 return error_mark_node;
9048 else if (!allow_template_p
9049 && TREE_CODE (type) == RECORD_TYPE
9050 && CLASSTYPE_IS_TEMPLATE (type))
9052 /* If a class template appears as elaborated type specifier
9053 without a template header such as:
9055 template <class T> class C {};
9056 void f(class C); // No template header here
9058 then the required template argument is missing. */
9059 error ("template argument required for %<%s %T%>",
9060 tag_name (tag_code),
9061 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
9062 return error_mark_node;
9065 return type;
9068 /* Lookup NAME in elaborate type specifier in scope according to
9069 SCOPE and issue diagnostics if necessary.
9070 Return *_TYPE node upon success, NULL_TREE when the NAME is not
9071 found, and ERROR_MARK_NODE for type error. */
9073 static tree
9074 lookup_and_check_tag (enum tag_types tag_code, tree name,
9075 tag_scope scope, bool template_header_p)
9077 tree t;
9078 tree decl;
9079 if (scope == ts_global)
9081 /* First try ordinary name lookup, ignoring hidden class name
9082 injected via friend declaration. */
9083 decl = lookup_name (name, 2);
9084 /* If that fails, the name will be placed in the smallest
9085 non-class, non-function-prototype scope according to 3.3.1/5.
9086 We may already have a hidden name declared as friend in this
9087 scope. So lookup again but not ignoring hidden name.
9088 If we find one, that name will be made visible rather than
9089 creating a new tag. */
9090 if (!decl)
9091 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
9093 else
9094 decl = lookup_type_scope (name, scope);
9096 if (decl && DECL_CLASS_TEMPLATE_P (decl))
9097 decl = DECL_TEMPLATE_RESULT (decl);
9099 if (decl && TREE_CODE (decl) == TYPE_DECL)
9101 /* Look for invalid nested type:
9102 class C {
9103 class C {};
9104 }; */
9105 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
9107 error ("%qD has the same name as the class in which it is "
9108 "declared",
9109 decl);
9110 return error_mark_node;
9113 /* Two cases we need to consider when deciding if a class
9114 template is allowed as an elaborated type specifier:
9115 1. It is a self reference to its own class.
9116 2. It comes with a template header.
9118 For example:
9120 template <class T> class C {
9121 class C *c1; // DECL_SELF_REFERENCE_P is true
9122 class D;
9124 template <class U> class C; // template_header_p is true
9125 template <class T> class C<T>::D {
9126 class C *c2; // DECL_SELF_REFERENCE_P is true
9127 }; */
9129 t = check_elaborated_type_specifier (tag_code,
9130 decl,
9131 template_header_p
9132 | DECL_SELF_REFERENCE_P (decl));
9133 return t;
9135 else
9136 return NULL_TREE;
9139 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
9140 Define the tag as a forward-reference if it is not defined.
9142 If a declaration is given, process it here, and report an error if
9143 multiple declarations are not identical.
9145 SCOPE is TS_CURRENT when this is also a definition. Only look in
9146 the current frame for the name (since C++ allows new names in any
9147 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
9148 declaration. Only look beginning from the current scope outward up
9149 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
9151 TEMPLATE_HEADER_P is true when this declaration is preceded by
9152 a set of template parameters. */
9154 tree
9155 xref_tag (enum tag_types tag_code, tree name,
9156 tag_scope scope, bool template_header_p)
9158 enum tree_code code;
9159 tree t;
9160 tree context = NULL_TREE;
9162 timevar_push (TV_NAME_LOOKUP);
9164 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9166 switch (tag_code)
9168 case record_type:
9169 case class_type:
9170 code = RECORD_TYPE;
9171 break;
9172 case union_type:
9173 code = UNION_TYPE;
9174 break;
9175 case enum_type:
9176 code = ENUMERAL_TYPE;
9177 break;
9178 default:
9179 gcc_unreachable ();
9182 /* In case of anonymous name, xref_tag is only called to
9183 make type node and push name. Name lookup is not required. */
9184 if (ANON_AGGRNAME_P (name))
9185 t = NULL_TREE;
9186 else
9187 t = lookup_and_check_tag (tag_code, name,
9188 scope, template_header_p);
9190 if (t == error_mark_node)
9191 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9193 if (scope != ts_current && t && current_class_type
9194 && template_class_depth (current_class_type)
9195 && template_header_p)
9197 /* Since SCOPE is not TS_CURRENT, we are not looking at a
9198 definition of this tag. Since, in addition, we are currently
9199 processing a (member) template declaration of a template
9200 class, we must be very careful; consider:
9202 template <class X>
9203 struct S1
9205 template <class U>
9206 struct S2
9207 { template <class V>
9208 friend struct S1; };
9210 Here, the S2::S1 declaration should not be confused with the
9211 outer declaration. In particular, the inner version should
9212 have a template parameter of level 2, not level 1. This
9213 would be particularly important if the member declaration
9214 were instead:
9216 template <class V = U> friend struct S1;
9218 say, when we should tsubst into `U' when instantiating
9219 S2. On the other hand, when presented with:
9221 template <class T>
9222 struct S1 {
9223 template <class U>
9224 struct S2 {};
9225 template <class U>
9226 friend struct S2;
9229 we must find the inner binding eventually. We
9230 accomplish this by making sure that the new type we
9231 create to represent this declaration has the right
9232 TYPE_CONTEXT. */
9233 context = TYPE_CONTEXT (t);
9234 t = NULL_TREE;
9237 if (! t)
9239 /* If no such tag is yet defined, create a forward-reference node
9240 and record it as the "definition".
9241 When a real declaration of this type is found,
9242 the forward-reference will be altered into a real type. */
9243 if (code == ENUMERAL_TYPE)
9245 error ("use of enum %q#D without previous declaration", name);
9246 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9248 else
9250 t = make_aggr_type (code);
9251 TYPE_CONTEXT (t) = context;
9252 t = pushtag (name, t, scope);
9255 else
9257 if (template_header_p && IS_AGGR_TYPE (t))
9258 redeclare_class_template (t, current_template_parms);
9259 else if (!processing_template_decl
9260 && CLASS_TYPE_P (t)
9261 && CLASSTYPE_IS_TEMPLATE (t))
9263 error ("redeclaration of %qT as a non-template", t);
9264 t = error_mark_node;
9267 /* Make injected friend class visible. */
9268 if (scope != ts_within_enclosing_non_class
9269 && hidden_name_p (TYPE_NAME (t)))
9271 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
9272 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
9274 if (TYPE_TEMPLATE_INFO (t))
9276 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
9277 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
9282 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
9285 tree
9286 xref_tag_from_type (tree old, tree id, tag_scope scope)
9288 enum tag_types tag_kind;
9290 if (TREE_CODE (old) == RECORD_TYPE)
9291 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
9292 else
9293 tag_kind = union_type;
9295 if (id == NULL_TREE)
9296 id = TYPE_IDENTIFIER (old);
9298 return xref_tag (tag_kind, id, scope, false);
9301 /* Create the binfo hierarchy for REF with (possibly NULL) base list
9302 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
9303 access_* node, and the TREE_VALUE is the type of the base-class.
9304 Non-NULL TREE_TYPE indicates virtual inheritance. */
9306 void
9307 xref_basetypes (tree ref, tree base_list)
9309 tree *basep;
9310 tree binfo, base_binfo;
9311 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
9312 unsigned max_bases = 0; /* Maximum direct bases. */
9313 int i;
9314 tree default_access;
9315 tree igo_prev; /* Track Inheritance Graph Order. */
9317 if (ref == error_mark_node)
9318 return;
9320 /* The base of a derived class is private by default, all others are
9321 public. */
9322 default_access = (TREE_CODE (ref) == RECORD_TYPE
9323 && CLASSTYPE_DECLARED_CLASS (ref)
9324 ? access_private_node : access_public_node);
9326 /* First, make sure that any templates in base-classes are
9327 instantiated. This ensures that if we call ourselves recursively
9328 we do not get confused about which classes are marked and which
9329 are not. */
9330 basep = &base_list;
9331 while (*basep)
9333 tree basetype = TREE_VALUE (*basep);
9335 if (!(processing_template_decl && uses_template_parms (basetype))
9336 && !complete_type_or_else (basetype, NULL))
9337 /* An incomplete type. Remove it from the list. */
9338 *basep = TREE_CHAIN (*basep);
9339 else
9341 max_bases++;
9342 if (TREE_TYPE (*basep))
9343 max_vbases++;
9344 if (CLASS_TYPE_P (basetype))
9345 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
9346 basep = &TREE_CHAIN (*basep);
9350 TYPE_MARKED_P (ref) = 1;
9352 /* The binfo slot should be empty, unless this is an (ill-formed)
9353 redefinition. */
9354 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
9355 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
9357 binfo = make_tree_binfo (max_bases);
9359 TYPE_BINFO (ref) = binfo;
9360 BINFO_OFFSET (binfo) = size_zero_node;
9361 BINFO_TYPE (binfo) = ref;
9363 if (max_bases)
9365 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
9366 /* An aggregate cannot have baseclasses. */
9367 CLASSTYPE_NON_AGGREGATE (ref) = 1;
9369 if (TREE_CODE (ref) == UNION_TYPE)
9370 error ("derived union %qT invalid", ref);
9373 if (max_bases > 1)
9375 if (TYPE_FOR_JAVA (ref))
9376 error ("Java class %qT cannot have multiple bases", ref);
9379 if (max_vbases)
9381 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
9383 if (TYPE_FOR_JAVA (ref))
9384 error ("Java class %qT cannot have virtual bases", ref);
9387 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
9389 tree access = TREE_PURPOSE (base_list);
9390 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
9391 tree basetype = TREE_VALUE (base_list);
9393 if (access == access_default_node)
9394 access = default_access;
9396 if (TREE_CODE (basetype) == TYPE_DECL)
9397 basetype = TREE_TYPE (basetype);
9398 if (TREE_CODE (basetype) != RECORD_TYPE
9399 && TREE_CODE (basetype) != TYPENAME_TYPE
9400 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9401 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM)
9403 error ("base type %qT fails to be a struct or class type",
9404 basetype);
9405 continue;
9408 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
9409 TYPE_FOR_JAVA (ref) = 1;
9411 base_binfo = NULL_TREE;
9412 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
9414 base_binfo = TYPE_BINFO (basetype);
9415 /* The original basetype could have been a typedef'd type. */
9416 basetype = BINFO_TYPE (base_binfo);
9418 /* Inherit flags from the base. */
9419 TYPE_HAS_NEW_OPERATOR (ref)
9420 |= TYPE_HAS_NEW_OPERATOR (basetype);
9421 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9422 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9423 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
9424 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
9425 CLASSTYPE_DIAMOND_SHAPED_P (ref)
9426 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
9427 CLASSTYPE_REPEATED_BASE_P (ref)
9428 |= CLASSTYPE_REPEATED_BASE_P (basetype);
9431 /* We must do this test after we've seen through a typedef
9432 type. */
9433 if (TYPE_MARKED_P (basetype))
9435 if (basetype == ref)
9436 error ("recursive type %qT undefined", basetype);
9437 else
9438 error ("duplicate base type %qT invalid", basetype);
9439 continue;
9441 TYPE_MARKED_P (basetype) = 1;
9443 base_binfo = copy_binfo (base_binfo, basetype, ref,
9444 &igo_prev, via_virtual);
9445 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
9446 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
9448 BINFO_BASE_APPEND (binfo, base_binfo);
9449 BINFO_BASE_ACCESS_APPEND (binfo, access);
9452 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
9453 /* If we have space in the vbase vector, we must have shared at
9454 least one of them, and are therefore diamond shaped. */
9455 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
9457 /* Unmark all the types. */
9458 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
9459 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9460 TYPE_MARKED_P (ref) = 0;
9462 /* Now see if we have a repeated base type. */
9463 if (!CLASSTYPE_REPEATED_BASE_P (ref))
9465 for (base_binfo = binfo; base_binfo;
9466 base_binfo = TREE_CHAIN (base_binfo))
9468 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9470 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
9471 break;
9473 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
9475 for (base_binfo = binfo; base_binfo;
9476 base_binfo = TREE_CHAIN (base_binfo))
9477 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9478 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9479 else
9480 break;
9485 /* Begin compiling the definition of an enumeration type.
9486 NAME is its name.
9487 Returns the type object, as yet incomplete.
9488 Also records info about it so that build_enumerator
9489 may be used to declare the individual values as they are read. */
9491 tree
9492 start_enum (tree name)
9494 tree enumtype;
9496 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9498 /* If this is the real definition for a previous forward reference,
9499 fill in the contents in the same object that used to be the
9500 forward reference. */
9502 enumtype = lookup_and_check_tag (enum_type, name,
9503 /*tag_scope=*/ts_current,
9504 /*template_header_p=*/false);
9506 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
9508 error ("multiple definition of %q#T", enumtype);
9509 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
9510 /* Clear out TYPE_VALUES, and start again. */
9511 TYPE_VALUES (enumtype) = NULL_TREE;
9513 else
9515 /* In case of error, make a dummy enum to allow parsing to
9516 continue. */
9517 if (enumtype == error_mark_node)
9518 name = make_anon_name ();
9520 enumtype = make_node (ENUMERAL_TYPE);
9521 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
9524 return enumtype;
9527 /* After processing and defining all the values of an enumeration type,
9528 install their decls in the enumeration type and finish it off.
9529 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
9531 void
9532 finish_enum (tree enumtype)
9534 tree values;
9535 tree decl;
9536 tree value;
9537 tree minnode;
9538 tree maxnode;
9539 tree t;
9540 bool unsignedp;
9541 bool use_short_enum;
9542 int lowprec;
9543 int highprec;
9544 int precision;
9545 integer_type_kind itk;
9546 tree underlying_type = NULL_TREE;
9548 /* We built up the VALUES in reverse order. */
9549 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
9551 /* For an enum defined in a template, just set the type of the values;
9552 all further processing is postponed until the template is
9553 instantiated. We need to set the type so that tsubst of a CONST_DECL
9554 works. */
9555 if (processing_template_decl)
9557 for (values = TYPE_VALUES (enumtype);
9558 values;
9559 values = TREE_CHAIN (values))
9560 TREE_TYPE (TREE_VALUE (values)) = enumtype;
9561 if (at_function_scope_p ())
9562 add_stmt (build_min (TAG_DEFN, enumtype));
9563 return;
9566 /* Determine the minimum and maximum values of the enumerators. */
9567 if (TYPE_VALUES (enumtype))
9569 minnode = maxnode = NULL_TREE;
9571 for (values = TYPE_VALUES (enumtype);
9572 values;
9573 values = TREE_CHAIN (values))
9575 decl = TREE_VALUE (values);
9577 /* [dcl.enum]: Following the closing brace of an enum-specifier,
9578 each enumerator has the type of its enumeration. Prior to the
9579 closing brace, the type of each enumerator is the type of its
9580 initializing value. */
9581 TREE_TYPE (decl) = enumtype;
9583 /* Update the minimum and maximum values, if appropriate. */
9584 value = DECL_INITIAL (decl);
9585 /* Figure out what the minimum and maximum values of the
9586 enumerators are. */
9587 if (!minnode)
9588 minnode = maxnode = value;
9589 else if (tree_int_cst_lt (maxnode, value))
9590 maxnode = value;
9591 else if (tree_int_cst_lt (value, minnode))
9592 minnode = value;
9595 else
9596 /* [dcl.enum]
9598 If the enumerator-list is empty, the underlying type is as if
9599 the enumeration had a single enumerator with value 0. */
9600 minnode = maxnode = integer_zero_node;
9602 /* Compute the number of bits require to represent all values of the
9603 enumeration. We must do this before the type of MINNODE and
9604 MAXNODE are transformed, since min_precision relies on the
9605 TREE_TYPE of the value it is passed. */
9606 unsignedp = tree_int_cst_sgn (minnode) >= 0;
9607 lowprec = min_precision (minnode, unsignedp);
9608 highprec = min_precision (maxnode, unsignedp);
9609 precision = MAX (lowprec, highprec);
9611 /* Determine the underlying type of the enumeration.
9613 [dcl.enum]
9615 The underlying type of an enumeration is an integral type that
9616 can represent all the enumerator values defined in the
9617 enumeration. It is implementation-defined which integral type is
9618 used as the underlying type for an enumeration except that the
9619 underlying type shall not be larger than int unless the value of
9620 an enumerator cannot fit in an int or unsigned int.
9622 We use "int" or an "unsigned int" as the underlying type, even if
9623 a smaller integral type would work, unless the user has
9624 explicitly requested that we use the smallest possible type. The
9625 user can request that for all enumerations with a command line
9626 flag, or for just one enumeration with an attribute. */
9628 use_short_enum = flag_short_enums
9629 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
9631 for (itk = (use_short_enum ? itk_char : itk_int);
9632 itk != itk_none;
9633 itk++)
9635 underlying_type = integer_types[itk];
9636 if (TYPE_PRECISION (underlying_type) >= precision
9637 && TYPE_UNSIGNED (underlying_type) == unsignedp)
9638 break;
9640 if (itk == itk_none)
9642 /* DR 377
9644 IF no integral type can represent all the enumerator values, the
9645 enumeration is ill-formed. */
9646 error ("no integral type can represent all of the enumerator values "
9647 "for %qT", enumtype);
9648 precision = TYPE_PRECISION (long_long_integer_type_node);
9649 underlying_type = integer_types[itk_unsigned_long_long];
9652 /* Compute the minium and maximum values for the type.
9654 [dcl.enum]
9656 For an enumeration where emin is the smallest enumerator and emax
9657 is the largest, the values of the enumeration are the values of the
9658 underlying type in the range bmin to bmax, where bmin and bmax are,
9659 respectively, the smallest and largest values of the smallest bit-
9660 field that can store emin and emax. */
9662 /* The middle-end currently assumes that types with TYPE_PRECISION
9663 narrower than their underlying type are suitably zero or sign
9664 extended to fill their mode. g++ doesn't make these guarantees.
9665 Until the middle-end can represent such paradoxical types, we
9666 set the TYPE_PRECISION to the width of the underlying type. */
9667 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
9669 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
9671 /* [dcl.enum]
9673 The value of sizeof() applied to an enumeration type, an object
9674 of an enumeration type, or an enumerator, is the value of sizeof()
9675 applied to the underlying type. */
9676 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
9677 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
9678 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
9679 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
9680 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
9681 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
9683 /* Convert each of the enumerators to the type of the underlying
9684 type of the enumeration. */
9685 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
9687 decl = TREE_VALUE (values);
9688 value = perform_implicit_conversion (underlying_type,
9689 DECL_INITIAL (decl));
9691 /* Do not clobber shared ints. */
9692 value = copy_node (value);
9694 TREE_TYPE (value) = enumtype;
9695 DECL_INITIAL (decl) = value;
9696 TREE_VALUE (values) = value;
9699 /* Fix up all variant types of this enum type. */
9700 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
9702 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
9703 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
9704 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
9705 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
9706 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
9707 TYPE_MODE (t) = TYPE_MODE (enumtype);
9708 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
9709 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
9710 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
9711 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
9714 /* Finish debugging output for this type. */
9715 rest_of_type_compilation (enumtype, namespace_bindings_p ());
9718 /* Build and install a CONST_DECL for an enumeration constant of the
9719 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
9720 Assignment of sequential values by default is handled here. */
9722 void
9723 build_enumerator (tree name, tree value, tree enumtype)
9725 tree decl;
9726 tree context;
9727 tree type;
9729 /* If the VALUE was erroneous, pretend it wasn't there; that will
9730 result in the enum being assigned the next value in sequence. */
9731 if (value == error_mark_node)
9732 value = NULL_TREE;
9734 /* Remove no-op casts from the value. */
9735 if (value)
9736 STRIP_TYPE_NOPS (value);
9738 if (! processing_template_decl)
9740 /* Validate and default VALUE. */
9741 if (value != NULL_TREE)
9743 value = integral_constant_value (value);
9745 if (TREE_CODE (value) == INTEGER_CST)
9747 value = perform_integral_promotions (value);
9748 constant_expression_warning (value);
9750 else
9752 error ("enumerator value for %qD not integer constant", name);
9753 value = NULL_TREE;
9757 /* Default based on previous value. */
9758 if (value == NULL_TREE)
9760 if (TYPE_VALUES (enumtype))
9762 HOST_WIDE_INT hi;
9763 unsigned HOST_WIDE_INT lo;
9764 tree prev_value;
9765 bool overflowed;
9767 /* The next value is the previous value plus one. We can
9768 safely assume that the previous value is an INTEGER_CST.
9769 add_double doesn't know the type of the target expression,
9770 so we must check with int_fits_type_p as well. */
9771 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
9772 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
9773 TREE_INT_CST_HIGH (prev_value),
9774 1, 0, &lo, &hi);
9775 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
9776 overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
9778 if (overflowed)
9779 error ("overflow in enumeration values at %qD", name);
9781 else
9782 value = integer_zero_node;
9785 /* Remove no-op casts from the value. */
9786 STRIP_TYPE_NOPS (value);
9789 /* C++ associates enums with global, function, or class declarations. */
9790 context = current_scope ();
9792 /* Build the actual enumeration constant. Note that the enumeration
9793 constants have the type of their initializers until the
9794 enumeration is complete:
9796 [ dcl.enum ]
9798 Following the closing brace of an enum-specifier, each enumer-
9799 ator has the type of its enumeration. Prior to the closing
9800 brace, the type of each enumerator is the type of its
9801 initializing value.
9803 In finish_enum we will reset the type. Of course, if we're
9804 processing a template, there may be no value. */
9805 type = value ? TREE_TYPE (value) : NULL_TREE;
9807 if (context && context == current_class_type)
9808 /* This enum declaration is local to the class. We need the full
9809 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
9810 decl = build_lang_decl (CONST_DECL, name, type);
9811 else
9812 /* It's a global enum, or it's local to a function. (Note local to
9813 a function could mean local to a class method. */
9814 decl = build_decl (CONST_DECL, name, type);
9816 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
9817 TREE_CONSTANT (decl) = 1;
9818 TREE_INVARIANT (decl) = 1;
9819 TREE_READONLY (decl) = 1;
9820 DECL_INITIAL (decl) = value;
9822 if (context && context == current_class_type)
9823 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
9824 on the TYPE_FIELDS list for `S'. (That's so that you can say
9825 things like `S::i' later.) */
9826 finish_member_declaration (decl);
9827 else
9828 pushdecl (decl);
9830 /* Add this enumeration constant to the list for this type. */
9831 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
9835 /* We're defining DECL. Make sure that it's type is OK. */
9837 static void
9838 check_function_type (tree decl, tree current_function_parms)
9840 tree fntype = TREE_TYPE (decl);
9841 tree return_type = complete_type (TREE_TYPE (fntype));
9843 /* In a function definition, arg types must be complete. */
9844 require_complete_types_for_parms (current_function_parms);
9846 if (dependent_type_p (return_type))
9847 return;
9848 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
9850 error ("return type %q#T is incomplete", TREE_TYPE (fntype));
9852 /* Make it return void instead, but don't change the
9853 type of the DECL_RESULT, in case we have a named return value. */
9854 if (TREE_CODE (fntype) == METHOD_TYPE)
9856 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
9857 TREE_TYPE (decl)
9858 = build_method_type_directly (ctype,
9859 void_type_node,
9860 FUNCTION_ARG_CHAIN (decl));
9862 else
9863 TREE_TYPE (decl)
9864 = build_function_type (void_type_node,
9865 TYPE_ARG_TYPES (TREE_TYPE (decl)));
9866 TREE_TYPE (decl)
9867 = build_exception_variant (fntype,
9868 TYPE_RAISES_EXCEPTIONS (fntype));
9870 else
9871 abstract_virtuals_error (decl, TREE_TYPE (fntype));
9874 /* Create the FUNCTION_DECL for a function definition.
9875 DECLSPECS and DECLARATOR are the parts of the declaration;
9876 they describe the function's name and the type it returns,
9877 but twisted together in a fashion that parallels the syntax of C.
9879 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
9880 DECLARATOR is really the DECL for the function we are about to
9881 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
9882 indicating that the function is an inline defined in-class.
9884 This function creates a binding context for the function body
9885 as well as setting up the FUNCTION_DECL in current_function_decl.
9887 For C++, we must first check whether that datum makes any sense.
9888 For example, "class A local_a(1,2);" means that variable local_a
9889 is an aggregate of type A, which should have a constructor
9890 applied to it with the argument list [1, 2]. */
9892 void
9893 start_preparsed_function (tree decl1, tree attrs, int flags)
9895 tree ctype = NULL_TREE;
9896 tree fntype;
9897 tree restype;
9898 int doing_friend = 0;
9899 struct cp_binding_level *bl;
9900 tree current_function_parms;
9901 struct c_fileinfo *finfo = get_fileinfo (lbasename (input_filename));
9903 /* Sanity check. */
9904 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
9905 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
9907 fntype = TREE_TYPE (decl1);
9908 if (TREE_CODE (fntype) == METHOD_TYPE)
9909 ctype = TYPE_METHOD_BASETYPE (fntype);
9911 /* ISO C++ 11.4/5. A friend function defined in a class is in
9912 the (lexical) scope of the class in which it is defined. */
9913 if (!ctype && DECL_FRIEND_P (decl1))
9915 ctype = DECL_FRIEND_CONTEXT (decl1);
9917 /* CTYPE could be null here if we're dealing with a template;
9918 for example, `inline friend float foo()' inside a template
9919 will have no CTYPE set. */
9920 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
9921 ctype = NULL_TREE;
9922 else
9923 doing_friend = 1;
9926 if (DECL_DECLARED_INLINE_P (decl1)
9927 && lookup_attribute ("noinline", attrs))
9928 warning (0, "%Jinline function %qD given attribute noinline", decl1, decl1);
9930 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
9931 /* This is a constructor, we must ensure that any default args
9932 introduced by this definition are propagated to the clones
9933 now. The clones are used directly in overload resolution. */
9934 adjust_clone_args (decl1);
9936 /* Sometimes we don't notice that a function is a static member, and
9937 build a METHOD_TYPE for it. Fix that up now. */
9938 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
9939 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
9941 revert_static_member_fn (decl1);
9942 ctype = NULL_TREE;
9945 /* Set up current_class_type, and enter the scope of the class, if
9946 appropriate. */
9947 if (ctype)
9948 push_nested_class (ctype);
9949 else if (DECL_STATIC_FUNCTION_P (decl1))
9950 push_nested_class (DECL_CONTEXT (decl1));
9952 /* Now that we have entered the scope of the class, we must restore
9953 the bindings for any template parameters surrounding DECL1, if it
9954 is an inline member template. (Order is important; consider the
9955 case where a template parameter has the same name as a field of
9956 the class.) It is not until after this point that
9957 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
9958 if (flags & SF_INCLASS_INLINE)
9959 maybe_begin_member_template_processing (decl1);
9961 /* Effective C++ rule 15. */
9962 if (warn_ecpp
9963 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9964 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
9965 warning (0, "%<operator=%> should return a reference to %<*this%>");
9967 /* Make the init_value nonzero so pushdecl knows this is not tentative.
9968 error_mark_node is replaced below (in poplevel) with the BLOCK. */
9969 if (!DECL_INITIAL (decl1))
9970 DECL_INITIAL (decl1) = error_mark_node;
9972 /* This function exists in static storage.
9973 (This does not mean `static' in the C sense!) */
9974 TREE_STATIC (decl1) = 1;
9976 /* We must call push_template_decl after current_class_type is set
9977 up. (If we are processing inline definitions after exiting a
9978 class scope, current_class_type will be NULL_TREE until set above
9979 by push_nested_class.) */
9980 if (processing_template_decl)
9982 /* FIXME: Handle error_mark_node more gracefully. */
9983 tree newdecl1 = push_template_decl (decl1);
9984 if (newdecl1 != error_mark_node)
9985 decl1 = newdecl1;
9988 /* We are now in the scope of the function being defined. */
9989 current_function_decl = decl1;
9991 /* Save the parm names or decls from this function's declarator
9992 where store_parm_decls will find them. */
9993 current_function_parms = DECL_ARGUMENTS (decl1);
9995 /* Make sure the parameter and return types are reasonable. When
9996 you declare a function, these types can be incomplete, but they
9997 must be complete when you define the function. */
9998 check_function_type (decl1, current_function_parms);
10000 /* Build the return declaration for the function. */
10001 restype = TREE_TYPE (fntype);
10002 /* Promote the value to int before returning it. */
10003 if (c_promoting_integer_type_p (restype))
10004 restype = type_promotes_to (restype);
10005 if (DECL_RESULT (decl1) == NULL_TREE)
10007 tree resdecl;
10009 resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
10010 DECL_ARTIFICIAL (resdecl) = 1;
10011 DECL_IGNORED_P (resdecl) = 1;
10012 DECL_RESULT (decl1) = resdecl;
10014 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
10017 /* Initialize RTL machinery. We cannot do this until
10018 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
10019 even when processing a template; this is how we get
10020 CFUN set up, and our per-function variables initialized.
10021 FIXME factor out the non-RTL stuff. */
10022 bl = current_binding_level;
10023 allocate_struct_function (decl1);
10024 current_binding_level = bl;
10026 /* Even though we're inside a function body, we still don't want to
10027 call expand_expr to calculate the size of a variable-sized array.
10028 We haven't necessarily assigned RTL to all variables yet, so it's
10029 not safe to try to expand expressions involving them. */
10030 cfun->x_dont_save_pending_sizes_p = 1;
10032 /* Start the statement-tree, start the tree now. */
10033 DECL_SAVED_TREE (decl1) = push_stmt_list ();
10035 /* Let the user know we're compiling this function. */
10036 announce_function (decl1);
10038 /* Record the decl so that the function name is defined.
10039 If we already have a decl for this name, and it is a FUNCTION_DECL,
10040 use the old decl. */
10041 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
10043 /* A specialization is not used to guide overload resolution. */
10044 if (!DECL_FUNCTION_MEMBER_P (decl1)
10045 && !(DECL_USE_TEMPLATE (decl1) &&
10046 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
10048 tree olddecl = pushdecl (decl1);
10050 if (olddecl == error_mark_node)
10051 /* If something went wrong when registering the declaration,
10052 use DECL1; we have to have a FUNCTION_DECL to use when
10053 parsing the body of the function. */
10055 else
10056 /* Otherwise, OLDDECL is either a previous declaration of
10057 the same function or DECL1 itself. */
10058 decl1 = olddecl;
10060 else
10062 /* We need to set the DECL_CONTEXT. */
10063 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
10064 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
10065 /* And make sure we have enough default args. */
10066 check_default_args (decl1);
10068 fntype = TREE_TYPE (decl1);
10071 /* Determine the ELF visibility attribute for the function. We must
10072 not do this before calling "pushdecl", as we must allow
10073 "duplicate_decls" to merge any attributes appropriately. */
10074 if (!DECL_CLONED_FUNCTION_P (decl1))
10075 determine_visibility (decl1);
10077 /* Reset these in case the call to pushdecl changed them. */
10078 current_function_decl = decl1;
10079 cfun->decl = decl1;
10081 /* If we are (erroneously) defining a function that we have already
10082 defined before, wipe out what we knew before. */
10083 if (!DECL_PENDING_INLINE_P (decl1))
10084 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
10086 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
10088 /* We know that this was set up by `grokclassfn'. We do not
10089 wait until `store_parm_decls', since evil parse errors may
10090 never get us to that point. Here we keep the consistency
10091 between `current_class_type' and `current_class_ptr'. */
10092 tree t = DECL_ARGUMENTS (decl1);
10094 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
10095 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
10097 cp_function_chain->x_current_class_ref
10098 = build_indirect_ref (t, NULL);
10099 cp_function_chain->x_current_class_ptr = t;
10101 /* Constructors and destructors need to know whether they're "in
10102 charge" of initializing virtual base classes. */
10103 t = TREE_CHAIN (t);
10104 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
10106 current_in_charge_parm = t;
10107 t = TREE_CHAIN (t);
10109 if (DECL_HAS_VTT_PARM_P (decl1))
10111 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
10112 current_vtt_parm = t;
10116 if (DECL_INTERFACE_KNOWN (decl1))
10118 tree ctx = decl_function_context (decl1);
10120 if (DECL_NOT_REALLY_EXTERN (decl1))
10121 DECL_EXTERNAL (decl1) = 0;
10123 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
10124 && TREE_PUBLIC (ctx))
10125 /* This is a function in a local class in an extern inline
10126 function. */
10127 comdat_linkage (decl1);
10129 /* If this function belongs to an interface, it is public.
10130 If it belongs to someone else's interface, it is also external.
10131 This only affects inlines and template instantiations. */
10132 else if (finfo->interface_unknown == 0
10133 && ! DECL_TEMPLATE_INSTANTIATION (decl1))
10135 if (DECL_DECLARED_INLINE_P (decl1)
10136 || DECL_TEMPLATE_INSTANTIATION (decl1)
10137 || processing_template_decl)
10139 DECL_EXTERNAL (decl1)
10140 = (finfo->interface_only
10141 || (DECL_DECLARED_INLINE_P (decl1)
10142 && ! flag_implement_inlines
10143 && !DECL_VINDEX (decl1)));
10145 /* For WIN32 we also want to put these in linkonce sections. */
10146 maybe_make_one_only (decl1);
10148 else
10149 DECL_EXTERNAL (decl1) = 0;
10150 DECL_NOT_REALLY_EXTERN (decl1) = 0;
10151 DECL_INTERFACE_KNOWN (decl1) = 1;
10152 /* If this function is in an interface implemented in this file,
10153 make sure that the backend knows to emit this function
10154 here. */
10155 if (!DECL_EXTERNAL (decl1))
10156 mark_needed (decl1);
10158 else if (finfo->interface_unknown && finfo->interface_only
10159 && ! DECL_TEMPLATE_INSTANTIATION (decl1))
10161 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10162 interface, we will have both finfo->interface_unknown and
10163 finfo->interface_only set. In that case, we don't want to
10164 use the normal heuristics because someone will supply a
10165 #pragma implementation elsewhere, and deducing it here would
10166 produce a conflict. */
10167 comdat_linkage (decl1);
10168 DECL_EXTERNAL (decl1) = 0;
10169 DECL_INTERFACE_KNOWN (decl1) = 1;
10170 DECL_DEFER_OUTPUT (decl1) = 1;
10172 else
10174 /* This is a definition, not a reference.
10175 So clear DECL_EXTERNAL. */
10176 DECL_EXTERNAL (decl1) = 0;
10178 if ((DECL_DECLARED_INLINE_P (decl1)
10179 || DECL_TEMPLATE_INSTANTIATION (decl1))
10180 && ! DECL_INTERFACE_KNOWN (decl1)
10181 /* Don't try to defer nested functions for now. */
10182 && ! decl_function_context (decl1))
10183 DECL_DEFER_OUTPUT (decl1) = 1;
10184 else
10185 DECL_INTERFACE_KNOWN (decl1) = 1;
10188 begin_scope (sk_function_parms, decl1);
10190 ++function_depth;
10192 if (DECL_DESTRUCTOR_P (decl1)
10193 || (DECL_CONSTRUCTOR_P (decl1)
10194 && targetm.cxx.cdtor_returns_this ()))
10196 cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10197 DECL_CONTEXT (cdtor_label) = current_function_decl;
10200 start_fname_decls ();
10202 store_parm_decls (current_function_parms);
10206 /* Like start_preparsed_function, except that instead of a
10207 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
10209 Returns 1 on success. If the DECLARATOR is not suitable for a function
10210 (it defines a datum instead), we return 0, which tells
10211 yyparse to report a parse error. */
10214 start_function (cp_decl_specifier_seq *declspecs,
10215 const cp_declarator *declarator,
10216 tree attrs)
10218 tree decl1;
10220 if (have_extern_spec)
10222 declspecs->storage_class = sc_extern;
10223 /* This should only be done once on the outermost decl. */
10224 have_extern_spec = false;
10227 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
10228 /* If the declarator is not suitable for a function definition,
10229 cause a syntax error. */
10230 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10231 return 0;
10233 /* If #pragma weak was used, mark the decl weak now. */
10234 if (global_scope_p (current_binding_level))
10235 maybe_apply_pragma_weak (decl1);
10237 if (DECL_MAIN_P (decl1))
10238 /* main must return int. grokfndecl should have corrected it
10239 (and issued a diagnostic) if the user got it wrong. */
10240 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
10241 integer_type_node));
10243 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
10245 return 1;
10248 /* Store the parameter declarations into the current function declaration.
10249 This is called after parsing the parameter declarations, before
10250 digesting the body of the function.
10252 Also install to binding contour return value identifier, if any. */
10254 static void
10255 store_parm_decls (tree current_function_parms)
10257 tree fndecl = current_function_decl;
10258 tree parm;
10260 /* This is a chain of any other decls that came in among the parm
10261 declarations. If a parm is declared with enum {foo, bar} x;
10262 then CONST_DECLs for foo and bar are put here. */
10263 tree nonparms = NULL_TREE;
10265 if (current_function_parms)
10267 /* This case is when the function was defined with an ANSI prototype.
10268 The parms already have decls, so we need not do anything here
10269 except record them as in effect
10270 and complain if any redundant old-style parm decls were written. */
10272 tree specparms = current_function_parms;
10273 tree next;
10275 /* Must clear this because it might contain TYPE_DECLs declared
10276 at class level. */
10277 current_binding_level->names = NULL;
10279 /* If we're doing semantic analysis, then we'll call pushdecl
10280 for each of these. We must do them in reverse order so that
10281 they end in the correct forward order. */
10282 specparms = nreverse (specparms);
10284 for (parm = specparms; parm; parm = next)
10286 next = TREE_CHAIN (parm);
10287 if (TREE_CODE (parm) == PARM_DECL)
10289 if (DECL_NAME (parm) == NULL_TREE
10290 || TREE_CODE (parm) != VOID_TYPE)
10291 pushdecl (parm);
10292 else
10293 error ("parameter %qD declared void", parm);
10295 else
10297 /* If we find an enum constant or a type tag,
10298 put it aside for the moment. */
10299 TREE_CHAIN (parm) = NULL_TREE;
10300 nonparms = chainon (nonparms, parm);
10304 /* Get the decls in their original chain order and record in the
10305 function. This is all and only the PARM_DECLs that were
10306 pushed into scope by the loop above. */
10307 DECL_ARGUMENTS (fndecl) = getdecls ();
10309 else
10310 DECL_ARGUMENTS (fndecl) = NULL_TREE;
10312 /* Now store the final chain of decls for the arguments
10313 as the decl-chain of the current lexical scope.
10314 Put the enumerators in as well, at the front so that
10315 DECL_ARGUMENTS is not modified. */
10316 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
10318 /* For a cloned function, we've already got all the code we need;
10319 there's no need to add any extra bits. */
10320 if (!DECL_CLONED_FUNCTION_P (fndecl))
10322 /* Do the starting of the exception specifications, if we have any. */
10323 if (flag_exceptions && !processing_template_decl
10324 && flag_enforce_eh_specs
10325 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
10326 current_eh_spec_block = begin_eh_spec_block ();
10331 /* We have finished doing semantic analysis on DECL, but have not yet
10332 generated RTL for its body. Save away our current state, so that
10333 when we want to generate RTL later we know what to do. */
10335 static void
10336 save_function_data (tree decl)
10338 struct language_function *f;
10340 /* Save the language-specific per-function data so that we can
10341 get it back when we really expand this function. */
10342 gcc_assert (!DECL_PENDING_INLINE_P (decl));
10344 /* Make a copy. */
10345 f = GGC_NEW (struct language_function);
10346 memcpy (f, cp_function_chain, sizeof (struct language_function));
10347 DECL_SAVED_FUNCTION_DATA (decl) = f;
10349 /* Clear out the bits we don't need. */
10350 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
10351 f->x_named_label_uses = NULL;
10352 f->bindings = NULL;
10353 f->x_local_names = NULL;
10357 /* Set the return value of the constructor (if present). */
10359 static void
10360 finish_constructor_body (void)
10362 tree val;
10363 tree exprstmt;
10365 if (targetm.cxx.cdtor_returns_this ())
10367 /* Any return from a constructor will end up here. */
10368 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10370 val = DECL_ARGUMENTS (current_function_decl);
10371 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10372 DECL_RESULT (current_function_decl), val);
10373 /* Return the address of the object. */
10374 exprstmt = build_stmt (RETURN_EXPR, val);
10375 add_stmt (exprstmt);
10379 /* Do all the processing for the beginning of a destructor; set up the
10380 vtable pointers and cleanups for bases and members. */
10382 static void
10383 begin_destructor_body (void)
10385 tree if_stmt;
10386 tree compound_stmt;
10388 /* If the dtor is empty, and we know there is not any possible
10389 way we could use any vtable entries, before they are possibly
10390 set by a base class dtor, we don't have to setup the vtables,
10391 as we know that any base class dtor will set up any vtables
10392 it needs. We avoid MI, because one base class dtor can do a
10393 virtual dispatch to an overridden function that would need to
10394 have a non-related vtable set up, we cannot avoid setting up
10395 vtables in that case. We could change this to see if there
10396 is just one vtable.
10398 ??? In the destructor for a class, the vtables are set
10399 appropriately for that class. There will be no non-related
10400 vtables. jason 2001-12-11. */
10401 if_stmt = begin_if_stmt ();
10403 /* If it is not safe to avoid setting up the vtables, then
10404 someone will change the condition to be boolean_true_node.
10405 (Actually, for now, we do not have code to set the condition
10406 appropriately, so we just assume that we always need to
10407 initialize the vtables.) */
10408 finish_if_stmt_cond (boolean_true_node, if_stmt);
10410 compound_stmt = begin_compound_stmt (0);
10412 /* Make all virtual function table pointers in non-virtual base
10413 classes point to CURRENT_CLASS_TYPE's virtual function
10414 tables. */
10415 initialize_vtbl_ptrs (current_class_ptr);
10417 finish_compound_stmt (compound_stmt);
10418 finish_then_clause (if_stmt);
10419 finish_if_stmt (if_stmt);
10421 /* And insert cleanups for our bases and members so that they
10422 will be properly destroyed if we throw. */
10423 push_base_cleanups ();
10426 /* At the end of every destructor we generate code to delete the object if
10427 necessary. Do that now. */
10429 static void
10430 finish_destructor_body (void)
10432 tree exprstmt;
10434 /* Any return from a destructor will end up here; that way all base
10435 and member cleanups will be run when the function returns. */
10436 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10438 /* In a virtual destructor, we must call delete. */
10439 if (DECL_VIRTUAL_P (current_function_decl))
10441 tree if_stmt;
10442 tree virtual_size = cxx_sizeof (current_class_type);
10444 /* [class.dtor]
10446 At the point of definition of a virtual destructor (including
10447 an implicit definition), non-placement operator delete shall
10448 be looked up in the scope of the destructor's class and if
10449 found shall be accessible and unambiguous. */
10450 exprstmt = build_op_delete_call
10451 (DELETE_EXPR, current_class_ptr, virtual_size,
10452 /*global_p=*/false, NULL_TREE);
10454 if_stmt = begin_if_stmt ();
10455 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
10456 current_in_charge_parm,
10457 integer_one_node),
10458 if_stmt);
10459 finish_expr_stmt (exprstmt);
10460 finish_then_clause (if_stmt);
10461 finish_if_stmt (if_stmt);
10464 if (targetm.cxx.cdtor_returns_this ())
10466 tree val;
10468 val = DECL_ARGUMENTS (current_function_decl);
10469 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10470 DECL_RESULT (current_function_decl), val);
10471 /* Return the address of the object. */
10472 exprstmt = build_stmt (RETURN_EXPR, val);
10473 add_stmt (exprstmt);
10477 /* Do the necessary processing for the beginning of a function body, which
10478 in this case includes member-initializers, but not the catch clauses of
10479 a function-try-block. Currently, this means opening a binding level
10480 for the member-initializers (in a ctor) and member cleanups (in a dtor).
10481 In other functions, this isn't necessary, but it doesn't hurt. */
10483 tree
10484 begin_function_body (void)
10486 tree stmt;
10488 if (processing_template_decl)
10489 /* Do nothing now. */;
10490 else
10491 /* Always keep the BLOCK node associated with the outermost pair of
10492 curly braces of a function. These are needed for correct
10493 operation of dwarfout.c. */
10494 keep_next_level (true);
10496 stmt = begin_compound_stmt (BCS_FN_BODY);
10498 if (processing_template_decl)
10499 /* Do nothing now. */;
10500 else if (DECL_DESTRUCTOR_P (current_function_decl))
10501 begin_destructor_body ();
10503 return stmt;
10506 /* Do the processing for the end of a function body. Currently, this means
10507 closing out the cleanups for fully-constructed bases and members, and in
10508 the case of the destructor, deleting the object if desired. Again, this
10509 is only meaningful for [cd]tors, since they are the only functions where
10510 there is a significant distinction between the main body and any
10511 function catch clauses. Handling, say, main() return semantics here
10512 would be wrong, as flowing off the end of a function catch clause for
10513 main() would also need to return 0. */
10515 void
10516 finish_function_body (tree compstmt)
10518 /* Close the block. */
10519 finish_compound_stmt (compstmt);
10521 if (processing_template_decl)
10522 /* Do nothing now. */;
10523 else if (DECL_CONSTRUCTOR_P (current_function_decl))
10524 finish_constructor_body ();
10525 else if (DECL_DESTRUCTOR_P (current_function_decl))
10526 finish_destructor_body ();
10529 /* Finish up a function declaration and compile that function
10530 all the way to assembler language output. The free the storage
10531 for the function definition.
10533 FLAGS is a bitwise or of the following values:
10534 2 - INCLASS_INLINE
10535 We just finished processing the body of an in-class inline
10536 function definition. (This processing will have taken place
10537 after the class definition is complete.) */
10539 tree
10540 finish_function (int flags)
10542 tree fndecl = current_function_decl;
10543 tree fntype, ctype = NULL_TREE;
10544 int inclass_inline = (flags & 2) != 0;
10545 int nested;
10547 /* When we get some parse errors, we can end up without a
10548 current_function_decl, so cope. */
10549 if (fndecl == NULL_TREE)
10550 return error_mark_node;
10552 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
10553 && DECL_VIRTUAL_P (fndecl)
10554 && !processing_template_decl)
10556 tree fnclass = DECL_CONTEXT (fndecl);
10557 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
10558 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
10561 nested = function_depth > 1;
10562 fntype = TREE_TYPE (fndecl);
10564 /* TREE_READONLY (fndecl) = 1;
10565 This caused &foo to be of type ptr-to-const-function
10566 which then got a warning when stored in a ptr-to-function variable. */
10568 gcc_assert (building_stmt_tree ());
10570 /* For a cloned function, we've already got all the code we need;
10571 there's no need to add any extra bits. */
10572 if (!DECL_CLONED_FUNCTION_P (fndecl))
10574 if (DECL_MAIN_P (current_function_decl))
10576 tree stmt;
10578 /* Make it so that `main' always returns 0 by default (or
10579 1 for VMS). */
10580 #if VMS_TARGET
10581 stmt = finish_return_stmt (integer_one_node);
10582 #else
10583 stmt = finish_return_stmt (integer_zero_node);
10584 #endif
10585 /* Hack. We don't want the middle-end to warn that this
10586 return is unreachable, so put the statement on the
10587 special line 0. */
10588 #ifdef USE_MAPPED_LOCATION
10589 SET_EXPR_LOCATION (stmt, UNKNOWN_LOCATION);
10590 #else
10591 annotate_with_file_line (stmt, input_filename, 0);
10592 #endif
10595 /* Finish dealing with exception specifiers. */
10596 if (flag_exceptions && !processing_template_decl
10597 && flag_enforce_eh_specs
10598 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
10599 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
10600 (TREE_TYPE (current_function_decl)),
10601 current_eh_spec_block);
10604 /* If we're saving up tree structure, tie off the function now. */
10605 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
10607 finish_fname_decls ();
10609 /* If this function can't throw any exceptions, remember that. */
10610 if (!processing_template_decl
10611 && !cp_function_chain->can_throw
10612 && !flag_non_call_exceptions)
10613 TREE_NOTHROW (fndecl) = 1;
10615 /* This must come after expand_function_end because cleanups might
10616 have declarations (from inline functions) that need to go into
10617 this function's blocks. */
10619 /* If the current binding level isn't the outermost binding level
10620 for this function, either there is a bug, or we have experienced
10621 syntax errors and the statement tree is malformed. */
10622 if (current_binding_level->kind != sk_function_parms)
10624 /* Make sure we have already experienced errors. */
10625 gcc_assert (errorcount);
10627 /* Throw away the broken statement tree and extra binding
10628 levels. */
10629 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
10631 while (current_binding_level->kind != sk_function_parms)
10633 if (current_binding_level->kind == sk_class)
10634 pop_nested_class ();
10635 else
10636 poplevel (0, 0, 0);
10639 poplevel (1, 0, 1);
10641 /* Statements should always be full-expressions at the outermost set
10642 of curly braces for a function. */
10643 gcc_assert (stmts_are_full_exprs_p ());
10645 /* Set up the named return value optimization, if we can. Candidate
10646 variables are selected in check_return_value. */
10647 if (current_function_return_value)
10649 tree r = current_function_return_value;
10650 tree outer;
10652 if (r != error_mark_node
10653 /* This is only worth doing for fns that return in memory--and
10654 simpler, since we don't have to worry about promoted modes. */
10655 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
10656 /* Only allow this for variables declared in the outer scope of
10657 the function so we know that their lifetime always ends with a
10658 return; see g++.dg/opt/nrv6.C. We could be more flexible if
10659 we were to do this optimization in tree-ssa. */
10660 && (outer = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl)))
10661 /* Skip the artificial function body block. */
10662 && (outer = BLOCK_SUBBLOCKS (outer))
10663 && chain_member (r, BLOCK_VARS (outer)))
10664 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
10666 current_function_return_value = NULL_TREE;
10669 /* Remember that we were in class scope. */
10670 if (current_class_name)
10671 ctype = current_class_type;
10673 /* Must mark the RESULT_DECL as being in this function. */
10674 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
10676 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
10677 to the FUNCTION_DECL node itself. */
10678 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
10680 /* Save away current state, if appropriate. */
10681 if (!processing_template_decl)
10682 save_function_data (fndecl);
10684 /* Complain if there's just no return statement. */
10685 if (warn_return_type
10686 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
10687 && !dependent_type_p (TREE_TYPE (fntype))
10688 && !current_function_returns_value && !current_function_returns_null
10689 /* Don't complain if we abort or throw. */
10690 && !current_function_returns_abnormally
10691 && !DECL_NAME (DECL_RESULT (fndecl))
10692 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
10693 inline function, as we might never be compiled separately. */
10694 && (DECL_INLINE (fndecl) || processing_template_decl)
10695 /* Structor return values (if any) are set by the compiler. */
10696 && !DECL_CONSTRUCTOR_P (fndecl)
10697 && !DECL_DESTRUCTOR_P (fndecl))
10698 warning (0, "no return statement in function returning non-void");
10700 /* Store the end of the function, so that we get good line number
10701 info for the epilogue. */
10702 cfun->function_end_locus = input_location;
10704 /* Genericize before inlining. */
10705 if (!processing_template_decl)
10707 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
10708 cp_genericize (fndecl);
10709 /* Clear out the bits we don't need. */
10710 f->x_current_class_ptr = NULL;
10711 f->x_current_class_ref = NULL;
10712 f->x_eh_spec_block = NULL;
10713 f->x_in_charge_parm = NULL;
10714 f->x_vtt_parm = NULL;
10715 f->x_return_value = NULL;
10716 f->bindings = NULL;
10718 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
10719 c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
10721 /* Clear out the bits we don't need. */
10722 local_names = NULL;
10723 named_label_uses = NULL;
10725 /* We're leaving the context of this function, so zap cfun. It's still in
10726 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
10727 cfun = NULL;
10728 current_function_decl = NULL;
10730 /* If this is an in-class inline definition, we may have to pop the
10731 bindings for the template parameters that we added in
10732 maybe_begin_member_template_processing when start_function was
10733 called. */
10734 if (inclass_inline)
10735 maybe_end_member_template_processing ();
10737 /* Leave the scope of the class. */
10738 if (ctype)
10739 pop_nested_class ();
10741 --function_depth;
10743 /* Clean up. */
10744 if (! nested)
10745 /* Let the error reporting routines know that we're outside a
10746 function. For a nested function, this value is used in
10747 cxx_pop_function_context and then reset via pop_function_context. */
10748 current_function_decl = NULL_TREE;
10750 return fndecl;
10753 /* Create the FUNCTION_DECL for a function definition.
10754 DECLSPECS and DECLARATOR are the parts of the declaration;
10755 they describe the return type and the name of the function,
10756 but twisted together in a fashion that parallels the syntax of C.
10758 This function creates a binding context for the function body
10759 as well as setting up the FUNCTION_DECL in current_function_decl.
10761 Returns a FUNCTION_DECL on success.
10763 If the DECLARATOR is not suitable for a function (it defines a datum
10764 instead), we return 0, which tells yyparse to report a parse error.
10766 May return void_type_node indicating that this method is actually
10767 a friend. See grokfield for more details.
10769 Came here with a `.pushlevel' .
10771 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
10772 CHANGES TO CODE IN `grokfield'. */
10774 tree
10775 start_method (cp_decl_specifier_seq *declspecs,
10776 const cp_declarator *declarator, tree attrlist)
10778 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
10779 &attrlist);
10781 if (fndecl == error_mark_node)
10782 return error_mark_node;
10784 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
10786 error ("invalid member function declaration");
10787 return error_mark_node;
10790 if (attrlist)
10791 cplus_decl_attributes (&fndecl, attrlist, 0);
10793 /* Pass friends other than inline friend functions back. */
10794 if (fndecl == void_type_node)
10795 return fndecl;
10797 if (DECL_IN_AGGR_P (fndecl))
10799 if (DECL_CONTEXT (fndecl)
10800 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
10801 error ("%qD is already defined in class %qT", fndecl,
10802 DECL_CONTEXT (fndecl));
10803 return void_type_node;
10806 check_template_shadow (fndecl);
10808 DECL_DECLARED_INLINE_P (fndecl) = 1;
10809 if (flag_default_inline)
10810 DECL_INLINE (fndecl) = 1;
10812 /* We process method specializations in finish_struct_1. */
10813 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
10815 fndecl = push_template_decl (fndecl);
10816 if (fndecl == error_mark_node)
10817 return fndecl;
10820 if (! DECL_FRIEND_P (fndecl))
10822 if (TREE_CHAIN (fndecl))
10824 fndecl = copy_node (fndecl);
10825 TREE_CHAIN (fndecl) = NULL_TREE;
10827 grok_special_member_properties (fndecl);
10830 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
10832 /* Make a place for the parms. */
10833 begin_scope (sk_function_parms, fndecl);
10835 DECL_IN_AGGR_P (fndecl) = 1;
10836 return fndecl;
10839 /* Go through the motions of finishing a function definition.
10840 We don't compile this method until after the whole class has
10841 been processed.
10843 FINISH_METHOD must return something that looks as though it
10844 came from GROKFIELD (since we are defining a method, after all).
10846 This is called after parsing the body of the function definition.
10847 STMTS is the chain of statements that makes up the function body.
10849 DECL is the ..._DECL that `start_method' provided. */
10851 tree
10852 finish_method (tree decl)
10854 tree fndecl = decl;
10855 tree old_initial;
10857 tree link;
10859 if (decl == void_type_node)
10860 return decl;
10862 old_initial = DECL_INITIAL (fndecl);
10864 /* Undo the level for the parms (from start_method).
10865 This is like poplevel, but it causes nothing to be
10866 saved. Saving information here confuses symbol-table
10867 output routines. Besides, this information will
10868 be correctly output when this method is actually
10869 compiled. */
10871 /* Clear out the meanings of the local variables of this level;
10872 also record in each decl which block it belongs to. */
10874 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
10876 if (DECL_NAME (link) != NULL_TREE)
10877 pop_binding (DECL_NAME (link), link);
10878 gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
10879 DECL_CONTEXT (link) = NULL_TREE;
10882 poplevel (0, 0, 0);
10884 DECL_INITIAL (fndecl) = old_initial;
10886 /* We used to check if the context of FNDECL was different from
10887 current_class_type as another way to get inside here. This didn't work
10888 for String.cc in libg++. */
10889 if (DECL_FRIEND_P (fndecl))
10891 VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
10892 fndecl);
10893 decl = void_type_node;
10896 return decl;
10900 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
10901 we can lay it out later, when and if its type becomes complete. */
10903 void
10904 maybe_register_incomplete_var (tree var)
10906 gcc_assert (TREE_CODE (var) == VAR_DECL);
10908 /* Keep track of variables with incomplete types. */
10909 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
10910 && DECL_EXTERNAL (var))
10912 tree inner_type = TREE_TYPE (var);
10914 while (TREE_CODE (inner_type) == ARRAY_TYPE)
10915 inner_type = TREE_TYPE (inner_type);
10916 inner_type = TYPE_MAIN_VARIANT (inner_type);
10918 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
10919 /* RTTI TD entries are created while defining the type_info. */
10920 || (TYPE_LANG_SPECIFIC (inner_type)
10921 && TYPE_BEING_DEFINED (inner_type)))
10922 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
10926 /* Called when a class type (given by TYPE) is defined. If there are
10927 any existing VAR_DECLs whose type hsa been completed by this
10928 declaration, update them now. */
10930 void
10931 complete_vars (tree type)
10933 tree *list = &incomplete_vars;
10935 gcc_assert (CLASS_TYPE_P (type));
10936 while (*list)
10938 if (same_type_p (type, TREE_PURPOSE (*list)))
10940 tree var = TREE_VALUE (*list);
10941 tree type = TREE_TYPE (var);
10942 /* Complete the type of the variable. The VAR_DECL itself
10943 will be laid out in expand_expr. */
10944 complete_type (type);
10945 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
10946 /* Remove this entry from the list. */
10947 *list = TREE_CHAIN (*list);
10949 else
10950 list = &TREE_CHAIN (*list);
10953 /* Check for pending declarations which may have abstract type. */
10954 complete_type_check_abstract (type);
10957 /* If DECL is of a type which needs a cleanup, build that cleanup
10958 here. */
10960 tree
10961 cxx_maybe_build_cleanup (tree decl)
10963 tree type = TREE_TYPE (decl);
10965 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
10967 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
10968 tree rval;
10969 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
10970 && CLASSTYPE_VBASECLASSES (type));
10972 if (TREE_CODE (type) == ARRAY_TYPE)
10973 rval = decl;
10974 else
10976 cxx_mark_addressable (decl);
10977 rval = build_unary_op (ADDR_EXPR, decl, 0);
10980 /* Optimize for space over speed here. */
10981 if (!has_vbases || flag_expensive_optimizations)
10982 flags |= LOOKUP_NONVIRTUAL;
10984 rval = build_delete (TREE_TYPE (rval), rval,
10985 sfk_complete_destructor, flags, 0);
10987 return rval;
10989 return NULL_TREE;
10992 /* When a stmt has been parsed, this function is called. */
10994 void
10995 finish_stmt (void)
10999 /* DECL was originally constructed as a non-static member function,
11000 but turned out to be static. Update it accordingly. */
11002 void
11003 revert_static_member_fn (tree decl)
11005 tree tmp;
11006 tree function = TREE_TYPE (decl);
11007 tree args = TYPE_ARG_TYPES (function);
11009 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
11010 != TYPE_UNQUALIFIED)
11011 error ("static member function %q#D declared with type qualifiers", decl);
11013 args = TREE_CHAIN (args);
11014 tmp = build_function_type (TREE_TYPE (function), args);
11015 tmp = build_qualified_type (tmp, cp_type_quals (function));
11016 tmp = build_exception_variant (tmp,
11017 TYPE_RAISES_EXCEPTIONS (function));
11018 TREE_TYPE (decl) = tmp;
11019 if (DECL_ARGUMENTS (decl))
11020 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
11021 DECL_STATIC_FUNCTION_P (decl) = 1;
11024 /* Initialize the variables used during compilation of a C++
11025 function. */
11027 void
11028 cxx_push_function_context (struct function * f)
11030 struct language_function *p = GGC_CNEW (struct language_function);
11031 f->language = p;
11033 /* Whenever we start a new function, we destroy temporaries in the
11034 usual way. */
11035 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11037 if (f->decl)
11039 tree fn = f->decl;
11041 if (DECL_SAVED_FUNCTION_DATA (fn))
11043 /* If we already parsed this function, and we're just expanding it
11044 now, restore saved state. */
11045 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
11047 /* We don't need the saved data anymore. Unless this is an inline
11048 function; we need the named return value info for
11049 declare_return_variable. */
11050 if (! DECL_INLINE (fn))
11051 DECL_SAVED_FUNCTION_DATA (fn) = NULL;
11056 /* Free the language-specific parts of F, now that we've finished
11057 compiling the function. */
11059 void
11060 cxx_pop_function_context (struct function * f)
11062 f->language = 0;
11065 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11066 one of the language-independent trees. */
11068 enum cp_tree_node_structure_enum
11069 cp_tree_node_structure (union lang_tree_node * t)
11071 switch (TREE_CODE (&t->generic))
11073 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
11074 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
11075 case OVERLOAD: return TS_CP_OVERLOAD;
11076 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
11077 case TINST_LEVEL: return TS_CP_TINST_LEVEL;
11078 case PTRMEM_CST: return TS_CP_PTRMEM;
11079 case BASELINK: return TS_CP_BASELINK;
11080 default: return TS_CP_GENERIC;
11084 /* Build the void_list_node (void_type_node having been created). */
11085 tree
11086 build_void_list_node (void)
11088 tree t = build_tree_list (NULL_TREE, void_type_node);
11089 return t;
11092 bool
11093 cp_missing_noreturn_ok_p (tree decl)
11095 /* A missing noreturn is ok for the `main' function. */
11096 return DECL_MAIN_P (decl);
11099 /* Return the COMDAT group into which DECL should be placed. */
11101 const char *
11102 cxx_comdat_group (tree decl)
11104 tree name;
11106 /* Virtual tables, construction virtual tables, and virtual table
11107 tables all go in a single COMDAT group, named after the primary
11108 virtual table. */
11109 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
11110 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
11111 /* For all other DECLs, the COMDAT group is the mangled name of the
11112 declaration itself. */
11113 else
11115 while (DECL_THUNK_P (decl))
11117 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
11118 into the same section as the target function. In that case
11119 we must return target's name. */
11120 tree target = THUNK_TARGET (decl);
11121 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
11122 && DECL_SECTION_NAME (target) != NULL
11123 && DECL_ONE_ONLY (target))
11124 decl = target;
11125 else
11126 break;
11128 name = DECL_ASSEMBLER_NAME (decl);
11131 return IDENTIFIER_POINTER (name);
11134 #include "gt-cp-decl.h"