* common.opt (-Wattributes): New. Default true.
[official-gcc.git] / gcc / cp / decl.c
blobd3544172bc4cdac038f0b41099c708aedac3ad49
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;
423 scope = scope->level_chain)
425 tree decl;
427 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
428 objc_volatilize_decl (decl);
430 /* Do not climb up past the current function. */
431 if (scope->kind == sk_function_parms)
432 break;
436 /* Exit a binding level.
437 Pop the level off, and restore the state of the identifier-decl mappings
438 that were in effect when this level was entered.
440 If KEEP == 1, this level had explicit declarations, so
441 and create a "block" (a BLOCK node) for the level
442 to record its declarations and subblocks for symbol table output.
444 If FUNCTIONBODY is nonzero, this level is the body of a function,
445 so create a block as if KEEP were set and also clear out all
446 label names.
448 If REVERSE is nonzero, reverse the order of decls before putting
449 them into the BLOCK. */
451 tree
452 poplevel (int keep, int reverse, int functionbody)
454 tree link;
455 /* The chain of decls was accumulated in reverse order.
456 Put it into forward order, just for cleanliness. */
457 tree decls;
458 int tmp = functionbody;
459 int real_functionbody;
460 tree subblocks;
461 tree block;
462 tree decl;
463 int leaving_for_scope;
464 scope_kind kind;
466 timevar_push (TV_NAME_LOOKUP);
467 restart:
469 block = NULL_TREE;
471 gcc_assert (current_binding_level->kind != sk_class);
473 real_functionbody = (current_binding_level->kind == sk_cleanup
474 ? ((functionbody = 0), tmp) : functionbody);
475 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
477 gcc_assert (!VEC_length(cp_class_binding,
478 current_binding_level->class_shadowed));
480 /* We used to use KEEP == 2 to indicate that the new block should go
481 at the beginning of the list of blocks at this binding level,
482 rather than the end. This hack is no longer used. */
483 gcc_assert (keep == 0 || keep == 1);
485 if (current_binding_level->keep)
486 keep = 1;
488 /* Any uses of undefined labels, and any defined labels, now operate
489 under constraints of next binding contour. */
490 if (cfun && !functionbody)
492 struct cp_binding_level *level_chain;
493 level_chain = current_binding_level->level_chain;
494 if (level_chain)
496 struct named_label_use_list *uses;
497 struct named_label_list *labels;
498 for (labels = named_labels; labels; labels = labels->next)
499 if (labels->binding_level == current_binding_level)
501 tree decl;
502 if (current_binding_level->kind == sk_try)
503 labels->in_try_scope = 1;
504 if (current_binding_level->kind == sk_catch)
505 labels->in_catch_scope = 1;
506 for (decl = labels->names_in_scope; decl;
507 decl = TREE_CHAIN (decl))
508 if (decl_jump_unsafe (decl))
509 labels->bad_decls = tree_cons (NULL_TREE, decl,
510 labels->bad_decls);
511 labels->binding_level = level_chain;
512 labels->names_in_scope = level_chain->names;
515 for (uses = named_label_uses; uses; uses = uses->next)
516 if (uses->binding_level == current_binding_level)
518 uses->binding_level = level_chain;
519 uses->names_in_scope = level_chain->names;
524 /* Get the decls in the order they were written.
525 Usually current_binding_level->names is in reverse order.
526 But parameter decls were previously put in forward order. */
528 if (reverse)
529 current_binding_level->names
530 = decls = nreverse (current_binding_level->names);
531 else
532 decls = current_binding_level->names;
534 /* If there were any declarations or structure tags in that level,
535 or if this level is a function body,
536 create a BLOCK to record them for the life of this function. */
537 block = NULL_TREE;
538 if (keep == 1 || functionbody)
539 block = make_node (BLOCK);
540 if (block != NULL_TREE)
542 BLOCK_VARS (block) = decls;
543 BLOCK_SUBBLOCKS (block) = subblocks;
546 /* In each subblock, record that this is its superior. */
547 if (keep >= 0)
548 for (link = subblocks; link; link = TREE_CHAIN (link))
549 BLOCK_SUPERCONTEXT (link) = block;
551 /* We still support the old for-scope rules, whereby the variables
552 in a for-init statement were in scope after the for-statement
553 ended. We only use the new rules if flag_new_for_scope is
554 nonzero. */
555 leaving_for_scope
556 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
558 /* Before we remove the declarations first check for unused variables. */
559 if (warn_unused_variable
560 && !processing_template_decl)
561 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
562 if (TREE_CODE (decl) == VAR_DECL
563 && ! TREE_USED (decl)
564 && ! DECL_IN_SYSTEM_HEADER (decl)
565 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
566 warning (0, "%Junused variable %qD", decl, decl);
568 /* Remove declarations for all the DECLs in this level. */
569 for (link = decls; link; link = TREE_CHAIN (link))
571 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
572 && DECL_NAME (link))
574 tree name = DECL_NAME (link);
575 cxx_binding *ob;
576 tree ns_binding;
578 ob = outer_binding (name,
579 IDENTIFIER_BINDING (name),
580 /*class_p=*/true);
581 if (!ob)
582 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
583 else
584 ns_binding = NULL_TREE;
586 if (ob && ob->scope == current_binding_level->level_chain)
587 /* We have something like:
589 int i;
590 for (int i; ;);
592 and we are leaving the `for' scope. There's no reason to
593 keep the binding of the inner `i' in this case. */
594 pop_binding (name, link);
595 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
596 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
597 /* Here, we have something like:
599 typedef int I;
601 void f () {
602 for (int I; ;);
605 We must pop the for-scope binding so we know what's a
606 type and what isn't. */
607 pop_binding (name, link);
608 else
610 /* Mark this VAR_DECL as dead so that we can tell we left it
611 there only for backward compatibility. */
612 DECL_DEAD_FOR_LOCAL (link) = 1;
614 /* Keep track of what should have happened when we
615 popped the binding. */
616 if (ob && ob->value)
617 DECL_SHADOWED_FOR_VAR (link) = ob->value;
619 /* Add it to the list of dead variables in the next
620 outermost binding to that we can remove these when we
621 leave that binding. */
622 current_binding_level->level_chain->dead_vars_from_for
623 = tree_cons (NULL_TREE, link,
624 current_binding_level->level_chain->
625 dead_vars_from_for);
627 /* Although we don't pop the cxx_binding, we do clear
628 its SCOPE since the scope is going away now. */
629 IDENTIFIER_BINDING (name)->scope
630 = current_binding_level->level_chain;
633 else
635 tree name;
637 /* Remove the binding. */
638 decl = link;
640 if (TREE_CODE (decl) == TREE_LIST)
641 decl = TREE_VALUE (decl);
642 name = decl;
644 if (TREE_CODE (name) == OVERLOAD)
645 name = OVL_FUNCTION (name);
647 gcc_assert (DECL_P (name));
648 pop_binding (DECL_NAME (name), decl);
652 /* Remove declarations for any `for' variables from inner scopes
653 that we kept around. */
654 for (link = current_binding_level->dead_vars_from_for;
655 link; link = TREE_CHAIN (link))
656 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
658 /* Restore the IDENTIFIER_TYPE_VALUEs. */
659 for (link = current_binding_level->type_shadowed;
660 link; link = TREE_CHAIN (link))
661 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
663 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
664 for (link = current_binding_level->shadowed_labels;
665 link;
666 link = TREE_CHAIN (link))
667 pop_label (TREE_VALUE (link), TREE_PURPOSE (link));
669 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
670 list if a `using' declaration put them there. The debugging
671 back-ends won't understand OVERLOAD, so we remove them here.
672 Because the BLOCK_VARS are (temporarily) shared with
673 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
674 popped all the bindings. */
675 if (block)
677 tree* d;
679 for (d = &BLOCK_VARS (block); *d; )
681 if (TREE_CODE (*d) == TREE_LIST)
682 *d = TREE_CHAIN (*d);
683 else
684 d = &TREE_CHAIN (*d);
688 /* If the level being exited is the top level of a function,
689 check over all the labels. */
690 if (functionbody)
692 /* Since this is the top level block of a function, the vars are
693 the function's parameters. Don't leave them in the BLOCK
694 because they are found in the FUNCTION_DECL instead. */
695 BLOCK_VARS (block) = 0;
696 pop_labels (block);
699 kind = current_binding_level->kind;
700 if (kind == sk_cleanup)
702 tree stmt;
704 /* If this is a temporary binding created for a cleanup, then we'll
705 have pushed a statement list level. Pop that, create a new
706 BIND_EXPR for the block, and insert it into the stream. */
707 stmt = pop_stmt_list (current_binding_level->statement_list);
708 stmt = c_build_bind_expr (block, stmt);
709 add_stmt (stmt);
712 leave_scope ();
713 if (functionbody)
714 DECL_INITIAL (current_function_decl) = block;
715 else if (block)
716 current_binding_level->blocks
717 = chainon (current_binding_level->blocks, block);
719 /* If we did not make a block for the level just exited,
720 any blocks made for inner levels
721 (since they cannot be recorded as subblocks in that level)
722 must be carried forward so they will later become subblocks
723 of something else. */
724 else if (subblocks)
725 current_binding_level->blocks
726 = chainon (current_binding_level->blocks, subblocks);
728 /* Each and every BLOCK node created here in `poplevel' is important
729 (e.g. for proper debugging information) so if we created one
730 earlier, mark it as "used". */
731 if (block)
732 TREE_USED (block) = 1;
734 /* All temporary bindings created for cleanups are popped silently. */
735 if (kind == sk_cleanup)
736 goto restart;
738 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
741 /* Insert BLOCK at the end of the list of subblocks of the
742 current binding level. This is used when a BIND_EXPR is expanded,
743 to handle the BLOCK node inside the BIND_EXPR. */
745 void
746 insert_block (tree block)
748 TREE_USED (block) = 1;
749 current_binding_level->blocks
750 = chainon (current_binding_level->blocks, block);
753 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
754 itself, calling F for each. The DATA is passed to F as well. */
756 static int
757 walk_namespaces_r (tree namespace, walk_namespaces_fn f, void* data)
759 int result = 0;
760 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
762 result |= (*f) (namespace, data);
764 for (; current; current = TREE_CHAIN (current))
765 result |= walk_namespaces_r (current, f, data);
767 return result;
770 /* Walk all the namespaces, calling F for each. The DATA is passed to
771 F as well. */
774 walk_namespaces (walk_namespaces_fn f, void* data)
776 return walk_namespaces_r (global_namespace, f, data);
779 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
780 DATA is non-NULL, this is the last time we will call
781 wrapup_global_declarations for this NAMESPACE. */
784 wrapup_globals_for_namespace (tree namespace, void* data)
786 struct cp_binding_level *level = NAMESPACE_LEVEL (namespace);
787 VEC(tree,gc) *statics = level->static_decls;
788 tree *vec = VEC_address (tree, statics);
789 int len = VEC_length (tree, statics);
790 int last_time = (data != 0);
792 if (last_time)
794 check_global_declarations (vec, len);
795 return 0;
798 /* Write out any globals that need to be output. */
799 return wrapup_global_declarations (vec, len);
803 /* In C++, you don't have to write `struct S' to refer to `S'; you
804 can just use `S'. We accomplish this by creating a TYPE_DECL as
805 if the user had written `typedef struct S S'. Create and return
806 the TYPE_DECL for TYPE. */
808 tree
809 create_implicit_typedef (tree name, tree type)
811 tree decl;
813 decl = build_decl (TYPE_DECL, name, type);
814 DECL_ARTIFICIAL (decl) = 1;
815 /* There are other implicit type declarations, like the one *within*
816 a class that allows you to write `S::S'. We must distinguish
817 amongst these. */
818 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
819 TYPE_NAME (type) = decl;
821 return decl;
824 /* Remember a local name for name-mangling purposes. */
826 static void
827 push_local_name (tree decl)
829 size_t i, nelts;
830 tree t, name;
832 timevar_push (TV_NAME_LOOKUP);
834 name = DECL_NAME (decl);
836 nelts = VEC_length (tree, local_names);
837 for (i = 0; i < nelts; i++)
839 t = VEC_index (tree, local_names, i);
840 if (DECL_NAME (t) == name)
842 if (!DECL_LANG_SPECIFIC (decl))
843 retrofit_lang_decl (decl);
844 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
845 if (DECL_LANG_SPECIFIC (t))
846 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
847 else
848 DECL_DISCRIMINATOR (decl) = 1;
850 VEC_replace (tree, local_names, i, decl);
851 timevar_pop (TV_NAME_LOOKUP);
852 return;
856 VEC_safe_push (tree, gc, local_names, decl);
857 timevar_pop (TV_NAME_LOOKUP);
860 /* Subroutine of duplicate_decls: return truthvalue of whether
861 or not types of these decls match.
863 For C++, we must compare the parameter list so that `int' can match
864 `int&' in a parameter position, but `int&' is not confused with
865 `const int&'. */
868 decls_match (tree newdecl, tree olddecl)
870 int types_match;
872 if (newdecl == olddecl)
873 return 1;
875 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
876 /* If the two DECLs are not even the same kind of thing, we're not
877 interested in their types. */
878 return 0;
880 if (TREE_CODE (newdecl) == FUNCTION_DECL)
882 tree f1 = TREE_TYPE (newdecl);
883 tree f2 = TREE_TYPE (olddecl);
884 tree p1 = TYPE_ARG_TYPES (f1);
885 tree p2 = TYPE_ARG_TYPES (f2);
887 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
888 && ! (DECL_EXTERN_C_P (newdecl)
889 && DECL_EXTERN_C_P (olddecl)))
890 return 0;
892 if (TREE_CODE (f1) != TREE_CODE (f2))
893 return 0;
895 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
897 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
898 && (DECL_BUILT_IN (olddecl)
899 #ifndef NO_IMPLICIT_EXTERN_C
900 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
901 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
902 #endif
905 types_match = self_promoting_args_p (p1);
906 if (p1 == void_list_node)
907 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
909 #ifndef NO_IMPLICIT_EXTERN_C
910 else if (p1 == NULL_TREE
911 && (DECL_EXTERN_C_P (olddecl)
912 && DECL_IN_SYSTEM_HEADER (olddecl)
913 && !DECL_CLASS_SCOPE_P (olddecl))
914 && (DECL_EXTERN_C_P (newdecl)
915 && DECL_IN_SYSTEM_HEADER (newdecl)
916 && !DECL_CLASS_SCOPE_P (newdecl)))
918 types_match = self_promoting_args_p (p2);
919 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
921 #endif
922 else
923 types_match = compparms (p1, p2);
925 else
926 types_match = 0;
928 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
930 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
931 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
932 return 0;
934 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
935 DECL_TEMPLATE_PARMS (olddecl)))
936 return 0;
938 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
939 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
940 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
941 else
942 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
943 DECL_TEMPLATE_RESULT (newdecl));
945 else
947 /* Need to check scope for variable declaration (VAR_DECL).
948 For typedef (TYPE_DECL), scope is ignored. */
949 if (TREE_CODE (newdecl) == VAR_DECL
950 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
951 return 0;
953 if (TREE_TYPE (newdecl) == error_mark_node)
954 types_match = TREE_TYPE (olddecl) == error_mark_node;
955 else if (TREE_TYPE (olddecl) == NULL_TREE)
956 types_match = TREE_TYPE (newdecl) == NULL_TREE;
957 else if (TREE_TYPE (newdecl) == NULL_TREE)
958 types_match = 0;
959 else
960 types_match = comptypes (TREE_TYPE (newdecl),
961 TREE_TYPE (olddecl),
962 COMPARE_REDECLARATION);
965 return types_match;
968 /* If NEWDECL is `static' and an `extern' was seen previously,
969 warn about it. OLDDECL is the previous declaration.
971 Note that this does not apply to the C++ case of declaring
972 a variable `extern const' and then later `const'.
974 Don't complain about built-in functions, since they are beyond
975 the user's control. */
977 void
978 warn_extern_redeclared_static (tree newdecl, tree olddecl)
980 tree name;
982 if (TREE_CODE (newdecl) == TYPE_DECL
983 || TREE_CODE (newdecl) == TEMPLATE_DECL
984 || TREE_CODE (newdecl) == CONST_DECL
985 || TREE_CODE (newdecl) == NAMESPACE_DECL)
986 return;
988 /* Don't get confused by static member functions; that's a different
989 use of `static'. */
990 if (TREE_CODE (newdecl) == FUNCTION_DECL
991 && DECL_STATIC_FUNCTION_P (newdecl))
992 return;
994 /* If the old declaration was `static', or the new one isn't, then
995 then everything is OK. */
996 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
997 return;
999 /* It's OK to declare a builtin function as `static'. */
1000 if (TREE_CODE (olddecl) == FUNCTION_DECL
1001 && DECL_ARTIFICIAL (olddecl))
1002 return;
1004 name = DECL_ASSEMBLER_NAME (newdecl);
1005 pedwarn ("%qD was declared %<extern%> and later %<static%>", newdecl);
1006 cp_pedwarn_at ("previous declaration of %qD", olddecl);
1009 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1010 If the redeclaration is invalid, a diagnostic is issued, and the
1011 error_mark_node is returned. Otherwise, OLDDECL is returned.
1013 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1014 returned. */
1016 tree
1017 duplicate_decls (tree newdecl, tree olddecl)
1019 unsigned olddecl_uid = DECL_UID (olddecl);
1020 int olddecl_friend = 0, types_match = 0;
1021 int new_defines_function = 0;
1023 if (newdecl == olddecl)
1024 return olddecl;
1026 types_match = decls_match (newdecl, olddecl);
1028 /* If either the type of the new decl or the type of the old decl is an
1029 error_mark_node, then that implies that we have already issued an
1030 error (earlier) for some bogus type specification, and in that case,
1031 it is rather pointless to harass the user with yet more error message
1032 about the same declaration, so just pretend the types match here. */
1033 if (TREE_TYPE (newdecl) == error_mark_node
1034 || TREE_TYPE (olddecl) == error_mark_node)
1035 types_match = 1;
1037 if (DECL_P (olddecl)
1038 && TREE_CODE (newdecl) == FUNCTION_DECL
1039 && TREE_CODE (olddecl) == FUNCTION_DECL
1040 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1042 if (DECL_DECLARED_INLINE_P (newdecl)
1043 && DECL_UNINLINABLE (newdecl)
1044 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1045 /* Already warned elsewhere. */;
1046 else if (DECL_DECLARED_INLINE_P (olddecl)
1047 && DECL_UNINLINABLE (olddecl)
1048 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1049 /* Already warned. */;
1050 else if (DECL_DECLARED_INLINE_P (newdecl)
1051 && DECL_UNINLINABLE (olddecl)
1052 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1054 warning (OPT_Wattributes, "%Jfunction %qD redeclared as inline",
1055 newdecl, newdecl);
1056 warning (OPT_Wattributes, "%Jprevious declaration of %qD "
1057 "with attribute noinline", olddecl, olddecl);
1059 else if (DECL_DECLARED_INLINE_P (olddecl)
1060 && DECL_UNINLINABLE (newdecl)
1061 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1063 warning (OPT_Wattributes, "%Jfunction %qD redeclared with "
1064 "attribute noinline", newdecl, newdecl);
1065 warning (OPT_Wattributes, "%Jprevious declaration of %qD was inline",
1066 olddecl, olddecl);
1070 /* Check for redeclaration and other discrepancies. */
1071 if (TREE_CODE (olddecl) == FUNCTION_DECL
1072 && DECL_ARTIFICIAL (olddecl))
1074 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1076 /* Avoid warnings redeclaring anticipated built-ins. */
1077 if (DECL_ANTICIPATED (olddecl))
1078 return NULL_TREE;
1080 /* If you declare a built-in or predefined function name as static,
1081 the old definition is overridden, but optionally warn this was a
1082 bad choice of name. */
1083 if (! TREE_PUBLIC (newdecl))
1085 if (warn_shadow)
1086 warning (0, "shadowing %s function %q#D",
1087 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1088 olddecl);
1089 /* Discard the old built-in function. */
1090 return NULL_TREE;
1092 /* If the built-in is not ansi, then programs can override
1093 it even globally without an error. */
1094 else if (! DECL_BUILT_IN (olddecl))
1095 warning (0, "library function %q#D redeclared as non-function %q#D",
1096 olddecl, newdecl);
1097 else
1099 error ("declaration of %q#D", newdecl);
1100 error ("conflicts with built-in declaration %q#D",
1101 olddecl);
1103 return NULL_TREE;
1105 else if (!types_match)
1107 /* Avoid warnings redeclaring anticipated built-ins. */
1108 if (DECL_ANTICIPATED (olddecl))
1110 /* Deal with fileptr_type_node. FILE type is not known
1111 at the time we create the builtins. */
1112 tree t1, t2;
1114 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1115 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1116 t1 || t2;
1117 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1118 if (!t1 || !t2)
1119 break;
1120 else if (TREE_VALUE (t2) == fileptr_type_node)
1122 tree t = TREE_VALUE (t1);
1124 if (TREE_CODE (t) == POINTER_TYPE
1125 && TYPE_NAME (TREE_TYPE (t))
1126 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1127 == get_identifier ("FILE")
1128 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1130 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1132 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1133 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1134 types_match = decls_match (newdecl, olddecl);
1135 if (types_match)
1136 return duplicate_decls (newdecl, olddecl);
1137 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1140 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1141 break;
1143 else if ((DECL_EXTERN_C_P (newdecl)
1144 && DECL_EXTERN_C_P (olddecl))
1145 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1146 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1148 /* A near match; override the builtin. */
1150 if (TREE_PUBLIC (newdecl))
1152 warning (0, "new declaration %q#D", newdecl);
1153 warning (0, "ambiguates built-in declaration %q#D",
1154 olddecl);
1156 else if (warn_shadow)
1157 warning (0, "shadowing %s function %q#D",
1158 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1159 olddecl);
1161 else
1162 /* Discard the old built-in function. */
1163 return NULL_TREE;
1165 /* Replace the old RTL to avoid problems with inlining. */
1166 COPY_DECL_RTL (newdecl, olddecl);
1168 /* Even if the types match, prefer the new declarations type
1169 for anticipated built-ins, for exception lists, etc... */
1170 else if (DECL_ANTICIPATED (olddecl))
1172 tree type = TREE_TYPE (newdecl);
1173 tree attribs = (*targetm.merge_type_attributes)
1174 (TREE_TYPE (olddecl), type);
1176 type = cp_build_type_attribute_variant (type, attribs);
1177 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1180 /* Whether or not the builtin can throw exceptions has no
1181 bearing on this declarator. */
1182 TREE_NOTHROW (olddecl) = 0;
1184 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1186 /* If a builtin function is redeclared as `static', merge
1187 the declarations, but make the original one static. */
1188 DECL_THIS_STATIC (olddecl) = 1;
1189 TREE_PUBLIC (olddecl) = 0;
1191 /* Make the old declaration consistent with the new one so
1192 that all remnants of the builtin-ness of this function
1193 will be banished. */
1194 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1195 COPY_DECL_RTL (newdecl, olddecl);
1198 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1200 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1201 && TREE_CODE (newdecl) != TYPE_DECL
1202 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
1203 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
1204 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1205 && TREE_CODE (olddecl) != TYPE_DECL
1206 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
1207 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1208 == TYPE_DECL))))
1210 /* We do nothing special here, because C++ does such nasty
1211 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1212 get shadowed, and know that if we need to find a TYPE_DECL
1213 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1214 slot of the identifier. */
1215 return NULL_TREE;
1218 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1219 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1220 || (TREE_CODE (olddecl) == FUNCTION_DECL
1221 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1222 return NULL_TREE;
1224 error ("%q#D redeclared as different kind of symbol", newdecl);
1225 if (TREE_CODE (olddecl) == TREE_LIST)
1226 olddecl = TREE_VALUE (olddecl);
1227 cp_error_at ("previous declaration of %q#D", olddecl);
1229 return error_mark_node;
1231 else if (!types_match)
1233 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1234 /* These are certainly not duplicate declarations; they're
1235 from different scopes. */
1236 return NULL_TREE;
1238 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1240 /* The name of a class template may not be declared to refer to
1241 any other template, class, function, object, namespace, value,
1242 or type in the same scope. */
1243 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1244 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1246 error ("declaration of template %q#D", newdecl);
1247 cp_error_at ("conflicts with previous declaration %q#D",
1248 olddecl);
1250 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1251 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1252 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1253 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1254 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1255 DECL_TEMPLATE_PARMS (olddecl))
1256 /* Template functions can be disambiguated by
1257 return type. */
1258 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1259 TREE_TYPE (TREE_TYPE (olddecl))))
1261 error ("new declaration %q#D", newdecl);
1262 cp_error_at ("ambiguates old declaration %q#D", olddecl);
1264 return NULL_TREE;
1266 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1268 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1270 error ("declaration of C function %q#D conflicts with",
1271 newdecl);
1272 cp_error_at ("previous declaration %q#D here", olddecl);
1274 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1275 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1277 error ("new declaration %q#D", newdecl);
1278 cp_error_at ("ambiguates old declaration %q#D", olddecl);
1280 else
1281 return NULL_TREE;
1283 else
1285 error ("conflicting declaration %q#D", newdecl);
1286 cp_error_at ("%qD has a previous declaration as %q#D",
1287 olddecl, olddecl);
1288 return error_mark_node;
1291 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1292 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1293 && (!DECL_TEMPLATE_INFO (newdecl)
1294 || (DECL_TI_TEMPLATE (newdecl)
1295 != DECL_TI_TEMPLATE (olddecl))))
1296 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1297 && (!DECL_TEMPLATE_INFO (olddecl)
1298 || (DECL_TI_TEMPLATE (olddecl)
1299 != DECL_TI_TEMPLATE (newdecl))))))
1300 /* It's OK to have a template specialization and a non-template
1301 with the same type, or to have specializations of two
1302 different templates with the same type. Note that if one is a
1303 specialization, and the other is an instantiation of the same
1304 template, that we do not exit at this point. That situation
1305 can occur if we instantiate a template class, and then
1306 specialize one of its methods. This situation is valid, but
1307 the declarations must be merged in the usual way. */
1308 return NULL_TREE;
1309 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1310 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1311 && !DECL_USE_TEMPLATE (newdecl))
1312 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1313 && !DECL_USE_TEMPLATE (olddecl))))
1314 /* One of the declarations is a template instantiation, and the
1315 other is not a template at all. That's OK. */
1316 return NULL_TREE;
1317 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1319 /* In [namespace.alias] we have:
1321 In a declarative region, a namespace-alias-definition can be
1322 used to redefine a namespace-alias declared in that declarative
1323 region to refer only to the namespace to which it already
1324 refers.
1326 Therefore, if we encounter a second alias directive for the same
1327 alias, we can just ignore the second directive. */
1328 if (DECL_NAMESPACE_ALIAS (newdecl)
1329 && (DECL_NAMESPACE_ALIAS (newdecl)
1330 == DECL_NAMESPACE_ALIAS (olddecl)))
1331 return olddecl;
1332 /* [namespace.alias]
1334 A namespace-name or namespace-alias shall not be declared as
1335 the name of any other entity in the same declarative region.
1336 A namespace-name defined at global scope shall not be
1337 declared as the name of any other entity in any global scope
1338 of the program. */
1339 error ("declaration of namespace %qD conflicts with", newdecl);
1340 cp_error_at ("previous declaration of namespace %qD here", olddecl);
1341 return error_mark_node;
1343 else
1345 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1346 if (errmsg)
1348 error (errmsg, newdecl);
1349 if (DECL_NAME (olddecl) != NULL_TREE)
1350 cp_error_at ((DECL_INITIAL (olddecl)
1351 && namespace_bindings_p ())
1352 ? "%q#D previously defined here"
1353 : "%q#D previously declared here", olddecl);
1354 return error_mark_node;
1356 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1357 && DECL_INITIAL (olddecl) != NULL_TREE
1358 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1359 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1361 /* Prototype decl follows defn w/o prototype. */
1362 cp_warning_at ("prototype for %q#D", newdecl);
1363 warning (0, "%Jfollows non-prototype definition here", olddecl);
1365 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1366 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1368 /* extern "C" int foo ();
1369 int foo () { bar (); }
1370 is OK. */
1371 if (current_lang_depth () == 0)
1372 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1373 else
1375 cp_error_at ("previous declaration of %q#D with %qL linkage",
1376 olddecl, DECL_LANGUAGE (olddecl));
1377 error ("conflicts with new declaration with %qL linkage",
1378 DECL_LANGUAGE (newdecl));
1382 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1384 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1386 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1387 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1388 int i = 1;
1390 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1391 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1393 for (; t1 && t1 != void_list_node;
1394 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1395 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1397 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1398 TREE_PURPOSE (t2)))
1400 pedwarn ("default argument given for parameter %d of %q#D",
1401 i, newdecl);
1402 cp_pedwarn_at ("after previous specification in %q#D",
1403 olddecl);
1405 else
1407 error ("default argument given for parameter %d of %q#D",
1408 i, newdecl);
1409 cp_error_at ("after previous specification in %q#D",
1410 olddecl);
1414 if (DECL_DECLARED_INLINE_P (newdecl)
1415 && ! DECL_DECLARED_INLINE_P (olddecl)
1416 && TREE_ADDRESSABLE (olddecl) && warn_inline)
1418 warning (0, "%q#D was used before it was declared inline", newdecl);
1419 warning (0, "%Jprevious non-inline declaration here", olddecl);
1424 /* Do not merge an implicit typedef with an explicit one. In:
1426 class A;
1428 typedef class A A __attribute__ ((foo));
1430 the attribute should apply only to the typedef. */
1431 if (TREE_CODE (olddecl) == TYPE_DECL
1432 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1433 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1434 return NULL_TREE;
1436 /* If new decl is `static' and an `extern' was seen previously,
1437 warn about it. */
1438 warn_extern_redeclared_static (newdecl, olddecl);
1440 /* We have committed to returning 1 at this point. */
1441 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1443 /* Now that functions must hold information normally held
1444 by field decls, there is extra work to do so that
1445 declaration information does not get destroyed during
1446 definition. */
1447 if (DECL_VINDEX (olddecl))
1448 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1449 if (DECL_CONTEXT (olddecl))
1450 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1451 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1452 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1453 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1454 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1455 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1456 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1457 SET_OVERLOADED_OPERATOR_CODE
1458 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1459 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1461 /* Optionally warn about more than one declaration for the same
1462 name, but don't warn about a function declaration followed by a
1463 definition. */
1464 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1465 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1466 /* Don't warn about extern decl followed by definition. */
1467 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1468 /* Don't warn about friends, let add_friend take care of it. */
1469 && ! (DECL_FRIEND_P (newdecl) || DECL_FRIEND_P (olddecl)))
1471 warning (0, "redundant redeclaration of %qD in same scope", newdecl);
1472 cp_warning_at ("previous declaration of %qD", olddecl);
1476 /* Deal with C++: must preserve virtual function table size. */
1477 if (TREE_CODE (olddecl) == TYPE_DECL)
1479 tree newtype = TREE_TYPE (newdecl);
1480 tree oldtype = TREE_TYPE (olddecl);
1482 if (newtype != error_mark_node && oldtype != error_mark_node
1483 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1484 CLASSTYPE_FRIEND_CLASSES (newtype)
1485 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1487 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1490 /* Copy all the DECL_... slots specified in the new decl
1491 except for any that we copy here from the old type. */
1492 DECL_ATTRIBUTES (newdecl)
1493 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1495 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1497 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
1498 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1499 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1500 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1502 /* If the new declaration is a definition, update the file and
1503 line information on the declaration. */
1504 if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)) == NULL_TREE
1505 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl)) != NULL_TREE)
1507 DECL_SOURCE_LOCATION (olddecl)
1508 = DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (olddecl))
1509 = DECL_SOURCE_LOCATION (newdecl);
1510 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1511 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (olddecl))
1512 = DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (newdecl));
1515 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1517 DECL_INLINE (DECL_TEMPLATE_RESULT (olddecl))
1518 |= DECL_INLINE (DECL_TEMPLATE_RESULT (newdecl));
1519 DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (olddecl))
1520 |= DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (newdecl));
1523 return olddecl;
1526 if (types_match)
1528 /* Automatically handles default parameters. */
1529 tree oldtype = TREE_TYPE (olddecl);
1530 tree newtype;
1532 /* Merge the data types specified in the two decls. */
1533 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1535 /* If merge_types produces a non-typedef type, just use the old type. */
1536 if (TREE_CODE (newdecl) == TYPE_DECL
1537 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1538 newtype = oldtype;
1540 if (TREE_CODE (newdecl) == VAR_DECL)
1542 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1543 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1544 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1545 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1548 /* Do this after calling `merge_types' so that default
1549 parameters don't confuse us. */
1550 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1551 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
1552 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
1554 TREE_TYPE (newdecl) = build_exception_variant (newtype,
1555 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
1556 TREE_TYPE (olddecl) = build_exception_variant (newtype,
1557 TYPE_RAISES_EXCEPTIONS (oldtype));
1559 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
1560 && ! DECL_IS_BUILTIN (olddecl)
1561 && flag_exceptions
1562 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
1563 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
1565 error ("declaration of %qF throws different exceptions",
1566 newdecl);
1567 cp_error_at ("than previous declaration %qF", olddecl);
1570 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1572 /* Lay the type out, unless already done. */
1573 if (! same_type_p (newtype, oldtype)
1574 && TREE_TYPE (newdecl) != error_mark_node
1575 && !(processing_template_decl && uses_template_parms (newdecl)))
1576 layout_type (TREE_TYPE (newdecl));
1578 if ((TREE_CODE (newdecl) == VAR_DECL
1579 || TREE_CODE (newdecl) == PARM_DECL
1580 || TREE_CODE (newdecl) == RESULT_DECL
1581 || TREE_CODE (newdecl) == FIELD_DECL
1582 || TREE_CODE (newdecl) == TYPE_DECL)
1583 && !(processing_template_decl && uses_template_parms (newdecl)))
1584 layout_decl (newdecl, 0);
1586 /* Merge the type qualifiers. */
1587 if (TREE_READONLY (newdecl))
1588 TREE_READONLY (olddecl) = 1;
1589 if (TREE_THIS_VOLATILE (newdecl))
1590 TREE_THIS_VOLATILE (olddecl) = 1;
1591 if (TREE_NOTHROW (newdecl))
1592 TREE_NOTHROW (olddecl) = 1;
1594 /* Merge deprecatedness. */
1595 if (TREE_DEPRECATED (newdecl))
1596 TREE_DEPRECATED (olddecl) = 1;
1598 /* Merge the initialization information. */
1599 if (DECL_INITIAL (newdecl) == NULL_TREE
1600 && DECL_INITIAL (olddecl) != NULL_TREE)
1602 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1603 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1604 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1605 && DECL_LANG_SPECIFIC (newdecl)
1606 && DECL_LANG_SPECIFIC (olddecl))
1608 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1609 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1613 /* Merge the section attribute.
1614 We want to issue an error if the sections conflict but that must be
1615 done later in decl_attributes since we are called before attributes
1616 are assigned. */
1617 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1618 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1620 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1622 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1623 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1624 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1625 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1626 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1627 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1628 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1629 DECL_IS_PURE (newdecl) |= DECL_IS_PURE (olddecl);
1630 /* Keep the old RTL. */
1631 COPY_DECL_RTL (olddecl, newdecl);
1633 else if (TREE_CODE (newdecl) == VAR_DECL
1634 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1636 /* Keep the old RTL. We cannot keep the old RTL if the old
1637 declaration was for an incomplete object and the new
1638 declaration is not since many attributes of the RTL will
1639 change. */
1640 COPY_DECL_RTL (olddecl, newdecl);
1643 /* If cannot merge, then use the new type and qualifiers,
1644 and don't preserve the old rtl. */
1645 else
1647 /* Clean out any memory we had of the old declaration. */
1648 tree oldstatic = value_member (olddecl, static_aggregates);
1649 if (oldstatic)
1650 TREE_VALUE (oldstatic) = error_mark_node;
1652 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1653 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1654 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1655 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1658 /* Merge the storage class information. */
1659 merge_weak (newdecl, olddecl);
1661 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
1662 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1663 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1664 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1665 if (! DECL_EXTERNAL (olddecl))
1666 DECL_EXTERNAL (newdecl) = 0;
1668 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1670 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1671 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1672 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1673 DECL_TEMPLATE_INSTANTIATED (newdecl)
1674 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1675 /* If the OLDDECL is an implicit instantiation, then the NEWDECL
1676 must be too. But, it may not yet be marked as such if the
1677 caller has created NEWDECL, but has not yet figured out that
1678 it is a redeclaration. */
1679 if (DECL_IMPLICIT_INSTANTIATION (olddecl)
1680 && !DECL_USE_TEMPLATE (newdecl))
1681 SET_DECL_IMPLICIT_INSTANTIATION (newdecl);
1682 /* Don't really know how much of the language-specific
1683 values we should copy from old to new. */
1684 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1685 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
1686 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
1687 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1688 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1689 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1690 DECL_INITIALIZED_IN_CLASS_P (newdecl)
1691 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1692 olddecl_friend = DECL_FRIEND_P (olddecl);
1694 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1695 if (TREE_CODE (newdecl) == FUNCTION_DECL
1696 || DECL_FUNCTION_TEMPLATE_P (newdecl))
1698 DECL_BEFRIENDING_CLASSES (newdecl)
1699 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1700 DECL_BEFRIENDING_CLASSES (olddecl));
1701 /* DECL_THUNKS is only valid for virtual functions,
1702 otherwise it is a DECL_FRIEND_CONTEXT. */
1703 if (DECL_VIRTUAL_P (newdecl))
1704 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
1708 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1710 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1711 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
1713 /* If newdecl is not a specialization, then it is not a
1714 template-related function at all. And that means that we
1715 should have exited above, returning 0. */
1716 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
1718 if (TREE_USED (olddecl))
1719 /* From [temp.expl.spec]:
1721 If a template, a member template or the member of a class
1722 template is explicitly specialized then that
1723 specialization shall be declared before the first use of
1724 that specialization that would cause an implicit
1725 instantiation to take place, in every translation unit in
1726 which such a use occurs. */
1727 error ("explicit specialization of %qD after first use",
1728 olddecl);
1730 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
1732 /* [temp.expl.spec/14] We don't inline explicit specialization
1733 just because the primary template says so. */
1735 else
1737 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1738 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
1740 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
1742 /* If either decl says `inline', this fn is inline, unless
1743 its definition was passed already. */
1744 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
1745 DECL_INLINE (olddecl) = 1;
1746 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
1748 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1749 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1752 /* Preserve abstractness on cloned [cd]tors. */
1753 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1755 if (! types_match)
1757 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1758 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
1759 COPY_DECL_RTL (newdecl, olddecl);
1761 if (! types_match || new_defines_function)
1763 /* These need to be copied so that the names are available.
1764 Note that if the types do match, we'll preserve inline
1765 info and other bits, but if not, we won't. */
1766 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1767 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
1769 if (new_defines_function)
1770 /* If defining a function declared with other language
1771 linkage, use the previously declared language linkage. */
1772 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1773 else if (types_match)
1775 /* If redeclaring a builtin function, and not a definition,
1776 it stays built in. */
1777 if (DECL_BUILT_IN (olddecl))
1779 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
1780 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
1781 /* If we're keeping the built-in definition, keep the rtl,
1782 regardless of declaration matches. */
1783 COPY_DECL_RTL (olddecl, newdecl);
1786 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1787 /* Don't clear out the arguments if we're redefining a function. */
1788 if (DECL_ARGUMENTS (olddecl))
1789 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1792 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1793 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
1795 /* Now preserve various other info from the definition. */
1796 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
1797 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
1798 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
1799 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
1801 /* Warn about conflicting visibility specifications. */
1802 if (DECL_VISIBILITY_SPECIFIED (olddecl)
1803 && DECL_VISIBILITY_SPECIFIED (newdecl)
1804 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
1806 warning (OPT_Wattributes, "%J%qD: visibility attribute ignored "
1807 "because it", newdecl, newdecl);
1808 warning (OPT_Wattributes, "%Jconflicts with previous "
1809 "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 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3225 SET_DECL_LANGUAGE (fn, lang_c);
3226 /* Runtime library routines are, by definition, available in an
3227 external shared object. */
3228 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3229 DECL_VISIBILITY_SPECIFIED (fn) = 1;
3230 return fn;
3233 /* Returns the _DECL for a library function with C linkage.
3234 We assume that such functions never throw; if this is incorrect,
3235 callers should unset TREE_NOTHROW. */
3237 tree
3238 build_library_fn (tree name, tree type)
3240 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3241 TREE_NOTHROW (fn) = 1;
3242 return fn;
3245 /* Returns the _DECL for a library function with C++ linkage. */
3247 static tree
3248 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3250 tree fn = build_library_fn_1 (name, operator_code, type);
3251 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3252 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3253 SET_DECL_LANGUAGE (fn, lang_cplusplus);
3254 return fn;
3257 /* Like build_library_fn, but takes a C string instead of an
3258 IDENTIFIER_NODE. */
3260 tree
3261 build_library_fn_ptr (const char* name, tree type)
3263 return build_library_fn (get_identifier (name), type);
3266 /* Like build_cp_library_fn, but takes a C string instead of an
3267 IDENTIFIER_NODE. */
3269 tree
3270 build_cp_library_fn_ptr (const char* name, tree type)
3272 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3275 /* Like build_library_fn, but also pushes the function so that we will
3276 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
3278 tree
3279 push_library_fn (tree name, tree type)
3281 tree fn = build_library_fn (name, type);
3282 pushdecl_top_level (fn);
3283 return fn;
3286 /* Like build_cp_library_fn, but also pushes the function so that it
3287 will be found by normal lookup. */
3289 static tree
3290 push_cp_library_fn (enum tree_code operator_code, tree type)
3292 tree fn = build_cp_library_fn (ansi_opname (operator_code),
3293 operator_code,
3294 type);
3295 pushdecl (fn);
3296 return fn;
3299 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3300 a FUNCTION_TYPE. */
3302 tree
3303 push_void_library_fn (tree name, tree parmtypes)
3305 tree type = build_function_type (void_type_node, parmtypes);
3306 return push_library_fn (name, type);
3309 /* Like push_library_fn, but also note that this function throws
3310 and does not return. Used for __throw_foo and the like. */
3312 tree
3313 push_throw_library_fn (tree name, tree type)
3315 tree fn = push_library_fn (name, type);
3316 TREE_THIS_VOLATILE (fn) = 1;
3317 TREE_NOTHROW (fn) = 0;
3318 return fn;
3321 /* When we call finish_struct for an anonymous union, we create
3322 default copy constructors and such. But, an anonymous union
3323 shouldn't have such things; this function undoes the damage to the
3324 anonymous union type T.
3326 (The reason that we create the synthesized methods is that we don't
3327 distinguish `union { int i; }' from `typedef union { int i; } U'.
3328 The first is an anonymous union; the second is just an ordinary
3329 union type.) */
3331 void
3332 fixup_anonymous_aggr (tree t)
3334 tree *q;
3336 /* Wipe out memory of synthesized methods. */
3337 TYPE_HAS_CONSTRUCTOR (t) = 0;
3338 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3339 TYPE_HAS_INIT_REF (t) = 0;
3340 TYPE_HAS_CONST_INIT_REF (t) = 0;
3341 TYPE_HAS_ASSIGN_REF (t) = 0;
3342 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3344 /* Splice the implicitly generated functions out of the TYPE_METHODS
3345 list. */
3346 q = &TYPE_METHODS (t);
3347 while (*q)
3349 if (DECL_ARTIFICIAL (*q))
3350 *q = TREE_CHAIN (*q);
3351 else
3352 q = &TREE_CHAIN (*q);
3355 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
3356 if (TYPE_METHODS (t))
3357 error ("%Jan anonymous union cannot have function members",
3358 TYPE_MAIN_DECL (t));
3360 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3361 assignment operators (because they cannot have these methods themselves).
3362 For anonymous unions this is already checked because they are not allowed
3363 in any union, otherwise we have to check it. */
3364 if (TREE_CODE (t) != UNION_TYPE)
3366 tree field, type;
3368 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3369 if (TREE_CODE (field) == FIELD_DECL)
3371 type = TREE_TYPE (field);
3372 if (CLASS_TYPE_P (type))
3374 if (TYPE_NEEDS_CONSTRUCTING (type))
3375 cp_error_at ("member %q#D with constructor not allowed "
3376 "in anonymous aggregate",
3377 field);
3378 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3379 cp_error_at ("member %q#D with destructor not allowed "
3380 "in anonymous aggregate",
3381 field);
3382 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3383 cp_error_at ("member %q#D with copy assignment operator "
3384 "not allowed in anonymous aggregate",
3385 field);
3391 /* Make sure that a declaration with no declarator is well-formed, i.e.
3392 just declares a tagged type or anonymous union.
3394 Returns the type declared; or NULL_TREE if none. */
3396 tree
3397 check_tag_decl (cp_decl_specifier_seq *declspecs)
3399 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3400 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3401 /* If a class, struct, or enum type is declared by the DECLSPECS
3402 (i.e, if a class-specifier, enum-specifier, or non-typename
3403 elaborated-type-specifier appears in the DECLSPECS),
3404 DECLARED_TYPE is set to the corresponding type. */
3405 tree declared_type = NULL_TREE;
3406 bool error_p = false;
3408 if (declspecs->multiple_types_p)
3409 error ("multiple types in one declaration");
3410 else if (declspecs->redefined_builtin_type)
3412 if (!in_system_header)
3413 pedwarn ("redeclaration of C++ built-in type %qT",
3414 declspecs->redefined_builtin_type);
3415 return NULL_TREE;
3418 if (declspecs->type
3419 && TYPE_P (declspecs->type)
3420 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3421 && IS_AGGR_TYPE (declspecs->type))
3422 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3423 declared_type = declspecs->type;
3424 else if (declspecs->type == error_mark_node)
3425 error_p = true;
3426 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3427 pedwarn ("declaration does not declare anything");
3428 /* Check for an anonymous union. */
3429 else if (declared_type && IS_AGGR_TYPE_CODE (TREE_CODE (declared_type))
3430 && TYPE_ANONYMOUS_P (declared_type))
3432 /* 7/3 In a simple-declaration, the optional init-declarator-list
3433 can be omitted only when declaring a class (clause 9) or
3434 enumeration (7.2), that is, when the decl-specifier-seq contains
3435 either a class-specifier, an elaborated-type-specifier with
3436 a class-key (9.1), or an enum-specifier. In these cases and
3437 whenever a class-specifier or enum-specifier is present in the
3438 decl-specifier-seq, the identifiers in these specifiers are among
3439 the names being declared by the declaration (as class-name,
3440 enum-names, or enumerators, depending on the syntax). In such
3441 cases, and except for the declaration of an unnamed bit-field (9.6),
3442 the decl-specifier-seq shall introduce one or more names into the
3443 program, or shall redeclare a name introduced by a previous
3444 declaration. [Example:
3445 enum { }; // ill-formed
3446 typedef class { }; // ill-formed
3447 --end example] */
3448 if (saw_typedef)
3450 error ("missing type-name in typedef-declaration");
3451 return NULL_TREE;
3453 /* Anonymous unions are objects, so they can have specifiers. */;
3454 SET_ANON_AGGR_TYPE_P (declared_type);
3456 if (TREE_CODE (declared_type) != UNION_TYPE && pedantic
3457 && !in_system_header)
3458 pedwarn ("ISO C++ prohibits anonymous structs");
3461 else
3463 if (declspecs->specs[(int)ds_inline]
3464 || declspecs->specs[(int)ds_virtual])
3465 error ("%qs can only be specified for functions",
3466 declspecs->specs[(int)ds_inline]
3467 ? "inline" : "virtual");
3468 else if (saw_friend
3469 && (!current_class_type
3470 || current_scope () != current_class_type))
3471 error ("%<friend%> can only be specified inside a class");
3472 else if (declspecs->specs[(int)ds_explicit])
3473 error ("%<explicit%> can only be specified for constructors");
3474 else if (declspecs->storage_class)
3475 error ("a storage class can only be specified for objects "
3476 "and functions");
3477 else if (declspecs->specs[(int)ds_const]
3478 || declspecs->specs[(int)ds_volatile]
3479 || declspecs->specs[(int)ds_restrict]
3480 || declspecs->specs[(int)ds_thread])
3481 error ("qualifiers can only be specified for objects "
3482 "and functions");
3485 return declared_type;
3488 /* Called when a declaration is seen that contains no names to declare.
3489 If its type is a reference to a structure, union or enum inherited
3490 from a containing scope, shadow that tag name for the current scope
3491 with a forward reference.
3492 If its type defines a new named structure or union
3493 or defines an enum, it is valid but we need not do anything here.
3494 Otherwise, it is an error.
3496 C++: may have to grok the declspecs to learn about static,
3497 complain for anonymous unions.
3499 Returns the TYPE declared -- or NULL_TREE if none. */
3501 tree
3502 shadow_tag (cp_decl_specifier_seq *declspecs)
3504 tree t = check_tag_decl (declspecs);
3506 if (!t)
3507 return NULL_TREE;
3509 if (declspecs->attributes)
3511 cp_warning_at ("attribute ignored in declaration of %q#T", t);
3512 cp_warning_at ("attribute for %q#T must follow the %qs keyword",
3514 class_key_or_enum_as_string (t));
3518 maybe_process_partial_specialization (t);
3520 /* This is where the variables in an anonymous union are
3521 declared. An anonymous union declaration looks like:
3522 union { ... } ;
3523 because there is no declarator after the union, the parser
3524 sends that declaration here. */
3525 if (ANON_AGGR_TYPE_P (t))
3527 fixup_anonymous_aggr (t);
3529 if (TYPE_FIELDS (t))
3531 tree decl = grokdeclarator (/*declarator=*/NULL,
3532 declspecs, NORMAL, 0, NULL);
3533 finish_anon_union (decl);
3537 return t;
3540 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3542 tree
3543 groktypename (cp_decl_specifier_seq *type_specifiers,
3544 const cp_declarator *declarator)
3546 tree attrs;
3547 tree type;
3548 attrs = type_specifiers->attributes;
3549 type_specifiers->attributes = NULL_TREE;
3550 type = grokdeclarator (declarator, type_specifiers, TYPENAME, 0, &attrs);
3551 if (attrs)
3552 cplus_decl_attributes (&type, attrs, 0);
3553 return type;
3556 /* Decode a declarator in an ordinary declaration or data definition.
3557 This is called as soon as the type information and variable name
3558 have been parsed, before parsing the initializer if any.
3559 Here we create the ..._DECL node, fill in its type,
3560 and put it on the list of decls for the current context.
3561 The ..._DECL node is returned as the value.
3563 Exception: for arrays where the length is not specified,
3564 the type is left null, to be filled in by `cp_finish_decl'.
3566 Function definitions do not come here; they go to start_function
3567 instead. However, external and forward declarations of functions
3568 do go through here. Structure field declarations are done by
3569 grokfield and not through here. */
3571 tree
3572 start_decl (const cp_declarator *declarator,
3573 cp_decl_specifier_seq *declspecs,
3574 int initialized,
3575 tree attributes,
3576 tree prefix_attributes,
3577 tree *pushed_scope_p)
3579 tree decl;
3580 tree type, tem;
3581 tree context;
3583 *pushed_scope_p = NULL_TREE;
3585 /* This should only be done once on the top most decl. */
3586 if (have_extern_spec)
3588 declspecs->storage_class = sc_extern;
3589 have_extern_spec = false;
3592 /* An object declared as __attribute__((deprecated)) suppresses
3593 warnings of uses of other deprecated items. */
3594 if (lookup_attribute ("deprecated", attributes))
3595 deprecated_state = DEPRECATED_SUPPRESS;
3597 attributes = chainon (attributes, prefix_attributes);
3599 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
3600 &attributes);
3602 deprecated_state = DEPRECATED_NORMAL;
3604 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
3605 return error_mark_node;
3607 type = TREE_TYPE (decl);
3609 if (type == error_mark_node)
3610 return error_mark_node;
3612 context = DECL_CONTEXT (decl);
3614 if (context)
3616 *pushed_scope_p = push_scope (context);
3618 /* We are only interested in class contexts, later. */
3619 if (TREE_CODE (context) == NAMESPACE_DECL)
3620 context = NULL_TREE;
3623 if (initialized)
3624 /* Is it valid for this decl to have an initializer at all?
3625 If not, set INITIALIZED to zero, which will indirectly
3626 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3627 switch (TREE_CODE (decl))
3629 case TYPE_DECL:
3630 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
3631 initialized = 0;
3632 break;
3634 case FUNCTION_DECL:
3635 error ("function %q#D is initialized like a variable", decl);
3636 initialized = 0;
3637 break;
3639 default:
3640 break;
3643 if (initialized)
3645 if (! toplevel_bindings_p ()
3646 && DECL_EXTERNAL (decl))
3647 warning (0, "declaration of %q#D has %<extern%> and is initialized",
3648 decl);
3649 DECL_EXTERNAL (decl) = 0;
3650 if (toplevel_bindings_p ())
3651 TREE_STATIC (decl) = 1;
3653 /* Tell `pushdecl' this is an initialized decl
3654 even though we don't yet have the initializer expression.
3655 Also tell `cp_finish_decl' it may store the real initializer. */
3656 DECL_INITIAL (decl) = error_mark_node;
3659 /* Set attributes here so if duplicate decl, will have proper attributes. */
3660 cplus_decl_attributes (&decl, attributes, 0);
3662 /* If #pragma weak was used, mark the decl weak now. */
3663 maybe_apply_pragma_weak (decl);
3665 if (TREE_CODE (decl) == FUNCTION_DECL
3666 && DECL_DECLARED_INLINE_P (decl)
3667 && DECL_UNINLINABLE (decl)
3668 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3669 warning (0, "%Jinline function %qD given attribute noinline", decl, decl);
3671 if (context && COMPLETE_TYPE_P (complete_type (context)))
3673 if (TREE_CODE (decl) == VAR_DECL)
3675 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
3676 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
3677 error ("%q#D is not a static member of %q#T", decl, context);
3678 else
3680 if (DECL_CONTEXT (field) != context)
3682 if (!same_type_p (DECL_CONTEXT (field), context))
3683 pedwarn ("ISO C++ does not permit %<%T::%D%> "
3684 "to be defined as %<%T::%D%>",
3685 DECL_CONTEXT (field), DECL_NAME (decl),
3686 context, DECL_NAME (decl));
3687 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
3689 if (processing_specialization
3690 && template_class_depth (context) == 0
3691 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
3692 error ("template header not allowed in member definition "
3693 "of explicitly specialized class");
3694 /* Static data member are tricky; an in-class initialization
3695 still doesn't provide a definition, so the in-class
3696 declaration will have DECL_EXTERNAL set, but will have an
3697 initialization. Thus, duplicate_decls won't warn
3698 about this situation, and so we check here. */
3699 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
3700 error ("duplicate initialization of %qD", decl);
3701 if (duplicate_decls (decl, field))
3702 decl = field;
3705 else
3707 tree field = check_classfn (context, decl,
3708 (processing_template_decl
3709 > template_class_depth (context))
3710 ? current_template_parms
3711 : NULL_TREE);
3712 if (field && duplicate_decls (decl, field))
3713 decl = field;
3716 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
3717 DECL_IN_AGGR_P (decl) = 0;
3718 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
3719 || CLASSTYPE_TEMPLATE_INSTANTIATION (context))
3721 /* Do not mark DECL as an explicit specialization if it was
3722 not already marked as an instantiation; a declaration
3723 should never be marked as a specialization unless we know
3724 what template is being specialized. */
3725 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
3726 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
3727 /* [temp.expl.spec] An explicit specialization of a static data
3728 member of a template is a definition if the declaration
3729 includes an initializer; otherwise, it is a declaration.
3731 We check for processing_specialization so this only applies
3732 to the new specialization syntax. */
3733 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
3734 DECL_EXTERNAL (decl) = 1;
3737 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
3738 pedwarn ("declaration of %q#D outside of class is not definition",
3739 decl);
3742 /* Enter this declaration into the symbol table. */
3743 tem = maybe_push_decl (decl);
3745 if (processing_template_decl)
3746 tem = push_template_decl (tem);
3747 if (tem == error_mark_node)
3748 return error_mark_node;
3750 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
3751 /* Tell the back-end to use or not use .common as appropriate. If we say
3752 -fconserve-space, we want this to save .data space, at the expense of
3753 wrong semantics. If we say -fno-conserve-space, we want this to
3754 produce errors about redefs; to do this we force variables into the
3755 data segment. */
3756 DECL_COMMON (tem) = ((TREE_CODE (tem) != VAR_DECL
3757 || !DECL_THREAD_LOCAL (tem))
3758 && (flag_conserve_space || ! TREE_PUBLIC (tem)));
3759 #endif
3761 if (! processing_template_decl)
3762 start_decl_1 (tem);
3764 return tem;
3767 void
3768 start_decl_1 (tree decl)
3770 tree type = TREE_TYPE (decl);
3771 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
3773 if (type == error_mark_node)
3774 return;
3776 if (initialized)
3777 /* Is it valid for this decl to have an initializer at all?
3778 If not, set INITIALIZED to zero, which will indirectly
3779 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3781 /* Don't allow initializations for incomplete types except for
3782 arrays which might be completed by the initialization. */
3783 if (COMPLETE_TYPE_P (complete_type (type)))
3784 ; /* A complete type is ok. */
3785 else if (TREE_CODE (type) != ARRAY_TYPE)
3787 error ("variable %q#D has initializer but incomplete type", decl);
3788 initialized = 0;
3789 type = TREE_TYPE (decl) = error_mark_node;
3791 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
3793 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
3794 error ("elements of array %q#D have incomplete type", decl);
3795 /* else we already gave an error in start_decl. */
3796 initialized = 0;
3800 if (!initialized
3801 && TREE_CODE (decl) != TYPE_DECL
3802 && TREE_CODE (decl) != TEMPLATE_DECL
3803 && type != error_mark_node
3804 && IS_AGGR_TYPE (type)
3805 && ! DECL_EXTERNAL (decl))
3807 if ((! processing_template_decl || ! uses_template_parms (type))
3808 && !COMPLETE_TYPE_P (complete_type (type)))
3810 error ("aggregate %q#D has incomplete type and cannot be defined",
3811 decl);
3812 /* Change the type so that assemble_variable will give
3813 DECL an rtl we can live with: (mem (const_int 0)). */
3814 type = TREE_TYPE (decl) = error_mark_node;
3816 else
3818 /* If any base type in the hierarchy of TYPE needs a constructor,
3819 then we set initialized to 1. This way any nodes which are
3820 created for the purposes of initializing this aggregate
3821 will live as long as it does. This is necessary for global
3822 aggregates which do not have their initializers processed until
3823 the end of the file. */
3824 initialized = TYPE_NEEDS_CONSTRUCTING (type);
3828 if (! initialized)
3829 DECL_INITIAL (decl) = NULL_TREE;
3831 /* Create a new scope to hold this declaration if necessary.
3832 Whether or not a new scope is necessary cannot be determined
3833 until after the type has been completed; if the type is a
3834 specialization of a class template it is not until after
3835 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
3836 will be set correctly. */
3837 maybe_push_cleanup_level (type);
3840 /* Handle initialization of references. DECL, TYPE, and INIT have the
3841 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
3842 but will be set to a new CLEANUP_STMT if a temporary is created
3843 that must be destroyed subsequently.
3845 Returns an initializer expression to use to initialize DECL, or
3846 NULL if the initialization can be performed statically.
3848 Quotes on semantics can be found in ARM 8.4.3. */
3850 static tree
3851 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
3853 tree tmp;
3855 if (init == NULL_TREE)
3857 if ((DECL_LANG_SPECIFIC (decl) == 0
3858 || DECL_IN_AGGR_P (decl) == 0)
3859 && ! DECL_THIS_EXTERN (decl))
3860 error ("%qD declared as reference but not initialized", decl);
3861 return NULL_TREE;
3864 if (TREE_CODE (init) == CONSTRUCTOR)
3866 error ("ISO C++ forbids use of initializer list to "
3867 "initialize reference %qD", decl);
3868 return NULL_TREE;
3871 if (TREE_CODE (init) == TREE_LIST)
3872 init = build_x_compound_expr_from_list (init, "initializer");
3874 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
3875 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
3876 /* Note: default conversion is only called in very special cases. */
3877 init = decay_conversion (init);
3879 /* Convert INIT to the reference type TYPE. This may involve the
3880 creation of a temporary, whose lifetime must be the same as that
3881 of the reference. If so, a DECL_EXPR for the temporary will be
3882 added just after the DECL_EXPR for DECL. That's why we don't set
3883 DECL_INITIAL for local references (instead assigning to them
3884 explicitly); we need to allow the temporary to be initialized
3885 first. */
3886 tmp = initialize_reference (type, init, decl, cleanup);
3888 if (tmp == error_mark_node)
3889 return NULL_TREE;
3890 else if (tmp == NULL_TREE)
3892 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
3893 return NULL_TREE;
3896 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
3897 return tmp;
3899 DECL_INITIAL (decl) = tmp;
3901 return NULL_TREE;
3904 /* When parsing `int a[] = {1, 2};' we don't know the size of the
3905 array until we finish parsing the initializer. If that's the
3906 situation we're in, update DECL accordingly. */
3908 static void
3909 maybe_deduce_size_from_array_init (tree decl, tree init)
3911 tree type = TREE_TYPE (decl);
3913 if (TREE_CODE (type) == ARRAY_TYPE
3914 && TYPE_DOMAIN (type) == NULL_TREE
3915 && TREE_CODE (decl) != TYPE_DECL)
3917 /* do_default is really a C-ism to deal with tentative definitions.
3918 But let's leave it here to ease the eventual merge. */
3919 int do_default = !DECL_EXTERNAL (decl);
3920 tree initializer = init ? init : DECL_INITIAL (decl);
3921 int failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
3922 do_default);
3924 if (failure == 1)
3925 error ("initializer fails to determine size of %qD", decl);
3927 if (failure == 2)
3929 if (do_default)
3930 error ("array size missing in %qD", decl);
3931 /* If a `static' var's size isn't known, make it extern as
3932 well as static, so it does not get allocated. If it's not
3933 `static', then don't mark it extern; finish_incomplete_decl
3934 will give it a default size and it will get allocated. */
3935 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
3936 DECL_EXTERNAL (decl) = 1;
3939 if (failure == 3)
3940 error ("zero-size array %qD", decl);
3942 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
3944 layout_decl (decl, 0);
3948 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
3949 any appropriate error messages regarding the layout. */
3951 static void
3952 layout_var_decl (tree decl)
3954 tree type = TREE_TYPE (decl);
3956 /* If we haven't already layed out this declaration, do so now.
3957 Note that we must not call complete type for an external object
3958 because it's type might involve templates that we are not
3959 supposed to instantiate yet. (And it's perfectly valid to say
3960 `extern X x' for some incomplete type `X'.) */
3961 if (!DECL_EXTERNAL (decl))
3962 complete_type (type);
3963 if (!DECL_SIZE (decl)
3964 && TREE_TYPE (decl) != error_mark_node
3965 && (COMPLETE_TYPE_P (type)
3966 || (TREE_CODE (type) == ARRAY_TYPE
3967 && !TYPE_DOMAIN (type)
3968 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
3969 layout_decl (decl, 0);
3971 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
3973 /* An automatic variable with an incomplete type: that is an error.
3974 Don't talk about array types here, since we took care of that
3975 message in grokdeclarator. */
3976 error ("storage size of %qD isn't known", decl);
3977 TREE_TYPE (decl) = error_mark_node;
3979 #if 0
3980 /* Keep this code around in case we later want to control debug info
3981 based on whether a type is "used". (jason 1999-11-11) */
3983 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
3984 /* Let debugger know it should output info for this type. */
3985 note_debug_info_needed (ttype);
3987 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
3988 note_debug_info_needed (DECL_CONTEXT (decl));
3989 #endif
3991 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
3992 && DECL_SIZE (decl) != NULL_TREE
3993 && ! TREE_CONSTANT (DECL_SIZE (decl)))
3995 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
3996 constant_expression_warning (DECL_SIZE (decl));
3997 else
3998 error ("storage size of %qD isn't constant", decl);
4001 if (TREE_STATIC (decl)
4002 && !DECL_ARTIFICIAL (decl)
4003 && current_function_decl
4004 && DECL_CONTEXT (decl) == current_function_decl)
4005 push_local_name (decl);
4008 /* If a local static variable is declared in an inline function, or if
4009 we have a weak definition, we must endeavor to create only one
4010 instance of the variable at link-time. */
4012 static void
4013 maybe_commonize_var (tree decl)
4015 /* Static data in a function with comdat linkage also has comdat
4016 linkage. */
4017 if (TREE_STATIC (decl)
4018 /* Don't mess with __FUNCTION__. */
4019 && ! DECL_ARTIFICIAL (decl)
4020 && DECL_FUNCTION_SCOPE_P (decl)
4021 /* Unfortunately, import_export_decl has not always been called
4022 before the function is processed, so we cannot simply check
4023 DECL_COMDAT. */
4024 && (DECL_COMDAT (DECL_CONTEXT (decl))
4025 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4026 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4027 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
4029 if (flag_weak)
4031 /* With weak symbols, we simply make the variable COMDAT;
4032 that will cause copies in multiple translations units to
4033 be merged. */
4034 comdat_linkage (decl);
4036 else
4038 if (DECL_INITIAL (decl) == NULL_TREE
4039 || DECL_INITIAL (decl) == error_mark_node)
4041 /* Without weak symbols, we can use COMMON to merge
4042 uninitialized variables. */
4043 TREE_PUBLIC (decl) = 1;
4044 DECL_COMMON (decl) = 1;
4046 else
4048 /* While for initialized variables, we must use internal
4049 linkage -- which means that multiple copies will not
4050 be merged. */
4051 TREE_PUBLIC (decl) = 0;
4052 DECL_COMMON (decl) = 0;
4053 cp_warning_at ("sorry: semantics of inline function static "
4054 "data %q#D are wrong (you'll wind up "
4055 "with multiple copies)", decl);
4056 warning (0, "%J you can work around this by removing "
4057 "the initializer",
4058 decl);
4062 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4063 /* Set it up again; we might have set DECL_INITIAL since the last
4064 time. */
4065 comdat_linkage (decl);
4068 /* Issue an error message if DECL is an uninitialized const variable. */
4070 static void
4071 check_for_uninitialized_const_var (tree decl)
4073 tree type = TREE_TYPE (decl);
4075 /* ``Unless explicitly declared extern, a const object does not have
4076 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4077 7.1.6 */
4078 if (TREE_CODE (decl) == VAR_DECL
4079 && TREE_CODE (type) != REFERENCE_TYPE
4080 && CP_TYPE_CONST_P (type)
4081 && !TYPE_NEEDS_CONSTRUCTING (type)
4082 && !DECL_INITIAL (decl))
4083 error ("uninitialized const %qD", decl);
4086 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4087 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4088 initialized. If there are no more such fields, the return value
4089 will be NULL. */
4091 static tree
4092 next_initializable_field (tree field)
4094 while (field
4095 && (TREE_CODE (field) != FIELD_DECL
4096 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4097 || DECL_ARTIFICIAL (field)))
4098 field = TREE_CHAIN (field);
4100 return field;
4103 /* Subroutine of reshape_init. Reshape the constructor for an array. INITP
4104 is the pointer to the old constructor list (to the CONSTRUCTOR_ELTS of
4105 the CONSTRUCTOR we are processing), while NEW_INIT is the CONSTRUCTOR we
4106 are building.
4107 ELT_TYPE is the element type of the array. MAX_INDEX is an INTEGER_CST
4108 representing the size of the array minus one (the maximum index), or
4109 NULL_TREE if the array was declared without specifying the size. */
4111 static bool
4112 reshape_init_array (tree elt_type, tree max_index,
4113 tree *initp, tree new_init)
4115 bool sized_array_p = (max_index != NULL_TREE);
4116 unsigned HOST_WIDE_INT max_index_cst = 0;
4117 unsigned HOST_WIDE_INT index;
4119 if (sized_array_p)
4121 if (host_integerp (max_index, 1))
4122 max_index_cst = tree_low_cst (max_index, 1);
4123 /* sizetype is sign extended, not zero extended. */
4124 else
4125 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4129 /* Loop until there are no more initializers. */
4130 for (index = 0;
4131 *initp && (!sized_array_p || index <= max_index_cst);
4132 ++index)
4134 tree element_init;
4135 tree designated_index;
4137 element_init = reshape_init (elt_type, initp);
4138 if (element_init == error_mark_node)
4139 return false;
4140 TREE_CHAIN (element_init) = CONSTRUCTOR_ELTS (new_init);
4141 CONSTRUCTOR_ELTS (new_init) = element_init;
4142 designated_index = TREE_PURPOSE (element_init);
4143 if (designated_index)
4145 /* Handle array designated initializers (GNU extension). */
4146 if (TREE_CODE (designated_index) == IDENTIFIER_NODE)
4148 error ("name %qD used in a GNU-style designated "
4149 "initializer for an array", designated_index);
4150 TREE_PURPOSE (element_init) = NULL_TREE;
4152 else
4153 gcc_unreachable ();
4157 return true;
4160 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
4161 brace-enclosed aggregate initializer.
4163 *INITP is one of a list of initializers describing a brace-enclosed
4164 initializer for an entity of the indicated aggregate TYPE. It may
4165 not presently match the shape of the TYPE; for example:
4167 struct S { int a; int b; };
4168 struct S a[] = { 1, 2, 3, 4 };
4170 Here *INITP will point to TREE_LIST of four elements, rather than a
4171 list of two elements, each itself a list of two elements. This
4172 routine transforms INIT from the former form into the latter. The
4173 revised initializer is returned. */
4175 static tree
4176 reshape_init (tree type, tree *initp)
4178 tree inits;
4179 tree old_init;
4180 tree old_init_value;
4181 tree new_init;
4182 bool brace_enclosed_p;
4183 bool string_init_p;
4185 old_init = *initp;
4186 old_init_value = (TREE_CODE (*initp) == TREE_LIST
4187 ? TREE_VALUE (*initp) : old_init);
4189 gcc_assert (old_init_value);
4191 /* If the initializer is brace-enclosed, pull initializers from the
4192 enclosed elements. Advance past the brace-enclosed initializer
4193 now. */
4194 if (TREE_CODE (old_init_value) == CONSTRUCTOR
4195 && BRACE_ENCLOSED_INITIALIZER_P (old_init_value))
4197 *initp = TREE_CHAIN (old_init);
4198 TREE_CHAIN (old_init) = NULL_TREE;
4199 inits = CONSTRUCTOR_ELTS (old_init_value);
4200 initp = &inits;
4201 brace_enclosed_p = true;
4203 else
4205 inits = NULL_TREE;
4206 brace_enclosed_p = false;
4209 /* A non-aggregate type is always initialized with a single
4210 initializer. */
4211 if (!CP_AGGREGATE_TYPE_P (type))
4213 *initp = TREE_CHAIN (old_init);
4214 TREE_CHAIN (old_init) = NULL_TREE;
4215 /* It is invalid to initialize a non-aggregate type with a
4216 brace-enclosed initializer. */
4217 if (brace_enclosed_p)
4219 error ("brace-enclosed initializer used to initialize %qT",
4220 type);
4221 if (TREE_CODE (old_init) == TREE_LIST)
4222 TREE_VALUE (old_init) = error_mark_node;
4223 else
4224 old_init = error_mark_node;
4227 return old_init;
4230 /* [dcl.init.aggr]
4232 All implicit type conversions (clause _conv_) are considered when
4233 initializing the aggregate member with an initializer from an
4234 initializer-list. If the initializer can initialize a member,
4235 the member is initialized. Otherwise, if the member is itself a
4236 non-empty subaggregate, brace elision is assumed and the
4237 initializer is considered for the initialization of the first
4238 member of the subaggregate. */
4239 if (!brace_enclosed_p
4240 && can_convert_arg (type, TREE_TYPE (old_init_value), old_init_value))
4242 *initp = TREE_CHAIN (old_init);
4243 TREE_CHAIN (old_init) = NULL_TREE;
4244 return old_init;
4247 string_init_p = false;
4248 if (TREE_CODE (old_init_value) == STRING_CST
4249 && TREE_CODE (type) == ARRAY_TYPE
4250 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4252 /* [dcl.init.string]
4254 A char array (whether plain char, signed char, or unsigned char)
4255 can be initialized by a string-literal (optionally enclosed in
4256 braces); a wchar_t array can be initialized by a wide
4257 string-literal (optionally enclosed in braces). */
4258 new_init = old_init;
4259 /* Move past the initializer. */
4260 *initp = TREE_CHAIN (old_init);
4261 TREE_CHAIN (old_init) = NULL_TREE;
4262 string_init_p = true;
4264 else
4266 /* Build a CONSTRUCTOR to hold the contents of the aggregate. */
4267 new_init = build_constructor (NULL_TREE, NULL_TREE);
4269 if (CLASS_TYPE_P (type))
4271 tree field;
4273 field = next_initializable_field (TYPE_FIELDS (type));
4275 if (!field)
4277 /* [dcl.init.aggr]
4279 An initializer for an aggregate member that is an
4280 empty class shall have the form of an empty
4281 initializer-list {}. */
4282 if (!brace_enclosed_p)
4284 error ("initializer for %qT must be brace-enclosed", type);
4285 return error_mark_node;
4288 else
4290 /* Loop through the initializable fields, gathering
4291 initializers. */
4292 while (*initp)
4294 tree field_init;
4296 /* Handle designated initializers, as an extension. */
4297 if (TREE_PURPOSE (*initp))
4299 if (pedantic)
4300 pedwarn ("ISO C++ does not allow designated initializers");
4301 field = lookup_field_1 (type, TREE_PURPOSE (*initp),
4302 /*want_type=*/false);
4303 if (!field || TREE_CODE (field) != FIELD_DECL)
4304 error ("%qT has no non-static data member named %qD",
4305 type, TREE_PURPOSE (*initp));
4307 if (!field)
4308 break;
4310 field_init = reshape_init (TREE_TYPE (field), initp);
4311 if (field_init == error_mark_node)
4312 return error_mark_node;
4313 TREE_CHAIN (field_init) = CONSTRUCTOR_ELTS (new_init);
4314 CONSTRUCTOR_ELTS (new_init) = field_init;
4315 /* [dcl.init.aggr]
4317 When a union is initialized with a brace-enclosed
4318 initializer, the braces shall only contain an
4319 initializer for the first member of the union. */
4320 if (TREE_CODE (type) == UNION_TYPE)
4321 break;
4322 field = next_initializable_field (TREE_CHAIN (field));
4326 else if (TREE_CODE (type) == ARRAY_TYPE
4327 || TREE_CODE (type) == VECTOR_TYPE)
4329 /* If the bound of the array is known, take no more initializers
4330 than are allowed. */
4331 tree max_index = NULL_TREE;
4332 if (TREE_CODE (type) == ARRAY_TYPE)
4334 if (TYPE_DOMAIN (type))
4335 max_index = array_type_nelts (type);
4337 else
4339 /* For a vector, the representation type is a struct
4340 containing a single member which is an array of the
4341 appropriate size. */
4342 tree rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4343 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4344 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS
4345 (rtype)));
4348 if (!reshape_init_array (TREE_TYPE (type), max_index,
4349 initp, new_init))
4350 return error_mark_node;
4352 else
4353 gcc_unreachable ();
4355 /* The initializers were placed in reverse order in the
4356 CONSTRUCTOR. */
4357 CONSTRUCTOR_ELTS (new_init) = nreverse (CONSTRUCTOR_ELTS (new_init));
4359 if (TREE_CODE (old_init) == TREE_LIST)
4360 new_init = build_tree_list (TREE_PURPOSE (old_init), new_init);
4363 /* If there are more initializers than necessary, issue a
4364 diagnostic. */
4365 if (*initp)
4367 if (brace_enclosed_p)
4368 error ("too many initializers for %qT", type);
4369 else if (warn_missing_braces && !string_init_p)
4370 warning (0, "missing braces around initializer");
4373 return new_init;
4376 /* Verify INIT (the initializer for DECL), and record the
4377 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
4378 grok_reference_init.
4380 If the return value is non-NULL, it is an expression that must be
4381 evaluated dynamically to initialize DECL. */
4383 static tree
4384 check_initializer (tree decl, tree init, int flags, tree *cleanup)
4386 tree type = TREE_TYPE (decl);
4387 tree init_code = NULL;
4389 /* If `start_decl' didn't like having an initialization, ignore it now. */
4390 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
4391 init = NULL_TREE;
4393 /* If an initializer is present, DECL_INITIAL has been
4394 error_mark_node, to indicate that an as-of-yet unevaluated
4395 initialization will occur. From now on, DECL_INITIAL reflects
4396 the static initialization -- if any -- of DECL. */
4397 DECL_INITIAL (decl) = NULL_TREE;
4399 /* Things that are going to be initialized need to have complete
4400 type. */
4401 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
4403 if (type == error_mark_node)
4404 /* We will have already complained. */
4405 init = NULL_TREE;
4406 else if (init && COMPLETE_TYPE_P (type)
4407 && !TREE_CONSTANT (TYPE_SIZE (type)))
4409 error ("variable-sized object %qD may not be initialized", decl);
4410 init = NULL_TREE;
4412 else if (TREE_CODE (type) == ARRAY_TYPE
4413 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4415 error ("elements of array %q#D have incomplete type", decl);
4416 init = NULL_TREE;
4418 else if (TREE_CODE (type) != ARRAY_TYPE && !COMPLETE_TYPE_P (type))
4420 error ("%qD has incomplete type", decl);
4421 TREE_TYPE (decl) = error_mark_node;
4422 init = NULL_TREE;
4425 if (TREE_CODE (decl) == CONST_DECL)
4427 gcc_assert (TREE_CODE (decl) != REFERENCE_TYPE);
4429 DECL_INITIAL (decl) = init;
4431 gcc_assert (init != NULL_TREE);
4432 init = NULL_TREE;
4434 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
4435 init = grok_reference_init (decl, type, init, cleanup);
4436 else if (init)
4438 if (TREE_CODE (init) == CONSTRUCTOR
4439 && BRACE_ENCLOSED_INITIALIZER_P (init))
4441 /* [dcl.init] paragraph 13,
4442 If T is a scalar type, then a declaration of the form
4443 T x = { a };
4444 is equivalent to
4445 T x = a;
4447 reshape_init will complain about the extra braces,
4448 and doesn't do anything useful in the case where TYPE is
4449 scalar, so just don't call it. */
4450 if (CP_AGGREGATE_TYPE_P (type))
4451 init = reshape_init (type, &init);
4453 if ((*targetm.vector_opaque_p) (type))
4455 error ("opaque vector types cannot be initialized");
4456 init = error_mark_node;
4460 /* If DECL has an array type without a specific bound, deduce the
4461 array size from the initializer. */
4462 maybe_deduce_size_from_array_init (decl, init);
4463 type = TREE_TYPE (decl);
4465 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
4467 if (TREE_CODE (type) == ARRAY_TYPE)
4468 goto initialize_aggr;
4469 else if (TREE_CODE (init) == CONSTRUCTOR
4470 && BRACE_ENCLOSED_INITIALIZER_P (init))
4472 if (TYPE_NON_AGGREGATE_CLASS (type))
4474 error ("%qD must be initialized by constructor, "
4475 "not by %<{...}%>",
4476 decl);
4477 init = error_mark_node;
4479 else
4480 goto dont_use_constructor;
4482 else
4484 int saved_stmts_are_full_exprs_p;
4486 initialize_aggr:
4487 saved_stmts_are_full_exprs_p = 0;
4488 if (building_stmt_tree ())
4490 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4491 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4493 init = build_aggr_init (decl, init, flags);
4494 if (building_stmt_tree ())
4495 current_stmt_tree ()->stmts_are_full_exprs_p =
4496 saved_stmts_are_full_exprs_p;
4497 return init;
4500 else
4502 dont_use_constructor:
4503 if (TREE_CODE (init) != TREE_VEC)
4505 init_code = store_init_value (decl, init);
4506 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
4507 && DECL_INITIAL (decl)
4508 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
4509 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
4510 warning (0, "array %qD initialized by parenthesized string literal %qE",
4511 decl, DECL_INITIAL (decl));
4512 init = NULL;
4516 else if (DECL_EXTERNAL (decl))
4518 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
4519 goto initialize_aggr;
4520 else if (IS_AGGR_TYPE (type))
4522 tree core_type = strip_array_types (type);
4524 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
4525 error ("structure %qD with uninitialized const members", decl);
4526 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
4527 error ("structure %qD with uninitialized reference members", decl);
4529 check_for_uninitialized_const_var (decl);
4531 else
4532 check_for_uninitialized_const_var (decl);
4534 if (init && init != error_mark_node)
4535 init_code = build2 (INIT_EXPR, type, decl, init);
4537 return init_code;
4540 /* If DECL is not a local variable, give it RTL. */
4542 static void
4543 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
4545 int toplev = toplevel_bindings_p ();
4546 int defer_p;
4547 const char *filename;
4549 /* Set the DECL_ASSEMBLER_NAME for the object. */
4550 if (asmspec)
4552 /* The `register' keyword, when used together with an
4553 asm-specification, indicates that the variable should be
4554 placed in a particular register. */
4555 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
4557 change_decl_assembler_name (decl, get_identifier (asmspec));
4558 DECL_HARD_REGISTER (decl) = 1;
4560 else
4562 if (TREE_CODE (decl) == FUNCTION_DECL
4563 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
4564 set_builtin_user_assembler_name (decl, asmspec);
4565 set_user_assembler_name (decl, asmspec);
4569 /* Handle non-variables up front. */
4570 if (TREE_CODE (decl) != VAR_DECL)
4572 rest_of_decl_compilation (decl, toplev, at_eof);
4573 return;
4576 /* If we see a class member here, it should be a static data
4577 member. */
4578 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
4580 gcc_assert (TREE_STATIC (decl));
4581 /* An in-class declaration of a static data member should be
4582 external; it is only a declaration, and not a definition. */
4583 if (init == NULL_TREE)
4584 gcc_assert (DECL_EXTERNAL (decl));
4587 /* We don't create any RTL for local variables. */
4588 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
4589 return;
4591 /* We defer emission of local statics until the corresponding
4592 DECL_EXPR is expanded. */
4593 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
4595 /* We try to defer namespace-scope static constants so that they are
4596 not emitted into the object file unnecessarily. */
4597 filename = input_filename;
4598 if (!DECL_VIRTUAL_P (decl)
4599 && TREE_READONLY (decl)
4600 && DECL_INITIAL (decl) != NULL_TREE
4601 && DECL_INITIAL (decl) != error_mark_node
4602 && filename != NULL
4603 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
4604 && toplev
4605 && !TREE_PUBLIC (decl))
4607 /* Fool with the linkage of static consts according to #pragma
4608 interface. */
4609 struct c_fileinfo *finfo = get_fileinfo (lbasename (filename));
4610 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
4612 TREE_PUBLIC (decl) = 1;
4613 DECL_EXTERNAL (decl) = finfo->interface_only;
4616 defer_p = 1;
4618 /* Likewise for template instantiations. */
4619 else if (DECL_LANG_SPECIFIC (decl)
4620 && DECL_IMPLICIT_INSTANTIATION (decl))
4621 defer_p = 1;
4623 /* If we're not deferring, go ahead and assemble the variable. */
4624 if (!defer_p)
4625 rest_of_decl_compilation (decl, toplev, at_eof);
4628 /* Generate code to initialize DECL (a local variable). */
4630 static void
4631 initialize_local_var (tree decl, tree init)
4633 tree type = TREE_TYPE (decl);
4634 tree cleanup;
4636 gcc_assert (TREE_CODE (decl) == VAR_DECL
4637 || TREE_CODE (decl) == RESULT_DECL);
4638 gcc_assert (!TREE_STATIC (decl));
4640 if (DECL_SIZE (decl) == NULL_TREE)
4642 /* If we used it already as memory, it must stay in memory. */
4643 DECL_INITIAL (decl) = NULL_TREE;
4644 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4647 if (DECL_SIZE (decl) && type != error_mark_node)
4649 int already_used;
4651 /* Compute and store the initial value. */
4652 already_used = TREE_USED (decl) || TREE_USED (type);
4654 /* Perform the initialization. */
4655 if (init)
4657 int saved_stmts_are_full_exprs_p;
4659 gcc_assert (building_stmt_tree ());
4660 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4661 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4662 finish_expr_stmt (init);
4663 current_stmt_tree ()->stmts_are_full_exprs_p =
4664 saved_stmts_are_full_exprs_p;
4667 /* Set this to 0 so we can tell whether an aggregate which was
4668 initialized was ever used. Don't do this if it has a
4669 destructor, so we don't complain about the 'resource
4670 allocation is initialization' idiom. Now set
4671 attribute((unused)) on types so decls of that type will be
4672 marked used. (see TREE_USED, above.) */
4673 if (TYPE_NEEDS_CONSTRUCTING (type)
4674 && ! already_used
4675 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
4676 && DECL_NAME (decl))
4677 TREE_USED (decl) = 0;
4678 else if (already_used)
4679 TREE_USED (decl) = 1;
4682 /* Generate a cleanup, if necessary. */
4683 cleanup = cxx_maybe_build_cleanup (decl);
4684 if (DECL_SIZE (decl) && cleanup)
4685 finish_decl_cleanup (decl, cleanup);
4688 /* DECL is a VAR_DECL for a compiler-generated variable with static
4689 storage duration (like a virtual table) whose initializer is a
4690 compile-time constant. Initialize the variable and provide it to
4691 the back end. */
4693 void
4694 initialize_artificial_var (tree decl, tree init)
4696 DECL_INITIAL (decl) = build_constructor (NULL_TREE, init);
4697 DECL_INITIALIZED_P (decl) = 1;
4698 determine_visibility (decl);
4699 layout_var_decl (decl);
4700 maybe_commonize_var (decl);
4701 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
4704 /* Finish processing of a declaration;
4705 install its line number and initial value.
4706 If the length of an array type is not known before,
4707 it must be determined now, from the initial value, or it is an error.
4709 INIT holds the value of an initializer that should be allowed to escape
4710 the normal rules.
4712 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
4713 if the (init) syntax was used. */
4715 void
4716 cp_finish_decl (tree decl, tree init, tree asmspec_tree, int flags)
4718 tree type;
4719 tree cleanup;
4720 const char *asmspec = NULL;
4721 int was_readonly = 0;
4722 bool var_definition_p = false;
4724 if (decl == error_mark_node)
4725 return;
4726 else if (! decl)
4728 if (init)
4729 error ("assignment (not initialization) in declaration");
4730 return;
4733 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
4735 /* Assume no cleanup is required. */
4736 cleanup = NULL_TREE;
4738 /* If a name was specified, get the string. */
4739 if (global_scope_p (current_binding_level))
4740 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4741 if (asmspec_tree)
4742 asmspec = TREE_STRING_POINTER (asmspec_tree);
4744 if (init && TREE_CODE (init) == NAMESPACE_DECL)
4746 error ("cannot initialize %qD to namespace %qD", decl, init);
4747 init = NULL_TREE;
4750 if (current_class_type
4751 && CP_DECL_CONTEXT (decl) == current_class_type
4752 && TYPE_BEING_DEFINED (current_class_type)
4753 && (DECL_INITIAL (decl) || init))
4754 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
4756 type = TREE_TYPE (decl);
4758 if (type == error_mark_node)
4759 goto finish_end;
4761 if (processing_template_decl)
4763 /* Add this declaration to the statement-tree. */
4764 if (at_function_scope_p ())
4765 add_decl_expr (decl);
4767 if (init && DECL_INITIAL (decl))
4768 DECL_INITIAL (decl) = init;
4769 if (TREE_CODE (decl) == VAR_DECL
4770 && !DECL_PRETTY_FUNCTION_P (decl)
4771 && !dependent_type_p (TREE_TYPE (decl)))
4772 maybe_deduce_size_from_array_init (decl, init);
4774 goto finish_end;
4777 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
4778 gcc_assert (TREE_CODE (decl) != PARM_DECL);
4780 /* Take care of TYPE_DECLs up front. */
4781 if (TREE_CODE (decl) == TYPE_DECL)
4783 if (type != error_mark_node
4784 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
4786 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
4787 warning (0, "shadowing previous type declaration of %q#D", decl);
4788 set_identifier_type_value (DECL_NAME (decl), decl);
4791 /* If we have installed this as the canonical typedef for this
4792 type, and that type has not been defined yet, delay emitting
4793 the debug information for it, as we will emit it later. */
4794 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
4795 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
4796 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
4798 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
4799 at_eof);
4800 goto finish_end;
4803 /* A reference will be modified here, as it is initialized. */
4804 if (! DECL_EXTERNAL (decl)
4805 && TREE_READONLY (decl)
4806 && TREE_CODE (type) == REFERENCE_TYPE)
4808 was_readonly = 1;
4809 TREE_READONLY (decl) = 0;
4812 if (TREE_CODE (decl) == VAR_DECL)
4814 /* Only PODs can have thread-local storage. Other types may require
4815 various kinds of non-trivial initialization. */
4816 if (DECL_THREAD_LOCAL (decl) && !pod_type_p (TREE_TYPE (decl)))
4817 error ("%qD cannot be thread-local because it has non-POD type %qT",
4818 decl, TREE_TYPE (decl));
4819 /* Convert the initializer to the type of DECL, if we have not
4820 already initialized DECL. */
4821 if (!DECL_INITIALIZED_P (decl)
4822 /* If !DECL_EXTERNAL then DECL is being defined. In the
4823 case of a static data member initialized inside the
4824 class-specifier, there can be an initializer even if DECL
4825 is *not* defined. */
4826 && (!DECL_EXTERNAL (decl) || init))
4828 init = check_initializer (decl, init, flags, &cleanup);
4829 /* Thread-local storage cannot be dynamically initialized. */
4830 if (DECL_THREAD_LOCAL (decl) && init)
4832 error ("%qD is thread-local and so cannot be dynamically "
4833 "initialized", decl);
4834 init = NULL_TREE;
4836 /* Handle:
4838 [dcl.init]
4840 The memory occupied by any object of static storage
4841 duration is zero-initialized at program startup before
4842 any other initialization takes place.
4844 We cannot create an appropriate initializer until after
4845 the type of DECL is finalized. If DECL_INITIAL is set,
4846 then the DECL is statically initialized, and any
4847 necessary zero-initialization has already been performed. */
4848 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
4849 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
4850 /*nelts=*/NULL_TREE,
4851 /*static_storage_p=*/true);
4852 /* Remember that the initialization for this variable has
4853 taken place. */
4854 DECL_INITIALIZED_P (decl) = 1;
4855 /* This declaration is the definition of this variable,
4856 unless we are initializing a static data member within
4857 the class specifier. */
4858 if (!DECL_EXTERNAL (decl))
4859 var_definition_p = true;
4860 /* The variable is being defined, so determine its
4861 visibility. */
4862 determine_visibility (decl);
4864 /* If the variable has an array type, lay out the type, even if
4865 there is no initializer. It is valid to index through the
4866 array, and we must get TYPE_ALIGN set correctly on the array
4867 type. */
4868 else if (TREE_CODE (type) == ARRAY_TYPE)
4869 layout_type (type);
4872 /* Add this declaration to the statement-tree. This needs to happen
4873 after the call to check_initializer so that the DECL_EXPR for a
4874 reference temp is added before the DECL_EXPR for the reference itself. */
4875 if (at_function_scope_p ())
4876 add_decl_expr (decl);
4878 if (TREE_CODE (decl) == VAR_DECL)
4879 layout_var_decl (decl);
4881 /* Output the assembler code and/or RTL code for variables and functions,
4882 unless the type is an undefined structure or union.
4883 If not, it will get done when the type is completed. */
4884 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
4886 if (TREE_CODE (decl) == VAR_DECL)
4887 maybe_commonize_var (decl);
4889 make_rtl_for_nonlocal_decl (decl, init, asmspec);
4891 /* Check for abstractness of the type. Notice that there is no
4892 need to strip array types here since the check for those types
4893 is already done within create_array_type_for_decl. */
4894 if (TREE_CODE (type) == FUNCTION_TYPE
4895 || TREE_CODE (type) == METHOD_TYPE)
4896 abstract_virtuals_error (decl, TREE_TYPE (type));
4897 else
4898 abstract_virtuals_error (decl, type);
4900 if (TREE_CODE (decl) == FUNCTION_DECL
4901 || TREE_TYPE (decl) == error_mark_node)
4902 /* No initialization required. */
4904 else if (DECL_EXTERNAL (decl)
4905 && ! (DECL_LANG_SPECIFIC (decl)
4906 && DECL_NOT_REALLY_EXTERN (decl)))
4908 if (init)
4909 DECL_INITIAL (decl) = init;
4911 else
4913 /* A variable definition. */
4914 if (DECL_FUNCTION_SCOPE_P (decl))
4916 /* Initialize the local variable. */
4917 if (processing_template_decl)
4919 if (init || DECL_INITIAL (decl) == error_mark_node)
4920 DECL_INITIAL (decl) = init;
4922 else if (!TREE_STATIC (decl))
4923 initialize_local_var (decl, init);
4926 /* If a variable is defined, and then a subsequent
4927 definition with external linkage is encountered, we will
4928 get here twice for the same variable. We want to avoid
4929 calling expand_static_init more than once. For variables
4930 that are not static data members, we can call
4931 expand_static_init only when we actually process the
4932 initializer. It is not legal to redeclare a static data
4933 member, so this issue does not arise in that case. */
4934 if (var_definition_p && TREE_STATIC (decl))
4935 expand_static_init (decl, init);
4939 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
4940 reference, insert it in the statement-tree now. */
4941 if (cleanup)
4942 push_cleanup (decl, cleanup, false);
4944 finish_end:
4946 if (was_readonly)
4947 TREE_READONLY (decl) = 1;
4949 /* If this was marked 'used', be sure it will be output. */
4950 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
4951 mark_decl_referenced (decl);
4954 /* This is here for a midend callback from c-common.c. */
4956 void
4957 finish_decl (tree decl, tree init, tree asmspec_tree)
4959 cp_finish_decl (decl, init, asmspec_tree, 0);
4962 /* Returns a declaration for a VAR_DECL as if:
4964 extern "C" TYPE NAME;
4966 had been seen. Used to create compiler-generated global
4967 variables. */
4969 tree
4970 declare_global_var (tree name, tree type)
4972 tree decl;
4974 push_to_top_level ();
4975 decl = build_decl (VAR_DECL, name, type);
4976 TREE_PUBLIC (decl) = 1;
4977 DECL_EXTERNAL (decl) = 1;
4978 DECL_ARTIFICIAL (decl) = 1;
4979 /* If the user has explicitly declared this variable (perhaps
4980 because the code we are compiling is part of a low-level runtime
4981 library), then it is possible that our declaration will be merged
4982 with theirs by pushdecl. */
4983 decl = pushdecl (decl);
4984 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
4985 pop_from_top_level ();
4987 return decl;
4990 /* Returns a pointer to the `atexit' function. Note that if
4991 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
4992 `__cxa_atexit' function specified in the IA64 C++ ABI. */
4994 static tree
4995 get_atexit_node (void)
4997 tree atexit_fndecl;
4998 tree arg_types;
4999 tree fn_type;
5000 tree fn_ptr_type;
5001 const char *name;
5002 bool use_aeabi_atexit;
5004 if (atexit_node)
5005 return atexit_node;
5007 if (flag_use_cxa_atexit)
5009 /* The declaration for `__cxa_atexit' is:
5011 int __cxa_atexit (void (*)(void *), void *, void *)
5013 We build up the argument types and then then function type
5014 itself. */
5016 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
5017 /* First, build the pointer-to-function type for the first
5018 argument. */
5019 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5020 fn_type = build_function_type (void_type_node, arg_types);
5021 fn_ptr_type = build_pointer_type (fn_type);
5022 /* Then, build the rest of the argument types. */
5023 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5024 if (use_aeabi_atexit)
5026 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5027 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5029 else
5031 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5032 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5034 /* And the final __cxa_atexit type. */
5035 fn_type = build_function_type (integer_type_node, arg_types);
5036 fn_ptr_type = build_pointer_type (fn_type);
5037 if (use_aeabi_atexit)
5038 name = "__aeabi_atexit";
5039 else
5040 name = "__cxa_atexit";
5042 else
5044 /* The declaration for `atexit' is:
5046 int atexit (void (*)());
5048 We build up the argument types and then then function type
5049 itself. */
5050 fn_type = build_function_type (void_type_node, void_list_node);
5051 fn_ptr_type = build_pointer_type (fn_type);
5052 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5053 /* Build the final atexit type. */
5054 fn_type = build_function_type (integer_type_node, arg_types);
5055 name = "atexit";
5058 /* Now, build the function declaration. */
5059 push_lang_context (lang_name_c);
5060 atexit_fndecl = build_library_fn_ptr (name, fn_type);
5061 mark_used (atexit_fndecl);
5062 pop_lang_context ();
5063 atexit_node = decay_conversion (atexit_fndecl);
5065 return atexit_node;
5068 /* Returns the __dso_handle VAR_DECL. */
5070 static tree
5071 get_dso_handle_node (void)
5073 if (dso_handle_node)
5074 return dso_handle_node;
5076 /* Declare the variable. */
5077 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5078 ptr_type_node);
5080 return dso_handle_node;
5083 /* Begin a new function with internal linkage whose job will be simply
5084 to destroy some particular variable. */
5086 static GTY(()) int start_cleanup_cnt;
5088 static tree
5089 start_cleanup_fn (void)
5091 char name[32];
5092 tree parmtypes;
5093 tree fntype;
5094 tree fndecl;
5096 push_to_top_level ();
5098 /* No need to mangle this. */
5099 push_lang_context (lang_name_c);
5101 /* Build the parameter-types. */
5102 parmtypes = void_list_node;
5103 /* Functions passed to __cxa_atexit take an additional parameter.
5104 We'll just ignore it. After we implement the new calling
5105 convention for destructors, we can eliminate the use of
5106 additional cleanup functions entirely in the -fnew-abi case. */
5107 if (flag_use_cxa_atexit)
5108 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
5109 /* Build the function type itself. */
5110 fntype = build_function_type (void_type_node, parmtypes);
5111 /* Build the name of the function. */
5112 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
5113 /* Build the function declaration. */
5114 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5115 /* It's a function with internal linkage, generated by the
5116 compiler. */
5117 TREE_PUBLIC (fndecl) = 0;
5118 DECL_ARTIFICIAL (fndecl) = 1;
5119 /* Make the function `inline' so that it is only emitted if it is
5120 actually needed. It is unlikely that it will be inlined, since
5121 it is only called via a function pointer, but we avoid unnecessary
5122 emissions this way. */
5123 DECL_INLINE (fndecl) = 1;
5124 DECL_DECLARED_INLINE_P (fndecl) = 1;
5125 DECL_INTERFACE_KNOWN (fndecl) = 1;
5126 /* Build the parameter. */
5127 if (flag_use_cxa_atexit)
5129 tree parmdecl;
5131 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
5132 DECL_CONTEXT (parmdecl) = fndecl;
5133 TREE_USED (parmdecl) = 1;
5134 DECL_ARGUMENTS (fndecl) = parmdecl;
5137 pushdecl (fndecl);
5138 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
5140 pop_lang_context ();
5142 return current_function_decl;
5145 /* Finish the cleanup function begun by start_cleanup_fn. */
5147 static void
5148 end_cleanup_fn (void)
5150 expand_or_defer_fn (finish_function (0));
5152 pop_from_top_level ();
5155 /* Generate code to handle the destruction of DECL, an object with
5156 static storage duration. */
5158 tree
5159 register_dtor_fn (tree decl)
5161 tree cleanup;
5162 tree compound_stmt;
5163 tree args;
5164 tree fcall;
5166 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5167 return void_zero_node;
5169 /* Call build_cleanup before we enter the anonymous function so that
5170 any access checks will be done relative to the current scope,
5171 rather than the scope of the anonymous function. */
5172 build_cleanup (decl);
5174 /* Now start the function. */
5175 cleanup = start_cleanup_fn ();
5177 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
5178 to the original function, rather than the anonymous one. That
5179 will make the back-end think that nested functions are in use,
5180 which causes confusion. */
5182 push_deferring_access_checks (dk_no_check);
5183 fcall = build_cleanup (decl);
5184 pop_deferring_access_checks ();
5186 /* Create the body of the anonymous function. */
5187 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
5188 finish_expr_stmt (fcall);
5189 finish_compound_stmt (compound_stmt);
5190 end_cleanup_fn ();
5192 /* Call atexit with the cleanup function. */
5193 cxx_mark_addressable (cleanup);
5194 mark_used (cleanup);
5195 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
5196 if (flag_use_cxa_atexit)
5198 args = tree_cons (NULL_TREE,
5199 build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
5200 NULL_TREE);
5201 if (targetm.cxx.use_aeabi_atexit ())
5203 args = tree_cons (NULL_TREE, cleanup, args);
5204 args = tree_cons (NULL_TREE, null_pointer_node, args);
5206 else
5208 args = tree_cons (NULL_TREE, null_pointer_node, args);
5209 args = tree_cons (NULL_TREE, cleanup, args);
5212 else
5213 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5214 return build_function_call (get_atexit_node (), args);
5217 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
5218 is its initializer. Generate code to handle the construction
5219 and destruction of DECL. */
5221 static void
5222 expand_static_init (tree decl, tree init)
5224 gcc_assert (TREE_CODE (decl) == VAR_DECL);
5225 gcc_assert (TREE_STATIC (decl));
5227 /* Some variables require no initialization. */
5228 if (!init
5229 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
5230 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5231 return;
5233 if (DECL_FUNCTION_SCOPE_P (decl))
5235 /* Emit code to perform this initialization but once. */
5236 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
5237 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
5238 tree guard, guard_addr, guard_addr_list;
5239 tree acquire_fn, release_fn, abort_fn;
5240 tree flag, begin;
5242 /* Emit code to perform this initialization but once. This code
5243 looks like:
5245 static <type> guard;
5246 if (!guard.first_byte) {
5247 if (__cxa_guard_acquire (&guard)) {
5248 bool flag = false;
5249 try {
5250 // Do initialization.
5251 flag = true; __cxa_guard_release (&guard);
5252 // Register variable for destruction at end of program.
5253 } catch {
5254 if (!flag) __cxa_guard_abort (&guard);
5258 Note that the `flag' variable is only set to 1 *after* the
5259 initialization is complete. This ensures that an exception,
5260 thrown during the construction, will cause the variable to
5261 reinitialized when we pass through this code again, as per:
5263 [stmt.dcl]
5265 If the initialization exits by throwing an exception, the
5266 initialization is not complete, so it will be tried again
5267 the next time control enters the declaration.
5269 This process should be thread-safe, too; multiple threads
5270 should not be able to initialize the variable more than
5271 once. */
5273 /* Create the guard variable. */
5274 guard = get_guard (decl);
5276 /* This optimization isn't safe on targets with relaxed memory
5277 consistency. On such targets we force synchronization in
5278 __cxa_guard_acquire. */
5279 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5281 /* Begin the conditional initialization. */
5282 if_stmt = begin_if_stmt ();
5283 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
5284 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5287 if (flag_threadsafe_statics)
5289 guard_addr = build_address (guard);
5290 guard_addr_list = build_tree_list (NULL_TREE, guard_addr);
5292 acquire_fn = get_identifier ("__cxa_guard_acquire");
5293 release_fn = get_identifier ("__cxa_guard_release");
5294 abort_fn = get_identifier ("__cxa_guard_abort");
5295 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
5297 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
5298 void_list_node);
5299 tree vfntype = build_function_type (void_type_node, argtypes);
5300 acquire_fn = push_library_fn
5301 (acquire_fn, build_function_type (integer_type_node, argtypes));
5302 release_fn = push_library_fn (release_fn, vfntype);
5303 abort_fn = push_library_fn (abort_fn, vfntype);
5305 else
5307 release_fn = identifier_global_value (release_fn);
5308 abort_fn = identifier_global_value (abort_fn);
5311 inner_if_stmt = begin_if_stmt ();
5312 finish_if_stmt_cond (build_call (acquire_fn, guard_addr_list),
5313 inner_if_stmt);
5315 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5316 begin = get_target_expr (boolean_false_node);
5317 flag = TARGET_EXPR_SLOT (begin);
5319 TARGET_EXPR_CLEANUP (begin)
5320 = build3 (COND_EXPR, void_type_node, flag,
5321 void_zero_node,
5322 build_call (abort_fn, guard_addr_list));
5323 CLEANUP_EH_ONLY (begin) = 1;
5325 /* Do the initialization itself. */
5326 init = add_stmt_to_compound (begin, init);
5327 init = add_stmt_to_compound
5328 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
5329 init = add_stmt_to_compound
5330 (init, build_call (release_fn, guard_addr_list));
5332 else
5333 init = add_stmt_to_compound (init, set_guard (guard));
5335 /* Use atexit to register a function for destroying this static
5336 variable. */
5337 init = add_stmt_to_compound (init, register_dtor_fn (decl));
5339 finish_expr_stmt (init);
5341 if (flag_threadsafe_statics)
5343 finish_compound_stmt (inner_then_clause);
5344 finish_then_clause (inner_if_stmt);
5345 finish_if_stmt (inner_if_stmt);
5348 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5350 finish_compound_stmt (then_clause);
5351 finish_then_clause (if_stmt);
5352 finish_if_stmt (if_stmt);
5355 else
5356 static_aggregates = tree_cons (init, decl, static_aggregates);
5360 /* Make TYPE a complete type based on INITIAL_VALUE.
5361 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
5362 2 if there was no information (in which case assume 0 if DO_DEFAULT),
5363 3 if the initializer list is empty (in pedantic mode). */
5366 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
5368 int failure;
5369 tree type, elt_type;
5371 if (initial_value)
5373 /* An array of character type can be initialized from a
5374 brace-enclosed string constant. */
5375 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
5376 && TREE_CODE (initial_value) == CONSTRUCTOR
5377 && CONSTRUCTOR_ELTS (initial_value)
5378 && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value)))
5379 == STRING_CST)
5380 && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value)) == NULL_TREE)
5381 initial_value = TREE_VALUE (CONSTRUCTOR_ELTS (initial_value));
5384 failure = complete_array_type (ptype, initial_value, do_default);
5386 /* We can create the array before the element type is complete, which
5387 means that we didn't have these two bits set in the original type
5388 either. In completing the type, we are expected to propagate these
5389 bits. See also complete_type which does the same thing for arrays
5390 of fixed size. */
5391 type = *ptype;
5392 if (TYPE_DOMAIN (type))
5394 elt_type = TREE_TYPE (type);
5395 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
5396 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5397 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
5400 return failure;
5403 /* Return zero if something is declared to be a member of type
5404 CTYPE when in the context of CUR_TYPE. STRING is the error
5405 message to print in that case. Otherwise, quietly return 1. */
5407 static int
5408 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
5410 if (ctype && ctype != cur_type)
5412 if (flags == DTOR_FLAG)
5413 error ("destructor for alien class %qT cannot be a member", ctype);
5414 else
5415 error ("constructor for alien class %qT cannot be a member", ctype);
5416 return 0;
5418 return 1;
5421 /* Subroutine of `grokdeclarator'. */
5423 /* Generate errors possibly applicable for a given set of specifiers.
5424 This is for ARM $7.1.2. */
5426 static void
5427 bad_specifiers (tree object,
5428 const char* type,
5429 int virtualp,
5430 int quals,
5431 int inlinep,
5432 int friendp,
5433 int raises)
5435 if (virtualp)
5436 error ("%qD declared as a %<virtual%> %s", object, type);
5437 if (inlinep)
5438 error ("%qD declared as an %<inline%> %s", object, type);
5439 if (quals)
5440 error ("%<const%> and %<volatile%> function specifiers on "
5441 "%qD invalid in %s declaration",
5442 object, type);
5443 if (friendp)
5444 cp_error_at ("%qD declared as a friend", object);
5445 if (raises
5446 && (TREE_CODE (object) == TYPE_DECL
5447 || (!TYPE_PTRFN_P (TREE_TYPE (object))
5448 && !TYPE_REFFN_P (TREE_TYPE (object))
5449 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
5450 cp_error_at ("%qD declared with an exception specification", object);
5453 /* CTYPE is class type, or null if non-class.
5454 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5455 or METHOD_TYPE.
5456 DECLARATOR is the function's name.
5457 PARMS is a chain of PARM_DECLs for the function.
5458 VIRTUALP is truthvalue of whether the function is virtual or not.
5459 FLAGS are to be passed through to `grokclassfn'.
5460 QUALS are qualifiers indicating whether the function is `const'
5461 or `volatile'.
5462 RAISES is a list of exceptions that this function can raise.
5463 CHECK is 1 if we must find this method in CTYPE, 0 if we should
5464 not look, and -1 if we should not call `grokclassfn' at all.
5466 SFK is the kind of special function (if any) for the new function.
5468 Returns `NULL_TREE' if something goes wrong, after issuing
5469 applicable error messages. */
5471 static tree
5472 grokfndecl (tree ctype,
5473 tree type,
5474 tree declarator,
5475 tree parms,
5476 tree orig_declarator,
5477 int virtualp,
5478 enum overload_flags flags,
5479 cp_cv_quals quals,
5480 tree raises,
5481 int check,
5482 int friendp,
5483 int publicp,
5484 int inlinep,
5485 special_function_kind sfk,
5486 int funcdef_flag,
5487 int template_count,
5488 tree in_namespace,
5489 tree* attrlist)
5491 tree decl;
5492 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
5493 int has_default_arg = 0;
5494 tree t;
5496 if (raises)
5497 type = build_exception_variant (type, raises);
5499 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
5500 DECL_ARGUMENTS (decl) = parms;
5501 /* Propagate volatile out from type to decl. */
5502 if (TYPE_VOLATILE (type))
5503 TREE_THIS_VOLATILE (decl) = 1;
5505 /* If this decl has namespace scope, set that up. */
5506 if (in_namespace)
5507 set_decl_namespace (decl, in_namespace, friendp);
5508 else if (!ctype)
5509 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5511 /* `main' and builtins have implicit 'C' linkage. */
5512 if ((MAIN_NAME_P (declarator)
5513 || (IDENTIFIER_LENGTH (declarator) > 10
5514 && IDENTIFIER_POINTER (declarator)[0] == '_'
5515 && IDENTIFIER_POINTER (declarator)[1] == '_'
5516 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
5517 && current_lang_name == lang_name_cplusplus
5518 && ctype == NULL_TREE
5519 /* NULL_TREE means global namespace. */
5520 && DECL_CONTEXT (decl) == NULL_TREE)
5521 SET_DECL_LANGUAGE (decl, lang_c);
5523 /* Should probably propagate const out from type to decl I bet (mrs). */
5524 if (staticp)
5526 DECL_STATIC_FUNCTION_P (decl) = 1;
5527 DECL_CONTEXT (decl) = ctype;
5530 if (ctype)
5531 DECL_CONTEXT (decl) = ctype;
5533 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
5535 if (processing_template_decl)
5536 error ("cannot declare %<::main%> to be a template");
5537 if (inlinep)
5538 error ("cannot declare %<::main%> to be inline");
5539 if (!publicp)
5540 error ("cannot declare %<::main%> to be static");
5541 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
5542 integer_type_node))
5544 error ("%<::main%> must return %<int%>");
5545 TREE_TYPE (TREE_TYPE (decl)) = integer_type_node;
5547 inlinep = 0;
5548 publicp = 1;
5551 /* Members of anonymous types and local classes have no linkage; make
5552 them internal. If a typedef is made later, this will be changed. */
5553 if (ctype && (TYPE_ANONYMOUS_P (ctype)
5554 || decl_function_context (TYPE_MAIN_DECL (ctype))))
5555 publicp = 0;
5557 if (publicp)
5559 /* [basic.link]: A name with no linkage (notably, the name of a class
5560 or enumeration declared in a local scope) shall not be used to
5561 declare an entity with linkage.
5563 Only check this for public decls for now. See core 319, 389. */
5564 t = no_linkage_check (TREE_TYPE (decl),
5565 /*relaxed_p=*/false);
5566 if (t)
5568 if (TYPE_ANONYMOUS_P (t))
5570 if (DECL_EXTERN_C_P (decl))
5571 /* Allow this; it's pretty common in C. */;
5572 else
5574 pedwarn ("non-local function %q#D uses anonymous type",
5575 decl);
5576 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
5577 cp_pedwarn_at ("%q#D does not refer to the unqualified "
5578 "type, so it is not used for linkage",
5579 TYPE_NAME (t));
5582 else
5583 pedwarn ("non-local function %q#D uses local type %qT", decl, t);
5587 TREE_PUBLIC (decl) = publicp;
5588 if (! publicp)
5590 DECL_INTERFACE_KNOWN (decl) = 1;
5591 DECL_NOT_REALLY_EXTERN (decl) = 1;
5594 /* If the declaration was declared inline, mark it as such. */
5595 if (inlinep)
5596 DECL_DECLARED_INLINE_P (decl) = 1;
5597 /* We inline functions that are explicitly declared inline, or, when
5598 the user explicitly asks us to, all functions. */
5599 if (DECL_DECLARED_INLINE_P (decl)
5600 || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
5601 DECL_INLINE (decl) = 1;
5603 DECL_EXTERNAL (decl) = 1;
5604 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
5606 error ("%smember function %qD cannot have cv-qualifier",
5607 (ctype ? "static " : "non-"), decl);
5608 quals = TYPE_UNQUALIFIED;
5611 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
5612 grok_op_properties (decl, friendp, /*complain=*/true);
5614 if (ctype && decl_function_context (decl))
5615 DECL_NO_STATIC_CHAIN (decl) = 1;
5617 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
5618 if (TREE_PURPOSE (t)
5619 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
5621 has_default_arg = 1;
5622 break;
5625 if (friendp
5626 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
5628 if (funcdef_flag)
5629 error
5630 ("defining explicit specialization %qD in friend declaration",
5631 orig_declarator);
5632 else
5634 tree fns = TREE_OPERAND (orig_declarator, 0);
5635 tree args = TREE_OPERAND (orig_declarator, 1);
5637 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5639 /* Something like `template <class T> friend void f<T>()'. */
5640 error ("invalid use of template-id %qD in declaration "
5641 "of primary template",
5642 orig_declarator);
5643 return NULL_TREE;
5647 /* A friend declaration of the form friend void f<>(). Record
5648 the information in the TEMPLATE_ID_EXPR. */
5649 SET_DECL_IMPLICIT_INSTANTIATION (decl);
5651 if (TREE_CODE (fns) == COMPONENT_REF)
5653 /* Due to bison parser ickiness, we will have already looked
5654 up an operator_name or PFUNCNAME within the current class
5655 (see template_id in parse.y). If the current class contains
5656 such a name, we'll get a COMPONENT_REF here. Undo that. */
5658 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
5659 == current_class_type);
5660 fns = TREE_OPERAND (fns, 1);
5662 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
5663 || TREE_CODE (fns) == OVERLOAD);
5664 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
5666 if (has_default_arg)
5668 error ("default arguments are not allowed in declaration "
5669 "of friend template specialization %qD",
5670 decl);
5671 return NULL_TREE;
5674 if (inlinep)
5676 error ("%<inline%> is not allowed in declaration of friend "
5677 "template specialization %qD",
5678 decl);
5679 return NULL_TREE;
5684 if (funcdef_flag)
5685 /* Make the init_value nonzero so pushdecl knows this is not
5686 tentative. error_mark_node is replaced later with the BLOCK. */
5687 DECL_INITIAL (decl) = error_mark_node;
5689 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
5690 TREE_NOTHROW (decl) = 1;
5692 /* Caller will do the rest of this. */
5693 if (check < 0)
5694 return decl;
5696 if (ctype != NULL_TREE)
5698 if (sfk == sfk_constructor)
5699 DECL_CONSTRUCTOR_P (decl) = 1;
5701 grokclassfn (ctype, decl, flags, quals);
5704 decl = check_explicit_specialization (orig_declarator, decl,
5705 template_count,
5706 2 * (funcdef_flag != 0) +
5707 4 * (friendp != 0));
5708 if (decl == error_mark_node)
5709 return NULL_TREE;
5711 if (attrlist)
5713 cplus_decl_attributes (&decl, *attrlist, 0);
5714 *attrlist = NULL_TREE;
5717 if (ctype != NULL_TREE
5718 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
5719 && check)
5721 tree old_decl;
5723 old_decl = check_classfn (ctype, decl,
5724 (processing_template_decl
5725 > template_class_depth (ctype))
5726 ? current_template_parms
5727 : NULL_TREE);
5729 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
5730 /* Because grokfndecl is always supposed to return a
5731 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
5732 here. We depend on our callers to figure out that its
5733 really a template that's being returned. */
5734 old_decl = DECL_TEMPLATE_RESULT (old_decl);
5736 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
5737 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
5738 /* Remove the `this' parm added by grokclassfn.
5739 XXX Isn't this done in start_function, too? */
5740 revert_static_member_fn (decl);
5741 if (old_decl && DECL_ARTIFICIAL (old_decl))
5742 error ("definition of implicitly-declared %qD", old_decl);
5744 if (old_decl)
5746 tree ok;
5747 tree pushed_scope;
5749 /* Since we've smashed OLD_DECL to its
5750 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
5751 if (TREE_CODE (decl) == TEMPLATE_DECL)
5752 decl = DECL_TEMPLATE_RESULT (decl);
5754 /* Attempt to merge the declarations. This can fail, in
5755 the case of some invalid specialization declarations. */
5756 pushed_scope = push_scope (ctype);
5757 ok = duplicate_decls (decl, old_decl);
5758 if (pushed_scope)
5759 pop_scope (pushed_scope);
5760 if (!ok)
5762 error ("no %q#D member function declared in class %qT",
5763 decl, ctype);
5764 return NULL_TREE;
5766 return old_decl;
5770 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
5771 return NULL_TREE;
5773 if (ctype == NULL_TREE || check)
5774 return decl;
5776 if (virtualp)
5777 DECL_VIRTUAL_P (decl) = 1;
5779 return decl;
5782 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
5783 the linkage that DECL will receive in the object file. */
5785 static void
5786 set_linkage_for_static_data_member (tree decl)
5788 /* A static data member always has static storage duration and
5789 external linkage. Note that static data members are forbidden in
5790 local classes -- the only situation in which a class has
5791 non-external linkage. */
5792 TREE_PUBLIC (decl) = 1;
5793 TREE_STATIC (decl) = 1;
5794 /* For non-template classes, static data members are always put
5795 out in exactly those files where they are defined, just as
5796 with ordinary namespace-scope variables. */
5797 if (!processing_template_decl)
5798 DECL_INTERFACE_KNOWN (decl) = 1;
5801 /* Create a VAR_DECL named NAME with the indicated TYPE.
5803 If SCOPE is non-NULL, it is the class type or namespace containing
5804 the variable. If SCOPE is NULL, the variable should is created in
5805 the innermost enclosings scope. */
5807 static tree
5808 grokvardecl (tree type,
5809 tree name,
5810 const cp_decl_specifier_seq *declspecs,
5811 int initialized,
5812 int constp,
5813 tree scope)
5815 tree decl;
5816 tree explicit_scope;
5818 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
5820 /* Compute the scope in which to place the variable, but remember
5821 whether or not that scope was explicitly specified by the user. */
5822 explicit_scope = scope;
5823 if (!scope)
5825 /* An explicit "extern" specifier indicates a namespace-scope
5826 variable. */
5827 if (declspecs->storage_class == sc_extern)
5828 scope = current_namespace;
5829 else if (!at_function_scope_p ())
5830 scope = current_scope ();
5833 if (scope
5834 && (/* If the variable is a namespace-scope variable declared in a
5835 template, we need DECL_LANG_SPECIFIC. */
5836 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
5837 /* Similarly for namespace-scope variables with language linkage
5838 other than C++. */
5839 || (TREE_CODE (scope) == NAMESPACE_DECL
5840 && current_lang_name != lang_name_cplusplus)
5841 /* Similarly for static data members. */
5842 || TYPE_P (scope)))
5843 decl = build_lang_decl (VAR_DECL, name, type);
5844 else
5845 decl = build_decl (VAR_DECL, name, type);
5847 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
5848 set_decl_namespace (decl, explicit_scope, 0);
5849 else
5850 DECL_CONTEXT (decl) = scope;
5852 if (declspecs->storage_class == sc_extern)
5854 DECL_THIS_EXTERN (decl) = 1;
5855 DECL_EXTERNAL (decl) = !initialized;
5858 if (DECL_CLASS_SCOPE_P (decl))
5860 set_linkage_for_static_data_member (decl);
5861 /* This function is only called with out-of-class definitions. */
5862 DECL_EXTERNAL (decl) = 0;
5864 /* At top level, either `static' or no s.c. makes a definition
5865 (perhaps tentative), and absence of `static' makes it public. */
5866 else if (toplevel_bindings_p ())
5868 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
5869 && (DECL_THIS_EXTERN (decl) || ! constp));
5870 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
5872 /* Not at top level, only `static' makes a static definition. */
5873 else
5875 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
5876 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
5879 if (declspecs->specs[(int)ds_thread])
5881 if (targetm.have_tls)
5882 DECL_THREAD_LOCAL (decl) = 1;
5883 else
5884 /* A mere warning is sure to result in improper semantics
5885 at runtime. Don't bother to allow this to compile. */
5886 error ("thread-local storage not supported for this target");
5889 if (TREE_PUBLIC (decl))
5891 /* [basic.link]: A name with no linkage (notably, the name of a class
5892 or enumeration declared in a local scope) shall not be used to
5893 declare an entity with linkage.
5895 Only check this for public decls for now. */
5896 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
5897 if (t)
5899 if (TYPE_ANONYMOUS_P (t))
5901 if (DECL_EXTERN_C_P (decl))
5902 /* Allow this; it's pretty common in C. */
5904 else
5906 /* DRs 132, 319 and 389 seem to indicate types with
5907 no linkage can only be used to declare extern "C"
5908 entities. Since it's not always an error in the
5909 ISO C++ 90 Standard, we only issue a warning. */
5910 warning (0, "non-local variable %q#D uses anonymous type",
5911 decl);
5912 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
5913 cp_warning_at ("%q#D does not refer to the unqualified "
5914 "type, so it is not used for linkage",
5915 TYPE_NAME (t));
5918 else
5919 warning (0, "non-local variable %q#D uses local type %qT", decl, t);
5922 else
5923 DECL_INTERFACE_KNOWN (decl) = 1;
5925 return decl;
5928 /* Create and return a canonical pointer to member function type, for
5929 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
5931 tree
5932 build_ptrmemfunc_type (tree type)
5934 tree field, fields;
5935 tree t;
5936 tree unqualified_variant = NULL_TREE;
5938 if (type == error_mark_node)
5939 return type;
5941 /* If a canonical type already exists for this type, use it. We use
5942 this method instead of type_hash_canon, because it only does a
5943 simple equality check on the list of field members. */
5945 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
5946 return t;
5948 /* Make sure that we always have the unqualified pointer-to-member
5949 type first. */
5950 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
5951 unqualified_variant
5952 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
5954 t = make_aggr_type (RECORD_TYPE);
5955 xref_basetypes (t, NULL_TREE);
5957 /* Let the front-end know this is a pointer to member function... */
5958 TYPE_PTRMEMFUNC_FLAG (t) = 1;
5959 /* ... and not really an aggregate. */
5960 SET_IS_AGGR_TYPE (t, 0);
5962 field = build_decl (FIELD_DECL, pfn_identifier, type);
5963 fields = field;
5965 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
5966 TREE_CHAIN (field) = fields;
5967 fields = field;
5969 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
5971 /* Zap out the name so that the back-end will give us the debugging
5972 information for this anonymous RECORD_TYPE. */
5973 TYPE_NAME (t) = NULL_TREE;
5975 /* If this is not the unqualified form of this pointer-to-member
5976 type, set the TYPE_MAIN_VARIANT for this type to be the
5977 unqualified type. Since they are actually RECORD_TYPEs that are
5978 not variants of each other, we must do this manually. */
5979 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
5981 t = build_qualified_type (t, cp_type_quals (type));
5982 TYPE_MAIN_VARIANT (t) = unqualified_variant;
5983 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
5984 TYPE_NEXT_VARIANT (unqualified_variant) = t;
5987 /* Cache this pointer-to-member type so that we can find it again
5988 later. */
5989 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
5991 return t;
5994 /* Create and return a pointer to data member type. */
5996 tree
5997 build_ptrmem_type (tree class_type, tree member_type)
5999 if (TREE_CODE (member_type) == METHOD_TYPE)
6001 tree arg_types;
6003 arg_types = TYPE_ARG_TYPES (member_type);
6004 class_type = (cp_build_qualified_type
6005 (class_type,
6006 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
6007 member_type
6008 = build_method_type_directly (class_type,
6009 TREE_TYPE (member_type),
6010 TREE_CHAIN (arg_types));
6011 return build_ptrmemfunc_type (build_pointer_type (member_type));
6013 else
6015 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
6016 return build_offset_type (class_type, member_type);
6020 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
6021 Check to see that the definition is valid. Issue appropriate error
6022 messages. Return 1 if the definition is particularly bad, or 0
6023 otherwise. */
6026 check_static_variable_definition (tree decl, tree type)
6028 /* Motion 10 at San Diego: If a static const integral data member is
6029 initialized with an integral constant expression, the initializer
6030 may appear either in the declaration (within the class), or in
6031 the definition, but not both. If it appears in the class, the
6032 member is a member constant. The file-scope definition is always
6033 required. */
6034 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
6036 error ("invalid in-class initialization of static data member "
6037 "of non-integral type %qT",
6038 type);
6039 /* If we just return the declaration, crashes will sometimes
6040 occur. We therefore return void_type_node, as if this were a
6041 friend declaration, to cause callers to completely ignore
6042 this declaration. */
6043 return 1;
6045 else if (!CP_TYPE_CONST_P (type))
6046 error ("ISO C++ forbids in-class initialization of non-const "
6047 "static member %qD",
6048 decl);
6049 else if (pedantic && !INTEGRAL_TYPE_P (type))
6050 pedwarn ("ISO C++ forbids initialization of member constant "
6051 "%qD of non-integral type %qT", decl, type);
6053 return 0;
6056 /* Given the SIZE (i.e., number of elements) in an array, compute an
6057 appropriate index type for the array. If non-NULL, NAME is the
6058 name of the thing being declared. */
6060 tree
6061 compute_array_index_type (tree name, tree size)
6063 tree type = TREE_TYPE (size);
6064 tree itype;
6066 /* The array bound must be an integer type. */
6067 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
6069 if (name)
6070 error ("size of array %qD has non-integral type %qT", name, type);
6071 else
6072 error ("size of array has non-integral type %qT", type);
6073 size = integer_one_node;
6074 type = TREE_TYPE (size);
6077 if (abi_version_at_least (2)
6078 /* We should only handle value dependent expressions specially. */
6079 ? value_dependent_expression_p (size)
6080 /* But for abi-1, we handled all instances in templates. This
6081 effects the manglings produced. */
6082 : processing_template_decl)
6083 return build_index_type (build_min (MINUS_EXPR, sizetype,
6084 size, integer_one_node));
6086 /* The size might be the result of a cast. */
6087 STRIP_TYPE_NOPS (size);
6089 /* It might be a const variable or enumeration constant. */
6090 size = integral_constant_value (size);
6092 /* Normally, the array-bound will be a constant. */
6093 if (TREE_CODE (size) == INTEGER_CST)
6095 /* Check to see if the array bound overflowed. Make that an
6096 error, no matter how generous we're being. */
6097 int old_flag_pedantic_errors = flag_pedantic_errors;
6098 int old_pedantic = pedantic;
6099 pedantic = flag_pedantic_errors = 1;
6100 constant_expression_warning (size);
6101 pedantic = old_pedantic;
6102 flag_pedantic_errors = old_flag_pedantic_errors;
6104 /* An array must have a positive number of elements. */
6105 if (INT_CST_LT (size, integer_zero_node))
6107 if (name)
6108 error ("size of array %qD is negative", name);
6109 else
6110 error ("size of array is negative");
6111 size = integer_one_node;
6113 /* As an extension we allow zero-sized arrays. We always allow
6114 them in system headers because glibc uses them. */
6115 else if (integer_zerop (size) && pedantic && !in_system_header)
6117 if (name)
6118 pedwarn ("ISO C++ forbids zero-size array %qD", name);
6119 else
6120 pedwarn ("ISO C++ forbids zero-size array");
6123 else if (TREE_CONSTANT (size))
6125 /* `(int) &fn' is not a valid array bound. */
6126 if (name)
6127 error ("size of array %qD is not an integral constant-expression",
6128 name);
6129 else
6130 error ("size of array is not an integral constant-expression");
6132 else if (pedantic)
6134 if (name)
6135 pedwarn ("ISO C++ forbids variable-size array %qD", name);
6136 else
6137 pedwarn ("ISO C++ forbids variable-size array");
6140 if (processing_template_decl && !TREE_CONSTANT (size))
6141 /* A variable sized array. */
6142 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
6143 else
6145 HOST_WIDE_INT saved_processing_template_decl;
6147 /* Compute the index of the largest element in the array. It is
6148 one less than the number of elements in the array. We save
6149 and restore PROCESSING_TEMPLATE_DECL so that computations in
6150 cp_build_binary_op will be appropriately folded. */
6151 saved_processing_template_decl = processing_template_decl;
6152 processing_template_decl = 0;
6153 itype = cp_build_binary_op (MINUS_EXPR,
6154 cp_convert (ssizetype, size),
6155 cp_convert (ssizetype, integer_one_node));
6156 itype = fold (itype);
6157 processing_template_decl = saved_processing_template_decl;
6159 if (!TREE_CONSTANT (itype))
6160 /* A variable sized array. */
6161 itype = variable_size (itype);
6162 /* Make sure that there was no overflow when creating to a signed
6163 index type. (For example, on a 32-bit machine, an array with
6164 size 2^32 - 1 is too big.) */
6165 else if (TREE_OVERFLOW (itype))
6167 error ("overflow in array dimension");
6168 TREE_OVERFLOW (itype) = 0;
6172 /* Create and return the appropriate index type. */
6173 return build_index_type (itype);
6176 /* Returns the scope (if any) in which the entity declared by
6177 DECLARATOR will be located. If the entity was declared with an
6178 unqualified name, NULL_TREE is returned. */
6180 tree
6181 get_scope_of_declarator (const cp_declarator *declarator)
6183 while (declarator && declarator->kind != cdk_id)
6184 declarator = declarator->declarator;
6186 /* If the declarator-id is a SCOPE_REF, the scope in which the
6187 declaration occurs is the first operand. */
6188 if (declarator
6189 && declarator->u.id.qualifying_scope)
6190 return declarator->u.id.qualifying_scope;
6192 /* Otherwise, the declarator is not a qualified name; the entity will
6193 be declared in the current scope. */
6194 return NULL_TREE;
6197 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
6198 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
6199 with this type. */
6201 static tree
6202 create_array_type_for_decl (tree name, tree type, tree size)
6204 tree itype = NULL_TREE;
6205 const char* error_msg;
6207 /* If things have already gone awry, bail now. */
6208 if (type == error_mark_node || size == error_mark_node)
6209 return error_mark_node;
6211 /* Assume that everything will go OK. */
6212 error_msg = NULL;
6214 /* There are some types which cannot be array elements. */
6215 switch (TREE_CODE (type))
6217 case VOID_TYPE:
6218 error_msg = "array of void";
6219 break;
6221 case FUNCTION_TYPE:
6222 error_msg = "array of functions";
6223 break;
6225 case REFERENCE_TYPE:
6226 error_msg = "array of references";
6227 break;
6229 case METHOD_TYPE:
6230 error_msg = "array of function members";
6231 break;
6233 default:
6234 break;
6237 /* If something went wrong, issue an error-message and return. */
6238 if (error_msg)
6240 if (name)
6241 error ("declaration of %qD as %s", name, error_msg);
6242 else
6243 error ("creating %s", error_msg);
6245 return error_mark_node;
6248 /* [dcl.array]
6250 The constant expressions that specify the bounds of the arrays
6251 can be omitted only for the first member of the sequence. */
6252 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
6254 if (name)
6255 error ("declaration of %qD as multidimensional array must "
6256 "have bounds for all dimensions except the first",
6257 name);
6258 else
6259 error ("multidimensional array must have bounds for all "
6260 "dimensions except the first");
6262 return error_mark_node;
6265 /* Figure out the index type for the array. */
6266 if (size)
6267 itype = compute_array_index_type (name, size);
6269 /* [dcl.array]
6270 T is called the array element type; this type shall not be [...] an
6271 abstract class type. */
6272 abstract_virtuals_error (name, type);
6274 return build_cplus_array_type (type, itype);
6277 /* Check that it's OK to declare a function with the indicated TYPE.
6278 SFK indicates the kind of special function (if any) that this
6279 function is. OPTYPE is the type given in a conversion operator
6280 declaration, or the class type for a constructor/destructor.
6281 Returns the actual return type of the function; that
6282 may be different than TYPE if an error occurs, or for certain
6283 special functions. */
6285 static tree
6286 check_special_function_return_type (special_function_kind sfk,
6287 tree type,
6288 tree optype)
6290 switch (sfk)
6292 case sfk_constructor:
6293 if (type)
6294 error ("return type specification for constructor invalid");
6296 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6297 type = build_pointer_type (optype);
6298 else
6299 type = void_type_node;
6300 break;
6302 case sfk_destructor:
6303 if (type)
6304 error ("return type specification for destructor invalid");
6305 /* We can't use the proper return type here because we run into
6306 problems with ambiguous bases and covariant returns.
6307 Java classes are left unchanged because (void *) isn't a valid
6308 Java type, and we don't want to change the Java ABI. */
6309 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6310 type = build_pointer_type (void_type_node);
6311 else
6312 type = void_type_node;
6313 break;
6315 case sfk_conversion:
6316 if (type && !same_type_p (type, optype))
6317 error ("operator %qT declared to return %qT", optype, type);
6318 else if (type)
6319 pedwarn ("return type specified for %<operator %T%>", optype);
6320 type = optype;
6321 break;
6323 default:
6324 gcc_unreachable ();
6327 return type;
6330 /* A variable or data member (whose unqualified name is IDENTIFIER)
6331 has been declared with the indicated TYPE. If the TYPE is not
6332 acceptable, issue an error message and return a type to use for
6333 error-recovery purposes. */
6335 tree
6336 check_var_type (tree identifier, tree type)
6338 if (VOID_TYPE_P (type))
6340 if (!identifier)
6341 error ("unnamed variable or field declared void");
6342 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
6344 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
6345 error ("variable or field %qE declared void", identifier);
6347 else
6348 error ("variable or field declared void");
6349 type = integer_type_node;
6352 return type;
6355 /* Given declspecs and a declarator (abstract or otherwise), determine
6356 the name and type of the object declared and construct a DECL node
6357 for it.
6359 DECLSPECS is a chain of tree_list nodes whose value fields
6360 are the storage classes and type specifiers.
6362 DECL_CONTEXT says which syntactic context this declaration is in:
6363 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6364 FUNCDEF for a function definition. Like NORMAL but a few different
6365 error messages in each case. Return value may be zero meaning
6366 this definition is too screwy to try to parse.
6367 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
6368 handle member functions (which have FIELD context).
6369 Return value may be zero meaning this definition is too screwy to
6370 try to parse.
6371 PARM for a parameter declaration (either within a function prototype
6372 or before a function body). Make a PARM_DECL, or return void_type_node.
6373 CATCHPARM for a parameter declaration before a catch clause.
6374 TYPENAME if for a typename (in a cast or sizeof).
6375 Don't make a DECL node; just return the ..._TYPE node.
6376 FIELD for a struct or union field; make a FIELD_DECL.
6377 BITFIELD for a field with specified width.
6378 INITIALIZED is 1 if the decl has an initializer.
6380 ATTRLIST is a pointer to the list of attributes, which may be NULL
6381 if there are none; *ATTRLIST may be modified if attributes from inside
6382 the declarator should be applied to the declaration.
6384 When this function is called, scoping variables (such as
6385 CURRENT_CLASS_TYPE) should reflect the scope in which the
6386 declaration occurs, not the scope in which the new declaration will
6387 be placed. For example, on:
6389 void S::f() { ... }
6391 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6392 should not be `S'. */
6394 tree
6395 grokdeclarator (const cp_declarator *declarator,
6396 const cp_decl_specifier_seq *declspecs,
6397 enum decl_context decl_context,
6398 int initialized,
6399 tree* attrlist)
6401 tree type = NULL_TREE;
6402 int longlong = 0;
6403 int type_quals;
6404 int virtualp, explicitp, friendp, inlinep, staticp;
6405 int explicit_int = 0;
6406 int explicit_char = 0;
6407 int defaulted_int = 0;
6408 tree dependant_name = NULL_TREE;
6410 tree typedef_decl = NULL_TREE;
6411 const char *name = NULL;
6412 tree typedef_type = NULL_TREE;
6413 int funcdef_flag = 0;
6414 cp_declarator_kind innermost_code = cdk_error;
6415 int bitfield = 0;
6416 #if 0
6417 /* See the code below that used this. */
6418 tree decl_attr = NULL_TREE;
6419 #endif
6421 /* Keep track of what sort of function is being processed
6422 so that we can warn about default return values, or explicit
6423 return values which do not match prescribed defaults. */
6424 special_function_kind sfk = sfk_none;
6426 tree dname = NULL_TREE;
6427 tree ctor_return_type = NULL_TREE;
6428 enum overload_flags flags = NO_SPECIAL;
6429 cp_cv_quals quals = TYPE_UNQUALIFIED;
6430 tree raises = NULL_TREE;
6431 int template_count = 0;
6432 tree returned_attrs = NULL_TREE;
6433 tree parms = NULL_TREE;
6434 const cp_declarator *id_declarator;
6435 /* The unqualified name of the declarator; either an
6436 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
6437 tree unqualified_id;
6438 /* The class type, if any, in which this entity is located,
6439 or NULL_TREE if none. Note that this value may be different from
6440 the current class type; for example if an attempt is made to declare
6441 "A::f" inside "B", this value will be "A". */
6442 tree ctype = current_class_type;
6443 /* The NAMESPACE_DECL for the namespace in which this entity is
6444 located. If an unqualified name is used to declare the entity,
6445 this value will be NULL_TREE, even if the entity is located at
6446 namespace scope. */
6447 tree in_namespace = NULL_TREE;
6448 cp_decl_spec ds;
6449 cp_storage_class storage_class;
6450 bool unsigned_p, signed_p, short_p, long_p, thread_p;
6451 bool type_was_error_mark_node = false;
6453 signed_p = declspecs->specs[(int)ds_signed];
6454 unsigned_p = declspecs->specs[(int)ds_unsigned];
6455 short_p = declspecs->specs[(int)ds_short];
6456 long_p = declspecs->specs[(int)ds_long];
6457 thread_p = declspecs->specs[(int)ds_thread];
6459 if (decl_context == FUNCDEF)
6460 funcdef_flag = 1, decl_context = NORMAL;
6461 else if (decl_context == MEMFUNCDEF)
6462 funcdef_flag = -1, decl_context = FIELD;
6463 else if (decl_context == BITFIELD)
6464 bitfield = 1, decl_context = FIELD;
6466 /* Look inside a declarator for the name being declared
6467 and get it as a string, for an error message. */
6468 for (id_declarator = declarator;
6469 id_declarator;
6470 id_declarator = id_declarator->declarator)
6472 if (id_declarator->kind != cdk_id)
6473 innermost_code = id_declarator->kind;
6475 switch (id_declarator->kind)
6477 case cdk_function:
6478 if (id_declarator->declarator
6479 && id_declarator->declarator->kind == cdk_id)
6481 sfk = id_declarator->declarator->u.id.sfk;
6482 if (sfk == sfk_destructor)
6483 flags = DTOR_FLAG;
6485 break;
6487 case cdk_id:
6489 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
6490 tree decl = id_declarator->u.id.unqualified_name;
6491 if (!decl)
6492 break;
6493 if (qualifying_scope)
6495 if (TYPE_P (qualifying_scope))
6497 ctype = qualifying_scope;
6498 if (innermost_code != cdk_function
6499 && current_class_type
6500 && !UNIQUELY_DERIVED_FROM_P (ctype,
6501 current_class_type))
6503 error ("type %qT is not derived from type %qT",
6504 ctype, current_class_type);
6505 return error_mark_node;
6508 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
6509 in_namespace = qualifying_scope;
6511 if (TREE_CODE (decl) == BASELINK)
6512 decl = BASELINK_FUNCTIONS (decl);
6513 if (decl == error_mark_node)
6514 return error_mark_node;
6515 switch (TREE_CODE (decl))
6517 case BIT_NOT_EXPR:
6519 tree type;
6521 if (innermost_code != cdk_function)
6523 error ("declaration of %qD as non-function", decl);
6524 return error_mark_node;
6526 else if (!qualifying_scope
6527 && !(current_class_type && at_class_scope_p ()))
6529 error ("declaration of %qD as non-member", decl);
6530 return error_mark_node;
6533 type = TREE_OPERAND (decl, 0);
6534 name = IDENTIFIER_POINTER (constructor_name (type));
6536 break;
6538 case TEMPLATE_ID_EXPR:
6540 tree fns = TREE_OPERAND (decl, 0);
6542 dname = fns;
6543 if (TREE_CODE (dname) == COMPONENT_REF)
6544 dname = TREE_OPERAND (dname, 1);
6545 if (TREE_CODE (dname) != IDENTIFIER_NODE)
6547 gcc_assert (is_overloaded_fn (dname));
6548 dname = DECL_NAME (get_first_fn (dname));
6551 /* Fall through. */
6553 case IDENTIFIER_NODE:
6554 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6555 dname = decl;
6557 if (C_IS_RESERVED_WORD (dname))
6559 error ("declarator-id missing; using reserved word %qD",
6560 dname);
6561 name = IDENTIFIER_POINTER (dname);
6563 else if (!IDENTIFIER_TYPENAME_P (dname))
6564 name = IDENTIFIER_POINTER (dname);
6565 else
6567 gcc_assert (flags == NO_SPECIAL);
6568 flags = TYPENAME_FLAG;
6569 ctor_return_type = TREE_TYPE (dname);
6570 sfk = sfk_conversion;
6571 if (is_typename_at_global_scope (dname))
6572 name = IDENTIFIER_POINTER (dname);
6573 else
6574 name = "<invalid operator>";
6576 break;
6578 case TYPE_DECL:
6579 dname = constructor_name (TREE_TYPE (decl));
6580 name = IDENTIFIER_POINTER (dname);
6581 break;
6583 default:
6584 gcc_unreachable ();
6586 break;
6588 case cdk_array:
6589 case cdk_pointer:
6590 case cdk_reference:
6591 case cdk_ptrmem:
6592 break;
6594 case cdk_error:
6595 break;
6597 default:
6598 gcc_unreachable ();
6601 if (id_declarator->kind == cdk_id)
6602 break;
6605 /* A function definition's declarator must have the form of
6606 a function declarator. */
6608 if (funcdef_flag && innermost_code != cdk_function)
6609 return 0;
6611 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
6612 && innermost_code != cdk_function
6613 && ! (ctype && !declspecs->any_specifiers_p))
6615 error ("declaration of %qD as non-function", dname);
6616 return error_mark_node;
6619 /* Anything declared one level down from the top level
6620 must be one of the parameters of a function
6621 (because the body is at least two levels down). */
6623 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
6624 by not allowing C++ class definitions to specify their parameters
6625 with xdecls (must be spec.d in the parmlist).
6627 Since we now wait to push a class scope until we are sure that
6628 we are in a legitimate method context, we must set oldcname
6629 explicitly (since current_class_name is not yet alive).
6631 We also want to avoid calling this a PARM if it is in a namespace. */
6633 if (decl_context == NORMAL && !toplevel_bindings_p ())
6635 struct cp_binding_level *b = current_binding_level;
6636 current_binding_level = b->level_chain;
6637 if (current_binding_level != 0 && toplevel_bindings_p ())
6638 decl_context = PARM;
6639 current_binding_level = b;
6642 if (name == NULL)
6643 name = decl_context == PARM ? "parameter" : "type name";
6645 /* If there were multiple types specified in the decl-specifier-seq,
6646 issue an error message. */
6647 if (declspecs->multiple_types_p)
6648 error ("two or more data types in declaration of %qs", name);
6649 /* Extract the basic type from the decl-specifier-seq. */
6650 type = declspecs->type;
6651 if (type == error_mark_node)
6653 type = NULL_TREE;
6654 type_was_error_mark_node = true;
6656 /* If the entire declaration is itself tagged as deprecated then
6657 suppress reports of deprecated items. */
6658 if (type && TREE_DEPRECATED (type)
6659 && deprecated_state != DEPRECATED_SUPPRESS)
6660 warn_deprecated_use (type);
6661 if (type && TREE_CODE (type) == TYPE_DECL)
6663 typedef_decl = type;
6664 type = TREE_TYPE (typedef_decl);
6666 /* No type at all: default to `int', and set DEFAULTED_INT
6667 because it was not a user-defined typedef. */
6668 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
6670 /* These imply 'int'. */
6671 type = integer_type_node;
6672 defaulted_int = 1;
6674 /* Gather flags. */
6675 explicit_int = declspecs->explicit_int_p;
6676 explicit_char = declspecs->explicit_char_p;
6678 /* Check for repeated decl-specifiers. */
6679 for (ds = ds_first; ds != ds_last; ++ds)
6681 unsigned count = declspecs->specs[(int)ds];
6682 if (count < 2)
6683 continue;
6684 /* The "long" specifier is a special case because of
6685 "long long". */
6686 if (ds == ds_long)
6688 if (count > 2)
6689 error ("%<long long long%> is too long for GCC");
6690 else if (pedantic && !in_system_header && warn_long_long)
6691 pedwarn ("ISO C++ does not support %<long long%>");
6692 else
6693 longlong = 1;
6695 else if (declspecs->specs[(int)ds] > 1)
6697 static const char *const decl_spec_names[] = {
6698 "signed",
6699 "unsigned",
6700 "short",
6701 "long",
6702 "const",
6703 "volatile",
6704 "restrict",
6705 "inline",
6706 "virtual",
6707 "explicit",
6708 "friend",
6709 "typedef",
6710 "__complex",
6711 "__thread"
6713 error ("duplicate %qs", decl_spec_names[(int)ds]);
6717 #if 0
6718 /* See the code below that used this. */
6719 if (typedef_decl)
6720 decl_attr = DECL_ATTRIBUTES (typedef_decl);
6721 #endif
6722 typedef_type = type;
6725 if (sfk != sfk_conversion)
6726 ctor_return_type = ctype;
6728 if (sfk != sfk_none)
6729 type = check_special_function_return_type (sfk, type,
6730 ctor_return_type);
6731 else if (type == NULL_TREE)
6733 int is_main;
6735 explicit_int = -1;
6737 /* We handle `main' specially here, because 'main () { }' is so
6738 common. With no options, it is allowed. With -Wreturn-type,
6739 it is a warning. It is only an error with -pedantic-errors. */
6740 is_main = (funcdef_flag
6741 && dname && MAIN_NAME_P (dname)
6742 && ctype == NULL_TREE
6743 && in_namespace == NULL_TREE
6744 && current_namespace == global_namespace);
6746 if (type_was_error_mark_node)
6747 /* We've already issued an error, don't complain more. */;
6748 else if (in_system_header || flag_ms_extensions)
6749 /* Allow it, sigh. */;
6750 else if (pedantic || ! is_main)
6751 pedwarn ("ISO C++ forbids declaration of %qs with no type", name);
6752 else if (warn_return_type)
6753 warning (0, "ISO C++ forbids declaration of %qs with no type", name);
6755 type = integer_type_node;
6758 ctype = NULL_TREE;
6760 /* Now process the modifiers that were specified
6761 and check for invalid combinations. */
6763 /* Long double is a special combination. */
6764 if (long_p && TYPE_MAIN_VARIANT (type) == double_type_node)
6766 long_p = false;
6767 type = build_qualified_type (long_double_type_node,
6768 cp_type_quals (type));
6771 /* Check all other uses of type modifiers. */
6773 if (unsigned_p || signed_p || long_p || short_p)
6775 int ok = 0;
6777 if (TREE_CODE (type) == REAL_TYPE)
6778 error ("short, signed or unsigned invalid for %qs", name);
6779 else if (TREE_CODE (type) != INTEGER_TYPE)
6780 error ("long, short, signed or unsigned invalid for %qs", name);
6781 else if (long_p && short_p)
6782 error ("long and short specified together for %qs", name);
6783 else if ((long_p || short_p) && explicit_char)
6784 error ("long or short specified with char for %qs", name);
6785 else if ((long_p|| short_p) && TREE_CODE (type) == REAL_TYPE)
6786 error ("long or short specified with floating type for %qs", name);
6787 else if (signed_p && unsigned_p)
6788 error ("signed and unsigned given together for %qs", name);
6789 else
6791 ok = 1;
6792 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
6794 pedwarn ("long, short, signed or unsigned used invalidly for %qs",
6795 name);
6796 if (flag_pedantic_errors)
6797 ok = 0;
6801 /* Discard the type modifiers if they are invalid. */
6802 if (! ok)
6804 unsigned_p = false;
6805 signed_p = false;
6806 long_p = false;
6807 short_p = false;
6808 longlong = 0;
6812 /* Decide whether an integer type is signed or not.
6813 Optionally treat bitfields as signed by default. */
6814 if (unsigned_p
6815 /* [class.bit]
6817 It is implementation-defined whether a plain (neither
6818 explicitly signed or unsigned) char, short, int, or long
6819 bit-field is signed or unsigned.
6821 Naturally, we extend this to long long as well. Note that
6822 this does not include wchar_t. */
6823 || (bitfield && !flag_signed_bitfields
6824 && !signed_p
6825 /* A typedef for plain `int' without `signed' can be
6826 controlled just like plain `int', but a typedef for
6827 `signed int' cannot be so controlled. */
6828 && !(typedef_decl
6829 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
6830 && (TREE_CODE (type) == INTEGER_TYPE
6831 || TREE_CODE (type) == CHAR_TYPE)
6832 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
6834 if (longlong)
6835 type = long_long_unsigned_type_node;
6836 else if (long_p)
6837 type = long_unsigned_type_node;
6838 else if (short_p)
6839 type = short_unsigned_type_node;
6840 else if (type == char_type_node)
6841 type = unsigned_char_type_node;
6842 else if (typedef_decl)
6843 type = c_common_unsigned_type (type);
6844 else
6845 type = unsigned_type_node;
6847 else if (signed_p && type == char_type_node)
6848 type = signed_char_type_node;
6849 else if (longlong)
6850 type = long_long_integer_type_node;
6851 else if (long_p)
6852 type = long_integer_type_node;
6853 else if (short_p)
6854 type = short_integer_type_node;
6856 if (declspecs->specs[(int)ds_complex])
6858 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
6859 error ("complex invalid for %qs", name);
6860 /* If we just have "complex", it is equivalent to
6861 "complex double", but if any modifiers at all are specified it is
6862 the complex form of TYPE. E.g, "complex short" is
6863 "complex short int". */
6865 else if (defaulted_int && ! longlong
6866 && ! (long_p || short_p || signed_p || unsigned_p))
6867 type = complex_double_type_node;
6868 else if (type == integer_type_node)
6869 type = complex_integer_type_node;
6870 else if (type == float_type_node)
6871 type = complex_float_type_node;
6872 else if (type == double_type_node)
6873 type = complex_double_type_node;
6874 else if (type == long_double_type_node)
6875 type = complex_long_double_type_node;
6876 else
6877 type = build_complex_type (type);
6880 type_quals = TYPE_UNQUALIFIED;
6881 if (declspecs->specs[(int)ds_const])
6882 type_quals |= TYPE_QUAL_CONST;
6883 if (declspecs->specs[(int)ds_volatile])
6884 type_quals |= TYPE_QUAL_VOLATILE;
6885 if (declspecs->specs[(int)ds_restrict])
6886 type_quals |= TYPE_QUAL_RESTRICT;
6887 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
6888 error ("qualifiers are not allowed on declaration of %<operator %T%>",
6889 ctor_return_type);
6891 if (TREE_CODE (type) == FUNCTION_TYPE
6892 && type_quals != TYPE_UNQUALIFIED)
6894 /* This was an error in C++98 (cv-qualifiers cannot be added to
6895 a function type), but DR 295 makes the code well-formed by
6896 dropping the extra qualifiers. */
6897 if (pedantic)
6899 tree bad_type = build_qualified_type (type, type_quals);
6900 pedwarn ("ignoring %qV qualifiers added to function type %qT",
6901 bad_type, type);
6903 type_quals = TYPE_UNQUALIFIED;
6905 type_quals |= cp_type_quals (type);
6906 type = cp_build_qualified_type_real
6907 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
6908 ? tf_ignore_bad_quals : 0) | tf_error | tf_warning));
6909 /* We might have ignored or rejected some of the qualifiers. */
6910 type_quals = cp_type_quals (type);
6912 staticp = 0;
6913 inlinep = !! declspecs->specs[(int)ds_inline];
6914 virtualp = !! declspecs->specs[(int)ds_virtual];
6915 explicitp = !! declspecs->specs[(int)ds_explicit];
6917 storage_class = declspecs->storage_class;
6918 if (storage_class == sc_static)
6919 staticp = 1 + (decl_context == FIELD);
6921 if (virtualp && staticp == 2)
6923 error ("member %qD cannot be declared both virtual and static", dname);
6924 staticp = 0;
6926 friendp = !! declspecs->specs[(int)ds_friend];
6928 if (dependant_name && !friendp)
6930 error ("%<%T::%D%> is not a valid declarator", ctype, dependant_name);
6931 return void_type_node;
6934 /* Issue errors about use of storage classes for parameters. */
6935 if (decl_context == PARM)
6937 if (declspecs->specs[(int)ds_typedef])
6938 error ("typedef declaration invalid in parameter declaration");
6939 else if (storage_class == sc_static
6940 || storage_class == sc_extern
6941 || thread_p)
6942 error ("storage class specifiers invalid in parameter declarations");
6945 /* Give error if `virtual' is used outside of class declaration. */
6946 if (virtualp
6947 && (current_class_name == NULL_TREE || decl_context != FIELD))
6949 error ("virtual outside class declaration");
6950 virtualp = 0;
6953 /* Static anonymous unions are dealt with here. */
6954 if (staticp && decl_context == TYPENAME
6955 && declspecs->type
6956 && ANON_AGGR_TYPE_P (declspecs->type))
6957 decl_context = FIELD;
6959 /* Warn about storage classes that are invalid for certain
6960 kinds of declarations (parameters, typenames, etc.). */
6961 if (declspecs->multiple_storage_classes_p)
6962 error ("multiple storage classes in declaration of %qs", name);
6963 else if (thread_p
6964 && ((storage_class
6965 && storage_class != sc_extern
6966 && storage_class != sc_static)
6967 || declspecs->specs[(int)ds_typedef]))
6969 error ("multiple storage classes in declaration of %qs", name);
6970 thread_p = false;
6972 else if (decl_context != NORMAL
6973 && ((storage_class != sc_none
6974 && storage_class != sc_mutable)
6975 || thread_p))
6977 if ((decl_context == PARM || decl_context == CATCHPARM)
6978 && (storage_class == sc_register
6979 || storage_class == sc_auto))
6981 else if (declspecs->specs[(int)ds_typedef])
6983 else if (decl_context == FIELD
6984 /* C++ allows static class elements. */
6985 && storage_class == sc_static)
6986 /* C++ also allows inlines and signed and unsigned elements,
6987 but in those cases we don't come in here. */
6989 else
6991 if (decl_context == FIELD)
6992 error ("storage class specified for %qs", name);
6993 else
6995 if (decl_context == PARM || decl_context == CATCHPARM)
6996 error ("storage class specified for parameter %qs", name);
6997 else
6998 error ("storage class specified for typename");
7000 if (storage_class == sc_register
7001 || storage_class == sc_auto
7002 || storage_class == sc_extern
7003 || thread_p)
7004 storage_class = sc_none;
7007 else if (storage_class == sc_extern && initialized
7008 && !funcdef_flag)
7010 if (toplevel_bindings_p ())
7012 /* It's common practice (and completely valid) to have a const
7013 be initialized and declared extern. */
7014 if (!(type_quals & TYPE_QUAL_CONST))
7015 warning (0, "%qs initialized and declared %<extern%>", name);
7017 else
7018 error ("%qs has both %<extern%> and initializer", name);
7020 else if (storage_class == sc_extern && funcdef_flag
7021 && ! toplevel_bindings_p ())
7022 error ("nested function %qs declared %<extern%>", name);
7023 else if (toplevel_bindings_p ())
7025 if (storage_class == sc_auto)
7026 error ("top-level declaration of %qs specifies %<auto%>", name);
7028 else if (thread_p
7029 && storage_class != sc_extern
7030 && storage_class != sc_static)
7032 error ("function-scope %qs implicitly auto and declared %<__thread%>",
7033 name);
7034 thread_p = false;
7037 if (storage_class && friendp)
7038 error ("storage class specifiers invalid in friend function declarations");
7040 if (!id_declarator)
7041 unqualified_id = NULL_TREE;
7042 else
7044 unqualified_id = id_declarator->u.id.unqualified_name;
7045 if (TREE_CODE (unqualified_id) == BASELINK)
7046 unqualified_id = BASELINK_FUNCTIONS (unqualified_id);
7047 switch (TREE_CODE (unqualified_id))
7049 case BIT_NOT_EXPR:
7050 unqualified_id
7051 = constructor_name (TREE_OPERAND (unqualified_id, 0));
7052 break;
7054 case TYPE_DECL:
7055 unqualified_id
7056 = constructor_name (TREE_TYPE (unqualified_id));
7057 break;
7059 case IDENTIFIER_NODE:
7060 case TEMPLATE_ID_EXPR:
7061 break;
7063 default:
7064 gcc_unreachable ();
7068 /* Determine the type of the entity declared by recurring on the
7069 declarator. */
7070 for (; declarator; declarator = declarator->declarator)
7072 const cp_declarator *inner_declarator;
7073 tree attrs;
7075 if (type == error_mark_node)
7076 return error_mark_node;
7078 attrs = declarator->attributes;
7079 if (attrs)
7081 int attr_flags;
7083 attr_flags = 0;
7084 if (declarator == NULL || declarator->kind == cdk_id)
7085 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
7086 if (declarator->kind == cdk_function)
7087 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
7088 if (declarator->kind == cdk_array)
7089 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
7090 returned_attrs = decl_attributes (&type,
7091 chainon (returned_attrs, attrs),
7092 attr_flags);
7095 if (declarator->kind == cdk_id)
7096 break;
7098 inner_declarator = declarator->declarator;
7100 switch (declarator->kind)
7102 case cdk_array:
7103 type = create_array_type_for_decl (dname, type,
7104 declarator->u.array.bounds);
7105 break;
7107 case cdk_function:
7109 tree arg_types;
7110 int funcdecl_p;
7112 /* Declaring a function type.
7113 Make sure we have a valid type for the function to return. */
7115 /* We now know that the TYPE_QUALS don't apply to the
7116 decl, but to its return type. */
7117 type_quals = TYPE_UNQUALIFIED;
7119 /* Warn about some types functions can't return. */
7121 if (TREE_CODE (type) == FUNCTION_TYPE)
7123 error ("%qs declared as function returning a function", name);
7124 type = integer_type_node;
7126 if (TREE_CODE (type) == ARRAY_TYPE)
7128 error ("%qs declared as function returning an array", name);
7129 type = integer_type_node;
7132 /* Pick up type qualifiers which should be applied to `this'. */
7133 quals = declarator->u.function.qualifiers;
7135 /* Pick up the exception specifications. */
7136 raises = declarator->u.function.exception_specification;
7138 /* Say it's a definition only for the CALL_EXPR
7139 closest to the identifier. */
7140 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
7142 if (ctype == NULL_TREE
7143 && decl_context == FIELD
7144 && funcdecl_p
7145 && (friendp == 0 || dname == current_class_name))
7146 ctype = current_class_type;
7148 if (ctype && sfk == sfk_conversion)
7149 TYPE_HAS_CONVERSION (ctype) = 1;
7150 if (ctype && (sfk == sfk_constructor
7151 || sfk == sfk_destructor))
7153 /* We are within a class's scope. If our declarator name
7154 is the same as the class name, and we are defining
7155 a function, then it is a constructor/destructor, and
7156 therefore returns a void type. */
7158 if (flags == DTOR_FLAG)
7160 /* ISO C++ 12.4/2. A destructor may not be
7161 declared const or volatile. A destructor may
7162 not be static. */
7163 if (staticp == 2)
7164 error ("destructor cannot be static member function");
7165 if (quals)
7167 error ("destructors may not be cv-qualified");
7168 quals = TYPE_UNQUALIFIED;
7170 if (decl_context == FIELD)
7172 if (! member_function_or_else (ctype,
7173 current_class_type,
7174 flags))
7175 return void_type_node;
7178 else /* It's a constructor. */
7180 if (explicitp == 1)
7181 explicitp = 2;
7182 /* ISO C++ 12.1. A constructor may not be
7183 declared const or volatile. A constructor may
7184 not be virtual. A constructor may not be
7185 static. */
7186 if (staticp == 2)
7187 error ("constructor cannot be static member function");
7188 if (virtualp)
7190 pedwarn ("constructors cannot be declared virtual");
7191 virtualp = 0;
7193 if (quals)
7195 error ("constructors may not be cv-qualified");
7196 quals = TYPE_UNQUALIFIED;
7198 if (decl_context == FIELD)
7200 if (! member_function_or_else (ctype,
7201 current_class_type,
7202 flags))
7203 return void_type_node;
7204 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
7205 if (sfk != sfk_constructor)
7206 return NULL_TREE;
7209 if (decl_context == FIELD)
7210 staticp = 0;
7212 else if (friendp)
7214 if (initialized)
7215 error ("can't initialize friend function %qs", name);
7216 if (virtualp)
7218 /* Cannot be both friend and virtual. */
7219 error ("virtual functions cannot be friends");
7220 friendp = 0;
7222 if (decl_context == NORMAL)
7223 error ("friend declaration not in class definition");
7224 if (current_function_decl && funcdef_flag)
7225 error ("can't define friend function %qs in a local "
7226 "class definition",
7227 name);
7230 arg_types = grokparms (declarator->u.function.parameters,
7231 &parms);
7233 if (inner_declarator
7234 && inner_declarator->kind == cdk_id
7235 && inner_declarator->u.id.sfk == sfk_destructor
7236 && arg_types != void_list_node)
7238 error ("destructors may not have parameters");
7239 arg_types = void_list_node;
7240 parms = NULL_TREE;
7243 type = build_function_type (type, arg_types);
7244 type = cp_build_qualified_type (type, quals);
7246 break;
7248 case cdk_pointer:
7249 case cdk_reference:
7250 case cdk_ptrmem:
7251 /* Filter out pointers-to-references and references-to-references.
7252 We can get these if a TYPE_DECL is used. */
7254 if (TREE_CODE (type) == REFERENCE_TYPE)
7256 error (declarator->kind == cdk_reference
7257 ? "cannot declare reference to %q#T"
7258 : "cannot declare pointer to %q#T", type);
7259 type = TREE_TYPE (type);
7261 else if (VOID_TYPE_P (type))
7263 if (declarator->kind == cdk_reference)
7264 error ("cannot declare reference to %q#T", type);
7265 else if (declarator->kind == cdk_ptrmem)
7266 error ("cannot declare pointer to %q#T member", type);
7269 /* We now know that the TYPE_QUALS don't apply to the decl,
7270 but to the target of the pointer. */
7271 type_quals = TYPE_UNQUALIFIED;
7273 if (declarator->kind == cdk_ptrmem
7274 && (TREE_CODE (type) == FUNCTION_TYPE
7275 || (quals && TREE_CODE (type) == METHOD_TYPE)))
7277 tree dummy;
7279 /* If the type is a FUNCTION_TYPE, pick up the
7280 qualifiers from that function type. No other
7281 qualifiers may be supplied. */
7282 if (TREE_CODE (type) == FUNCTION_TYPE)
7283 quals = cp_type_quals (type);
7285 dummy = build_decl (TYPE_DECL, NULL_TREE, type);
7286 grok_method_quals (declarator->u.pointer.class_type,
7287 dummy, quals);
7288 type = TREE_TYPE (dummy);
7289 quals = TYPE_UNQUALIFIED;
7292 if (declarator->kind == cdk_reference)
7294 if (!VOID_TYPE_P (type))
7295 type = build_reference_type (type);
7297 else if (TREE_CODE (type) == METHOD_TYPE)
7298 type = build_ptrmemfunc_type (build_pointer_type (type));
7299 else if (declarator->kind == cdk_ptrmem)
7301 /* We might have parsed a namespace as the class type. */
7302 if (TREE_CODE (declarator->u.pointer.class_type)
7303 == NAMESPACE_DECL)
7305 error ("%qD is a namespace",
7306 declarator->u.pointer.class_type);
7307 type = build_pointer_type (type);
7309 else if (declarator->u.pointer.class_type == error_mark_node)
7310 /* We will already have complained. */
7311 type = error_mark_node;
7312 else
7313 type = build_ptrmem_type (declarator->u.pointer.class_type,
7314 type);
7316 else
7317 type = build_pointer_type (type);
7319 /* Process a list of type modifier keywords (such as
7320 const or volatile) that were given inside the `*' or `&'. */
7322 if (declarator->u.pointer.qualifiers)
7324 type
7325 = cp_build_qualified_type (type,
7326 declarator->u.pointer.qualifiers);
7327 type_quals = cp_type_quals (type);
7329 ctype = NULL_TREE;
7330 break;
7332 case cdk_error:
7333 break;
7335 default:
7336 gcc_unreachable ();
7340 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
7341 && TREE_CODE (type) != FUNCTION_TYPE
7342 && TREE_CODE (type) != METHOD_TYPE)
7344 error ("template-id %qD used as a declarator",
7345 unqualified_id);
7346 unqualified_id = dname;
7349 /* If DECLARATOR is non-NULL, we know it is a cdk_id declarator;
7350 otherwise, we would not have exited the loop above. */
7351 if (declarator
7352 && declarator->u.id.qualifying_scope
7353 && TYPE_P (declarator->u.id.qualifying_scope))
7355 tree t;
7357 ctype = declarator->u.id.qualifying_scope;
7358 ctype = TYPE_MAIN_VARIANT (ctype);
7359 t = ctype;
7360 while (t != NULL_TREE && CLASS_TYPE_P (t))
7362 /* You're supposed to have one `template <...>' for every
7363 template class, but you don't need one for a full
7364 specialization. For example:
7366 template <class T> struct S{};
7367 template <> struct S<int> { void f(); };
7368 void S<int>::f () {}
7370 is correct; there shouldn't be a `template <>' for the
7371 definition of `S<int>::f'. */
7372 if (CLASSTYPE_TEMPLATE_INFO (t)
7373 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
7374 || uses_template_parms (CLASSTYPE_TI_ARGS (t)))
7375 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
7376 template_count += 1;
7378 t = TYPE_MAIN_DECL (t);
7379 t = DECL_CONTEXT (t);
7382 if (ctype == current_class_type)
7384 /* class A {
7385 void A::f ();
7388 Is this ill-formed? */
7390 if (pedantic)
7391 pedwarn ("extra qualification %<%T::%> on member %qs ignored",
7392 ctype, name);
7394 else if (TREE_CODE (type) == FUNCTION_TYPE)
7396 tree sname = declarator->u.id.unqualified_name;
7398 if (TREE_CODE (sname) == IDENTIFIER_NODE
7399 && NEW_DELETE_OPNAME_P (sname))
7400 /* Overloaded operator new and operator delete
7401 are always static functions. */
7403 else if (current_class_type == NULL_TREE || friendp)
7404 type
7405 = build_method_type_directly (ctype,
7406 TREE_TYPE (type),
7407 TYPE_ARG_TYPES (type));
7408 else
7410 error ("cannot declare member function %<%T::%s%> within %<%T%>",
7411 ctype, name, current_class_type);
7412 return error_mark_node;
7415 else if (declspecs->specs[(int)ds_typedef]
7416 || COMPLETE_TYPE_P (complete_type (ctype)))
7418 /* Have to move this code elsewhere in this function.
7419 this code is used for i.e., typedef int A::M; M *pm;
7421 It is? How? jason 10/2/94 */
7423 if (current_class_type)
7425 error ("cannot declare member %<%T::%s%> within %qT",
7426 ctype, name, current_class_type);
7427 return void_type_node;
7430 else
7432 cxx_incomplete_type_error (NULL_TREE, ctype);
7433 return error_mark_node;
7437 if (returned_attrs)
7439 if (attrlist)
7440 *attrlist = chainon (returned_attrs, *attrlist);
7441 else
7442 attrlist = &returned_attrs;
7445 /* Now TYPE has the actual type. */
7447 /* Did array size calculations overflow? */
7449 if (TREE_CODE (type) == ARRAY_TYPE
7450 && COMPLETE_TYPE_P (type)
7451 && TREE_OVERFLOW (TYPE_SIZE (type)))
7453 error ("size of array %qs is too large", name);
7454 /* If we proceed with the array type as it is, we'll eventually
7455 crash in tree_low_cst(). */
7456 type = error_mark_node;
7459 if ((decl_context == FIELD || decl_context == PARM)
7460 && !processing_template_decl
7461 && variably_modified_type_p (type, NULL_TREE))
7463 if (decl_context == FIELD)
7464 error ("data member may not have variably modified type %qT", type);
7465 else
7466 error ("parameter may not have variably modified type %qT", type);
7467 type = error_mark_node;
7470 if (explicitp == 1 || (explicitp && friendp))
7472 /* [dcl.fct.spec] The explicit specifier shall only be used in
7473 declarations of constructors within a class definition. */
7474 error ("only declarations of constructors can be %<explicit%>");
7475 explicitp = 0;
7478 if (storage_class == sc_mutable)
7480 if (decl_context != FIELD || friendp)
7482 error ("non-member %qs cannot be declared %<mutable%>", name);
7483 storage_class = sc_none;
7485 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
7487 error ("non-object member %qs cannot be declared %<mutable%>", name);
7488 storage_class = sc_none;
7490 else if (TREE_CODE (type) == FUNCTION_TYPE
7491 || TREE_CODE (type) == METHOD_TYPE)
7493 error ("function %qs cannot be declared %<mutable%>", name);
7494 storage_class = sc_none;
7496 else if (staticp)
7498 error ("static %qs cannot be declared %<mutable%>", name);
7499 storage_class = sc_none;
7501 else if (type_quals & TYPE_QUAL_CONST)
7503 error ("const %qs cannot be declared %<mutable%>", name);
7504 storage_class = sc_none;
7508 /* If this is declaring a typedef name, return a TYPE_DECL. */
7509 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
7511 tree decl;
7513 /* Note that the grammar rejects storage classes
7514 in typenames, fields or parameters. */
7515 if (current_lang_name == lang_name_java)
7516 TYPE_FOR_JAVA (type) = 1;
7518 if (decl_context == FIELD)
7519 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
7520 else
7521 decl = build_decl (TYPE_DECL, unqualified_id, type);
7522 if (id_declarator && declarator->u.id.qualifying_scope)
7523 error ("%Jtypedef name may not be a nested-name-specifier", decl);
7525 if (decl_context != FIELD)
7527 if (!current_function_decl)
7528 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7529 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
7530 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
7531 (current_function_decl)))
7532 /* The TYPE_DECL is "abstract" because there will be
7533 clones of this constructor/destructor, and there will
7534 be copies of this TYPE_DECL generated in those
7535 clones. */
7536 DECL_ABSTRACT (decl) = 1;
7538 else if (constructor_name_p (unqualified_id, current_class_type))
7539 pedwarn ("ISO C++ forbids nested type %qD with same name "
7540 "as enclosing class",
7541 unqualified_id);
7543 /* If the user declares "typedef struct {...} foo" then the
7544 struct will have an anonymous name. Fill that name in now.
7545 Nothing can refer to it, so nothing needs know about the name
7546 change. */
7547 if (type != error_mark_node
7548 && unqualified_id
7549 && TYPE_NAME (type)
7550 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7551 && TYPE_ANONYMOUS_P (type)
7552 /* Don't do this if there are attributes. */
7553 && (!attrlist || !*attrlist)
7554 && cp_type_quals (type) == TYPE_UNQUALIFIED)
7556 tree oldname = TYPE_NAME (type);
7557 tree t;
7559 /* Replace the anonymous name with the real name everywhere. */
7560 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
7561 if (TYPE_NAME (t) == oldname)
7562 TYPE_NAME (t) = decl;
7564 if (TYPE_LANG_SPECIFIC (type))
7565 TYPE_WAS_ANONYMOUS (type) = 1;
7567 /* If this is a typedef within a template class, the nested
7568 type is a (non-primary) template. The name for the
7569 template needs updating as well. */
7570 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
7571 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
7572 = TYPE_IDENTIFIER (type);
7574 /* FIXME remangle member functions; member functions of a
7575 type with external linkage have external linkage. */
7578 if (quals)
7580 if (ctype == NULL_TREE)
7582 if (TREE_CODE (type) == METHOD_TYPE)
7583 ctype = TYPE_METHOD_BASETYPE (type);
7584 /* Any qualifiers on a function type typedef have
7585 already been dealt with. */
7586 else if (TREE_CODE (type) == FUNCTION_TYPE)
7587 quals = TYPE_UNQUALIFIED;
7589 if (ctype != NULL_TREE)
7590 grok_method_quals (ctype, decl, quals);
7593 if (signed_p
7594 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
7595 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
7597 bad_specifiers (decl, "type", virtualp, quals != TYPE_UNQUALIFIED,
7598 inlinep, friendp, raises != NULL_TREE);
7600 return decl;
7603 /* Detect the case of an array type of unspecified size
7604 which came, as such, direct from a typedef name.
7605 We must copy the type, so that the array's domain can be
7606 individually set by the object's initializer. */
7608 if (type && typedef_type
7609 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
7610 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
7611 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
7613 /* Detect where we're using a typedef of function type to declare a
7614 function. PARMS will not be set, so we must create it now. */
7616 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
7618 tree decls = NULL_TREE;
7619 tree args;
7621 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
7623 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
7625 TREE_CHAIN (decl) = decls;
7626 decls = decl;
7629 parms = nreverse (decls);
7631 if (decl_context != TYPENAME)
7633 /* A cv-qualifier-seq shall only be part of the function type
7634 for a non-static member function. [8.3.5/4 dcl.fct] */
7635 if (cp_type_quals (type) != TYPE_UNQUALIFIED
7636 && (current_class_type == NULL_TREE || staticp) )
7638 error ("qualified function types cannot be used to declare %s functions",
7639 (staticp? "static member" : "free"));
7640 type = TYPE_MAIN_VARIANT (type);
7643 /* The qualifiers on the function type become the qualifiers on
7644 the non-static member function. */
7645 quals |= cp_type_quals (type);
7649 /* If this is a type name (such as, in a cast or sizeof),
7650 compute the type and return it now. */
7652 if (decl_context == TYPENAME)
7654 /* Note that the grammar rejects storage classes
7655 in typenames, fields or parameters. */
7656 if (type_quals != TYPE_UNQUALIFIED)
7657 type_quals = TYPE_UNQUALIFIED;
7659 /* Special case: "friend class foo" looks like a TYPENAME context. */
7660 if (friendp)
7662 if (type_quals != TYPE_UNQUALIFIED)
7664 error ("type qualifiers specified for friend class declaration");
7665 type_quals = TYPE_UNQUALIFIED;
7667 if (inlinep)
7669 error ("%<inline%> specified for friend class declaration");
7670 inlinep = 0;
7673 if (!current_aggr)
7675 /* Don't allow friend declaration without a class-key. */
7676 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
7677 pedwarn ("template parameters cannot be friends");
7678 else if (TREE_CODE (type) == TYPENAME_TYPE)
7679 pedwarn ("friend declaration requires class-key, "
7680 "i.e. %<friend class %T::%D%>",
7681 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
7682 else
7683 pedwarn ("friend declaration requires class-key, "
7684 "i.e. %<friend %#T%>",
7685 type);
7688 /* Only try to do this stuff if we didn't already give up. */
7689 if (type != integer_type_node)
7691 /* A friendly class? */
7692 if (current_class_type)
7693 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
7694 /*complain=*/true);
7695 else
7696 error ("trying to make class %qT a friend of global scope",
7697 type);
7699 type = void_type_node;
7702 else if (quals)
7704 if (ctype == NULL_TREE)
7706 if (TREE_CODE (type) != METHOD_TYPE)
7707 error ("invalid qualifiers on non-member function type");
7708 else
7709 ctype = TYPE_METHOD_BASETYPE (type);
7711 if (ctype)
7713 tree dummy = build_decl (TYPE_DECL, unqualified_id, type);
7714 grok_method_quals (ctype, dummy, quals);
7715 type = TREE_TYPE (dummy);
7719 return type;
7721 else if (unqualified_id == NULL_TREE && decl_context != PARM
7722 && decl_context != CATCHPARM
7723 && TREE_CODE (type) != UNION_TYPE
7724 && ! bitfield)
7726 error ("abstract declarator %qT used as declaration", type);
7727 return error_mark_node;
7730 /* Only functions may be declared using an operator-function-id. */
7731 if (unqualified_id
7732 && IDENTIFIER_OPNAME_P (unqualified_id)
7733 && TREE_CODE (type) != FUNCTION_TYPE
7734 && TREE_CODE (type) != METHOD_TYPE)
7736 error ("declaration of %qD as non-function", unqualified_id);
7737 return error_mark_node;
7740 /* We don't check parameter types here because we can emit a better
7741 error message later. */
7742 if (decl_context != PARM)
7743 type = check_var_type (unqualified_id, type);
7745 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
7746 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
7748 if (decl_context == PARM || decl_context == CATCHPARM)
7750 if (ctype || in_namespace)
7751 error ("cannot use %<::%> in parameter declaration");
7753 /* A parameter declared as an array of T is really a pointer to T.
7754 One declared as a function is really a pointer to a function.
7755 One declared as a member is really a pointer to member. */
7757 if (TREE_CODE (type) == ARRAY_TYPE)
7759 /* Transfer const-ness of array into that of type pointed to. */
7760 type = build_pointer_type (TREE_TYPE (type));
7761 type_quals = TYPE_UNQUALIFIED;
7763 else if (TREE_CODE (type) == FUNCTION_TYPE)
7764 type = build_pointer_type (type);
7768 tree decl;
7770 if (decl_context == PARM)
7772 decl = cp_build_parm_decl (unqualified_id, type);
7774 bad_specifiers (decl, "parameter", virtualp, quals != TYPE_UNQUALIFIED,
7775 inlinep, friendp, raises != NULL_TREE);
7777 else if (decl_context == FIELD)
7779 /* The C99 flexible array extension. */
7780 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
7781 && TYPE_DOMAIN (type) == NULL_TREE)
7783 tree itype = compute_array_index_type (dname, integer_zero_node);
7784 type = build_cplus_array_type (TREE_TYPE (type), itype);
7787 if (type == error_mark_node)
7789 /* Happens when declaring arrays of sizes which
7790 are error_mark_node, for example. */
7791 decl = NULL_TREE;
7793 else if (in_namespace && !friendp)
7795 /* Something like struct S { int N::j; }; */
7796 error ("invalid use of %<::%>");
7797 decl = NULL_TREE;
7799 else if (TREE_CODE (type) == FUNCTION_TYPE)
7801 int publicp = 0;
7802 tree function_context;
7804 if (friendp == 0)
7806 if (ctype == NULL_TREE)
7807 ctype = current_class_type;
7809 if (ctype == NULL_TREE)
7811 error ("can't make %qD into a method -- not in a class",
7812 unqualified_id);
7813 return void_type_node;
7816 /* ``A union may [ ... ] not [ have ] virtual functions.''
7817 ARM 9.5 */
7818 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
7820 error ("function %qD declared virtual inside a union",
7821 unqualified_id);
7822 return void_type_node;
7825 if (NEW_DELETE_OPNAME_P (unqualified_id))
7827 if (virtualp)
7829 error ("%qD cannot be declared virtual, since it "
7830 "is always static",
7831 unqualified_id);
7832 virtualp = 0;
7835 else if (staticp < 2)
7836 type = build_method_type_directly (ctype,
7837 TREE_TYPE (type),
7838 TYPE_ARG_TYPES (type));
7841 /* Check that the name used for a destructor makes sense. */
7842 if (sfk == sfk_destructor
7843 && !same_type_p (TREE_OPERAND
7844 (id_declarator->u.id.unqualified_name, 0),
7845 ctype))
7847 error ("declaration of %qD as member of %qT",
7848 id_declarator->u.id.unqualified_name,
7849 ctype);
7850 return error_mark_node;
7853 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
7854 function_context = (ctype != NULL_TREE) ?
7855 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
7856 publicp = (! friendp || ! staticp)
7857 && function_context == NULL_TREE;
7858 decl = grokfndecl (ctype, type,
7859 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
7860 ? unqualified_id : dname,
7861 parms,
7862 unqualified_id,
7863 virtualp, flags, quals, raises,
7864 friendp ? -1 : 0, friendp, publicp, inlinep,
7865 sfk,
7866 funcdef_flag, template_count, in_namespace, attrlist);
7867 if (decl == NULL_TREE)
7868 return decl;
7869 #if 0
7870 /* This clobbers the attrs stored in `decl' from `attrlist'. */
7871 /* The decl and setting of decl_attr is also turned off. */
7872 decl = build_decl_attribute_variant (decl, decl_attr);
7873 #endif
7875 /* [class.conv.ctor]
7877 A constructor declared without the function-specifier
7878 explicit that can be called with a single parameter
7879 specifies a conversion from the type of its first
7880 parameter to the type of its class. Such a constructor
7881 is called a converting constructor. */
7882 if (explicitp == 2)
7883 DECL_NONCONVERTING_P (decl) = 1;
7884 else if (DECL_CONSTRUCTOR_P (decl))
7886 /* The constructor can be called with exactly one
7887 parameter if there is at least one parameter, and
7888 any subsequent parameters have default arguments.
7889 Ignore any compiler-added parms. */
7890 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
7892 if (arg_types == void_list_node
7893 || (arg_types
7894 && TREE_CHAIN (arg_types)
7895 && TREE_CHAIN (arg_types) != void_list_node
7896 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
7897 DECL_NONCONVERTING_P (decl) = 1;
7900 else if (TREE_CODE (type) == METHOD_TYPE)
7902 /* We only get here for friend declarations of
7903 members of other classes. */
7904 /* All method decls are public, so tell grokfndecl to set
7905 TREE_PUBLIC, also. */
7906 decl = grokfndecl (ctype, type,
7907 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
7908 ? unqualified_id : dname,
7909 parms,
7910 unqualified_id,
7911 virtualp, flags, quals, raises,
7912 friendp ? -1 : 0, friendp, 1, 0, sfk,
7913 funcdef_flag, template_count, in_namespace,
7914 attrlist);
7915 if (decl == NULL_TREE)
7916 return NULL_TREE;
7918 else if (!staticp && !dependent_type_p (type)
7919 && !COMPLETE_TYPE_P (complete_type (type))
7920 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
7922 if (unqualified_id)
7923 error ("field %qD has incomplete type", unqualified_id);
7924 else
7925 error ("name %qT has incomplete type", type);
7927 /* If we're instantiating a template, tell them which
7928 instantiation made the field's type be incomplete. */
7929 if (current_class_type
7930 && TYPE_NAME (current_class_type)
7931 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
7932 && declspecs->type
7933 && declspecs->type == type)
7934 error (" in instantiation of template %qT",
7935 current_class_type);
7937 type = error_mark_node;
7938 decl = NULL_TREE;
7940 else
7942 if (friendp)
7944 error ("%qE is neither function nor member function; "
7945 "cannot be declared friend", unqualified_id);
7946 friendp = 0;
7948 decl = NULL_TREE;
7951 if (friendp)
7953 /* Friends are treated specially. */
7954 if (ctype == current_class_type)
7955 warning (0, "member functions are implicitly friends of their class");
7956 else if (decl && DECL_NAME (decl))
7958 if (template_class_depth (current_class_type) == 0)
7960 decl = check_explicit_specialization
7961 (unqualified_id, decl, template_count,
7962 2 * (funcdef_flag != 0) + 4);
7963 if (decl == error_mark_node)
7964 return error_mark_node;
7967 decl = do_friend (ctype, unqualified_id, decl,
7968 *attrlist, flags, quals, funcdef_flag);
7969 return decl;
7971 else
7972 return void_type_node;
7975 /* Structure field. It may not be a function, except for C++. */
7977 if (decl == NULL_TREE)
7979 if (initialized)
7981 if (!staticp)
7983 /* An attempt is being made to initialize a non-static
7984 member. But, from [class.mem]:
7986 4 A member-declarator can contain a
7987 constant-initializer only if it declares a static
7988 member (_class.static_) of integral or enumeration
7989 type, see _class.static.data_.
7991 This used to be relatively common practice, but
7992 the rest of the compiler does not correctly
7993 handle the initialization unless the member is
7994 static so we make it static below. */
7995 pedwarn ("ISO C++ forbids initialization of member %qD",
7996 unqualified_id);
7997 pedwarn ("making %qD static", unqualified_id);
7998 staticp = 1;
8001 if (uses_template_parms (type))
8002 /* We'll check at instantiation time. */
8004 else if (check_static_variable_definition (unqualified_id,
8005 type))
8006 /* If we just return the declaration, crashes
8007 will sometimes occur. We therefore return
8008 void_type_node, as if this was a friend
8009 declaration, to cause callers to completely
8010 ignore this declaration. */
8011 return void_type_node;
8014 if (staticp)
8016 /* C++ allows static class members. All other work
8017 for this is done by grokfield. */
8018 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
8019 set_linkage_for_static_data_member (decl);
8020 /* Even if there is an in-class initialization, DECL
8021 is considered undefined until an out-of-class
8022 definition is provided. */
8023 DECL_EXTERNAL (decl) = 1;
8025 else
8027 decl = build_decl (FIELD_DECL, unqualified_id, type);
8028 DECL_NONADDRESSABLE_P (decl) = bitfield;
8029 if (storage_class == sc_mutable)
8031 DECL_MUTABLE_P (decl) = 1;
8032 storage_class = sc_none;
8036 bad_specifiers (decl, "field", virtualp, quals != TYPE_UNQUALIFIED,
8037 inlinep, friendp, raises != NULL_TREE);
8040 else if (TREE_CODE (type) == FUNCTION_TYPE
8041 || TREE_CODE (type) == METHOD_TYPE)
8043 tree original_name;
8044 int publicp = 0;
8046 if (!unqualified_id)
8047 return NULL_TREE;
8049 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
8050 original_name = dname;
8051 else
8052 original_name = unqualified_id;
8054 if (storage_class == sc_auto)
8055 error ("storage class %<auto%> invalid for function %qs", name);
8056 else if (storage_class == sc_register)
8057 error ("storage class %<register%> invalid for function %qs", name);
8058 else if (thread_p)
8059 error ("storage class %<__thread%> invalid for function %qs", name);
8061 /* Function declaration not at top level.
8062 Storage classes other than `extern' are not allowed
8063 and `extern' makes no difference. */
8064 if (! toplevel_bindings_p ()
8065 && (storage_class == sc_static
8066 || declspecs->specs[(int)ds_inline])
8067 && pedantic)
8069 if (storage_class == sc_static)
8070 pedwarn ("%<static%> specified invalid for function %qs "
8071 "declared out of global scope", name);
8072 else
8073 pedwarn ("%<inline%> specifier invalid for function %qs "
8074 "declared out of global scope", name);
8077 if (ctype == NULL_TREE)
8079 if (virtualp)
8081 error ("virtual non-class function %qs", name);
8082 virtualp = 0;
8085 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
8086 && !NEW_DELETE_OPNAME_P (original_name))
8087 type = build_method_type_directly (ctype,
8088 TREE_TYPE (type),
8089 TYPE_ARG_TYPES (type));
8091 /* Record presence of `static'. */
8092 publicp = (ctype != NULL_TREE
8093 || storage_class == sc_extern
8094 || storage_class != sc_static);
8096 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
8097 virtualp, flags, quals, raises,
8098 1, friendp,
8099 publicp, inlinep, sfk, funcdef_flag,
8100 template_count, in_namespace, attrlist);
8101 if (decl == NULL_TREE)
8102 return NULL_TREE;
8104 if (staticp == 1)
8106 int invalid_static = 0;
8108 /* Don't allow a static member function in a class, and forbid
8109 declaring main to be static. */
8110 if (TREE_CODE (type) == METHOD_TYPE)
8112 pedwarn ("cannot declare member function %qD to have "
8113 "static linkage", decl);
8114 invalid_static = 1;
8116 else if (current_function_decl)
8118 /* FIXME need arm citation */
8119 error ("cannot declare static function inside another function");
8120 invalid_static = 1;
8123 if (invalid_static)
8125 staticp = 0;
8126 storage_class = sc_none;
8130 else
8132 /* It's a variable. */
8134 /* An uninitialized decl with `extern' is a reference. */
8135 decl = grokvardecl (type, unqualified_id,
8136 declspecs,
8137 initialized,
8138 (type_quals & TYPE_QUAL_CONST) != 0,
8139 ctype ? ctype : in_namespace);
8140 bad_specifiers (decl, "variable", virtualp, quals != TYPE_UNQUALIFIED,
8141 inlinep, friendp, raises != NULL_TREE);
8143 if (ctype)
8145 DECL_CONTEXT (decl) = ctype;
8146 if (staticp == 1)
8148 pedwarn ("%<static%> may not be used when defining "
8149 "(as opposed to declaring) a static data member");
8150 staticp = 0;
8151 storage_class = sc_none;
8153 if (storage_class == sc_register && TREE_STATIC (decl))
8155 error ("static member %qD declared %<register%>", decl);
8156 storage_class = sc_none;
8158 if (storage_class == sc_extern && pedantic)
8160 pedwarn ("cannot explicitly declare member %q#D to have "
8161 "extern linkage",
8162 decl);
8163 storage_class = sc_none;
8168 /* Record `register' declaration for warnings on &
8169 and in case doing stupid register allocation. */
8171 if (storage_class == sc_register)
8172 DECL_REGISTER (decl) = 1;
8173 else if (storage_class == sc_extern)
8174 DECL_THIS_EXTERN (decl) = 1;
8175 else if (storage_class == sc_static)
8176 DECL_THIS_STATIC (decl) = 1;
8178 /* Record constancy and volatility. There's no need to do this
8179 when processing a template; we'll do this for the instantiated
8180 declaration based on the type of DECL. */
8181 if (!processing_template_decl)
8182 cp_apply_type_quals_to_decl (type_quals, decl);
8184 return decl;
8188 /* Subroutine of start_function. Ensure that each of the parameter
8189 types (as listed in PARMS) is complete, as is required for a
8190 function definition. */
8192 static void
8193 require_complete_types_for_parms (tree parms)
8195 for (; parms; parms = TREE_CHAIN (parms))
8197 if (dependent_type_p (TREE_TYPE (parms)))
8198 continue;
8199 if (VOID_TYPE_P (TREE_TYPE (parms)))
8200 /* grokparms will have already issued an error. */
8201 TREE_TYPE (parms) = error_mark_node;
8202 else if (complete_type_or_else (TREE_TYPE (parms), parms))
8204 layout_decl (parms, 0);
8205 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8210 /* Returns nonzero if T is a local variable. */
8213 local_variable_p (tree t)
8215 if ((TREE_CODE (t) == VAR_DECL
8216 /* A VAR_DECL with a context that is a _TYPE is a static data
8217 member. */
8218 && !TYPE_P (CP_DECL_CONTEXT (t))
8219 /* Any other non-local variable must be at namespace scope. */
8220 && !DECL_NAMESPACE_SCOPE_P (t))
8221 || (TREE_CODE (t) == PARM_DECL))
8222 return 1;
8224 return 0;
8227 /* Returns nonzero if T is an automatic local variable or a label.
8228 (These are the declarations that need to be remapped when the code
8229 containing them is duplicated.) */
8232 nonstatic_local_decl_p (tree t)
8234 return ((local_variable_p (t) && !TREE_STATIC (t))
8235 || TREE_CODE (t) == LABEL_DECL
8236 || TREE_CODE (t) == RESULT_DECL);
8239 /* Like local_variable_p, but suitable for use as a tree-walking
8240 function. */
8242 static tree
8243 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
8244 void *data ATTRIBUTE_UNUSED)
8246 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8247 return *tp;
8248 else if (TYPE_P (*tp))
8249 *walk_subtrees = 0;
8251 return NULL_TREE;
8255 /* Check that ARG, which is a default-argument expression for a
8256 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
8257 something goes wrong. DECL may also be a _TYPE node, rather than a
8258 DECL, if there is no DECL available. */
8260 tree
8261 check_default_argument (tree decl, tree arg)
8263 tree var;
8264 tree decl_type;
8266 if (TREE_CODE (arg) == DEFAULT_ARG)
8267 /* We get a DEFAULT_ARG when looking at an in-class declaration
8268 with a default argument. Ignore the argument for now; we'll
8269 deal with it after the class is complete. */
8270 return arg;
8272 if (processing_template_decl || uses_template_parms (arg))
8273 /* We don't do anything checking until instantiation-time. Note
8274 that there may be uninstantiated arguments even for an
8275 instantiated function, since default arguments are not
8276 instantiated until they are needed. */
8277 return arg;
8279 if (TYPE_P (decl))
8281 decl_type = decl;
8282 decl = NULL_TREE;
8284 else
8285 decl_type = TREE_TYPE (decl);
8287 if (arg == error_mark_node
8288 || decl == error_mark_node
8289 || TREE_TYPE (arg) == error_mark_node
8290 || decl_type == error_mark_node)
8291 /* Something already went wrong. There's no need to check
8292 further. */
8293 return error_mark_node;
8295 /* [dcl.fct.default]
8297 A default argument expression is implicitly converted to the
8298 parameter type. */
8299 if (!TREE_TYPE (arg)
8300 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
8302 if (decl)
8303 error ("default argument for %q#D has type %qT",
8304 decl, TREE_TYPE (arg));
8305 else
8306 error ("default argument for parameter of type %qT has type %qT",
8307 decl_type, TREE_TYPE (arg));
8309 return error_mark_node;
8312 /* [dcl.fct.default]
8314 Local variables shall not be used in default argument
8315 expressions.
8317 The keyword `this' shall not be used in a default argument of a
8318 member function. */
8319 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
8320 NULL);
8321 if (var)
8323 error ("default argument %qE uses local variable %qD", arg, var);
8324 return error_mark_node;
8327 /* All is well. */
8328 return arg;
8331 /* Decode the list of parameter types for a function type.
8332 Given the list of things declared inside the parens,
8333 return a list of types.
8335 If this parameter does not end with an ellipsis, we append
8336 void_list_node.
8338 *PARMS is set to the chain of PARM_DECLs created. */
8340 static tree
8341 grokparms (cp_parameter_declarator *first_parm, tree *parms)
8343 tree result = NULL_TREE;
8344 tree decls = NULL_TREE;
8345 int ellipsis = !first_parm || first_parm->ellipsis_p;
8346 cp_parameter_declarator *parm;
8347 int any_error = 0;
8349 for (parm = first_parm; parm != NULL; parm = parm->next)
8351 tree type = NULL_TREE;
8352 tree init = parm->default_argument;
8353 tree attrs;
8354 tree decl;
8356 if (parm == no_parameters)
8357 break;
8359 attrs = parm->decl_specifiers.attributes;
8360 parm->decl_specifiers.attributes = NULL_TREE;
8361 decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
8362 PARM, init != NULL_TREE, &attrs);
8363 if (! decl || TREE_TYPE (decl) == error_mark_node)
8364 continue;
8366 if (attrs)
8367 cplus_decl_attributes (&decl, attrs, 0);
8369 type = TREE_TYPE (decl);
8370 if (VOID_TYPE_P (type))
8372 if (same_type_p (type, void_type_node)
8373 && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
8374 /* this is a parmlist of `(void)', which is ok. */
8375 break;
8376 cxx_incomplete_type_error (decl, type);
8377 /* It's not a good idea to actually create parameters of
8378 type `void'; other parts of the compiler assume that a
8379 void type terminates the parameter list. */
8380 type = error_mark_node;
8381 TREE_TYPE (decl) = error_mark_node;
8384 if (type != error_mark_node)
8386 /* Top-level qualifiers on the parameters are
8387 ignored for function types. */
8388 type = cp_build_qualified_type (type, 0);
8389 if (TREE_CODE (type) == METHOD_TYPE)
8391 error ("parameter %qD invalidly declared method type", decl);
8392 type = build_pointer_type (type);
8393 TREE_TYPE (decl) = type;
8395 else if (abstract_virtuals_error (decl, type))
8396 any_error = 1; /* Seems like a good idea. */
8397 else if (POINTER_TYPE_P (type))
8399 /* [dcl.fct]/6, parameter types cannot contain pointers
8400 (references) to arrays of unknown bound. */
8401 tree t = TREE_TYPE (type);
8402 int ptr = TYPE_PTR_P (type);
8404 while (1)
8406 if (TYPE_PTR_P (t))
8407 ptr = 1;
8408 else if (TREE_CODE (t) != ARRAY_TYPE)
8409 break;
8410 else if (!TYPE_DOMAIN (t))
8411 break;
8412 t = TREE_TYPE (t);
8414 if (TREE_CODE (t) == ARRAY_TYPE)
8415 error ("parameter %qD includes %s to array of unknown "
8416 "bound %qT",
8417 decl, ptr ? "pointer" : "reference", t);
8420 if (!any_error && init)
8421 init = check_default_argument (decl, init);
8422 else
8423 init = NULL_TREE;
8426 TREE_CHAIN (decl) = decls;
8427 decls = decl;
8428 result = tree_cons (init, type, result);
8430 decls = nreverse (decls);
8431 result = nreverse (result);
8432 if (!ellipsis)
8433 result = chainon (result, void_list_node);
8434 *parms = decls;
8436 return result;
8440 /* D is a constructor or overloaded `operator='.
8442 Let T be the class in which D is declared. Then, this function
8443 returns:
8445 -1 if D's is an ill-formed constructor or copy assignment operator
8446 whose first parameter is of type `T'.
8447 0 if D is not a copy constructor or copy assignment
8448 operator.
8449 1 if D is a copy constructor or copy assignment operator whose
8450 first parameter is a reference to const qualified T.
8451 2 if D is a copy constructor or copy assignment operator whose
8452 first parameter is a reference to non-const qualified T.
8454 This function can be used as a predicate. Positive values indicate
8455 a copy constructor and nonzero values indicate a copy assignment
8456 operator. */
8459 copy_fn_p (tree d)
8461 tree args;
8462 tree arg_type;
8463 int result = 1;
8465 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
8467 if (DECL_TEMPLATE_INFO (d)
8468 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d)))
8469 /* Instantiations of template member functions are never copy
8470 functions. Note that member functions of templated classes are
8471 represented as template functions internally, and we must
8472 accept those as copy functions. */
8473 return 0;
8475 args = FUNCTION_FIRST_USER_PARMTYPE (d);
8476 if (!args)
8477 return 0;
8479 arg_type = TREE_VALUE (args);
8481 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8483 /* Pass by value copy assignment operator. */
8484 result = -1;
8486 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8487 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8489 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8490 result = 2;
8492 else
8493 return 0;
8495 args = TREE_CHAIN (args);
8497 if (args && args != void_list_node && !TREE_PURPOSE (args))
8498 /* There are more non-optional args. */
8499 return 0;
8501 return result;
8504 /* Remember any special properties of member function DECL. */
8506 void grok_special_member_properties (tree decl)
8508 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P(decl))
8509 ; /* Not special. */
8510 else if (DECL_CONSTRUCTOR_P (decl))
8512 int ctor = copy_fn_p (decl);
8514 if (ctor > 0)
8516 /* [class.copy]
8518 A non-template constructor for class X is a copy
8519 constructor if its first parameter is of type X&, const
8520 X&, volatile X& or const volatile X&, and either there
8521 are no other parameters or else all other parameters have
8522 default arguments. */
8523 TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
8524 if (ctor > 1)
8525 TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
8527 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
8528 TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
8530 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8532 /* [class.copy]
8534 A non-template assignment operator for class X is a copy
8535 assignment operator if its parameter is of type X, X&, const
8536 X&, volatile X& or const volatile X&. */
8538 int assop = copy_fn_p (decl);
8540 if (assop)
8542 TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8543 if (assop != 1)
8544 TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8549 /* Check a constructor DECL has the correct form. Complains
8550 if the class has a constructor of the form X(X). */
8553 grok_ctor_properties (tree ctype, tree decl)
8555 int ctor_parm = copy_fn_p (decl);
8557 if (ctor_parm < 0)
8559 /* [class.copy]
8561 A declaration of a constructor for a class X is ill-formed if
8562 its first parameter is of type (optionally cv-qualified) X
8563 and either there are no other parameters or else all other
8564 parameters have default arguments.
8566 We *don't* complain about member template instantiations that
8567 have this form, though; they can occur as we try to decide
8568 what constructor to use during overload resolution. Since
8569 overload resolution will never prefer such a constructor to
8570 the non-template copy constructor (which is either explicitly
8571 or implicitly defined), there's no need to worry about their
8572 existence. Theoretically, they should never even be
8573 instantiated, but that's hard to forestall. */
8574 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
8575 ctype, ctype);
8576 return 0;
8579 return 1;
8582 /* An operator with this code is unary, but can also be binary. */
8584 static int
8585 ambi_op_p (enum tree_code code)
8587 return (code == INDIRECT_REF
8588 || code == ADDR_EXPR
8589 || code == CONVERT_EXPR
8590 || code == NEGATE_EXPR
8591 || code == PREINCREMENT_EXPR
8592 || code == PREDECREMENT_EXPR);
8595 /* An operator with this name can only be unary. */
8597 static int
8598 unary_op_p (enum tree_code code)
8600 return (code == TRUTH_NOT_EXPR
8601 || code == BIT_NOT_EXPR
8602 || code == COMPONENT_REF
8603 || code == TYPE_EXPR);
8606 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
8607 errors are issued for invalid declarations. */
8609 void
8610 grok_op_properties (tree decl, int friendp, bool complain)
8612 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
8613 tree argtype;
8614 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
8615 tree name = DECL_NAME (decl);
8616 enum tree_code operator_code;
8617 int arity;
8619 /* Count the number of arguments. */
8620 for (argtype = argtypes, arity = 0;
8621 argtype && argtype != void_list_node;
8622 argtype = TREE_CHAIN (argtype))
8623 ++arity;
8625 if (current_class_type == NULL_TREE)
8626 friendp = 1;
8628 if (DECL_CONV_FN_P (decl))
8629 operator_code = TYPE_EXPR;
8630 else
8633 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
8634 if (ansi_opname (CODE) == name) \
8636 operator_code = (CODE); \
8637 break; \
8639 else if (ansi_assopname (CODE) == name) \
8641 operator_code = (CODE); \
8642 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
8643 break; \
8646 #include "operators.def"
8647 #undef DEF_OPERATOR
8649 gcc_unreachable ();
8651 while (0);
8652 gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
8653 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
8655 if (! friendp)
8657 switch (operator_code)
8659 case NEW_EXPR:
8660 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
8661 break;
8663 case DELETE_EXPR:
8664 TYPE_GETS_DELETE (current_class_type) |= 1;
8665 break;
8667 case VEC_NEW_EXPR:
8668 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
8669 break;
8671 case VEC_DELETE_EXPR:
8672 TYPE_GETS_DELETE (current_class_type) |= 2;
8673 break;
8675 default:
8676 break;
8680 /* [basic.std.dynamic.allocation]/1:
8682 A program is ill-formed if an allocation function is declared
8683 in a namespace scope other than global scope or declared static
8684 in global scope.
8686 The same also holds true for deallocation functions. */
8687 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
8688 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8690 if (DECL_NAMESPACE_SCOPE_P (decl))
8692 if (CP_DECL_CONTEXT (decl) != global_namespace)
8693 error ("%qD may not be declared within a namespace", decl);
8694 else if (!TREE_PUBLIC (decl))
8695 error ("%qD may not be declared as static", decl);
8699 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
8700 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8701 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8702 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8703 else
8705 /* An operator function must either be a non-static member function
8706 or have at least one parameter of a class, a reference to a class,
8707 an enumeration, or a reference to an enumeration. 13.4.0.6 */
8708 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8710 if (operator_code == TYPE_EXPR
8711 || operator_code == CALL_EXPR
8712 || operator_code == COMPONENT_REF
8713 || operator_code == ARRAY_REF
8714 || operator_code == NOP_EXPR)
8716 error ("%qD must be a nonstatic member function", decl);
8717 return;
8719 else
8721 tree p;
8723 if (DECL_STATIC_FUNCTION_P (decl))
8725 error ("%qD must be either a non-static member "
8726 "function or a non-member function", decl);
8727 return;
8730 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
8732 tree arg = non_reference (TREE_VALUE (p));
8733 /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
8734 because these checks are performed even on
8735 template functions. */
8736 if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
8737 break;
8740 if (!p || p == void_list_node)
8742 if (!complain)
8743 return;
8745 error ("%qD must have an argument of class or "
8746 "enumerated type",
8747 decl);
8752 /* There are no restrictions on the arguments to an overloaded
8753 "operator ()". */
8754 if (operator_code == CALL_EXPR)
8755 return;
8757 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
8759 tree t = TREE_TYPE (name);
8760 if (! friendp)
8762 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
8763 const char *what = 0;
8765 if (ref)
8766 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
8768 if (TREE_CODE (t) == VOID_TYPE)
8769 what = "void";
8770 else if (t == current_class_type)
8771 what = "the same type";
8772 /* Don't force t to be complete here. */
8773 else if (IS_AGGR_TYPE (t)
8774 && COMPLETE_TYPE_P (t)
8775 && DERIVED_FROM_P (t, current_class_type))
8776 what = "a base class";
8778 if (what && warn_conversion)
8779 warning (0, "conversion to %s%s will never use a type "
8780 "conversion operator",
8781 ref ? "a reference to " : "", what);
8784 if (operator_code == COND_EXPR)
8786 /* 13.4.0.3 */
8787 error ("ISO C++ prohibits overloading operator ?:");
8789 else if (ambi_op_p (operator_code))
8791 if (arity == 1)
8792 /* We pick the one-argument operator codes by default, so
8793 we don't have to change anything. */
8795 else if (arity == 2)
8797 /* If we thought this was a unary operator, we now know
8798 it to be a binary operator. */
8799 switch (operator_code)
8801 case INDIRECT_REF:
8802 operator_code = MULT_EXPR;
8803 break;
8805 case ADDR_EXPR:
8806 operator_code = BIT_AND_EXPR;
8807 break;
8809 case CONVERT_EXPR:
8810 operator_code = PLUS_EXPR;
8811 break;
8813 case NEGATE_EXPR:
8814 operator_code = MINUS_EXPR;
8815 break;
8817 case PREINCREMENT_EXPR:
8818 operator_code = POSTINCREMENT_EXPR;
8819 break;
8821 case PREDECREMENT_EXPR:
8822 operator_code = POSTDECREMENT_EXPR;
8823 break;
8825 default:
8826 gcc_unreachable ();
8829 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
8831 if ((operator_code == POSTINCREMENT_EXPR
8832 || operator_code == POSTDECREMENT_EXPR)
8833 && ! processing_template_decl
8834 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8836 if (methodp)
8837 error ("postfix %qD must take %<int%> as its argument",
8838 decl);
8839 else
8840 error
8841 ("postfix %qD must take %<int%> as its second argument",
8842 decl);
8845 else
8847 if (methodp)
8848 error ("%qD must take either zero or one argument", decl);
8849 else
8850 error ("%qD must take either one or two arguments", decl);
8853 /* More Effective C++ rule 6. */
8854 if (warn_ecpp
8855 && (operator_code == POSTINCREMENT_EXPR
8856 || operator_code == POSTDECREMENT_EXPR
8857 || operator_code == PREINCREMENT_EXPR
8858 || operator_code == PREDECREMENT_EXPR))
8860 tree arg = TREE_VALUE (argtypes);
8861 tree ret = TREE_TYPE (TREE_TYPE (decl));
8862 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
8863 arg = TREE_TYPE (arg);
8864 arg = TYPE_MAIN_VARIANT (arg);
8865 if (operator_code == PREINCREMENT_EXPR
8866 || operator_code == PREDECREMENT_EXPR)
8868 if (TREE_CODE (ret) != REFERENCE_TYPE
8869 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
8870 arg))
8871 warning (0, "prefix %qD should return %qT", decl,
8872 build_reference_type (arg));
8874 else
8876 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
8877 warning (0, "postfix %qD should return %qT", decl, arg);
8881 else if (unary_op_p (operator_code))
8883 if (arity != 1)
8885 if (methodp)
8886 error ("%qD must take %<void%>", decl);
8887 else
8888 error ("%qD must take exactly one argument", decl);
8891 else /* if (binary_op_p (operator_code)) */
8893 if (arity != 2)
8895 if (methodp)
8896 error ("%qD must take exactly one argument", decl);
8897 else
8898 error ("%qD must take exactly two arguments", decl);
8901 /* More Effective C++ rule 7. */
8902 if (warn_ecpp
8903 && (operator_code == TRUTH_ANDIF_EXPR
8904 || operator_code == TRUTH_ORIF_EXPR
8905 || operator_code == COMPOUND_EXPR))
8906 warning (0, "user-defined %qD always evaluates both arguments",
8907 decl);
8910 /* Effective C++ rule 23. */
8911 if (warn_ecpp
8912 && arity == 2
8913 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
8914 && (operator_code == PLUS_EXPR
8915 || operator_code == MINUS_EXPR
8916 || operator_code == TRUNC_DIV_EXPR
8917 || operator_code == MULT_EXPR
8918 || operator_code == TRUNC_MOD_EXPR)
8919 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
8920 warning (0, "%qD should return by value", decl);
8922 /* [over.oper]/8 */
8923 for (; argtypes && argtypes != void_list_node;
8924 argtypes = TREE_CHAIN (argtypes))
8925 if (TREE_PURPOSE (argtypes))
8927 TREE_PURPOSE (argtypes) = NULL_TREE;
8928 if (operator_code == POSTINCREMENT_EXPR
8929 || operator_code == POSTDECREMENT_EXPR)
8931 if (pedantic)
8932 pedwarn ("%qD cannot have default arguments", decl);
8934 else
8935 error ("%qD cannot have default arguments", decl);
8942 /* Return a string giving the keyword associate with CODE. */
8944 static const char *
8945 tag_name (enum tag_types code)
8947 switch (code)
8949 case record_type:
8950 return "struct";
8951 case class_type:
8952 return "class";
8953 case union_type:
8954 return "union";
8955 case enum_type:
8956 return "enum";
8957 case typename_type:
8958 return "typename";
8959 default:
8960 gcc_unreachable ();
8964 /* Name lookup in an elaborated-type-specifier (after the keyword
8965 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
8966 elaborated-type-specifier is invalid, issue a diagnostic and return
8967 error_mark_node; otherwise, return the *_TYPE to which it referred.
8968 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
8970 tree
8971 check_elaborated_type_specifier (enum tag_types tag_code,
8972 tree decl,
8973 bool allow_template_p)
8975 tree type;
8977 /* In the case of:
8979 struct S { struct S *p; };
8981 name lookup will find the TYPE_DECL for the implicit "S::S"
8982 typedef. Adjust for that here. */
8983 if (DECL_SELF_REFERENCE_P (decl))
8984 decl = TYPE_NAME (TREE_TYPE (decl));
8986 type = TREE_TYPE (decl);
8988 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
8989 is false for this case as well. */
8990 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
8992 error ("using template type parameter %qT after %qs",
8993 type, tag_name (tag_code));
8994 return error_mark_node;
8996 /* [dcl.type.elab]
8998 If the identifier resolves to a typedef-name or a template
8999 type-parameter, the elaborated-type-specifier is ill-formed.
9001 In other words, the only legitimate declaration to use in the
9002 elaborated type specifier is the implicit typedef created when
9003 the type is declared. */
9004 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
9005 && tag_code != typename_type)
9007 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
9008 cp_error_at ("%qD has a previous declaration here", decl);
9009 return error_mark_node;
9011 else if (TREE_CODE (type) != RECORD_TYPE
9012 && TREE_CODE (type) != UNION_TYPE
9013 && tag_code != enum_type
9014 && tag_code != typename_type)
9016 error ("%qT referred to as %qs", type, tag_name (tag_code));
9017 cp_error_at ("%qT has a previous declaration here", type);
9018 return error_mark_node;
9020 else if (TREE_CODE (type) != ENUMERAL_TYPE
9021 && tag_code == enum_type
9022 && tag_code != typename_type)
9024 error ("%qT referred to as enum", type);
9025 cp_error_at ("%qT has a previous declaration here", type);
9026 return error_mark_node;
9028 else if (!allow_template_p
9029 && TREE_CODE (type) == RECORD_TYPE
9030 && CLASSTYPE_IS_TEMPLATE (type))
9032 /* If a class template appears as elaborated type specifier
9033 without a template header such as:
9035 template <class T> class C {};
9036 void f(class C); // No template header here
9038 then the required template argument is missing. */
9039 error ("template argument required for %<%s %T%>",
9040 tag_name (tag_code),
9041 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
9042 return error_mark_node;
9045 return type;
9048 /* Lookup NAME in elaborate type specifier in scope according to
9049 SCOPE and issue diagnostics if necessary.
9050 Return *_TYPE node upon success, NULL_TREE when the NAME is not
9051 found, and ERROR_MARK_NODE for type error. */
9053 static tree
9054 lookup_and_check_tag (enum tag_types tag_code, tree name,
9055 tag_scope scope, bool template_header_p)
9057 tree t;
9058 tree decl;
9059 if (scope == ts_global)
9061 /* First try ordinary name lookup, ignoring hidden class name
9062 injected via friend declaration. */
9063 decl = lookup_name (name, 2);
9064 /* If that fails, the name will be placed in the smallest
9065 non-class, non-function-prototype scope according to 3.3.1/5.
9066 We may already have a hidden name declared as friend in this
9067 scope. So lookup again but not ignoring hidden name.
9068 If we find one, that name will be made visible rather than
9069 creating a new tag. */
9070 if (!decl)
9071 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
9073 else
9074 decl = lookup_type_scope (name, scope);
9076 if (decl && DECL_CLASS_TEMPLATE_P (decl))
9077 decl = DECL_TEMPLATE_RESULT (decl);
9079 if (decl && TREE_CODE (decl) == TYPE_DECL)
9081 /* Look for invalid nested type:
9082 class C {
9083 class C {};
9084 }; */
9085 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
9087 error ("%qD has the same name as the class in which it is "
9088 "declared",
9089 decl);
9090 return error_mark_node;
9093 /* Two cases we need to consider when deciding if a class
9094 template is allowed as an elaborated type specifier:
9095 1. It is a self reference to its own class.
9096 2. It comes with a template header.
9098 For example:
9100 template <class T> class C {
9101 class C *c1; // DECL_SELF_REFERENCE_P is true
9102 class D;
9104 template <class U> class C; // template_header_p is true
9105 template <class T> class C<T>::D {
9106 class C *c2; // DECL_SELF_REFERENCE_P is true
9107 }; */
9109 t = check_elaborated_type_specifier (tag_code,
9110 decl,
9111 template_header_p
9112 | DECL_SELF_REFERENCE_P (decl));
9113 return t;
9115 else
9116 return NULL_TREE;
9119 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
9120 Define the tag as a forward-reference if it is not defined.
9122 If a declaration is given, process it here, and report an error if
9123 multiple declarations are not identical.
9125 SCOPE is TS_CURRENT when this is also a definition. Only look in
9126 the current frame for the name (since C++ allows new names in any
9127 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
9128 declaration. Only look beginning from the current scope outward up
9129 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
9131 TEMPLATE_HEADER_P is true when this declaration is preceded by
9132 a set of template parameters. */
9134 tree
9135 xref_tag (enum tag_types tag_code, tree name,
9136 tag_scope scope, bool template_header_p)
9138 enum tree_code code;
9139 tree t;
9140 tree context = NULL_TREE;
9142 timevar_push (TV_NAME_LOOKUP);
9144 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9146 switch (tag_code)
9148 case record_type:
9149 case class_type:
9150 code = RECORD_TYPE;
9151 break;
9152 case union_type:
9153 code = UNION_TYPE;
9154 break;
9155 case enum_type:
9156 code = ENUMERAL_TYPE;
9157 break;
9158 default:
9159 gcc_unreachable ();
9162 /* In case of anonymous name, xref_tag is only called to
9163 make type node and push name. Name lookup is not required. */
9164 if (ANON_AGGRNAME_P (name))
9165 t = NULL_TREE;
9166 else
9167 t = lookup_and_check_tag (tag_code, name,
9168 scope, template_header_p);
9170 if (t == error_mark_node)
9171 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9173 if (scope != ts_current && t && current_class_type
9174 && template_class_depth (current_class_type)
9175 && template_header_p)
9177 /* Since SCOPE is not TS_CURRENT, we are not looking at a
9178 definition of this tag. Since, in addition, we are currently
9179 processing a (member) template declaration of a template
9180 class, we must be very careful; consider:
9182 template <class X>
9183 struct S1
9185 template <class U>
9186 struct S2
9187 { template <class V>
9188 friend struct S1; };
9190 Here, the S2::S1 declaration should not be confused with the
9191 outer declaration. In particular, the inner version should
9192 have a template parameter of level 2, not level 1. This
9193 would be particularly important if the member declaration
9194 were instead:
9196 template <class V = U> friend struct S1;
9198 say, when we should tsubst into `U' when instantiating
9199 S2. On the other hand, when presented with:
9201 template <class T>
9202 struct S1 {
9203 template <class U>
9204 struct S2 {};
9205 template <class U>
9206 friend struct S2;
9209 we must find the inner binding eventually. We
9210 accomplish this by making sure that the new type we
9211 create to represent this declaration has the right
9212 TYPE_CONTEXT. */
9213 context = TYPE_CONTEXT (t);
9214 t = NULL_TREE;
9217 if (! t)
9219 /* If no such tag is yet defined, create a forward-reference node
9220 and record it as the "definition".
9221 When a real declaration of this type is found,
9222 the forward-reference will be altered into a real type. */
9223 if (code == ENUMERAL_TYPE)
9225 error ("use of enum %q#D without previous declaration", name);
9226 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9228 else
9230 t = make_aggr_type (code);
9231 TYPE_CONTEXT (t) = context;
9232 t = pushtag (name, t, scope);
9235 else
9237 if (template_header_p && IS_AGGR_TYPE (t))
9238 redeclare_class_template (t, current_template_parms);
9239 else if (!processing_template_decl
9240 && CLASS_TYPE_P (t)
9241 && CLASSTYPE_IS_TEMPLATE (t))
9243 error ("redeclaration of %qT as a non-template", t);
9244 t = error_mark_node;
9247 /* Make injected friend class visible. */
9248 if (scope != ts_within_enclosing_non_class
9249 && hidden_name_p (TYPE_NAME (t)))
9251 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
9252 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
9254 if (TYPE_TEMPLATE_INFO (t))
9256 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
9257 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
9262 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
9265 tree
9266 xref_tag_from_type (tree old, tree id, tag_scope scope)
9268 enum tag_types tag_kind;
9270 if (TREE_CODE (old) == RECORD_TYPE)
9271 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
9272 else
9273 tag_kind = union_type;
9275 if (id == NULL_TREE)
9276 id = TYPE_IDENTIFIER (old);
9278 return xref_tag (tag_kind, id, scope, false);
9281 /* Create the binfo hierarchy for REF with (possibly NULL) base list
9282 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
9283 access_* node, and the TREE_VALUE is the type of the base-class.
9284 Non-NULL TREE_TYPE indicates virtual inheritance. */
9286 void
9287 xref_basetypes (tree ref, tree base_list)
9289 tree *basep;
9290 tree binfo, base_binfo;
9291 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
9292 unsigned max_bases = 0; /* Maximum direct bases. */
9293 int i;
9294 tree default_access;
9295 tree igo_prev; /* Track Inheritance Graph Order. */
9297 if (ref == error_mark_node)
9298 return;
9300 /* The base of a derived class is private by default, all others are
9301 public. */
9302 default_access = (TREE_CODE (ref) == RECORD_TYPE
9303 && CLASSTYPE_DECLARED_CLASS (ref)
9304 ? access_private_node : access_public_node);
9306 /* First, make sure that any templates in base-classes are
9307 instantiated. This ensures that if we call ourselves recursively
9308 we do not get confused about which classes are marked and which
9309 are not. */
9310 basep = &base_list;
9311 while (*basep)
9313 tree basetype = TREE_VALUE (*basep);
9315 if (!(processing_template_decl && uses_template_parms (basetype))
9316 && !complete_type_or_else (basetype, NULL))
9317 /* An incomplete type. Remove it from the list. */
9318 *basep = TREE_CHAIN (*basep);
9319 else
9321 max_bases++;
9322 if (TREE_TYPE (*basep))
9323 max_vbases++;
9324 if (CLASS_TYPE_P (basetype))
9325 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
9326 basep = &TREE_CHAIN (*basep);
9330 TYPE_MARKED_P (ref) = 1;
9332 /* The binfo slot should be empty, unless this is an (ill-formed)
9333 redefinition. */
9334 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
9335 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
9337 binfo = make_tree_binfo (max_bases);
9339 TYPE_BINFO (ref) = binfo;
9340 BINFO_OFFSET (binfo) = size_zero_node;
9341 BINFO_TYPE (binfo) = ref;
9343 if (max_bases)
9345 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
9346 /* An aggregate cannot have baseclasses. */
9347 CLASSTYPE_NON_AGGREGATE (ref) = 1;
9349 if (TREE_CODE (ref) == UNION_TYPE)
9350 error ("derived union %qT invalid", ref);
9353 if (max_bases > 1)
9355 if (TYPE_FOR_JAVA (ref))
9356 error ("Java class %qT cannot have multiple bases", ref);
9359 if (max_vbases)
9361 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
9363 if (TYPE_FOR_JAVA (ref))
9364 error ("Java class %qT cannot have virtual bases", ref);
9367 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
9369 tree access = TREE_PURPOSE (base_list);
9370 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
9371 tree basetype = TREE_VALUE (base_list);
9373 if (access == access_default_node)
9374 access = default_access;
9376 if (TREE_CODE (basetype) == TYPE_DECL)
9377 basetype = TREE_TYPE (basetype);
9378 if (TREE_CODE (basetype) != RECORD_TYPE
9379 && TREE_CODE (basetype) != TYPENAME_TYPE
9380 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9381 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM)
9383 error ("base type %qT fails to be a struct or class type",
9384 basetype);
9385 continue;
9388 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
9389 TYPE_FOR_JAVA (ref) = 1;
9391 base_binfo = NULL_TREE;
9392 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
9394 base_binfo = TYPE_BINFO (basetype);
9395 /* The original basetype could have been a typedef'd type. */
9396 basetype = BINFO_TYPE (base_binfo);
9398 /* Inherit flags from the base. */
9399 TYPE_HAS_NEW_OPERATOR (ref)
9400 |= TYPE_HAS_NEW_OPERATOR (basetype);
9401 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9402 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9403 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
9404 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
9405 CLASSTYPE_DIAMOND_SHAPED_P (ref)
9406 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
9407 CLASSTYPE_REPEATED_BASE_P (ref)
9408 |= CLASSTYPE_REPEATED_BASE_P (basetype);
9411 /* We must do this test after we've seen through a typedef
9412 type. */
9413 if (TYPE_MARKED_P (basetype))
9415 if (basetype == ref)
9416 error ("recursive type %qT undefined", basetype);
9417 else
9418 error ("duplicate base type %qT invalid", basetype);
9419 continue;
9421 TYPE_MARKED_P (basetype) = 1;
9423 base_binfo = copy_binfo (base_binfo, basetype, ref,
9424 &igo_prev, via_virtual);
9425 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
9426 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
9428 BINFO_BASE_APPEND (binfo, base_binfo);
9429 BINFO_BASE_ACCESS_APPEND (binfo, access);
9432 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
9433 /* If we have space in the vbase vector, we must have shared at
9434 least one of them, and are therefore diamond shaped. */
9435 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
9437 /* Unmark all the types. */
9438 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
9439 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9440 TYPE_MARKED_P (ref) = 0;
9442 /* Now see if we have a repeated base type. */
9443 if (!CLASSTYPE_REPEATED_BASE_P (ref))
9445 for (base_binfo = binfo; base_binfo;
9446 base_binfo = TREE_CHAIN (base_binfo))
9448 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9450 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
9451 break;
9453 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
9455 for (base_binfo = binfo; base_binfo;
9456 base_binfo = TREE_CHAIN (base_binfo))
9457 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9458 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9459 else
9460 break;
9465 /* Begin compiling the definition of an enumeration type.
9466 NAME is its name.
9467 Returns the type object, as yet incomplete.
9468 Also records info about it so that build_enumerator
9469 may be used to declare the individual values as they are read. */
9471 tree
9472 start_enum (tree name)
9474 tree enumtype;
9476 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9478 /* If this is the real definition for a previous forward reference,
9479 fill in the contents in the same object that used to be the
9480 forward reference. */
9482 enumtype = lookup_and_check_tag (enum_type, name,
9483 /*tag_scope=*/ts_current,
9484 /*template_header_p=*/false);
9486 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
9488 error ("multiple definition of %q#T", enumtype);
9489 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
9490 /* Clear out TYPE_VALUES, and start again. */
9491 TYPE_VALUES (enumtype) = NULL_TREE;
9493 else
9495 /* In case of error, make a dummy enum to allow parsing to
9496 continue. */
9497 if (enumtype == error_mark_node)
9498 name = make_anon_name ();
9500 enumtype = make_node (ENUMERAL_TYPE);
9501 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
9504 return enumtype;
9507 /* After processing and defining all the values of an enumeration type,
9508 install their decls in the enumeration type and finish it off.
9509 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
9511 void
9512 finish_enum (tree enumtype)
9514 tree values;
9515 tree decl;
9516 tree value;
9517 tree minnode;
9518 tree maxnode;
9519 tree t;
9520 bool unsignedp;
9521 bool use_short_enum;
9522 int lowprec;
9523 int highprec;
9524 int precision;
9525 integer_type_kind itk;
9526 tree underlying_type = NULL_TREE;
9528 /* We built up the VALUES in reverse order. */
9529 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
9531 /* For an enum defined in a template, just set the type of the values;
9532 all further processing is postponed until the template is
9533 instantiated. We need to set the type so that tsubst of a CONST_DECL
9534 works. */
9535 if (processing_template_decl)
9537 for (values = TYPE_VALUES (enumtype);
9538 values;
9539 values = TREE_CHAIN (values))
9540 TREE_TYPE (TREE_VALUE (values)) = enumtype;
9541 if (at_function_scope_p ())
9542 add_stmt (build_min (TAG_DEFN, enumtype));
9543 return;
9546 /* Determine the minimum and maximum values of the enumerators. */
9547 if (TYPE_VALUES (enumtype))
9549 minnode = maxnode = NULL_TREE;
9551 for (values = TYPE_VALUES (enumtype);
9552 values;
9553 values = TREE_CHAIN (values))
9555 decl = TREE_VALUE (values);
9557 /* [dcl.enum]: Following the closing brace of an enum-specifier,
9558 each enumerator has the type of its enumeration. Prior to the
9559 closing brace, the type of each enumerator is the type of its
9560 initializing value. */
9561 TREE_TYPE (decl) = enumtype;
9563 /* Update the minimum and maximum values, if appropriate. */
9564 value = DECL_INITIAL (decl);
9565 /* Figure out what the minimum and maximum values of the
9566 enumerators are. */
9567 if (!minnode)
9568 minnode = maxnode = value;
9569 else if (tree_int_cst_lt (maxnode, value))
9570 maxnode = value;
9571 else if (tree_int_cst_lt (value, minnode))
9572 minnode = value;
9575 else
9576 /* [dcl.enum]
9578 If the enumerator-list is empty, the underlying type is as if
9579 the enumeration had a single enumerator with value 0. */
9580 minnode = maxnode = integer_zero_node;
9582 /* Compute the number of bits require to represent all values of the
9583 enumeration. We must do this before the type of MINNODE and
9584 MAXNODE are transformed, since min_precision relies on the
9585 TREE_TYPE of the value it is passed. */
9586 unsignedp = tree_int_cst_sgn (minnode) >= 0;
9587 lowprec = min_precision (minnode, unsignedp);
9588 highprec = min_precision (maxnode, unsignedp);
9589 precision = MAX (lowprec, highprec);
9591 /* Determine the underlying type of the enumeration.
9593 [dcl.enum]
9595 The underlying type of an enumeration is an integral type that
9596 can represent all the enumerator values defined in the
9597 enumeration. It is implementation-defined which integral type is
9598 used as the underlying type for an enumeration except that the
9599 underlying type shall not be larger than int unless the value of
9600 an enumerator cannot fit in an int or unsigned int.
9602 We use "int" or an "unsigned int" as the underlying type, even if
9603 a smaller integral type would work, unless the user has
9604 explicitly requested that we use the smallest possible type. The
9605 user can request that for all enumerations with a command line
9606 flag, or for just one enumeration with an attribute. */
9608 use_short_enum = flag_short_enums
9609 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
9611 for (itk = (use_short_enum ? itk_char : itk_int);
9612 itk != itk_none;
9613 itk++)
9615 underlying_type = integer_types[itk];
9616 if (TYPE_PRECISION (underlying_type) >= precision
9617 && TYPE_UNSIGNED (underlying_type) == unsignedp)
9618 break;
9620 if (itk == itk_none)
9622 /* DR 377
9624 IF no integral type can represent all the enumerator values, the
9625 enumeration is ill-formed. */
9626 error ("no integral type can represent all of the enumerator values "
9627 "for %qT", enumtype);
9628 precision = TYPE_PRECISION (long_long_integer_type_node);
9629 underlying_type = integer_types[itk_unsigned_long_long];
9632 /* Compute the minium and maximum values for the type.
9634 [dcl.enum]
9636 For an enumeration where emin is the smallest enumerator and emax
9637 is the largest, the values of the enumeration are the values of the
9638 underlying type in the range bmin to bmax, where bmin and bmax are,
9639 respectively, the smallest and largest values of the smallest bit-
9640 field that can store emin and emax. */
9642 /* The middle-end currently assumes that types with TYPE_PRECISION
9643 narrower than their underlying type are suitably zero or sign
9644 extended to fill their mode. g++ doesn't make these guarantees.
9645 Until the middle-end can represent such paradoxical types, we
9646 set the TYPE_PRECISION to the width of the underlying type. */
9647 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
9649 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
9651 /* [dcl.enum]
9653 The value of sizeof() applied to an enumeration type, an object
9654 of an enumeration type, or an enumerator, is the value of sizeof()
9655 applied to the underlying type. */
9656 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
9657 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
9658 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
9659 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
9660 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
9661 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
9663 /* Convert each of the enumerators to the type of the underlying
9664 type of the enumeration. */
9665 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
9667 decl = TREE_VALUE (values);
9668 value = perform_implicit_conversion (underlying_type,
9669 DECL_INITIAL (decl));
9671 /* Do not clobber shared ints. */
9672 value = copy_node (value);
9674 TREE_TYPE (value) = enumtype;
9675 DECL_INITIAL (decl) = value;
9676 TREE_VALUE (values) = value;
9679 /* Fix up all variant types of this enum type. */
9680 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
9682 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
9683 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
9684 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
9685 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
9686 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
9687 TYPE_MODE (t) = TYPE_MODE (enumtype);
9688 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
9689 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
9690 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
9691 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
9694 /* Finish debugging output for this type. */
9695 rest_of_type_compilation (enumtype, namespace_bindings_p ());
9698 /* Build and install a CONST_DECL for an enumeration constant of the
9699 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
9700 Assignment of sequential values by default is handled here. */
9702 void
9703 build_enumerator (tree name, tree value, tree enumtype)
9705 tree decl;
9706 tree context;
9707 tree type;
9709 /* If the VALUE was erroneous, pretend it wasn't there; that will
9710 result in the enum being assigned the next value in sequence. */
9711 if (value == error_mark_node)
9712 value = NULL_TREE;
9714 /* Remove no-op casts from the value. */
9715 if (value)
9716 STRIP_TYPE_NOPS (value);
9718 if (! processing_template_decl)
9720 /* Validate and default VALUE. */
9721 if (value != NULL_TREE)
9723 value = integral_constant_value (value);
9725 if (TREE_CODE (value) == INTEGER_CST)
9727 value = perform_integral_promotions (value);
9728 constant_expression_warning (value);
9730 else
9732 error ("enumerator value for %qD not integer constant", name);
9733 value = NULL_TREE;
9737 /* Default based on previous value. */
9738 if (value == NULL_TREE)
9740 if (TYPE_VALUES (enumtype))
9742 HOST_WIDE_INT hi;
9743 unsigned HOST_WIDE_INT lo;
9744 tree prev_value;
9745 bool overflowed;
9747 /* The next value is the previous value plus one. We can
9748 safely assume that the previous value is an INTEGER_CST.
9749 add_double doesn't know the type of the target expression,
9750 so we must check with int_fits_type_p as well. */
9751 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
9752 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
9753 TREE_INT_CST_HIGH (prev_value),
9754 1, 0, &lo, &hi);
9755 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
9756 overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
9758 if (overflowed)
9759 error ("overflow in enumeration values at %qD", name);
9761 else
9762 value = integer_zero_node;
9765 /* Remove no-op casts from the value. */
9766 STRIP_TYPE_NOPS (value);
9769 /* C++ associates enums with global, function, or class declarations. */
9770 context = current_scope ();
9772 /* Build the actual enumeration constant. Note that the enumeration
9773 constants have the type of their initializers until the
9774 enumeration is complete:
9776 [ dcl.enum ]
9778 Following the closing brace of an enum-specifier, each enumer-
9779 ator has the type of its enumeration. Prior to the closing
9780 brace, the type of each enumerator is the type of its
9781 initializing value.
9783 In finish_enum we will reset the type. Of course, if we're
9784 processing a template, there may be no value. */
9785 type = value ? TREE_TYPE (value) : NULL_TREE;
9787 if (context && context == current_class_type)
9788 /* This enum declaration is local to the class. We need the full
9789 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
9790 decl = build_lang_decl (CONST_DECL, name, type);
9791 else
9792 /* It's a global enum, or it's local to a function. (Note local to
9793 a function could mean local to a class method. */
9794 decl = build_decl (CONST_DECL, name, type);
9796 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
9797 TREE_CONSTANT (decl) = 1;
9798 TREE_INVARIANT (decl) = 1;
9799 TREE_READONLY (decl) = 1;
9800 DECL_INITIAL (decl) = value;
9802 if (context && context == current_class_type)
9803 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
9804 on the TYPE_FIELDS list for `S'. (That's so that you can say
9805 things like `S::i' later.) */
9806 finish_member_declaration (decl);
9807 else
9808 pushdecl (decl);
9810 /* Add this enumeration constant to the list for this type. */
9811 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
9815 /* We're defining DECL. Make sure that it's type is OK. */
9817 static void
9818 check_function_type (tree decl, tree current_function_parms)
9820 tree fntype = TREE_TYPE (decl);
9821 tree return_type = complete_type (TREE_TYPE (fntype));
9823 /* In a function definition, arg types must be complete. */
9824 require_complete_types_for_parms (current_function_parms);
9826 if (dependent_type_p (return_type))
9827 return;
9828 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
9830 error ("return type %q#T is incomplete", TREE_TYPE (fntype));
9832 /* Make it return void instead, but don't change the
9833 type of the DECL_RESULT, in case we have a named return value. */
9834 if (TREE_CODE (fntype) == METHOD_TYPE)
9836 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
9837 TREE_TYPE (decl)
9838 = build_method_type_directly (ctype,
9839 void_type_node,
9840 FUNCTION_ARG_CHAIN (decl));
9842 else
9843 TREE_TYPE (decl)
9844 = build_function_type (void_type_node,
9845 TYPE_ARG_TYPES (TREE_TYPE (decl)));
9846 TREE_TYPE (decl)
9847 = build_exception_variant (fntype,
9848 TYPE_RAISES_EXCEPTIONS (fntype));
9850 else
9851 abstract_virtuals_error (decl, TREE_TYPE (fntype));
9854 /* Create the FUNCTION_DECL for a function definition.
9855 DECLSPECS and DECLARATOR are the parts of the declaration;
9856 they describe the function's name and the type it returns,
9857 but twisted together in a fashion that parallels the syntax of C.
9859 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
9860 DECLARATOR is really the DECL for the function we are about to
9861 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
9862 indicating that the function is an inline defined in-class.
9864 This function creates a binding context for the function body
9865 as well as setting up the FUNCTION_DECL in current_function_decl.
9867 For C++, we must first check whether that datum makes any sense.
9868 For example, "class A local_a(1,2);" means that variable local_a
9869 is an aggregate of type A, which should have a constructor
9870 applied to it with the argument list [1, 2]. */
9872 void
9873 start_preparsed_function (tree decl1, tree attrs, int flags)
9875 tree ctype = NULL_TREE;
9876 tree fntype;
9877 tree restype;
9878 int doing_friend = 0;
9879 struct cp_binding_level *bl;
9880 tree current_function_parms;
9881 struct c_fileinfo *finfo = get_fileinfo (lbasename (input_filename));
9883 /* Sanity check. */
9884 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
9885 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
9887 fntype = TREE_TYPE (decl1);
9888 if (TREE_CODE (fntype) == METHOD_TYPE)
9889 ctype = TYPE_METHOD_BASETYPE (fntype);
9891 /* ISO C++ 11.4/5. A friend function defined in a class is in
9892 the (lexical) scope of the class in which it is defined. */
9893 if (!ctype && DECL_FRIEND_P (decl1))
9895 ctype = DECL_FRIEND_CONTEXT (decl1);
9897 /* CTYPE could be null here if we're dealing with a template;
9898 for example, `inline friend float foo()' inside a template
9899 will have no CTYPE set. */
9900 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
9901 ctype = NULL_TREE;
9902 else
9903 doing_friend = 1;
9906 if (DECL_DECLARED_INLINE_P (decl1)
9907 && lookup_attribute ("noinline", attrs))
9908 warning (0, "%Jinline function %qD given attribute noinline", decl1, decl1);
9910 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
9911 /* This is a constructor, we must ensure that any default args
9912 introduced by this definition are propagated to the clones
9913 now. The clones are used directly in overload resolution. */
9914 adjust_clone_args (decl1);
9916 /* Sometimes we don't notice that a function is a static member, and
9917 build a METHOD_TYPE for it. Fix that up now. */
9918 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
9919 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
9921 revert_static_member_fn (decl1);
9922 ctype = NULL_TREE;
9925 /* Set up current_class_type, and enter the scope of the class, if
9926 appropriate. */
9927 if (ctype)
9928 push_nested_class (ctype);
9929 else if (DECL_STATIC_FUNCTION_P (decl1))
9930 push_nested_class (DECL_CONTEXT (decl1));
9932 /* Now that we have entered the scope of the class, we must restore
9933 the bindings for any template parameters surrounding DECL1, if it
9934 is an inline member template. (Order is important; consider the
9935 case where a template parameter has the same name as a field of
9936 the class.) It is not until after this point that
9937 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
9938 if (flags & SF_INCLASS_INLINE)
9939 maybe_begin_member_template_processing (decl1);
9941 /* Effective C++ rule 15. */
9942 if (warn_ecpp
9943 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9944 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
9945 warning (0, "%<operator=%> should return a reference to %<*this%>");
9947 /* Make the init_value nonzero so pushdecl knows this is not tentative.
9948 error_mark_node is replaced below (in poplevel) with the BLOCK. */
9949 if (!DECL_INITIAL (decl1))
9950 DECL_INITIAL (decl1) = error_mark_node;
9952 /* This function exists in static storage.
9953 (This does not mean `static' in the C sense!) */
9954 TREE_STATIC (decl1) = 1;
9956 /* We must call push_template_decl after current_class_type is set
9957 up. (If we are processing inline definitions after exiting a
9958 class scope, current_class_type will be NULL_TREE until set above
9959 by push_nested_class.) */
9960 if (processing_template_decl)
9962 /* FIXME: Handle error_mark_node more gracefully. */
9963 tree newdecl1 = push_template_decl (decl1);
9964 if (newdecl1 != error_mark_node)
9965 decl1 = newdecl1;
9968 /* We are now in the scope of the function being defined. */
9969 current_function_decl = decl1;
9971 /* Save the parm names or decls from this function's declarator
9972 where store_parm_decls will find them. */
9973 current_function_parms = DECL_ARGUMENTS (decl1);
9975 /* Make sure the parameter and return types are reasonable. When
9976 you declare a function, these types can be incomplete, but they
9977 must be complete when you define the function. */
9978 check_function_type (decl1, current_function_parms);
9980 /* Build the return declaration for the function. */
9981 restype = TREE_TYPE (fntype);
9982 /* Promote the value to int before returning it. */
9983 if (c_promoting_integer_type_p (restype))
9984 restype = type_promotes_to (restype);
9985 if (DECL_RESULT (decl1) == NULL_TREE)
9987 tree resdecl;
9989 resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
9990 DECL_ARTIFICIAL (resdecl) = 1;
9991 DECL_IGNORED_P (resdecl) = 1;
9992 DECL_RESULT (decl1) = resdecl;
9994 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
9997 /* Initialize RTL machinery. We cannot do this until
9998 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
9999 even when processing a template; this is how we get
10000 CFUN set up, and our per-function variables initialized.
10001 FIXME factor out the non-RTL stuff. */
10002 bl = current_binding_level;
10003 allocate_struct_function (decl1);
10004 current_binding_level = bl;
10006 /* Even though we're inside a function body, we still don't want to
10007 call expand_expr to calculate the size of a variable-sized array.
10008 We haven't necessarily assigned RTL to all variables yet, so it's
10009 not safe to try to expand expressions involving them. */
10010 cfun->x_dont_save_pending_sizes_p = 1;
10012 /* Start the statement-tree, start the tree now. */
10013 DECL_SAVED_TREE (decl1) = push_stmt_list ();
10015 /* Let the user know we're compiling this function. */
10016 announce_function (decl1);
10018 /* Record the decl so that the function name is defined.
10019 If we already have a decl for this name, and it is a FUNCTION_DECL,
10020 use the old decl. */
10021 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
10023 /* A specialization is not used to guide overload resolution. */
10024 if (!DECL_FUNCTION_MEMBER_P (decl1)
10025 && !(DECL_USE_TEMPLATE (decl1) &&
10026 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
10028 tree olddecl = pushdecl (decl1);
10030 if (olddecl == error_mark_node)
10031 /* If something went wrong when registering the declaration,
10032 use DECL1; we have to have a FUNCTION_DECL to use when
10033 parsing the body of the function. */
10035 else
10036 /* Otherwise, OLDDECL is either a previous declaration of
10037 the same function or DECL1 itself. */
10038 decl1 = olddecl;
10040 else
10042 /* We need to set the DECL_CONTEXT. */
10043 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
10044 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
10045 /* And make sure we have enough default args. */
10046 check_default_args (decl1);
10048 fntype = TREE_TYPE (decl1);
10051 /* Determine the ELF visibility attribute for the function. We must
10052 not do this before calling "pushdecl", as we must allow
10053 "duplicate_decls" to merge any attributes appropriately. */
10054 if (!DECL_CLONED_FUNCTION_P (decl1))
10055 determine_visibility (decl1);
10057 /* Reset these in case the call to pushdecl changed them. */
10058 current_function_decl = decl1;
10059 cfun->decl = decl1;
10061 /* If we are (erroneously) defining a function that we have already
10062 defined before, wipe out what we knew before. */
10063 if (!DECL_PENDING_INLINE_P (decl1))
10064 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
10066 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
10068 /* We know that this was set up by `grokclassfn'. We do not
10069 wait until `store_parm_decls', since evil parse errors may
10070 never get us to that point. Here we keep the consistency
10071 between `current_class_type' and `current_class_ptr'. */
10072 tree t = DECL_ARGUMENTS (decl1);
10074 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
10075 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
10077 cp_function_chain->x_current_class_ref
10078 = build_indirect_ref (t, NULL);
10079 cp_function_chain->x_current_class_ptr = t;
10081 /* Constructors and destructors need to know whether they're "in
10082 charge" of initializing virtual base classes. */
10083 t = TREE_CHAIN (t);
10084 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
10086 current_in_charge_parm = t;
10087 t = TREE_CHAIN (t);
10089 if (DECL_HAS_VTT_PARM_P (decl1))
10091 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
10092 current_vtt_parm = t;
10096 if (DECL_INTERFACE_KNOWN (decl1))
10098 tree ctx = decl_function_context (decl1);
10100 if (DECL_NOT_REALLY_EXTERN (decl1))
10101 DECL_EXTERNAL (decl1) = 0;
10103 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
10104 && TREE_PUBLIC (ctx))
10105 /* This is a function in a local class in an extern inline
10106 function. */
10107 comdat_linkage (decl1);
10109 /* If this function belongs to an interface, it is public.
10110 If it belongs to someone else's interface, it is also external.
10111 This only affects inlines and template instantiations. */
10112 else if (finfo->interface_unknown == 0
10113 && ! DECL_TEMPLATE_INSTANTIATION (decl1))
10115 if (DECL_DECLARED_INLINE_P (decl1)
10116 || DECL_TEMPLATE_INSTANTIATION (decl1)
10117 || processing_template_decl)
10119 DECL_EXTERNAL (decl1)
10120 = (finfo->interface_only
10121 || (DECL_DECLARED_INLINE_P (decl1)
10122 && ! flag_implement_inlines
10123 && !DECL_VINDEX (decl1)));
10125 /* For WIN32 we also want to put these in linkonce sections. */
10126 maybe_make_one_only (decl1);
10128 else
10129 DECL_EXTERNAL (decl1) = 0;
10130 DECL_NOT_REALLY_EXTERN (decl1) = 0;
10131 DECL_INTERFACE_KNOWN (decl1) = 1;
10132 /* If this function is in an interface implemented in this file,
10133 make sure that the backend knows to emit this function
10134 here. */
10135 if (!DECL_EXTERNAL (decl1))
10136 mark_needed (decl1);
10138 else if (finfo->interface_unknown && finfo->interface_only
10139 && ! DECL_TEMPLATE_INSTANTIATION (decl1))
10141 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10142 interface, we will have both finfo->interface_unknown and
10143 finfo->interface_only set. In that case, we don't want to
10144 use the normal heuristics because someone will supply a
10145 #pragma implementation elsewhere, and deducing it here would
10146 produce a conflict. */
10147 comdat_linkage (decl1);
10148 DECL_EXTERNAL (decl1) = 0;
10149 DECL_INTERFACE_KNOWN (decl1) = 1;
10150 DECL_DEFER_OUTPUT (decl1) = 1;
10152 else
10154 /* This is a definition, not a reference.
10155 So clear DECL_EXTERNAL. */
10156 DECL_EXTERNAL (decl1) = 0;
10158 if ((DECL_DECLARED_INLINE_P (decl1)
10159 || DECL_TEMPLATE_INSTANTIATION (decl1))
10160 && ! DECL_INTERFACE_KNOWN (decl1)
10161 /* Don't try to defer nested functions for now. */
10162 && ! decl_function_context (decl1))
10163 DECL_DEFER_OUTPUT (decl1) = 1;
10164 else
10165 DECL_INTERFACE_KNOWN (decl1) = 1;
10168 begin_scope (sk_function_parms, decl1);
10170 ++function_depth;
10172 if (DECL_DESTRUCTOR_P (decl1)
10173 || (DECL_CONSTRUCTOR_P (decl1)
10174 && targetm.cxx.cdtor_returns_this ()))
10176 cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10177 DECL_CONTEXT (cdtor_label) = current_function_decl;
10180 start_fname_decls ();
10182 store_parm_decls (current_function_parms);
10186 /* Like start_preparsed_function, except that instead of a
10187 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
10189 Returns 1 on success. If the DECLARATOR is not suitable for a function
10190 (it defines a datum instead), we return 0, which tells
10191 yyparse to report a parse error. */
10194 start_function (cp_decl_specifier_seq *declspecs,
10195 const cp_declarator *declarator,
10196 tree attrs)
10198 tree decl1;
10200 if (have_extern_spec)
10202 declspecs->storage_class = sc_extern;
10203 /* This should only be done once on the outermost decl. */
10204 have_extern_spec = false;
10207 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
10208 /* If the declarator is not suitable for a function definition,
10209 cause a syntax error. */
10210 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10211 return 0;
10213 /* If #pragma weak was used, mark the decl weak now. */
10214 if (global_scope_p (current_binding_level))
10215 maybe_apply_pragma_weak (decl1);
10217 if (DECL_MAIN_P (decl1))
10218 /* main must return int. grokfndecl should have corrected it
10219 (and issued a diagnostic) if the user got it wrong. */
10220 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
10221 integer_type_node));
10223 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
10225 return 1;
10228 /* Store the parameter declarations into the current function declaration.
10229 This is called after parsing the parameter declarations, before
10230 digesting the body of the function.
10232 Also install to binding contour return value identifier, if any. */
10234 static void
10235 store_parm_decls (tree current_function_parms)
10237 tree fndecl = current_function_decl;
10238 tree parm;
10240 /* This is a chain of any other decls that came in among the parm
10241 declarations. If a parm is declared with enum {foo, bar} x;
10242 then CONST_DECLs for foo and bar are put here. */
10243 tree nonparms = NULL_TREE;
10245 if (current_function_parms)
10247 /* This case is when the function was defined with an ANSI prototype.
10248 The parms already have decls, so we need not do anything here
10249 except record them as in effect
10250 and complain if any redundant old-style parm decls were written. */
10252 tree specparms = current_function_parms;
10253 tree next;
10255 /* Must clear this because it might contain TYPE_DECLs declared
10256 at class level. */
10257 current_binding_level->names = NULL;
10259 /* If we're doing semantic analysis, then we'll call pushdecl
10260 for each of these. We must do them in reverse order so that
10261 they end in the correct forward order. */
10262 specparms = nreverse (specparms);
10264 for (parm = specparms; parm; parm = next)
10266 next = TREE_CHAIN (parm);
10267 if (TREE_CODE (parm) == PARM_DECL)
10269 if (DECL_NAME (parm) == NULL_TREE
10270 || TREE_CODE (parm) != VOID_TYPE)
10271 pushdecl (parm);
10272 else
10273 error ("parameter %qD declared void", parm);
10275 else
10277 /* If we find an enum constant or a type tag,
10278 put it aside for the moment. */
10279 TREE_CHAIN (parm) = NULL_TREE;
10280 nonparms = chainon (nonparms, parm);
10284 /* Get the decls in their original chain order and record in the
10285 function. This is all and only the PARM_DECLs that were
10286 pushed into scope by the loop above. */
10287 DECL_ARGUMENTS (fndecl) = getdecls ();
10289 else
10290 DECL_ARGUMENTS (fndecl) = NULL_TREE;
10292 /* Now store the final chain of decls for the arguments
10293 as the decl-chain of the current lexical scope.
10294 Put the enumerators in as well, at the front so that
10295 DECL_ARGUMENTS is not modified. */
10296 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
10298 /* For a cloned function, we've already got all the code we need;
10299 there's no need to add any extra bits. */
10300 if (!DECL_CLONED_FUNCTION_P (fndecl))
10302 /* Do the starting of the exception specifications, if we have any. */
10303 if (flag_exceptions && !processing_template_decl
10304 && flag_enforce_eh_specs
10305 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
10306 current_eh_spec_block = begin_eh_spec_block ();
10311 /* We have finished doing semantic analysis on DECL, but have not yet
10312 generated RTL for its body. Save away our current state, so that
10313 when we want to generate RTL later we know what to do. */
10315 static void
10316 save_function_data (tree decl)
10318 struct language_function *f;
10320 /* Save the language-specific per-function data so that we can
10321 get it back when we really expand this function. */
10322 gcc_assert (!DECL_PENDING_INLINE_P (decl));
10324 /* Make a copy. */
10325 f = GGC_NEW (struct language_function);
10326 memcpy (f, cp_function_chain, sizeof (struct language_function));
10327 DECL_SAVED_FUNCTION_DATA (decl) = f;
10329 /* Clear out the bits we don't need. */
10330 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
10331 f->x_named_label_uses = NULL;
10332 f->bindings = NULL;
10333 f->x_local_names = NULL;
10337 /* Set the return value of the constructor (if present). */
10339 static void
10340 finish_constructor_body (void)
10342 tree val;
10343 tree exprstmt;
10345 if (targetm.cxx.cdtor_returns_this ())
10347 /* Any return from a constructor will end up here. */
10348 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10350 val = DECL_ARGUMENTS (current_function_decl);
10351 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10352 DECL_RESULT (current_function_decl), val);
10353 /* Return the address of the object. */
10354 exprstmt = build_stmt (RETURN_EXPR, val);
10355 add_stmt (exprstmt);
10359 /* Do all the processing for the beginning of a destructor; set up the
10360 vtable pointers and cleanups for bases and members. */
10362 static void
10363 begin_destructor_body (void)
10365 tree if_stmt;
10366 tree compound_stmt;
10368 /* If the dtor is empty, and we know there is not any possible
10369 way we could use any vtable entries, before they are possibly
10370 set by a base class dtor, we don't have to setup the vtables,
10371 as we know that any base class dtor will set up any vtables
10372 it needs. We avoid MI, because one base class dtor can do a
10373 virtual dispatch to an overridden function that would need to
10374 have a non-related vtable set up, we cannot avoid setting up
10375 vtables in that case. We could change this to see if there
10376 is just one vtable.
10378 ??? In the destructor for a class, the vtables are set
10379 appropriately for that class. There will be no non-related
10380 vtables. jason 2001-12-11. */
10381 if_stmt = begin_if_stmt ();
10383 /* If it is not safe to avoid setting up the vtables, then
10384 someone will change the condition to be boolean_true_node.
10385 (Actually, for now, we do not have code to set the condition
10386 appropriately, so we just assume that we always need to
10387 initialize the vtables.) */
10388 finish_if_stmt_cond (boolean_true_node, if_stmt);
10390 compound_stmt = begin_compound_stmt (0);
10392 /* Make all virtual function table pointers in non-virtual base
10393 classes point to CURRENT_CLASS_TYPE's virtual function
10394 tables. */
10395 initialize_vtbl_ptrs (current_class_ptr);
10397 finish_compound_stmt (compound_stmt);
10398 finish_then_clause (if_stmt);
10399 finish_if_stmt (if_stmt);
10401 /* And insert cleanups for our bases and members so that they
10402 will be properly destroyed if we throw. */
10403 push_base_cleanups ();
10406 /* At the end of every destructor we generate code to delete the object if
10407 necessary. Do that now. */
10409 static void
10410 finish_destructor_body (void)
10412 tree exprstmt;
10414 /* Any return from a destructor will end up here; that way all base
10415 and member cleanups will be run when the function returns. */
10416 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10418 /* In a virtual destructor, we must call delete. */
10419 if (DECL_VIRTUAL_P (current_function_decl))
10421 tree if_stmt;
10422 tree virtual_size = cxx_sizeof (current_class_type);
10424 /* [class.dtor]
10426 At the point of definition of a virtual destructor (including
10427 an implicit definition), non-placement operator delete shall
10428 be looked up in the scope of the destructor's class and if
10429 found shall be accessible and unambiguous. */
10430 exprstmt = build_op_delete_call
10431 (DELETE_EXPR, current_class_ptr, virtual_size,
10432 /*global_p=*/false, NULL_TREE);
10434 if_stmt = begin_if_stmt ();
10435 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
10436 current_in_charge_parm,
10437 integer_one_node),
10438 if_stmt);
10439 finish_expr_stmt (exprstmt);
10440 finish_then_clause (if_stmt);
10441 finish_if_stmt (if_stmt);
10444 if (targetm.cxx.cdtor_returns_this ())
10446 tree val;
10448 val = DECL_ARGUMENTS (current_function_decl);
10449 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10450 DECL_RESULT (current_function_decl), val);
10451 /* Return the address of the object. */
10452 exprstmt = build_stmt (RETURN_EXPR, val);
10453 add_stmt (exprstmt);
10457 /* Do the necessary processing for the beginning of a function body, which
10458 in this case includes member-initializers, but not the catch clauses of
10459 a function-try-block. Currently, this means opening a binding level
10460 for the member-initializers (in a ctor) and member cleanups (in a dtor).
10461 In other functions, this isn't necessary, but it doesn't hurt. */
10463 tree
10464 begin_function_body (void)
10466 tree stmt;
10468 if (processing_template_decl)
10469 /* Do nothing now. */;
10470 else
10471 /* Always keep the BLOCK node associated with the outermost pair of
10472 curly braces of a function. These are needed for correct
10473 operation of dwarfout.c. */
10474 keep_next_level (true);
10476 stmt = begin_compound_stmt (BCS_FN_BODY);
10478 if (processing_template_decl)
10479 /* Do nothing now. */;
10480 else if (DECL_DESTRUCTOR_P (current_function_decl))
10481 begin_destructor_body ();
10483 return stmt;
10486 /* Do the processing for the end of a function body. Currently, this means
10487 closing out the cleanups for fully-constructed bases and members, and in
10488 the case of the destructor, deleting the object if desired. Again, this
10489 is only meaningful for [cd]tors, since they are the only functions where
10490 there is a significant distinction between the main body and any
10491 function catch clauses. Handling, say, main() return semantics here
10492 would be wrong, as flowing off the end of a function catch clause for
10493 main() would also need to return 0. */
10495 void
10496 finish_function_body (tree compstmt)
10498 /* Close the block. */
10499 finish_compound_stmt (compstmt);
10501 if (processing_template_decl)
10502 /* Do nothing now. */;
10503 else if (DECL_CONSTRUCTOR_P (current_function_decl))
10504 finish_constructor_body ();
10505 else if (DECL_DESTRUCTOR_P (current_function_decl))
10506 finish_destructor_body ();
10509 /* Finish up a function declaration and compile that function
10510 all the way to assembler language output. The free the storage
10511 for the function definition.
10513 FLAGS is a bitwise or of the following values:
10514 2 - INCLASS_INLINE
10515 We just finished processing the body of an in-class inline
10516 function definition. (This processing will have taken place
10517 after the class definition is complete.) */
10519 tree
10520 finish_function (int flags)
10522 tree fndecl = current_function_decl;
10523 tree fntype, ctype = NULL_TREE;
10524 int inclass_inline = (flags & 2) != 0;
10525 int nested;
10527 /* When we get some parse errors, we can end up without a
10528 current_function_decl, so cope. */
10529 if (fndecl == NULL_TREE)
10530 return error_mark_node;
10532 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
10533 && DECL_VIRTUAL_P (fndecl)
10534 && !processing_template_decl)
10536 tree fnclass = DECL_CONTEXT (fndecl);
10537 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
10538 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
10541 nested = function_depth > 1;
10542 fntype = TREE_TYPE (fndecl);
10544 /* TREE_READONLY (fndecl) = 1;
10545 This caused &foo to be of type ptr-to-const-function
10546 which then got a warning when stored in a ptr-to-function variable. */
10548 gcc_assert (building_stmt_tree ());
10550 /* For a cloned function, we've already got all the code we need;
10551 there's no need to add any extra bits. */
10552 if (!DECL_CLONED_FUNCTION_P (fndecl))
10554 if (DECL_MAIN_P (current_function_decl))
10556 tree stmt;
10558 /* Make it so that `main' always returns 0 by default (or
10559 1 for VMS). */
10560 #if VMS_TARGET
10561 stmt = finish_return_stmt (integer_one_node);
10562 #else
10563 stmt = finish_return_stmt (integer_zero_node);
10564 #endif
10565 /* Hack. We don't want the middle-end to warn that this
10566 return is unreachable, so put the statement on the
10567 special line 0. */
10568 #ifdef USE_MAPPED_LOCATION
10569 SET_EXPR_LOCATION (stmt, UNKNOWN_LOCATION);
10570 #else
10571 annotate_with_file_line (stmt, input_filename, 0);
10572 #endif
10575 /* Finish dealing with exception specifiers. */
10576 if (flag_exceptions && !processing_template_decl
10577 && flag_enforce_eh_specs
10578 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
10579 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
10580 (TREE_TYPE (current_function_decl)),
10581 current_eh_spec_block);
10584 /* If we're saving up tree structure, tie off the function now. */
10585 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
10587 finish_fname_decls ();
10589 /* If this function can't throw any exceptions, remember that. */
10590 if (!processing_template_decl
10591 && !cp_function_chain->can_throw
10592 && !flag_non_call_exceptions)
10593 TREE_NOTHROW (fndecl) = 1;
10595 /* This must come after expand_function_end because cleanups might
10596 have declarations (from inline functions) that need to go into
10597 this function's blocks. */
10599 /* If the current binding level isn't the outermost binding level
10600 for this function, either there is a bug, or we have experienced
10601 syntax errors and the statement tree is malformed. */
10602 if (current_binding_level->kind != sk_function_parms)
10604 /* Make sure we have already experienced errors. */
10605 gcc_assert (errorcount);
10607 /* Throw away the broken statement tree and extra binding
10608 levels. */
10609 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
10611 while (current_binding_level->kind != sk_function_parms)
10613 if (current_binding_level->kind == sk_class)
10614 pop_nested_class ();
10615 else
10616 poplevel (0, 0, 0);
10619 poplevel (1, 0, 1);
10621 /* Statements should always be full-expressions at the outermost set
10622 of curly braces for a function. */
10623 gcc_assert (stmts_are_full_exprs_p ());
10625 /* Set up the named return value optimization, if we can. Candidate
10626 variables are selected in check_return_value. */
10627 if (current_function_return_value)
10629 tree r = current_function_return_value;
10630 tree outer;
10632 if (r != error_mark_node
10633 /* This is only worth doing for fns that return in memory--and
10634 simpler, since we don't have to worry about promoted modes. */
10635 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
10636 /* Only allow this for variables declared in the outer scope of
10637 the function so we know that their lifetime always ends with a
10638 return; see g++.dg/opt/nrv6.C. We could be more flexible if
10639 we were to do this optimization in tree-ssa. */
10640 && (outer = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl)))
10641 /* Skip the artificial function body block. */
10642 && (outer = BLOCK_SUBBLOCKS (outer))
10643 && chain_member (r, BLOCK_VARS (outer)))
10644 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
10646 current_function_return_value = NULL_TREE;
10649 /* Remember that we were in class scope. */
10650 if (current_class_name)
10651 ctype = current_class_type;
10653 /* Must mark the RESULT_DECL as being in this function. */
10654 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
10656 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
10657 to the FUNCTION_DECL node itself. */
10658 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
10660 /* Save away current state, if appropriate. */
10661 if (!processing_template_decl)
10662 save_function_data (fndecl);
10664 /* Complain if there's just no return statement. */
10665 if (warn_return_type
10666 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
10667 && !dependent_type_p (TREE_TYPE (fntype))
10668 && !current_function_returns_value && !current_function_returns_null
10669 /* Don't complain if we abort or throw. */
10670 && !current_function_returns_abnormally
10671 && !DECL_NAME (DECL_RESULT (fndecl))
10672 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
10673 inline function, as we might never be compiled separately. */
10674 && (DECL_INLINE (fndecl) || processing_template_decl)
10675 /* Structor return values (if any) are set by the compiler. */
10676 && !DECL_CONSTRUCTOR_P (fndecl)
10677 && !DECL_DESTRUCTOR_P (fndecl))
10678 warning (0, "no return statement in function returning non-void");
10680 /* Store the end of the function, so that we get good line number
10681 info for the epilogue. */
10682 cfun->function_end_locus = input_location;
10684 /* Genericize before inlining. */
10685 if (!processing_template_decl)
10687 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
10688 cp_genericize (fndecl);
10689 /* Clear out the bits we don't need. */
10690 f->x_current_class_ptr = NULL;
10691 f->x_current_class_ref = NULL;
10692 f->x_eh_spec_block = NULL;
10693 f->x_in_charge_parm = NULL;
10694 f->x_vtt_parm = NULL;
10695 f->x_return_value = NULL;
10696 f->bindings = NULL;
10698 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
10699 c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
10701 /* Clear out the bits we don't need. */
10702 local_names = NULL;
10703 named_label_uses = NULL;
10705 /* We're leaving the context of this function, so zap cfun. It's still in
10706 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
10707 cfun = NULL;
10708 current_function_decl = NULL;
10710 /* If this is an in-class inline definition, we may have to pop the
10711 bindings for the template parameters that we added in
10712 maybe_begin_member_template_processing when start_function was
10713 called. */
10714 if (inclass_inline)
10715 maybe_end_member_template_processing ();
10717 /* Leave the scope of the class. */
10718 if (ctype)
10719 pop_nested_class ();
10721 --function_depth;
10723 /* Clean up. */
10724 if (! nested)
10725 /* Let the error reporting routines know that we're outside a
10726 function. For a nested function, this value is used in
10727 cxx_pop_function_context and then reset via pop_function_context. */
10728 current_function_decl = NULL_TREE;
10730 return fndecl;
10733 /* Create the FUNCTION_DECL for a function definition.
10734 DECLSPECS and DECLARATOR are the parts of the declaration;
10735 they describe the return type and the name of the function,
10736 but twisted together in a fashion that parallels the syntax of C.
10738 This function creates a binding context for the function body
10739 as well as setting up the FUNCTION_DECL in current_function_decl.
10741 Returns a FUNCTION_DECL on success.
10743 If the DECLARATOR is not suitable for a function (it defines a datum
10744 instead), we return 0, which tells yyparse to report a parse error.
10746 May return void_type_node indicating that this method is actually
10747 a friend. See grokfield for more details.
10749 Came here with a `.pushlevel' .
10751 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
10752 CHANGES TO CODE IN `grokfield'. */
10754 tree
10755 start_method (cp_decl_specifier_seq *declspecs,
10756 const cp_declarator *declarator, tree attrlist)
10758 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
10759 &attrlist);
10761 if (fndecl == error_mark_node)
10762 return error_mark_node;
10764 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
10766 error ("invalid member function declaration");
10767 return error_mark_node;
10770 if (attrlist)
10771 cplus_decl_attributes (&fndecl, attrlist, 0);
10773 /* Pass friends other than inline friend functions back. */
10774 if (fndecl == void_type_node)
10775 return fndecl;
10777 if (DECL_IN_AGGR_P (fndecl))
10779 if (DECL_CONTEXT (fndecl)
10780 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
10781 error ("%qD is already defined in class %qT", fndecl,
10782 DECL_CONTEXT (fndecl));
10783 return void_type_node;
10786 check_template_shadow (fndecl);
10788 DECL_DECLARED_INLINE_P (fndecl) = 1;
10789 if (flag_default_inline)
10790 DECL_INLINE (fndecl) = 1;
10792 /* We process method specializations in finish_struct_1. */
10793 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
10795 fndecl = push_template_decl (fndecl);
10796 if (fndecl == error_mark_node)
10797 return fndecl;
10800 if (! DECL_FRIEND_P (fndecl))
10802 if (TREE_CHAIN (fndecl))
10804 fndecl = copy_node (fndecl);
10805 TREE_CHAIN (fndecl) = NULL_TREE;
10807 grok_special_member_properties (fndecl);
10810 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
10812 /* Make a place for the parms. */
10813 begin_scope (sk_function_parms, fndecl);
10815 DECL_IN_AGGR_P (fndecl) = 1;
10816 return fndecl;
10819 /* Go through the motions of finishing a function definition.
10820 We don't compile this method until after the whole class has
10821 been processed.
10823 FINISH_METHOD must return something that looks as though it
10824 came from GROKFIELD (since we are defining a method, after all).
10826 This is called after parsing the body of the function definition.
10827 STMTS is the chain of statements that makes up the function body.
10829 DECL is the ..._DECL that `start_method' provided. */
10831 tree
10832 finish_method (tree decl)
10834 tree fndecl = decl;
10835 tree old_initial;
10837 tree link;
10839 if (decl == void_type_node)
10840 return decl;
10842 old_initial = DECL_INITIAL (fndecl);
10844 /* Undo the level for the parms (from start_method).
10845 This is like poplevel, but it causes nothing to be
10846 saved. Saving information here confuses symbol-table
10847 output routines. Besides, this information will
10848 be correctly output when this method is actually
10849 compiled. */
10851 /* Clear out the meanings of the local variables of this level;
10852 also record in each decl which block it belongs to. */
10854 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
10856 if (DECL_NAME (link) != NULL_TREE)
10857 pop_binding (DECL_NAME (link), link);
10858 gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
10859 DECL_CONTEXT (link) = NULL_TREE;
10862 poplevel (0, 0, 0);
10864 DECL_INITIAL (fndecl) = old_initial;
10866 /* We used to check if the context of FNDECL was different from
10867 current_class_type as another way to get inside here. This didn't work
10868 for String.cc in libg++. */
10869 if (DECL_FRIEND_P (fndecl))
10871 VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
10872 fndecl);
10873 decl = void_type_node;
10876 return decl;
10880 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
10881 we can lay it out later, when and if its type becomes complete. */
10883 void
10884 maybe_register_incomplete_var (tree var)
10886 gcc_assert (TREE_CODE (var) == VAR_DECL);
10888 /* Keep track of variables with incomplete types. */
10889 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
10890 && DECL_EXTERNAL (var))
10892 tree inner_type = TREE_TYPE (var);
10894 while (TREE_CODE (inner_type) == ARRAY_TYPE)
10895 inner_type = TREE_TYPE (inner_type);
10896 inner_type = TYPE_MAIN_VARIANT (inner_type);
10898 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
10899 /* RTTI TD entries are created while defining the type_info. */
10900 || (TYPE_LANG_SPECIFIC (inner_type)
10901 && TYPE_BEING_DEFINED (inner_type)))
10902 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
10906 /* Called when a class type (given by TYPE) is defined. If there are
10907 any existing VAR_DECLs whose type hsa been completed by this
10908 declaration, update them now. */
10910 void
10911 complete_vars (tree type)
10913 tree *list = &incomplete_vars;
10915 gcc_assert (CLASS_TYPE_P (type));
10916 while (*list)
10918 if (same_type_p (type, TREE_PURPOSE (*list)))
10920 tree var = TREE_VALUE (*list);
10921 tree type = TREE_TYPE (var);
10922 /* Complete the type of the variable. The VAR_DECL itself
10923 will be laid out in expand_expr. */
10924 complete_type (type);
10925 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
10926 /* Remove this entry from the list. */
10927 *list = TREE_CHAIN (*list);
10929 else
10930 list = &TREE_CHAIN (*list);
10933 /* Check for pending declarations which may have abstract type. */
10934 complete_type_check_abstract (type);
10937 /* If DECL is of a type which needs a cleanup, build that cleanup
10938 here. */
10940 tree
10941 cxx_maybe_build_cleanup (tree decl)
10943 tree type = TREE_TYPE (decl);
10945 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
10947 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
10948 tree rval;
10949 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
10950 && CLASSTYPE_VBASECLASSES (type));
10952 if (TREE_CODE (type) == ARRAY_TYPE)
10953 rval = decl;
10954 else
10956 cxx_mark_addressable (decl);
10957 rval = build_unary_op (ADDR_EXPR, decl, 0);
10960 /* Optimize for space over speed here. */
10961 if (!has_vbases || flag_expensive_optimizations)
10962 flags |= LOOKUP_NONVIRTUAL;
10964 rval = build_delete (TREE_TYPE (rval), rval,
10965 sfk_complete_destructor, flags, 0);
10967 return rval;
10969 return NULL_TREE;
10972 /* When a stmt has been parsed, this function is called. */
10974 void
10975 finish_stmt (void)
10979 /* DECL was originally constructed as a non-static member function,
10980 but turned out to be static. Update it accordingly. */
10982 void
10983 revert_static_member_fn (tree decl)
10985 tree tmp;
10986 tree function = TREE_TYPE (decl);
10987 tree args = TYPE_ARG_TYPES (function);
10989 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
10990 != TYPE_UNQUALIFIED)
10991 error ("static member function %q#D declared with type qualifiers", decl);
10993 args = TREE_CHAIN (args);
10994 tmp = build_function_type (TREE_TYPE (function), args);
10995 tmp = build_qualified_type (tmp, cp_type_quals (function));
10996 tmp = build_exception_variant (tmp,
10997 TYPE_RAISES_EXCEPTIONS (function));
10998 TREE_TYPE (decl) = tmp;
10999 if (DECL_ARGUMENTS (decl))
11000 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
11001 DECL_STATIC_FUNCTION_P (decl) = 1;
11004 /* Initialize the variables used during compilation of a C++
11005 function. */
11007 void
11008 cxx_push_function_context (struct function * f)
11010 struct language_function *p = GGC_CNEW (struct language_function);
11011 f->language = p;
11013 /* Whenever we start a new function, we destroy temporaries in the
11014 usual way. */
11015 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11017 if (f->decl)
11019 tree fn = f->decl;
11021 if (DECL_SAVED_FUNCTION_DATA (fn))
11023 /* If we already parsed this function, and we're just expanding it
11024 now, restore saved state. */
11025 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
11027 /* We don't need the saved data anymore. Unless this is an inline
11028 function; we need the named return value info for
11029 declare_return_variable. */
11030 if (! DECL_INLINE (fn))
11031 DECL_SAVED_FUNCTION_DATA (fn) = NULL;
11036 /* Free the language-specific parts of F, now that we've finished
11037 compiling the function. */
11039 void
11040 cxx_pop_function_context (struct function * f)
11042 f->language = 0;
11045 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11046 one of the language-independent trees. */
11048 enum cp_tree_node_structure_enum
11049 cp_tree_node_structure (union lang_tree_node * t)
11051 switch (TREE_CODE (&t->generic))
11053 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
11054 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
11055 case OVERLOAD: return TS_CP_OVERLOAD;
11056 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
11057 case TINST_LEVEL: return TS_CP_TINST_LEVEL;
11058 case PTRMEM_CST: return TS_CP_PTRMEM;
11059 case BASELINK: return TS_CP_BASELINK;
11060 default: return TS_CP_GENERIC;
11064 /* Build the void_list_node (void_type_node having been created). */
11065 tree
11066 build_void_list_node (void)
11068 tree t = build_tree_list (NULL_TREE, void_type_node);
11069 return t;
11072 bool
11073 cp_missing_noreturn_ok_p (tree decl)
11075 /* A missing noreturn is ok for the `main' function. */
11076 return DECL_MAIN_P (decl);
11079 /* Return the COMDAT group into which DECL should be placed. */
11081 const char *
11082 cxx_comdat_group (tree decl)
11084 tree name;
11086 /* Virtual tables, construction virtual tables, and virtual table
11087 tables all go in a single COMDAT group, named after the primary
11088 virtual table. */
11089 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
11090 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
11091 /* For all other DECLs, the COMDAT group is the mangled name of the
11092 declaration itself. */
11093 else
11095 while (DECL_THUNK_P (decl))
11097 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
11098 into the same section as the target function. In that case
11099 we must return target's name. */
11100 tree target = THUNK_TARGET (decl);
11101 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
11102 && DECL_SECTION_NAME (target) != NULL
11103 && DECL_ONE_ONLY (target))
11104 decl = target;
11105 else
11106 break;
11108 name = DECL_ASSEMBLER_NAME (decl);
11111 return IDENTIFIER_POINTER (name);
11114 #include "gt-cp-decl.h"