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 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)
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. */
33 #include "coretypes.h"
40 #include "tree-inline.h"
51 #include "diagnostic.h"
54 #include "tree-flow.h"
56 static tree
grokparms (tree
, tree
*);
57 static const char *redeclaration_error_message (tree
, tree
);
59 static int decl_jump_unsafe (tree
);
60 static void require_complete_types_for_parms (tree
);
61 static int ambi_op_p (enum tree_code
);
62 static int unary_op_p (enum tree_code
);
63 static void push_local_name (tree
);
64 static tree
grok_reference_init (tree
, tree
, tree
, tree
*);
65 static tree
grokfndecl (tree
, tree
, tree
, tree
, tree
, int,
66 enum overload_flags
, tree
,
67 tree
, int, int, int, int, int, int, tree
);
68 static tree
grokvardecl (tree
, tree
, RID_BIT_TYPE
*, int, int, tree
);
69 static void record_unknown_type (tree
, const char *);
70 static tree
builtin_function_1 (const char *, tree
, tree
, int,
71 enum built_in_class
, const char *,
73 static tree
build_library_fn_1 (tree
, enum tree_code
, tree
);
74 static int member_function_or_else (tree
, tree
, enum overload_flags
);
75 static void bad_specifiers (tree
, const char *, int, int, int, int,
77 static void check_for_uninitialized_const_var (tree
);
78 static hashval_t
typename_hash (const void *);
79 static int typename_compare (const void *, const void *);
80 static tree
local_variable_p_walkfn (tree
*, int *, void *);
81 static tree
record_builtin_java_type (const char *, int);
82 static const char *tag_name (enum tag_types code
);
83 static int walk_namespaces_r (tree
, walk_namespaces_fn
, void *);
84 static int walk_globals_r (tree
, void*);
85 static int walk_vtables_r (tree
, void*);
86 static tree
make_label_decl (tree
, int);
87 static void use_label (tree
);
88 static void check_previous_goto_1 (tree
, struct cp_binding_level
*, tree
,
90 static void check_previous_goto (struct named_label_use_list
*);
91 static void check_switch_goto (struct cp_binding_level
*);
92 static void check_previous_gotos (tree
);
93 static void pop_label (tree
, tree
);
94 static void pop_labels (tree
);
95 static void maybe_deduce_size_from_array_init (tree
, tree
);
96 static void layout_var_decl (tree
);
97 static void maybe_commonize_var (tree
);
98 static tree
check_initializer (tree
, tree
, int, tree
*);
99 static void make_rtl_for_nonlocal_decl (tree
, tree
, const char *);
100 static void save_function_data (tree
);
101 static void check_function_type (tree
, tree
);
102 static void begin_constructor_body (void);
103 static void finish_constructor_body (void);
104 static void begin_destructor_body (void);
105 static void finish_destructor_body (void);
106 static tree
create_array_type_for_decl (tree
, tree
, tree
);
107 static tree
get_atexit_node (void);
108 static tree
get_dso_handle_node (void);
109 static tree
start_cleanup_fn (void);
110 static void end_cleanup_fn (void);
111 static tree
cp_make_fname_decl (tree
, int);
112 static void initialize_predefined_identifiers (void);
113 static tree check_special_function_return_type
114 (special_function_kind
, tree
, tree
);
115 static tree
push_cp_library_fn (enum tree_code
, tree
);
116 static tree
build_cp_library_fn (tree
, enum tree_code
, tree
);
117 static void store_parm_decls (tree
);
118 static void initialize_local_var (tree
, tree
);
119 static void expand_static_init (tree
, tree
);
120 static tree
next_initializable_field (tree
);
121 static tree
reshape_init (tree
, tree
*);
122 static tree
build_typename_type (tree
, tree
, tree
);
124 /* Erroneous argument lists can use this *IFF* they do not modify it. */
125 tree error_mark_list
;
127 /* The following symbols are subsumed in the cp_global_trees array, and
128 listed here individually for documentation purposes.
131 tree wchar_decl_node;
133 tree vtable_entry_type;
134 tree delta_type_node;
135 tree __t_desc_type_node;
136 tree ti_desc_type_node;
137 tree bltn_desc_type_node, ptr_desc_type_node;
138 tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
139 tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
140 tree ptm_desc_type_node;
141 tree base_desc_type_node;
143 tree class_type_node;
144 tree unknown_type_node;
146 Array type `vtable_entry_type[]'
149 tree vtbl_ptr_type_node;
156 A FUNCTION_DECL which can call `abort'. Not necessarily the
157 one that the user will declare, but sufficient to be called
158 by routines that want to abort the program.
162 The FUNCTION_DECL for the default `::operator delete'.
164 tree global_delete_fndecl;
167 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
172 tree cp_global_trees
[CPTI_MAX
];
174 /* Indicates that there is a type value in some namespace, although
175 that is not necessarily in scope at the moment. */
177 tree global_type_node
;
179 /* The node that holds the "name" of the global scope. */
180 tree global_scope_name
;
182 /* Used only for jumps to as-yet undefined labels, since jumps to
183 defined labels can have their validity checked immediately. */
185 struct named_label_use_list
GTY(())
187 struct cp_binding_level
*binding_level
;
190 location_t o_goto_locus
;
191 struct named_label_use_list
*next
;
194 #define named_label_uses cp_function_chain->x_named_label_uses
196 #define local_names cp_function_chain->x_local_names
198 /* A list of objects which have constructors or destructors
199 which reside in the global scope. The decl is stored in
200 the TREE_VALUE slot and the initializer is stored
201 in the TREE_PURPOSE slot. */
202 tree static_aggregates
;
206 /* A node for the integer constants 2, and 3. */
208 tree integer_two_node
, integer_three_node
;
210 /* A list of all LABEL_DECLs in the function that have names. Here so
211 we can clear out their names' definitions at the end of the
212 function, and so we can check the validity of jumps to these labels. */
214 struct named_label_list
GTY(())
216 struct cp_binding_level
*binding_level
;
221 struct named_label_list
*next
;
222 unsigned int in_try_scope
: 1;
223 unsigned int in_catch_scope
: 1;
226 #define named_labels cp_function_chain->x_named_labels
228 /* The number of function bodies which we are currently processing.
229 (Zero if we are at namespace scope, one inside the body of a
230 function, two inside the body of a function in a local class, etc.) */
233 /* States indicating how grokdeclarator() should handle declspecs marked
234 with __attribute__((deprecated)). An object declared as
235 __attribute__((deprecated)) suppresses warnings of uses of other
238 enum deprecated_states
{
243 static enum deprecated_states deprecated_state
= DEPRECATED_NORMAL
;
245 /* Set by add_implicitly_declared_members() to keep those members from
246 being flagged as deprecated or reported as using deprecated
248 int adding_implicit_members
= 0;
250 /* True if a declaration with an `extern' linkage specifier is being
252 bool have_extern_spec
;
255 /* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
256 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
257 time the VAR_DECL was declared, the type was incomplete. */
259 static GTY(()) tree incomplete_vars
;
261 /* Returns the kind of template specialization we are currently
262 processing, given that it's declaration contained N_CLASS_SCOPES
263 explicit scope qualifications. */
266 current_tmpl_spec_kind (int n_class_scopes
)
268 int n_template_parm_scopes
= 0;
269 int seen_specialization_p
= 0;
270 int innermost_specialization_p
= 0;
271 struct cp_binding_level
*b
;
273 /* Scan through the template parameter scopes. */
274 for (b
= current_binding_level
;
275 b
->kind
== sk_template_parms
;
278 /* If we see a specialization scope inside a parameter scope,
279 then something is wrong. That corresponds to a declaration
282 template <class T> template <> ...
284 which is always invalid since [temp.expl.spec] forbids the
285 specialization of a class member template if the enclosing
286 class templates are not explicitly specialized as well. */
287 if (b
->explicit_spec_p
)
289 if (n_template_parm_scopes
== 0)
290 innermost_specialization_p
= 1;
292 seen_specialization_p
= 1;
294 else if (seen_specialization_p
== 1)
295 return tsk_invalid_member_spec
;
297 ++n_template_parm_scopes
;
300 /* Handle explicit instantiations. */
301 if (processing_explicit_instantiation
)
303 if (n_template_parm_scopes
!= 0)
304 /* We've seen a template parameter list during an explicit
305 instantiation. For example:
307 template <class T> template void f(int);
309 This is erroneous. */
310 return tsk_invalid_expl_inst
;
312 return tsk_expl_inst
;
315 if (n_template_parm_scopes
< n_class_scopes
)
316 /* We've not seen enough template headers to match all the
317 specialized classes present. For example:
319 template <class T> void R<T>::S<T>::f(int);
321 This is invalid; there needs to be one set of template
322 parameters for each class. */
323 return tsk_insufficient_parms
;
324 else if (n_template_parm_scopes
== n_class_scopes
)
325 /* We're processing a non-template declaration (even though it may
326 be a member of a template class.) For example:
328 template <class T> void S<T>::f(int);
330 The `class T' maches the `S<T>', leaving no template headers
331 corresponding to the `f'. */
333 else if (n_template_parm_scopes
> n_class_scopes
+ 1)
334 /* We've got too many template headers. For example:
336 template <> template <class T> void f (T);
338 There need to be more enclosing classes. */
339 return tsk_excessive_parms
;
341 /* This must be a template. It's of the form:
343 template <class T> template <class U> void S<T>::f(U);
345 This is a specialization if the innermost level was a
346 specialization; otherwise it's just a definition of the
348 return innermost_specialization_p
? tsk_expl_spec
: tsk_template
;
351 /* Exit the current scope. */
359 /* When a label goes out of scope, check to see if that label was used
360 in a valid manner, and issue any appropriate warnings or errors. */
363 pop_label (tree label
, tree old_value
)
365 if (!processing_template_decl
)
367 if (DECL_INITIAL (label
) == NULL_TREE
)
371 cp_error_at ("label `%D' used but not defined", label
);
372 location
.file
= input_filename
;
374 /* Avoid crashing later. */
375 define_label (location
, DECL_NAME (label
));
377 else if (warn_unused_label
&& !TREE_USED (label
))
378 cp_warning_at ("label `%D' defined but not used", label
);
381 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label
), old_value
);
384 /* At the end of a function, all labels declared within the function
385 go out of scope. BLOCK is the top-level block for the
389 pop_labels (tree block
)
391 struct named_label_list
*link
;
393 /* Clear out the definitions of all label names, since their scopes
395 for (link
= named_labels
; link
; link
= link
->next
)
397 pop_label (link
->label_decl
, link
->old_value
);
398 /* Put the labels into the "variables" of the top-level block,
399 so debugger can see them. */
400 TREE_CHAIN (link
->label_decl
) = BLOCK_VARS (block
);
401 BLOCK_VARS (block
) = link
->label_decl
;
407 /* Exit a binding level.
408 Pop the level off, and restore the state of the identifier-decl mappings
409 that were in effect when this level was entered.
411 If KEEP == 1, this level had explicit declarations, so
412 and create a "block" (a BLOCK node) for the level
413 to record its declarations and subblocks for symbol table output.
415 If FUNCTIONBODY is nonzero, this level is the body of a function,
416 so create a block as if KEEP were set and also clear out all
419 If REVERSE is nonzero, reverse the order of decls before putting
420 them into the BLOCK. */
423 poplevel (int keep
, int reverse
, int functionbody
)
426 /* The chain of decls was accumulated in reverse order.
427 Put it into forward order, just for cleanliness. */
429 int tmp
= functionbody
;
430 int real_functionbody
;
432 tree block
= NULL_TREE
;
434 int leaving_for_scope
;
437 timevar_push (TV_NAME_LOOKUP
);
439 my_friendly_assert (current_binding_level
->kind
!= sk_class
, 19990916);
441 real_functionbody
= (current_binding_level
->kind
== sk_cleanup
442 ? ((functionbody
= 0), tmp
) : functionbody
);
443 subblocks
= functionbody
>= 0 ? current_binding_level
->blocks
: 0;
445 my_friendly_assert (!current_binding_level
->class_shadowed
,
448 /* We used to use KEEP == 2 to indicate that the new block should go
449 at the beginning of the list of blocks at this binding level,
450 rather than the end. This hack is no longer used. */
451 my_friendly_assert (keep
== 0 || keep
== 1, 0);
453 if (current_binding_level
->keep
)
456 /* Any uses of undefined labels, and any defined labels, now operate
457 under constraints of next binding contour. */
458 if (cfun
&& !functionbody
)
460 struct cp_binding_level
*level_chain
;
461 level_chain
= current_binding_level
->level_chain
;
464 struct named_label_use_list
*uses
;
465 struct named_label_list
*labels
;
466 for (labels
= named_labels
; labels
; labels
= labels
->next
)
467 if (labels
->binding_level
== current_binding_level
)
470 if (current_binding_level
->kind
== sk_try
)
471 labels
->in_try_scope
= 1;
472 if (current_binding_level
->kind
== sk_catch
)
473 labels
->in_catch_scope
= 1;
474 for (decl
= labels
->names_in_scope
; decl
;
475 decl
= TREE_CHAIN (decl
))
476 if (decl_jump_unsafe (decl
))
477 labels
->bad_decls
= tree_cons (NULL_TREE
, decl
,
479 labels
->binding_level
= level_chain
;
480 labels
->names_in_scope
= level_chain
->names
;
483 for (uses
= named_label_uses
; uses
; uses
= uses
->next
)
484 if (uses
->binding_level
== current_binding_level
)
486 uses
->binding_level
= level_chain
;
487 uses
->names_in_scope
= level_chain
->names
;
492 /* Get the decls in the order they were written.
493 Usually current_binding_level->names is in reverse order.
494 But parameter decls were previously put in forward order. */
497 current_binding_level
->names
498 = decls
= nreverse (current_binding_level
->names
);
500 decls
= current_binding_level
->names
;
502 /* When not in function-at-a-time mode, expand_end_bindings will
503 warn about unused variables. But, in function-at-a-time mode
504 expand_end_bindings is not passed the list of variables in the
505 current scope, and therefore no warning is emitted. So, we
506 explicitly warn here. */
507 if (!processing_template_decl
)
508 warn_about_unused_variables (getdecls ());
510 /* If there were any declarations or structure tags in that level,
511 or if this level is a function body,
512 create a BLOCK to record them for the life of this function. */
514 if (keep
== 1 || functionbody
)
515 block
= make_node (BLOCK
);
516 if (block
!= NULL_TREE
)
518 BLOCK_VARS (block
) = decls
;
519 BLOCK_SUBBLOCKS (block
) = subblocks
;
522 /* In each subblock, record that this is its superior. */
524 for (link
= subblocks
; link
; link
= TREE_CHAIN (link
))
525 BLOCK_SUPERCONTEXT (link
) = block
;
527 /* We still support the old for-scope rules, whereby the variables
528 in a for-init statement were in scope after the for-statement
529 ended. We only use the new rules if flag_new_for_scope is
532 = current_binding_level
->kind
== sk_for
&& flag_new_for_scope
== 1;
534 /* Remove declarations for all the DECLs in this level. */
535 for (link
= decls
; link
; link
= TREE_CHAIN (link
))
537 if (leaving_for_scope
&& TREE_CODE (link
) == VAR_DECL
540 cxx_binding
*outer_binding
541 = IDENTIFIER_BINDING (DECL_NAME (link
))->previous
;
545 ns_binding
= IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link
));
547 ns_binding
= NULL_TREE
;
550 && outer_binding
->scope
== current_binding_level
->level_chain
)
551 /* We have something like:
556 and we are leaving the `for' scope. There's no reason to
557 keep the binding of the inner `i' in this case. */
558 pop_binding (DECL_NAME (link
), link
);
559 else if ((outer_binding
560 && (TREE_CODE (outer_binding
->value
) == TYPE_DECL
))
561 || (ns_binding
&& TREE_CODE (ns_binding
) == TYPE_DECL
))
562 /* Here, we have something like:
570 We must pop the for-scope binding so we know what's a
571 type and what isn't. */
572 pop_binding (DECL_NAME (link
), link
);
575 /* Mark this VAR_DECL as dead so that we can tell we left it
576 there only for backward compatibility. */
577 DECL_DEAD_FOR_LOCAL (link
) = 1;
579 /* Keep track of what should have happened when we
580 popped the binding. */
581 if (outer_binding
&& outer_binding
->value
)
582 DECL_SHADOWED_FOR_VAR (link
) = outer_binding
->value
;
584 /* Add it to the list of dead variables in the next
585 outermost binding to that we can remove these when we
586 leave that binding. */
587 current_binding_level
->level_chain
->dead_vars_from_for
588 = tree_cons (NULL_TREE
, link
,
589 current_binding_level
->level_chain
->
592 /* Although we don't pop the cxx_binding, we do clear
593 its SCOPE since the scope is going away now. */
594 IDENTIFIER_BINDING (DECL_NAME (link
))->scope
= NULL
;
599 /* Remove the binding. */
601 if (TREE_CODE (decl
) == TREE_LIST
)
602 decl
= TREE_VALUE (decl
);
604 pop_binding (DECL_NAME (decl
), decl
);
605 else if (TREE_CODE (decl
) == OVERLOAD
)
606 pop_binding (DECL_NAME (OVL_FUNCTION (decl
)), decl
);
612 /* Remove declarations for any `for' variables from inner scopes
613 that we kept around. */
614 for (link
= current_binding_level
->dead_vars_from_for
;
615 link
; link
= TREE_CHAIN (link
))
616 pop_binding (DECL_NAME (TREE_VALUE (link
)), TREE_VALUE (link
));
618 /* Restore the IDENTIFIER_TYPE_VALUEs. */
619 for (link
= current_binding_level
->type_shadowed
;
620 link
; link
= TREE_CHAIN (link
))
621 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link
), TREE_VALUE (link
));
623 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
624 for (link
= current_binding_level
->shadowed_labels
;
626 link
= TREE_CHAIN (link
))
627 pop_label (TREE_VALUE (link
), TREE_PURPOSE (link
));
629 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
630 list if a `using' declaration put them there. The debugging
631 back-ends won't understand OVERLOAD, so we remove them here.
632 Because the BLOCK_VARS are (temporarily) shared with
633 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
634 popped all the bindings. */
639 for (d
= &BLOCK_VARS (block
); *d
; )
641 if (TREE_CODE (*d
) == TREE_LIST
)
642 *d
= TREE_CHAIN (*d
);
644 d
= &TREE_CHAIN (*d
);
648 /* If the level being exited is the top level of a function,
649 check over all the labels. */
652 /* Since this is the top level block of a function, the vars are
653 the function's parameters. Don't leave them in the BLOCK
654 because they are found in the FUNCTION_DECL instead. */
655 BLOCK_VARS (block
) = 0;
659 kind
= current_binding_level
->kind
;
663 DECL_INITIAL (current_function_decl
) = block
;
665 current_binding_level
->blocks
666 = chainon (current_binding_level
->blocks
, block
);
668 /* If we did not make a block for the level just exited,
669 any blocks made for inner levels
670 (since they cannot be recorded as subblocks in that level)
671 must be carried forward so they will later become subblocks
672 of something else. */
674 current_binding_level
->blocks
675 = chainon (current_binding_level
->blocks
, subblocks
);
677 /* Each and every BLOCK node created here in `poplevel' is important
678 (e.g. for proper debugging information) so if we created one
679 earlier, mark it as "used". */
681 TREE_USED (block
) = 1;
683 /* Take care of compiler's internal binding structures. */
684 if (kind
== sk_cleanup
)
689 = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
692 SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts
)) = block
;
693 SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts
)) = block
;
696 block
= poplevel (keep
, reverse
, functionbody
);
699 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, block
);
702 /* Delete the node BLOCK from the current binding level.
703 This is used for the block inside a stmt expr ({...})
704 so that the block can be reinserted where appropriate. */
707 delete_block (tree block
)
710 if (current_binding_level
->blocks
== block
)
711 current_binding_level
->blocks
= TREE_CHAIN (block
);
712 for (t
= current_binding_level
->blocks
; t
;)
714 if (TREE_CHAIN (t
) == block
)
715 TREE_CHAIN (t
) = TREE_CHAIN (block
);
719 TREE_CHAIN (block
) = NULL_TREE
;
720 /* Clear TREE_USED which is always set by poplevel.
721 The flag is set again if insert_block is called. */
722 TREE_USED (block
) = 0;
725 /* Insert BLOCK at the end of the list of subblocks of the
726 current binding level. This is used when a BIND_EXPR is expanded,
727 to handle the BLOCK node inside the BIND_EXPR. */
730 insert_block (tree block
)
732 TREE_USED (block
) = 1;
733 current_binding_level
->blocks
734 = chainon (current_binding_level
->blocks
, block
);
737 /* Set the BLOCK node for the innermost scope
738 (the one we are currently in). */
741 set_block (tree block ATTRIBUTE_UNUSED
)
743 /* The RTL expansion machinery requires us to provide this callback,
744 but it is not applicable in function-at-a-time mode. */
747 /* Returns nonzero if T is a virtual function table. */
750 vtable_decl_p (tree t
, void* data ATTRIBUTE_UNUSED
)
752 return (TREE_CODE (t
) == VAR_DECL
&& DECL_VIRTUAL_P (t
));
755 /* Returns nonzero if T is a TYPE_DECL for a type with virtual
759 vtype_decl_p (tree t
, void *data ATTRIBUTE_UNUSED
)
761 return (TREE_CODE (t
) == TYPE_DECL
762 && TREE_CODE (TREE_TYPE (t
)) == RECORD_TYPE
763 && TYPE_POLYMORPHIC_P (TREE_TYPE (t
)));
766 struct walk_globals_data
{
772 /* Walk the vtable declarations in NAMESPACE. Whenever one is found
773 for which P returns nonzero, call F with its address. If any call
774 to F returns a nonzero value, return a nonzero value. */
777 walk_vtables_r (tree
namespace, void* data
)
779 struct walk_globals_data
* wgd
= (struct walk_globals_data
*) data
;
780 walk_globals_fn f
= wgd
->f
;
782 tree decl
= NAMESPACE_LEVEL (namespace)->vtables
;
785 for (; decl
; decl
= TREE_CHAIN (decl
))
786 result
|= (*f
) (&decl
, d
);
791 /* Walk the vtable declarations. Whenever one is found for which P
792 returns nonzero, call F with its address. If any call to F
793 returns a nonzero value, return a nonzero value. */
795 walk_vtables (walk_globals_pred p
, walk_globals_fn f
, void *data
)
797 struct walk_globals_data wgd
;
802 return walk_namespaces (walk_vtables_r
, &wgd
);
805 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
806 itself, calling F for each. The DATA is passed to F as well. */
809 walk_namespaces_r (tree
namespace, walk_namespaces_fn f
, void* data
)
812 tree current
= NAMESPACE_LEVEL (namespace)->namespaces
;
814 result
|= (*f
) (namespace, data
);
816 for (; current
; current
= TREE_CHAIN (current
))
817 result
|= walk_namespaces_r (current
, f
, data
);
822 /* Walk all the namespaces, calling F for each. The DATA is passed to
826 walk_namespaces (walk_namespaces_fn f
, void* data
)
828 return walk_namespaces_r (global_namespace
, f
, data
);
831 /* Walk the global declarations in NAMESPACE. Whenever one is found
832 for which P returns nonzero, call F with its address. If any call
833 to F returns a nonzero value, return a nonzero value. */
836 walk_globals_r (tree
namespace, void* data
)
838 struct walk_globals_data
* wgd
= (struct walk_globals_data
*) data
;
839 walk_globals_pred p
= wgd
->p
;
840 walk_globals_fn f
= wgd
->f
;
845 t
= &NAMESPACE_LEVEL (namespace)->names
;
852 result
|= (*f
) (t
, d
);
854 /* If F changed *T, then *T still points at the next item to
857 t
= &TREE_CHAIN (*t
);
863 /* Walk the global declarations. Whenever one is found for which P
864 returns true, call F with its address. If any call to F
865 returns true, return true. */
868 walk_globals (walk_globals_pred p
, walk_globals_fn f
, void *data
)
870 struct walk_globals_data wgd
;
875 return walk_namespaces (walk_globals_r
, &wgd
);
878 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
879 DATA is non-NULL, this is the last time we will call
880 wrapup_global_declarations for this NAMESPACE. */
883 wrapup_globals_for_namespace (tree
namespace, void* data
)
885 struct cp_binding_level
*level
= NAMESPACE_LEVEL (namespace);
886 varray_type statics
= level
->static_decls
;
887 tree
*vec
= &VARRAY_TREE (statics
, 0);
888 int len
= VARRAY_ACTIVE_SIZE (statics
);
889 int last_time
= (data
!= 0);
893 check_global_declarations (vec
, len
);
897 /* Write out any globals that need to be output. */
898 return wrapup_global_declarations (vec
, len
);
902 /* In C++, you don't have to write `struct S' to refer to `S'; you
903 can just use `S'. We accomplish this by creating a TYPE_DECL as
904 if the user had written `typedef struct S S'. Create and return
905 the TYPE_DECL for TYPE. */
908 create_implicit_typedef (tree name
, tree type
)
912 decl
= build_decl (TYPE_DECL
, name
, type
);
913 DECL_ARTIFICIAL (decl
) = 1;
914 /* There are other implicit type declarations, like the one *within*
915 a class that allows you to write `S::S'. We must distinguish
917 SET_DECL_IMPLICIT_TYPEDEF_P (decl
);
918 TYPE_NAME (type
) = decl
;
923 /* Remember a local name for name-mangling purposes. */
926 push_local_name (tree decl
)
931 timevar_push (TV_NAME_LOOKUP
);
933 VARRAY_TREE_INIT (local_names
, 8, "local_names");
935 name
= DECL_NAME (decl
);
937 nelts
= VARRAY_ACTIVE_SIZE (local_names
);
938 for (i
= 0; i
< nelts
; i
++)
940 t
= VARRAY_TREE (local_names
, i
);
941 if (DECL_NAME (t
) == name
)
943 if (!DECL_LANG_SPECIFIC (decl
))
944 retrofit_lang_decl (decl
);
945 DECL_LANG_SPECIFIC (decl
)->decl_flags
.u2sel
= 1;
946 if (DECL_LANG_SPECIFIC (t
))
947 DECL_DISCRIMINATOR (decl
) = DECL_DISCRIMINATOR (t
) + 1;
949 DECL_DISCRIMINATOR (decl
) = 1;
951 VARRAY_TREE (local_names
, i
) = decl
;
952 timevar_pop (TV_NAME_LOOKUP
);
957 VARRAY_PUSH_TREE (local_names
, decl
);
958 timevar_pop (TV_NAME_LOOKUP
);
961 /* Subroutine of duplicate_decls: return truthvalue of whether
962 or not types of these decls match.
964 For C++, we must compare the parameter list so that `int' can match
965 `int&' in a parameter position, but `int&' is not confused with
969 decls_match (tree newdecl
, tree olddecl
)
973 if (newdecl
== olddecl
)
976 if (TREE_CODE (newdecl
) != TREE_CODE (olddecl
))
977 /* If the two DECLs are not even the same kind of thing, we're not
978 interested in their types. */
981 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
983 tree f1
= TREE_TYPE (newdecl
);
984 tree f2
= TREE_TYPE (olddecl
);
985 tree p1
= TYPE_ARG_TYPES (f1
);
986 tree p2
= TYPE_ARG_TYPES (f2
);
988 if (CP_DECL_CONTEXT (newdecl
) != CP_DECL_CONTEXT (olddecl
)
989 && ! (DECL_EXTERN_C_P (newdecl
)
990 && DECL_EXTERN_C_P (olddecl
)))
993 if (TREE_CODE (f1
) != TREE_CODE (f2
))
996 if (same_type_p (TREE_TYPE (f1
), TREE_TYPE (f2
)))
998 if (p2
== NULL_TREE
&& DECL_EXTERN_C_P (olddecl
)
999 && (DECL_BUILT_IN (olddecl
)
1000 #ifndef NO_IMPLICIT_EXTERN_C
1001 || (DECL_IN_SYSTEM_HEADER (newdecl
) && !DECL_CLASS_SCOPE_P (newdecl
))
1002 || (DECL_IN_SYSTEM_HEADER (olddecl
) && !DECL_CLASS_SCOPE_P (olddecl
))
1006 types_match
= self_promoting_args_p (p1
);
1007 if (p1
== void_list_node
)
1008 TREE_TYPE (newdecl
) = TREE_TYPE (olddecl
);
1010 #ifndef NO_IMPLICIT_EXTERN_C
1011 else if (p1
== NULL_TREE
1012 && (DECL_EXTERN_C_P (olddecl
)
1013 && DECL_IN_SYSTEM_HEADER (olddecl
)
1014 && !DECL_CLASS_SCOPE_P (olddecl
))
1015 && (DECL_EXTERN_C_P (newdecl
)
1016 && DECL_IN_SYSTEM_HEADER (newdecl
)
1017 && !DECL_CLASS_SCOPE_P (newdecl
)))
1019 types_match
= self_promoting_args_p (p2
);
1020 TREE_TYPE (newdecl
) = TREE_TYPE (olddecl
);
1024 types_match
= compparms (p1
, p2
);
1029 else if (TREE_CODE (newdecl
) == TEMPLATE_DECL
)
1031 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl
))
1032 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl
)))
1035 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl
),
1036 DECL_TEMPLATE_PARMS (olddecl
)))
1039 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl
)) == TYPE_DECL
)
1040 types_match
= same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl
)),
1041 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl
)));
1043 types_match
= decls_match (DECL_TEMPLATE_RESULT (olddecl
),
1044 DECL_TEMPLATE_RESULT (newdecl
));
1048 if (TREE_TYPE (newdecl
) == error_mark_node
)
1049 types_match
= TREE_TYPE (olddecl
) == error_mark_node
;
1050 else if (TREE_TYPE (olddecl
) == NULL_TREE
)
1051 types_match
= TREE_TYPE (newdecl
) == NULL_TREE
;
1052 else if (TREE_TYPE (newdecl
) == NULL_TREE
)
1055 types_match
= comptypes (TREE_TYPE (newdecl
),
1056 TREE_TYPE (olddecl
),
1057 COMPARE_REDECLARATION
);
1063 /* If NEWDECL is `static' and an `extern' was seen previously,
1064 warn about it. OLDDECL is the previous declaration.
1066 Note that this does not apply to the C++ case of declaring
1067 a variable `extern const' and then later `const'.
1069 Don't complain about built-in functions, since they are beyond
1070 the user's control. */
1073 warn_extern_redeclared_static (tree newdecl
, tree olddecl
)
1077 if (TREE_CODE (newdecl
) == TYPE_DECL
1078 || TREE_CODE (newdecl
) == TEMPLATE_DECL
1079 || TREE_CODE (newdecl
) == CONST_DECL
1080 || TREE_CODE (newdecl
) == NAMESPACE_DECL
)
1083 /* Don't get confused by static member functions; that's a different
1085 if (TREE_CODE (newdecl
) == FUNCTION_DECL
1086 && DECL_STATIC_FUNCTION_P (newdecl
))
1089 /* If the old declaration was `static', or the new one isn't, then
1090 then everything is OK. */
1091 if (DECL_THIS_STATIC (olddecl
) || !DECL_THIS_STATIC (newdecl
))
1094 /* It's OK to declare a builtin function as `static'. */
1095 if (TREE_CODE (olddecl
) == FUNCTION_DECL
1096 && DECL_ARTIFICIAL (olddecl
))
1099 name
= DECL_ASSEMBLER_NAME (newdecl
);
1100 pedwarn ("`%D' was declared `extern' and later `static'", newdecl
);
1101 cp_pedwarn_at ("previous declaration of `%D'", olddecl
);
1104 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1105 If the redeclaration is invalid, a diagnostic is issued, and the
1106 error_mark_node is returned. Otherwise, OLDDECL is returned.
1108 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1112 duplicate_decls (tree newdecl
, tree olddecl
)
1114 unsigned olddecl_uid
= DECL_UID (olddecl
);
1115 int olddecl_friend
= 0, types_match
= 0;
1116 int new_defines_function
= 0;
1118 if (newdecl
== olddecl
)
1121 types_match
= decls_match (newdecl
, olddecl
);
1123 /* If either the type of the new decl or the type of the old decl is an
1124 error_mark_node, then that implies that we have already issued an
1125 error (earlier) for some bogus type specification, and in that case,
1126 it is rather pointless to harass the user with yet more error message
1127 about the same declaration, so just pretend the types match here. */
1128 if (TREE_TYPE (newdecl
) == error_mark_node
1129 || TREE_TYPE (olddecl
) == error_mark_node
)
1132 if (DECL_P (olddecl
)
1133 && TREE_CODE (newdecl
) == FUNCTION_DECL
1134 && TREE_CODE (olddecl
) == FUNCTION_DECL
1135 && (DECL_UNINLINABLE (newdecl
) || DECL_UNINLINABLE (olddecl
)))
1137 if (DECL_DECLARED_INLINE_P (newdecl
)
1138 && DECL_UNINLINABLE (newdecl
)
1139 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl
)))
1140 /* Already warned elsewhere. */;
1141 else if (DECL_DECLARED_INLINE_P (olddecl
)
1142 && DECL_UNINLINABLE (olddecl
)
1143 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl
)))
1144 /* Already warned. */;
1145 else if (DECL_DECLARED_INLINE_P (newdecl
)
1146 && DECL_UNINLINABLE (olddecl
)
1147 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl
)))
1149 warning ("%Jfunction '%D' redeclared as inline", newdecl
, newdecl
);
1150 warning ("%Jprevious declaration of '%D' with attribute noinline",
1153 else if (DECL_DECLARED_INLINE_P (olddecl
)
1154 && DECL_UNINLINABLE (newdecl
)
1155 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl
)))
1157 warning ("%Jfunction '%D' redeclared with attribute noinline",
1159 warning ("%Jprevious declaration of '%D' was inline",
1164 /* Check for redeclaration and other discrepancies. */
1165 if (TREE_CODE (olddecl
) == FUNCTION_DECL
1166 && DECL_ARTIFICIAL (olddecl
))
1168 if (TREE_CODE (newdecl
) != FUNCTION_DECL
)
1170 /* Avoid warnings redeclaring anticipated built-ins. */
1171 if (DECL_ANTICIPATED (olddecl
))
1174 /* If you declare a built-in or predefined function name as static,
1175 the old definition is overridden, but optionally warn this was a
1176 bad choice of name. */
1177 if (! TREE_PUBLIC (newdecl
))
1180 warning ("shadowing %s function `%#D'",
1181 DECL_BUILT_IN (olddecl
) ? "built-in" : "library",
1183 /* Discard the old built-in function. */
1186 /* If the built-in is not ansi, then programs can override
1187 it even globally without an error. */
1188 else if (! DECL_BUILT_IN (olddecl
))
1189 warning ("library function `%#D' redeclared as non-function `%#D'",
1193 error ("declaration of `%#D'", newdecl
);
1194 error ("conflicts with built-in declaration `%#D'",
1199 else if (!types_match
)
1201 /* Avoid warnings redeclaring anticipated built-ins. */
1202 if (DECL_ANTICIPATED (olddecl
))
1203 ; /* Do nothing yet. */
1204 else if ((DECL_EXTERN_C_P (newdecl
)
1205 && DECL_EXTERN_C_P (olddecl
))
1206 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl
)),
1207 TYPE_ARG_TYPES (TREE_TYPE (olddecl
))))
1209 /* A near match; override the builtin. */
1211 if (TREE_PUBLIC (newdecl
))
1213 warning ("new declaration `%#D'", newdecl
);
1214 warning ("ambiguates built-in declaration `%#D'",
1217 else if (warn_shadow
)
1218 warning ("shadowing %s function `%#D'",
1219 DECL_BUILT_IN (olddecl
) ? "built-in" : "library",
1223 /* Discard the old built-in function. */
1226 /* Replace the old RTL to avoid problems with inlining. */
1227 SET_DECL_RTL (olddecl
, DECL_RTL (newdecl
));
1229 /* Even if the types match, prefer the new declarations type
1230 for anticipated built-ins, for exception lists, etc... */
1231 else if (DECL_ANTICIPATED (olddecl
))
1233 tree type
= TREE_TYPE (newdecl
);
1234 tree attribs
= (*targetm
.merge_type_attributes
)
1235 (TREE_TYPE (olddecl
), type
);
1237 type
= cp_build_type_attribute_variant (type
, attribs
);
1238 TREE_TYPE (newdecl
) = TREE_TYPE (olddecl
) = type
;
1241 /* Whether or not the builtin can throw exceptions has no
1242 bearing on this declarator. */
1243 TREE_NOTHROW (olddecl
) = 0;
1245 if (DECL_THIS_STATIC (newdecl
) && !DECL_THIS_STATIC (olddecl
))
1247 /* If a builtin function is redeclared as `static', merge
1248 the declarations, but make the original one static. */
1249 DECL_THIS_STATIC (olddecl
) = 1;
1250 TREE_PUBLIC (olddecl
) = 0;
1252 /* Make the old declaration consistent with the new one so
1253 that all remnants of the builtin-ness of this function
1254 will be banished. */
1255 SET_DECL_LANGUAGE (olddecl
, DECL_LANGUAGE (newdecl
));
1256 SET_DECL_RTL (olddecl
, DECL_RTL (newdecl
));
1259 else if (TREE_CODE (olddecl
) != TREE_CODE (newdecl
))
1261 if ((TREE_CODE (olddecl
) == TYPE_DECL
&& DECL_ARTIFICIAL (olddecl
)
1262 && TREE_CODE (newdecl
) != TYPE_DECL
1263 && ! (TREE_CODE (newdecl
) == TEMPLATE_DECL
1264 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl
)) == TYPE_DECL
))
1265 || (TREE_CODE (newdecl
) == TYPE_DECL
&& DECL_ARTIFICIAL (newdecl
)
1266 && TREE_CODE (olddecl
) != TYPE_DECL
1267 && ! (TREE_CODE (olddecl
) == TEMPLATE_DECL
1268 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl
))
1271 /* We do nothing special here, because C++ does such nasty
1272 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1273 get shadowed, and know that if we need to find a TYPE_DECL
1274 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1275 slot of the identifier. */
1279 if ((TREE_CODE (newdecl
) == FUNCTION_DECL
1280 && DECL_FUNCTION_TEMPLATE_P (olddecl
))
1281 || (TREE_CODE (olddecl
) == FUNCTION_DECL
1282 && DECL_FUNCTION_TEMPLATE_P (newdecl
)))
1285 error ("`%#D' redeclared as different kind of symbol", newdecl
);
1286 if (TREE_CODE (olddecl
) == TREE_LIST
)
1287 olddecl
= TREE_VALUE (olddecl
);
1288 cp_error_at ("previous declaration of `%#D'", olddecl
);
1290 return error_mark_node
;
1292 else if (!types_match
)
1294 if (CP_DECL_CONTEXT (newdecl
) != CP_DECL_CONTEXT (olddecl
))
1295 /* These are certainly not duplicate declarations; they're
1296 from different scopes. */
1299 if (TREE_CODE (newdecl
) == TEMPLATE_DECL
)
1301 /* The name of a class template may not be declared to refer to
1302 any other template, class, function, object, namespace, value,
1303 or type in the same scope. */
1304 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl
)) == TYPE_DECL
1305 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl
)) == TYPE_DECL
)
1307 error ("declaration of template `%#D'", newdecl
);
1308 cp_error_at ("conflicts with previous declaration `%#D'",
1311 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl
)) == FUNCTION_DECL
1312 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl
)) == FUNCTION_DECL
1313 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl
))),
1314 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl
))))
1315 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl
),
1316 DECL_TEMPLATE_PARMS (olddecl
))
1317 /* Template functions can be disambiguated by
1319 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl
)),
1320 TREE_TYPE (TREE_TYPE (olddecl
))))
1322 error ("new declaration `%#D'", newdecl
);
1323 cp_error_at ("ambiguates old declaration `%#D'", olddecl
);
1327 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
1329 if (DECL_EXTERN_C_P (newdecl
) && DECL_EXTERN_C_P (olddecl
))
1331 error ("declaration of C function `%#D' conflicts with",
1333 cp_error_at ("previous declaration `%#D' here", olddecl
);
1335 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl
)),
1336 TYPE_ARG_TYPES (TREE_TYPE (olddecl
))))
1338 error ("new declaration `%#D'", newdecl
);
1339 cp_error_at ("ambiguates old declaration `%#D'", olddecl
);
1346 error ("conflicting declaration '%#D'", newdecl
);
1347 cp_error_at ("'%D' has a previous declaration as `%#D'",
1352 else if (TREE_CODE (newdecl
) == FUNCTION_DECL
1353 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl
)
1354 && (!DECL_TEMPLATE_INFO (newdecl
)
1355 || (DECL_TI_TEMPLATE (newdecl
)
1356 != DECL_TI_TEMPLATE (olddecl
))))
1357 || (DECL_TEMPLATE_SPECIALIZATION (newdecl
)
1358 && (!DECL_TEMPLATE_INFO (olddecl
)
1359 || (DECL_TI_TEMPLATE (olddecl
)
1360 != DECL_TI_TEMPLATE (newdecl
))))))
1361 /* It's OK to have a template specialization and a non-template
1362 with the same type, or to have specializations of two
1363 different templates with the same type. Note that if one is a
1364 specialization, and the other is an instantiation of the same
1365 template, that we do not exit at this point. That situation
1366 can occur if we instantiate a template class, and then
1367 specialize one of its methods. This situation is valid, but
1368 the declarations must be merged in the usual way. */
1370 else if (TREE_CODE (newdecl
) == FUNCTION_DECL
1371 && ((DECL_TEMPLATE_INSTANTIATION (olddecl
)
1372 && !DECL_USE_TEMPLATE (newdecl
))
1373 || (DECL_TEMPLATE_INSTANTIATION (newdecl
)
1374 && !DECL_USE_TEMPLATE (olddecl
))))
1375 /* One of the declarations is a template instantiation, and the
1376 other is not a template at all. That's OK. */
1378 else if (TREE_CODE (newdecl
) == NAMESPACE_DECL
1379 && DECL_NAMESPACE_ALIAS (newdecl
)
1380 && DECL_NAMESPACE_ALIAS (newdecl
) == DECL_NAMESPACE_ALIAS (olddecl
))
1381 /* In [namespace.alias] we have:
1383 In a declarative region, a namespace-alias-definition can be
1384 used to redefine a namespace-alias declared in that declarative
1385 region to refer only to the namespace to which it already
1388 Therefore, if we encounter a second alias directive for the same
1389 alias, we can just ignore the second directive. */
1393 const char *errmsg
= redeclaration_error_message (newdecl
, olddecl
);
1396 error (errmsg
, newdecl
);
1397 if (DECL_NAME (olddecl
) != NULL_TREE
)
1398 cp_error_at ((DECL_INITIAL (olddecl
)
1399 && namespace_bindings_p ())
1400 ? "`%#D' previously defined here"
1401 : "`%#D' previously declared here", olddecl
);
1402 return error_mark_node
;
1404 else if (TREE_CODE (olddecl
) == FUNCTION_DECL
1405 && DECL_INITIAL (olddecl
) != NULL_TREE
1406 && TYPE_ARG_TYPES (TREE_TYPE (olddecl
)) == NULL_TREE
1407 && TYPE_ARG_TYPES (TREE_TYPE (newdecl
)) != NULL_TREE
)
1409 /* Prototype decl follows defn w/o prototype. */
1410 cp_warning_at ("prototype for `%#D'", newdecl
);
1411 warning ("%Jfollows non-prototype definition here", olddecl
);
1413 else if (TREE_CODE (olddecl
) == FUNCTION_DECL
1414 && DECL_LANGUAGE (newdecl
) != DECL_LANGUAGE (olddecl
))
1416 /* extern "C" int foo ();
1417 int foo () { bar (); }
1419 if (current_lang_depth () == 0)
1420 SET_DECL_LANGUAGE (newdecl
, DECL_LANGUAGE (olddecl
));
1423 cp_error_at ("previous declaration of `%#D' with %L linkage",
1424 olddecl
, DECL_LANGUAGE (olddecl
));
1425 error ("conflicts with new declaration with %L linkage",
1426 DECL_LANGUAGE (newdecl
));
1430 if (DECL_LANG_SPECIFIC (olddecl
) && DECL_USE_TEMPLATE (olddecl
))
1432 else if (TREE_CODE (olddecl
) == FUNCTION_DECL
)
1434 tree t1
= TYPE_ARG_TYPES (TREE_TYPE (olddecl
));
1435 tree t2
= TYPE_ARG_TYPES (TREE_TYPE (newdecl
));
1438 if (TREE_CODE (TREE_TYPE (newdecl
)) == METHOD_TYPE
)
1439 t1
= TREE_CHAIN (t1
), t2
= TREE_CHAIN (t2
);
1441 for (; t1
&& t1
!= void_list_node
;
1442 t1
= TREE_CHAIN (t1
), t2
= TREE_CHAIN (t2
), i
++)
1443 if (TREE_PURPOSE (t1
) && TREE_PURPOSE (t2
))
1445 if (1 == simple_cst_equal (TREE_PURPOSE (t1
),
1448 pedwarn ("default argument given for parameter %d of `%#D'",
1450 cp_pedwarn_at ("after previous specification in `%#D'",
1455 error ("default argument given for parameter %d of `%#D'",
1457 cp_error_at ("after previous specification in `%#D'",
1462 if (DECL_DECLARED_INLINE_P (newdecl
)
1463 && ! DECL_DECLARED_INLINE_P (olddecl
)
1464 && TREE_ADDRESSABLE (olddecl
) && warn_inline
)
1466 warning ("`%#D' was used before it was declared inline", newdecl
);
1467 warning ("%Jprevious non-inline declaration here", olddecl
);
1472 /* Do not merge an implicit typedef with an explicit one. In:
1476 typedef class A A __attribute__ ((foo));
1478 the attribute should apply only to the typedef. */
1479 if (TREE_CODE (olddecl
) == TYPE_DECL
1480 && (DECL_IMPLICIT_TYPEDEF_P (olddecl
)
1481 || DECL_IMPLICIT_TYPEDEF_P (newdecl
)))
1484 /* If new decl is `static' and an `extern' was seen previously,
1486 warn_extern_redeclared_static (newdecl
, olddecl
);
1488 /* We have committed to returning 1 at this point. */
1489 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
1491 /* Now that functions must hold information normally held
1492 by field decls, there is extra work to do so that
1493 declaration information does not get destroyed during
1495 if (DECL_VINDEX (olddecl
))
1496 DECL_VINDEX (newdecl
) = DECL_VINDEX (olddecl
);
1497 if (DECL_CONTEXT (olddecl
))
1498 DECL_CONTEXT (newdecl
) = DECL_CONTEXT (olddecl
);
1499 DECL_STATIC_CONSTRUCTOR (newdecl
) |= DECL_STATIC_CONSTRUCTOR (olddecl
);
1500 DECL_STATIC_DESTRUCTOR (newdecl
) |= DECL_STATIC_DESTRUCTOR (olddecl
);
1501 DECL_PURE_VIRTUAL_P (newdecl
) |= DECL_PURE_VIRTUAL_P (olddecl
);
1502 DECL_VIRTUAL_P (newdecl
) |= DECL_VIRTUAL_P (olddecl
);
1503 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl
) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl
);
1504 DECL_THIS_STATIC (newdecl
) |= DECL_THIS_STATIC (olddecl
);
1505 if (DECL_OVERLOADED_OPERATOR_P (olddecl
) != ERROR_MARK
)
1506 SET_OVERLOADED_OPERATOR_CODE
1507 (newdecl
, DECL_OVERLOADED_OPERATOR_P (olddecl
));
1508 new_defines_function
= DECL_INITIAL (newdecl
) != NULL_TREE
;
1510 /* Optionally warn about more than one declaration for the same
1511 name, but don't warn about a function declaration followed by a
1513 if (warn_redundant_decls
&& ! DECL_ARTIFICIAL (olddecl
)
1514 && !(new_defines_function
&& DECL_INITIAL (olddecl
) == NULL_TREE
)
1515 /* Don't warn about extern decl followed by definition. */
1516 && !(DECL_EXTERNAL (olddecl
) && ! DECL_EXTERNAL (newdecl
))
1517 /* Don't warn about friends, let add_friend take care of it. */
1518 && ! (DECL_FRIEND_P (newdecl
) || DECL_FRIEND_P (olddecl
)))
1520 warning ("redundant redeclaration of `%D' in same scope", newdecl
);
1521 cp_warning_at ("previous declaration of `%D'", olddecl
);
1525 /* Deal with C++: must preserve virtual function table size. */
1526 if (TREE_CODE (olddecl
) == TYPE_DECL
)
1528 tree newtype
= TREE_TYPE (newdecl
);
1529 tree oldtype
= TREE_TYPE (olddecl
);
1531 if (newtype
!= error_mark_node
&& oldtype
!= error_mark_node
1532 && TYPE_LANG_SPECIFIC (newtype
) && TYPE_LANG_SPECIFIC (oldtype
))
1533 CLASSTYPE_FRIEND_CLASSES (newtype
)
1534 = CLASSTYPE_FRIEND_CLASSES (oldtype
);
1536 DECL_ORIGINAL_TYPE (newdecl
) = DECL_ORIGINAL_TYPE (olddecl
);
1539 /* Copy all the DECL_... slots specified in the new decl
1540 except for any that we copy here from the old type. */
1541 DECL_ATTRIBUTES (newdecl
)
1542 = (*targetm
.merge_decl_attributes
) (olddecl
, newdecl
);
1544 if (TREE_CODE (newdecl
) == TEMPLATE_DECL
)
1546 TREE_TYPE (olddecl
) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl
));
1547 DECL_TEMPLATE_SPECIALIZATIONS (olddecl
)
1548 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl
),
1549 DECL_TEMPLATE_SPECIALIZATIONS (newdecl
));
1551 /* If the new declaration is a definition, update the file and
1552 line information on the declaration. */
1553 if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl
)) == NULL_TREE
1554 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl
)) != NULL_TREE
)
1556 DECL_SOURCE_LOCATION (olddecl
)
1557 = DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (olddecl
))
1558 = DECL_SOURCE_LOCATION (newdecl
);
1559 if (DECL_FUNCTION_TEMPLATE_P (newdecl
))
1560 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (olddecl
))
1561 = DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (newdecl
));
1564 if (DECL_FUNCTION_TEMPLATE_P (newdecl
))
1566 DECL_INLINE (DECL_TEMPLATE_RESULT (olddecl
))
1567 |= DECL_INLINE (DECL_TEMPLATE_RESULT (newdecl
));
1568 DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (olddecl
))
1569 |= DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (newdecl
));
1577 /* Automatically handles default parameters. */
1578 tree oldtype
= TREE_TYPE (olddecl
);
1581 /* Merge the data types specified in the two decls. */
1582 newtype
= merge_types (TREE_TYPE (newdecl
), TREE_TYPE (olddecl
));
1584 /* If merge_types produces a non-typedef type, just use the old type. */
1585 if (TREE_CODE (newdecl
) == TYPE_DECL
1586 && newtype
== DECL_ORIGINAL_TYPE (newdecl
))
1589 if (TREE_CODE (newdecl
) == VAR_DECL
)
1591 DECL_THIS_EXTERN (newdecl
) |= DECL_THIS_EXTERN (olddecl
);
1592 DECL_INITIALIZED_P (newdecl
) |= DECL_INITIALIZED_P (olddecl
);
1593 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl
)
1594 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl
);
1597 /* Do this after calling `merge_types' so that default
1598 parameters don't confuse us. */
1599 else if (TREE_CODE (newdecl
) == FUNCTION_DECL
1600 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl
))
1601 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl
))))
1603 TREE_TYPE (newdecl
) = build_exception_variant (newtype
,
1604 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl
)));
1605 TREE_TYPE (olddecl
) = build_exception_variant (newtype
,
1606 TYPE_RAISES_EXCEPTIONS (oldtype
));
1608 if ((pedantic
|| ! DECL_IN_SYSTEM_HEADER (olddecl
))
1609 && DECL_SOURCE_LINE (olddecl
) != 0
1611 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl
)),
1612 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl
)), 1))
1614 error ("declaration of `%F' throws different exceptions",
1616 cp_error_at ("than previous declaration `%F'", olddecl
);
1619 TREE_TYPE (newdecl
) = TREE_TYPE (olddecl
) = newtype
;
1621 /* Lay the type out, unless already done. */
1622 if (! same_type_p (newtype
, oldtype
)
1623 && TREE_TYPE (newdecl
) != error_mark_node
1624 && !(processing_template_decl
&& uses_template_parms (newdecl
)))
1625 layout_type (TREE_TYPE (newdecl
));
1627 if ((TREE_CODE (newdecl
) == VAR_DECL
1628 || TREE_CODE (newdecl
) == PARM_DECL
1629 || TREE_CODE (newdecl
) == RESULT_DECL
1630 || TREE_CODE (newdecl
) == FIELD_DECL
1631 || TREE_CODE (newdecl
) == TYPE_DECL
)
1632 && !(processing_template_decl
&& uses_template_parms (newdecl
)))
1633 layout_decl (newdecl
, 0);
1635 /* Merge the type qualifiers. */
1636 if (TREE_READONLY (newdecl
))
1637 TREE_READONLY (olddecl
) = 1;
1638 if (TREE_THIS_VOLATILE (newdecl
))
1639 TREE_THIS_VOLATILE (olddecl
) = 1;
1641 /* Merge the initialization information. */
1642 if (DECL_INITIAL (newdecl
) == NULL_TREE
1643 && DECL_INITIAL (olddecl
) != NULL_TREE
)
1645 DECL_INITIAL (newdecl
) = DECL_INITIAL (olddecl
);
1646 DECL_SOURCE_LOCATION (newdecl
) = DECL_SOURCE_LOCATION (olddecl
);
1647 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl
)
1648 && DECL_LANG_SPECIFIC (newdecl
)
1649 && DECL_LANG_SPECIFIC (olddecl
))
1651 DECL_SAVED_TREE (newdecl
) = DECL_SAVED_TREE (olddecl
);
1652 DECL_STRUCT_FUNCTION (newdecl
) = DECL_STRUCT_FUNCTION (olddecl
);
1656 /* Merge the section attribute.
1657 We want to issue an error if the sections conflict but that must be
1658 done later in decl_attributes since we are called before attributes
1660 if (DECL_SECTION_NAME (newdecl
) == NULL_TREE
)
1661 DECL_SECTION_NAME (newdecl
) = DECL_SECTION_NAME (olddecl
);
1663 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
1665 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl
)
1666 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl
);
1667 DECL_NO_LIMIT_STACK (newdecl
) |= DECL_NO_LIMIT_STACK (olddecl
);
1668 TREE_THIS_VOLATILE (newdecl
) |= TREE_THIS_VOLATILE (olddecl
);
1669 TREE_READONLY (newdecl
) |= TREE_READONLY (olddecl
);
1670 TREE_NOTHROW (newdecl
) |= TREE_NOTHROW (olddecl
);
1671 DECL_IS_MALLOC (newdecl
) |= DECL_IS_MALLOC (olddecl
);
1672 DECL_IS_PURE (newdecl
) |= DECL_IS_PURE (olddecl
);
1673 /* Keep the old RTL. */
1674 COPY_DECL_RTL (olddecl
, newdecl
);
1676 else if (TREE_CODE (newdecl
) == VAR_DECL
1677 && (DECL_SIZE (olddecl
) || !DECL_SIZE (newdecl
)))
1679 /* Keep the old RTL. We cannot keep the old RTL if the old
1680 declaration was for an incomplete object and the new
1681 declaration is not since many attributes of the RTL will
1683 COPY_DECL_RTL (olddecl
, newdecl
);
1686 /* If cannot merge, then use the new type and qualifiers,
1687 and don't preserve the old rtl. */
1690 /* Clean out any memory we had of the old declaration. */
1691 tree oldstatic
= value_member (olddecl
, static_aggregates
);
1693 TREE_VALUE (oldstatic
) = error_mark_node
;
1695 TREE_TYPE (olddecl
) = TREE_TYPE (newdecl
);
1696 TREE_READONLY (olddecl
) = TREE_READONLY (newdecl
);
1697 TREE_THIS_VOLATILE (olddecl
) = TREE_THIS_VOLATILE (newdecl
);
1698 TREE_SIDE_EFFECTS (olddecl
) = TREE_SIDE_EFFECTS (newdecl
);
1701 /* Merge the storage class information. */
1702 merge_weak (newdecl
, olddecl
);
1704 DECL_ONE_ONLY (newdecl
) |= DECL_ONE_ONLY (olddecl
);
1705 DECL_DEFER_OUTPUT (newdecl
) |= DECL_DEFER_OUTPUT (olddecl
);
1706 TREE_PUBLIC (newdecl
) = TREE_PUBLIC (olddecl
);
1707 TREE_STATIC (olddecl
) = TREE_STATIC (newdecl
) |= TREE_STATIC (olddecl
);
1708 if (! DECL_EXTERNAL (olddecl
))
1709 DECL_EXTERNAL (newdecl
) = 0;
1711 if (DECL_LANG_SPECIFIC (newdecl
) && DECL_LANG_SPECIFIC (olddecl
))
1713 DECL_INTERFACE_KNOWN (newdecl
) |= DECL_INTERFACE_KNOWN (olddecl
);
1714 DECL_NOT_REALLY_EXTERN (newdecl
) |= DECL_NOT_REALLY_EXTERN (olddecl
);
1715 DECL_COMDAT (newdecl
) |= DECL_COMDAT (olddecl
);
1716 DECL_TEMPLATE_INSTANTIATED (newdecl
)
1717 |= DECL_TEMPLATE_INSTANTIATED (olddecl
);
1718 /* Don't really know how much of the language-specific
1719 values we should copy from old to new. */
1720 DECL_IN_AGGR_P (newdecl
) = DECL_IN_AGGR_P (olddecl
);
1721 DECL_LANG_SPECIFIC (newdecl
)->decl_flags
.u2
=
1722 DECL_LANG_SPECIFIC (olddecl
)->decl_flags
.u2
;
1723 DECL_NONCONVERTING_P (newdecl
) = DECL_NONCONVERTING_P (olddecl
);
1724 DECL_TEMPLATE_INFO (newdecl
) = DECL_TEMPLATE_INFO (olddecl
);
1725 DECL_INITIALIZED_IN_CLASS_P (newdecl
)
1726 |= DECL_INITIALIZED_IN_CLASS_P (olddecl
);
1727 olddecl_friend
= DECL_FRIEND_P (olddecl
);
1729 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1730 if (TREE_CODE (newdecl
) == FUNCTION_DECL
1731 || DECL_FUNCTION_TEMPLATE_P (newdecl
))
1733 DECL_BEFRIENDING_CLASSES (newdecl
)
1734 = chainon (DECL_BEFRIENDING_CLASSES (newdecl
),
1735 DECL_BEFRIENDING_CLASSES (olddecl
));
1736 /* DECL_THUNKS is only valid for virtual functions,
1737 otherwise it is a DECL_FRIEND_CONTEXT. */
1738 if (DECL_VIRTUAL_P (newdecl
))
1739 DECL_THUNKS (newdecl
) = DECL_THUNKS (olddecl
);
1743 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
1745 if (DECL_TEMPLATE_INSTANTIATION (olddecl
)
1746 && !DECL_TEMPLATE_INSTANTIATION (newdecl
))
1748 /* If newdecl is not a specialization, then it is not a
1749 template-related function at all. And that means that we
1750 should have exited above, returning 0. */
1751 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl
),
1754 if (TREE_USED (olddecl
))
1755 /* From [temp.expl.spec]:
1757 If a template, a member template or the member of a class
1758 template is explicitly specialized then that
1759 specialization shall be declared before the first use of
1760 that specialization that would cause an implicit
1761 instantiation to take place, in every translation unit in
1762 which such a use occurs. */
1763 error ("explicit specialization of %D after first use",
1766 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl
);
1768 /* [temp.expl.spec/14] We don't inline explicit specialization
1769 just because the primary template says so. */
1773 if (DECL_PENDING_INLINE_INFO (newdecl
) == 0)
1774 DECL_PENDING_INLINE_INFO (newdecl
) = DECL_PENDING_INLINE_INFO (olddecl
);
1776 DECL_DECLARED_INLINE_P (newdecl
) |= DECL_DECLARED_INLINE_P (olddecl
);
1778 /* If either decl says `inline', this fn is inline, unless
1779 its definition was passed already. */
1780 if (DECL_INLINE (newdecl
) && DECL_INITIAL (olddecl
) == NULL_TREE
)
1781 DECL_INLINE (olddecl
) = 1;
1782 DECL_INLINE (newdecl
) = DECL_INLINE (olddecl
);
1784 DECL_UNINLINABLE (newdecl
) = DECL_UNINLINABLE (olddecl
)
1785 = (DECL_UNINLINABLE (newdecl
) || DECL_UNINLINABLE (olddecl
));
1788 /* Preserve abstractness on cloned [cd]tors. */
1789 DECL_ABSTRACT (newdecl
) = DECL_ABSTRACT (olddecl
);
1793 SET_DECL_LANGUAGE (olddecl
, DECL_LANGUAGE (newdecl
));
1794 COPY_DECL_ASSEMBLER_NAME (newdecl
, olddecl
);
1795 SET_DECL_RTL (olddecl
, DECL_RTL (newdecl
));
1797 if (! types_match
|| new_defines_function
)
1799 /* These need to be copied so that the names are available.
1800 Note that if the types do match, we'll preserve inline
1801 info and other bits, but if not, we won't. */
1802 DECL_ARGUMENTS (olddecl
) = DECL_ARGUMENTS (newdecl
);
1803 DECL_RESULT (olddecl
) = DECL_RESULT (newdecl
);
1805 if (new_defines_function
)
1806 /* If defining a function declared with other language
1807 linkage, use the previously declared language linkage. */
1808 SET_DECL_LANGUAGE (newdecl
, DECL_LANGUAGE (olddecl
));
1809 else if (types_match
)
1811 /* If redeclaring a builtin function, and not a definition,
1812 it stays built in. */
1813 if (DECL_BUILT_IN (olddecl
))
1815 DECL_BUILT_IN_CLASS (newdecl
) = DECL_BUILT_IN_CLASS (olddecl
);
1816 DECL_FUNCTION_CODE (newdecl
) = DECL_FUNCTION_CODE (olddecl
);
1817 /* If we're keeping the built-in definition, keep the rtl,
1818 regardless of declaration matches. */
1819 SET_DECL_RTL (newdecl
, DECL_RTL (olddecl
));
1822 DECL_RESULT (newdecl
) = DECL_RESULT (olddecl
);
1823 /* Don't clear out the arguments if we're redefining a function. */
1824 if (DECL_ARGUMENTS (olddecl
))
1825 DECL_ARGUMENTS (newdecl
) = DECL_ARGUMENTS (olddecl
);
1828 else if (TREE_CODE (newdecl
) == NAMESPACE_DECL
)
1829 NAMESPACE_LEVEL (newdecl
) = NAMESPACE_LEVEL (olddecl
);
1831 /* Now preserve various other info from the definition. */
1832 TREE_ADDRESSABLE (newdecl
) = TREE_ADDRESSABLE (olddecl
);
1833 TREE_ASM_WRITTEN (newdecl
) = TREE_ASM_WRITTEN (olddecl
);
1834 DECL_COMMON (newdecl
) = DECL_COMMON (olddecl
);
1835 COPY_DECL_ASSEMBLER_NAME (olddecl
, newdecl
);
1837 /* If either declaration has a nondefault visibility, use it. */
1838 if (DECL_VISIBILITY (olddecl
) != VISIBILITY_DEFAULT
)
1840 if (DECL_VISIBILITY (newdecl
) != VISIBILITY_DEFAULT
1841 && DECL_VISIBILITY (newdecl
) != DECL_VISIBILITY (olddecl
))
1843 warning ("%J'%D': visibility attribute ignored because it",
1845 warning ("%Jconflicts with previous declaration here", olddecl
);
1847 DECL_VISIBILITY (newdecl
) = DECL_VISIBILITY (olddecl
);
1850 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
1854 function_size
= sizeof (struct tree_decl
);
1856 memcpy ((char *) olddecl
+ sizeof (struct tree_common
),
1857 (char *) newdecl
+ sizeof (struct tree_common
),
1858 function_size
- sizeof (struct tree_common
));
1860 if (DECL_TEMPLATE_INSTANTIATION (newdecl
))
1861 /* If newdecl is a template instantiation, it is possible that
1862 the following sequence of events has occurred:
1864 o A friend function was declared in a class template. The
1865 class template was instantiated.
1867 o The instantiation of the friend declaration was
1868 recorded on the instantiation list, and is newdecl.
1870 o Later, however, instantiate_class_template called pushdecl
1871 on the newdecl to perform name injection. But, pushdecl in
1872 turn called duplicate_decls when it discovered that another
1873 declaration of a global function with the same name already
1876 o Here, in duplicate_decls, we decided to clobber newdecl.
1878 If we're going to do that, we'd better make sure that
1879 olddecl, and not newdecl, is on the list of
1880 instantiations so that if we try to do the instantiation
1881 again we won't get the clobbered declaration. */
1882 reregister_specialization (newdecl
,
1883 DECL_TI_TEMPLATE (newdecl
),
1888 memcpy ((char *) olddecl
+ sizeof (struct tree_common
),
1889 (char *) newdecl
+ sizeof (struct tree_common
),
1890 sizeof (struct tree_decl
) - sizeof (struct tree_common
)
1891 + TREE_CODE_LENGTH (TREE_CODE (newdecl
)) * sizeof (char *));
1894 DECL_UID (olddecl
) = olddecl_uid
;
1896 DECL_FRIEND_P (olddecl
) = 1;
1898 /* NEWDECL contains the merged attribute lists.
1899 Update OLDDECL to be the same. */
1900 DECL_ATTRIBUTES (olddecl
) = DECL_ATTRIBUTES (newdecl
);
1902 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
1903 so that encode_section_info has a chance to look at the new decl
1904 flags and attributes. */
1905 if (DECL_RTL_SET_P (olddecl
)
1906 && (TREE_CODE (olddecl
) == FUNCTION_DECL
1907 || (TREE_CODE (olddecl
) == VAR_DECL
1908 && TREE_STATIC (olddecl
))))
1909 make_decl_rtl (olddecl
, NULL
);
1914 /* Return zero if the declaration NEWDECL is valid
1915 when the declaration OLDDECL (assumed to be for the same name)
1916 has already been seen.
1917 Otherwise return an error message format string with a %s
1918 where the identifier should go. */
1921 redeclaration_error_message (tree newdecl
, tree olddecl
)
1923 if (TREE_CODE (newdecl
) == TYPE_DECL
)
1925 /* Because C++ can put things into name space for free,
1926 constructs like "typedef struct foo { ... } foo"
1927 would look like an erroneous redeclaration. */
1928 if (same_type_p (TREE_TYPE (newdecl
), TREE_TYPE (olddecl
)))
1931 return "redefinition of `%#D'";
1933 else if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
1935 /* If this is a pure function, its olddecl will actually be
1936 the original initialization to `0' (which we force to call
1937 abort()). Don't complain about redefinition in this case. */
1938 if (DECL_LANG_SPECIFIC (olddecl
) && DECL_PURE_VIRTUAL_P (olddecl
))
1941 /* If both functions come from different namespaces, this is not
1942 a redeclaration - this is a conflict with a used function. */
1943 if (DECL_NAMESPACE_SCOPE_P (olddecl
)
1944 && DECL_CONTEXT (olddecl
) != DECL_CONTEXT (newdecl
))
1945 return "`%D' conflicts with used function";
1947 /* We'll complain about linkage mismatches in
1948 warn_extern_redeclared_static. */
1950 /* Defining the same name twice is no good. */
1951 if (DECL_INITIAL (olddecl
) != NULL_TREE
1952 && DECL_INITIAL (newdecl
) != NULL_TREE
)
1954 if (DECL_NAME (olddecl
) == NULL_TREE
)
1955 return "`%#D' not declared in class";
1957 return "redefinition of `%#D'";
1961 else if (TREE_CODE (newdecl
) == TEMPLATE_DECL
)
1965 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl
)) == TYPE_DECL
)
1967 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl
))
1968 && COMPLETE_TYPE_P (TREE_TYPE (olddecl
)))
1969 return "redefinition of `%#D'";
1973 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl
)) != FUNCTION_DECL
1974 || (DECL_TEMPLATE_RESULT (newdecl
)
1975 == DECL_TEMPLATE_RESULT (olddecl
)))
1978 nt
= DECL_TEMPLATE_RESULT (newdecl
);
1979 if (DECL_TEMPLATE_INFO (nt
))
1980 nt
= DECL_TEMPLATE_RESULT (template_for_substitution (nt
));
1981 ot
= DECL_TEMPLATE_RESULT (olddecl
);
1982 if (DECL_TEMPLATE_INFO (ot
))
1983 ot
= DECL_TEMPLATE_RESULT (template_for_substitution (ot
));
1984 if (DECL_INITIAL (nt
) && DECL_INITIAL (ot
))
1985 return "redefinition of `%#D'";
1989 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl
))
1991 /* Objects declared at top level: */
1992 /* If at least one is a reference, it's ok. */
1993 if (DECL_EXTERNAL (newdecl
) || DECL_EXTERNAL (olddecl
))
1995 /* Reject two definitions. */
1996 return "redefinition of `%#D'";
2000 /* Objects declared with block scope: */
2001 /* Reject two definitions, and reject a definition
2002 together with an external reference. */
2003 if (!(DECL_EXTERNAL (newdecl
) && DECL_EXTERNAL (olddecl
)))
2004 return "redeclaration of `%#D'";
2009 /* Create a new label, named ID. */
2012 make_label_decl (tree id
, int local_p
)
2016 decl
= build_decl (LABEL_DECL
, id
, void_type_node
);
2018 DECL_CONTEXT (decl
) = current_function_decl
;
2019 DECL_MODE (decl
) = VOIDmode
;
2020 C_DECLARED_LABEL_FLAG (decl
) = local_p
;
2022 /* Say where one reference is to the label, for the sake of the
2023 error if it is not defined. */
2024 DECL_SOURCE_LOCATION (decl
) = input_location
;
2026 /* Record the fact that this identifier is bound to this label. */
2027 SET_IDENTIFIER_LABEL_VALUE (id
, decl
);
2032 /* Record this label on the list of used labels so that we can check
2033 at the end of the function to see whether or not the label was
2034 actually defined, and so we can check when the label is defined whether
2035 this use is valid. */
2038 use_label (tree decl
)
2040 if (named_label_uses
== NULL
2041 || named_label_uses
->names_in_scope
!= current_binding_level
->names
2042 || named_label_uses
->label_decl
!= decl
)
2044 struct named_label_use_list
*new_ent
;
2045 new_ent
= ggc_alloc (sizeof (struct named_label_use_list
));
2046 new_ent
->label_decl
= decl
;
2047 new_ent
->names_in_scope
= current_binding_level
->names
;
2048 new_ent
->binding_level
= current_binding_level
;
2049 new_ent
->o_goto_locus
= input_location
;
2050 new_ent
->next
= named_label_uses
;
2051 named_label_uses
= new_ent
;
2055 /* Look for a label named ID in the current function. If one cannot
2056 be found, create one. (We keep track of used, but undefined,
2057 labels, and complain about them at the end of a function.) */
2060 lookup_label (tree id
)
2063 struct named_label_list
*ent
;
2065 timevar_push (TV_NAME_LOOKUP
);
2066 /* You can't use labels at global scope. */
2067 if (current_function_decl
== NULL_TREE
)
2069 error ("label `%s' referenced outside of any function",
2070 IDENTIFIER_POINTER (id
));
2071 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, NULL_TREE
);
2074 /* See if we've already got this label. */
2075 decl
= IDENTIFIER_LABEL_VALUE (id
);
2076 if (decl
!= NULL_TREE
&& DECL_CONTEXT (decl
) == current_function_decl
)
2077 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, decl
);
2079 /* Record this label on the list of labels used in this function.
2080 We do this before calling make_label_decl so that we get the
2081 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2082 ent
= ggc_alloc_cleared (sizeof (struct named_label_list
));
2083 ent
->old_value
= IDENTIFIER_LABEL_VALUE (id
);
2084 ent
->next
= named_labels
;
2087 /* We need a new label. */
2088 decl
= make_label_decl (id
, /*local_p=*/0);
2090 /* Now fill in the information we didn't have before. */
2091 ent
->label_decl
= decl
;
2093 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, decl
);
2096 /* Declare a local label named ID. */
2099 declare_local_label (tree id
)
2103 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2104 this scope we can restore the old value of
2105 IDENTIFIER_TYPE_VALUE. */
2106 current_binding_level
->shadowed_labels
2107 = tree_cons (IDENTIFIER_LABEL_VALUE (id
), NULL_TREE
,
2108 current_binding_level
->shadowed_labels
);
2109 /* Look for the label. */
2110 decl
= make_label_decl (id
, /*local_p=*/1);
2111 /* Now fill in the information we didn't have before. */
2112 TREE_VALUE (current_binding_level
->shadowed_labels
) = decl
;
2117 /* Returns nonzero if it is ill-formed to jump past the declaration of
2118 DECL. Returns 2 if it's also a real problem. */
2121 decl_jump_unsafe (tree decl
)
2123 if (TREE_CODE (decl
) != VAR_DECL
|| TREE_STATIC (decl
))
2126 if (DECL_INITIAL (decl
) == NULL_TREE
2127 && pod_type_p (TREE_TYPE (decl
)))
2130 /* This is really only important if we're crossing an initialization.
2131 The POD stuff is just pedantry; why should it matter if the class
2132 contains a field of pointer to member type? */
2133 if (DECL_INITIAL (decl
)
2134 || (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl
))))
2139 /* Check that a single previously seen jump to a newly defined label
2140 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2141 the jump context; NAMES are the names in scope in LEVEL at the jump
2142 context; FILE and LINE are the source position of the jump or 0. */
2145 check_previous_goto_1 (tree decl
,
2146 struct cp_binding_level
* level
,
2147 tree names
, const location_t
*locus
)
2151 struct cp_binding_level
*b
= current_binding_level
;
2152 for (; b
; b
= b
->level_chain
)
2154 tree new_decls
= b
->names
;
2155 tree old_decls
= (b
== level
? names
: NULL_TREE
);
2156 for (; new_decls
!= old_decls
;
2157 new_decls
= TREE_CHAIN (new_decls
))
2159 int problem
= decl_jump_unsafe (new_decls
);
2166 pedwarn ("jump to label `%D'", decl
);
2168 pedwarn ("jump to case label");
2171 pedwarn ("%H from here", locus
);
2176 cp_error_at (" crosses initialization of `%#D'",
2179 cp_pedwarn_at (" enters scope of non-POD `%#D'",
2185 if ((b
->kind
== sk_try
|| b
->kind
== sk_catch
) && ! saw_eh
)
2190 pedwarn ("jump to label `%D'", decl
);
2192 pedwarn ("jump to case label");
2195 pedwarn ("%H from here", locus
);
2198 if (b
->kind
== sk_try
)
2199 error (" enters try block");
2201 error (" enters catch block");
2208 check_previous_goto (struct named_label_use_list
* use
)
2210 check_previous_goto_1 (use
->label_decl
, use
->binding_level
,
2211 use
->names_in_scope
, &use
->o_goto_locus
);
2215 check_switch_goto (struct cp_binding_level
* level
)
2217 check_previous_goto_1 (NULL_TREE
, level
, level
->names
, NULL
);
2220 /* Check that any previously seen jumps to a newly defined label DECL
2221 are OK. Called by define_label. */
2224 check_previous_gotos (tree decl
)
2226 struct named_label_use_list
**usep
;
2228 if (! TREE_USED (decl
))
2231 for (usep
= &named_label_uses
; *usep
; )
2233 struct named_label_use_list
*use
= *usep
;
2234 if (use
->label_decl
== decl
)
2236 check_previous_goto (use
);
2240 usep
= &(use
->next
);
2244 /* Check that a new jump to a label DECL is OK. Called by
2245 finish_goto_stmt. */
2248 check_goto (tree decl
)
2252 struct named_label_list
*lab
;
2254 /* We can't know where a computed goto is jumping. So we assume
2256 if (! DECL_P (decl
))
2259 /* If the label hasn't been defined yet, defer checking. */
2260 if (! DECL_INITIAL (decl
))
2266 for (lab
= named_labels
; lab
; lab
= lab
->next
)
2267 if (decl
== lab
->label_decl
)
2270 /* If the label is not on named_labels it's a gcc local label, so
2271 it must be in an outer scope, so jumping to it is always OK. */
2275 if ((lab
->in_try_scope
|| lab
->in_catch_scope
|| lab
->bad_decls
)
2278 cp_pedwarn_at ("jump to label `%D'", decl
);
2279 pedwarn (" from here");
2283 for (bad
= lab
->bad_decls
; bad
; bad
= TREE_CHAIN (bad
))
2285 tree b
= TREE_VALUE (bad
);
2286 int u
= decl_jump_unsafe (b
);
2288 if (u
> 1 && DECL_ARTIFICIAL (b
))
2289 /* Can't skip init of __exception_info. */
2290 error ("%J enters catch block", b
);
2292 cp_error_at (" skips initialization of `%#D'", b
);
2294 cp_pedwarn_at (" enters scope of non-POD `%#D'", b
);
2297 if (lab
->in_try_scope
)
2298 error (" enters try block");
2299 else if (lab
->in_catch_scope
)
2300 error (" enters catch block");
2303 /* Define a label, specifying the location in the source file.
2304 Return the LABEL_DECL node for the label. */
2307 define_label (location_t location
, tree name
)
2309 tree decl
= lookup_label (name
);
2310 struct named_label_list
*ent
;
2311 struct cp_binding_level
*p
;
2313 timevar_push (TV_NAME_LOOKUP
);
2314 for (ent
= named_labels
; ent
; ent
= ent
->next
)
2315 if (ent
->label_decl
== decl
)
2318 /* After labels, make any new cleanups in the function go into their
2319 own new (temporary) binding contour. */
2320 for (p
= current_binding_level
;
2321 p
->kind
!= sk_function_parms
;
2323 p
->more_cleanups_ok
= 0;
2325 if (name
== get_identifier ("wchar_t"))
2326 pedwarn ("label named wchar_t");
2328 if (DECL_INITIAL (decl
) != NULL_TREE
)
2329 error ("duplicate label `%D'", decl
);
2332 /* Mark label as having been defined. */
2333 DECL_INITIAL (decl
) = error_mark_node
;
2334 /* Say where in the source. */
2335 DECL_SOURCE_LOCATION (decl
) = location
;
2338 ent
->names_in_scope
= current_binding_level
->names
;
2339 ent
->binding_level
= current_binding_level
;
2341 check_previous_gotos (decl
);
2344 timevar_pop (TV_NAME_LOOKUP
);
2350 struct cp_binding_level
*level
;
2351 struct cp_switch
*next
;
2352 /* The SWITCH_STMT being built. */
2354 /* A splay-tree mapping the low element of a case range to the high
2355 element, or NULL_TREE if there is no high element. Used to
2356 determine whether or not a new case label duplicates an old case
2357 label. We need a tree, rather than simply a hash table, because
2358 of the GNU case range extension. */
2362 /* A stack of the currently active switch statements. The innermost
2363 switch statement is on the top of the stack. There is no need to
2364 mark the stack for garbage collection because it is only active
2365 during the processing of the body of a function, and we never
2366 collect at that point. */
2368 static struct cp_switch
*switch_stack
;
2370 /* Called right after a switch-statement condition is parsed.
2371 SWITCH_STMT is the switch statement being parsed. */
2374 push_switch (tree switch_stmt
)
2376 struct cp_switch
*p
= xmalloc (sizeof (struct cp_switch
));
2377 p
->level
= current_binding_level
;
2378 p
->next
= switch_stack
;
2379 p
->switch_stmt
= switch_stmt
;
2380 p
->cases
= splay_tree_new (case_compare
, NULL
, NULL
);
2387 struct cp_switch
*cs
= switch_stack
;
2389 /* Emit warnings as needed. */
2390 c_do_switch_warnings (cs
->cases
, cs
->switch_stmt
);
2392 splay_tree_delete (cs
->cases
);
2393 switch_stack
= switch_stack
->next
;
2397 /* Note that we've seen a definition of a case label, and complain if this
2398 is a bad place for one. */
2401 finish_case_label (tree low_value
, tree high_value
)
2404 struct cp_binding_level
*p
;
2406 if (processing_template_decl
)
2410 /* For templates, just add the case label; we'll do semantic
2411 analysis at instantiation-time. */
2412 label
= build_decl (LABEL_DECL
, NULL_TREE
, NULL_TREE
);
2413 return add_stmt (build_case_label (low_value
, high_value
, label
));
2416 /* Find the condition on which this switch statement depends. */
2417 cond
= SWITCH_COND (switch_stack
->switch_stmt
);
2418 if (cond
&& TREE_CODE (cond
) == TREE_LIST
)
2419 cond
= TREE_VALUE (cond
);
2421 r
= c_add_case_label (switch_stack
->cases
, cond
, low_value
, high_value
);
2423 check_switch_goto (switch_stack
->level
);
2425 /* After labels, make any new cleanups in the function go into their
2426 own new (temporary) binding contour. */
2427 for (p
= current_binding_level
;
2428 p
->kind
!= sk_function_parms
;
2430 p
->more_cleanups_ok
= 0;
2435 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2438 typename_hash (const void* k
)
2443 hash
= (htab_hash_pointer (TYPE_CONTEXT (t
))
2444 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t
))));
2449 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
2452 typename_compare (const void * k1
, const void * k2
)
2461 d1
= TYPE_NAME (t1
);
2462 d2
= TYPE_NAME (t2
);
2464 return (DECL_NAME (d1
) == DECL_NAME (d2
)
2465 && TYPE_CONTEXT (t1
) == TYPE_CONTEXT (t2
)
2466 && ((TREE_TYPE (t1
) != NULL_TREE
)
2467 == (TREE_TYPE (t2
) != NULL_TREE
))
2468 && same_type_p (TREE_TYPE (t1
), TREE_TYPE (t2
))
2469 && TYPENAME_TYPE_FULLNAME (t1
) == TYPENAME_TYPE_FULLNAME (t2
));
2472 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
2473 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
2474 is non-NULL, this type is being created by the implicit typename
2475 extension, and BASE_TYPE is a type named `t' in some base class of
2476 `T' which depends on template parameters.
2478 Returns the new TYPENAME_TYPE. */
2480 static GTY ((param_is (union tree_node
))) htab_t typename_htab
;
2483 build_typename_type (tree context
, tree name
, tree fullname
)
2489 if (typename_htab
== NULL
)
2491 typename_htab
= htab_create_ggc (61, &typename_hash
,
2492 &typename_compare
, NULL
);
2495 /* Build the TYPENAME_TYPE. */
2496 t
= make_aggr_type (TYPENAME_TYPE
);
2497 TYPE_CONTEXT (t
) = FROB_CONTEXT (context
);
2498 TYPENAME_TYPE_FULLNAME (t
) = fullname
;
2500 /* Build the corresponding TYPE_DECL. */
2501 d
= build_decl (TYPE_DECL
, name
, t
);
2502 TYPE_NAME (TREE_TYPE (d
)) = d
;
2503 TYPE_STUB_DECL (TREE_TYPE (d
)) = d
;
2504 DECL_CONTEXT (d
) = FROB_CONTEXT (context
);
2505 DECL_ARTIFICIAL (d
) = 1;
2507 /* See if we already have this type. */
2508 e
= htab_find_slot (typename_htab
, t
, INSERT
);
2517 /* Resolve `typename CONTEXT::NAME'. Returns an appropriate type,
2518 unless an error occurs, in which case error_mark_node is returned.
2519 If we locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is
2520 set, we return that, rather than the _TYPE it corresponds to, in
2521 other cases we look through the type decl. If TF_ERROR is set,
2522 complain about errors, otherwise be quiet. */
2525 make_typename_type (tree context
, tree name
, tsubst_flags_t complain
)
2529 if (name
== error_mark_node
2530 || context
== NULL_TREE
2531 || context
== error_mark_node
)
2532 return error_mark_node
;
2536 if (!(TYPE_LANG_SPECIFIC (name
)
2537 && (CLASSTYPE_IS_TEMPLATE (name
)
2538 || CLASSTYPE_USE_TEMPLATE (name
))))
2539 name
= TYPE_IDENTIFIER (name
);
2541 /* Create a TEMPLATE_ID_EXPR for the type. */
2542 name
= build_nt (TEMPLATE_ID_EXPR
,
2543 CLASSTYPE_TI_TEMPLATE (name
),
2544 CLASSTYPE_TI_ARGS (name
));
2546 else if (TREE_CODE (name
) == TYPE_DECL
)
2547 name
= DECL_NAME (name
);
2551 if (TREE_CODE (name
) == TEMPLATE_ID_EXPR
)
2553 name
= TREE_OPERAND (name
, 0);
2554 if (TREE_CODE (name
) == TEMPLATE_DECL
)
2555 name
= TREE_OPERAND (fullname
, 0) = DECL_NAME (name
);
2557 if (TREE_CODE (name
) == TEMPLATE_DECL
)
2559 error ("`%D' used without template parameters", name
);
2560 return error_mark_node
;
2562 my_friendly_assert (TREE_CODE (name
) == IDENTIFIER_NODE
, 20030802);
2564 if (TREE_CODE (context
) == NAMESPACE_DECL
)
2566 /* We can get here from typename_sub0 in the explicit_template_type
2567 expansion. Just fail. */
2568 if (complain
& tf_error
)
2569 error ("no class template named `%#T' in `%#T'",
2571 return error_mark_node
;
2574 if (!dependent_type_p (context
)
2575 || currently_open_class (context
))
2577 if (TREE_CODE (fullname
) == TEMPLATE_ID_EXPR
)
2579 tree tmpl
= NULL_TREE
;
2580 if (IS_AGGR_TYPE (context
))
2581 tmpl
= lookup_field (context
, name
, 0, false);
2582 if (!tmpl
|| !DECL_CLASS_TEMPLATE_P (tmpl
))
2584 if (complain
& tf_error
)
2585 error ("no class template named `%#T' in `%#T'",
2587 return error_mark_node
;
2590 if (complain
& tf_error
)
2591 perform_or_defer_access_check (TYPE_BINFO (context
), tmpl
);
2593 return lookup_template_class (tmpl
,
2594 TREE_OPERAND (fullname
, 1),
2596 /*entering_scope=*/0,
2597 tf_error
| tf_warning
| tf_user
);
2603 if (!IS_AGGR_TYPE (context
))
2605 if (complain
& tf_error
)
2606 error ("no type named `%#T' in `%#T'", name
, context
);
2607 return error_mark_node
;
2610 t
= lookup_field (context
, name
, 0, true);
2613 if (TREE_CODE (t
) != TYPE_DECL
)
2615 if (complain
& tf_error
)
2616 error ("no type named `%#T' in `%#T'", name
, context
);
2617 return error_mark_node
;
2620 if (complain
& tf_error
)
2621 perform_or_defer_access_check (TYPE_BINFO (context
), t
);
2623 if (DECL_ARTIFICIAL (t
) || !(complain
& tf_keep_type_decl
))
2631 /* If the CONTEXT is not a template type, then either the field is
2632 there now or its never going to be. */
2633 if (!dependent_type_p (context
))
2635 if (complain
& tf_error
)
2636 error ("no type named `%#T' in `%#T'", name
, context
);
2637 return error_mark_node
;
2640 return build_typename_type (context
, name
, fullname
);
2643 /* Resolve `CONTEXT::template NAME'. Returns an appropriate type,
2644 unless an error occurs, in which case error_mark_node is returned.
2645 If we locate a TYPE_DECL, we return that, rather than the _TYPE it
2646 corresponds to. If COMPLAIN zero, don't complain about any errors
2650 make_unbound_class_template (tree context
, tree name
, tsubst_flags_t complain
)
2656 name
= TYPE_IDENTIFIER (name
);
2657 else if (DECL_P (name
))
2658 name
= DECL_NAME (name
);
2659 if (TREE_CODE (name
) != IDENTIFIER_NODE
)
2662 if (!dependent_type_p (context
)
2663 || currently_open_class (context
))
2665 tree tmpl
= NULL_TREE
;
2667 if (IS_AGGR_TYPE (context
))
2668 tmpl
= lookup_field (context
, name
, 0, false);
2670 if (!tmpl
|| !DECL_CLASS_TEMPLATE_P (tmpl
))
2672 if (complain
& tf_error
)
2673 error ("no class template named `%#T' in `%#T'", name
, context
);
2674 return error_mark_node
;
2677 if (complain
& tf_error
)
2678 perform_or_defer_access_check (TYPE_BINFO (context
), tmpl
);
2683 /* Build the UNBOUND_CLASS_TEMPLATE. */
2684 t
= make_aggr_type (UNBOUND_CLASS_TEMPLATE
);
2685 TYPE_CONTEXT (t
) = FROB_CONTEXT (context
);
2686 TREE_TYPE (t
) = NULL_TREE
;
2688 /* Build the corresponding TEMPLATE_DECL. */
2689 d
= build_decl (TEMPLATE_DECL
, name
, t
);
2690 TYPE_NAME (TREE_TYPE (d
)) = d
;
2691 TYPE_STUB_DECL (TREE_TYPE (d
)) = d
;
2692 DECL_CONTEXT (d
) = FROB_CONTEXT (context
);
2693 DECL_ARTIFICIAL (d
) = 1;
2700 /* Push the declarations of builtin types into the namespace.
2701 RID_INDEX is the index of the builtin type in the array
2702 RID_POINTERS. NAME is the name used when looking up the builtin
2703 type. TYPE is the _TYPE node for the builtin type. */
2706 record_builtin_type (enum rid rid_index
,
2710 tree rname
= NULL_TREE
, tname
= NULL_TREE
;
2711 tree tdecl
= NULL_TREE
;
2713 if ((int) rid_index
< (int) RID_MAX
)
2714 rname
= ridpointers
[(int) rid_index
];
2716 tname
= get_identifier (name
);
2718 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
2719 eliminated. Built-in types should not be looked up name; their
2720 names are keywords that the parser can recognize. However, there
2721 is code in c-common.c that uses identifier_global_value to look
2722 up built-in types by name. */
2725 tdecl
= build_decl (TYPE_DECL
, tname
, type
);
2726 DECL_ARTIFICIAL (tdecl
) = 1;
2727 SET_IDENTIFIER_GLOBAL_VALUE (tname
, tdecl
);
2733 tdecl
= build_decl (TYPE_DECL
, rname
, type
);
2734 DECL_ARTIFICIAL (tdecl
) = 1;
2736 SET_IDENTIFIER_GLOBAL_VALUE (rname
, tdecl
);
2739 if (!TYPE_NAME (type
))
2740 TYPE_NAME (type
) = tdecl
;
2743 debug_hooks
->type_decl (tdecl
, 0);
2746 /* Record one of the standard Java types.
2747 * Declare it as having the given NAME.
2748 * If SIZE > 0, it is the size of one of the integral types;
2749 * otherwise it is the negative of the size of one of the other types. */
2752 record_builtin_java_type (const char* name
, int size
)
2756 type
= make_signed_type (size
);
2757 else if (size
> -32)
2758 { /* "__java_char" or ""__java_boolean". */
2759 type
= make_unsigned_type (-size
);
2760 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
2763 { /* "__java_float" or ""__java_double". */
2764 type
= make_node (REAL_TYPE
);
2765 TYPE_PRECISION (type
) = - size
;
2768 record_builtin_type (RID_MAX
, name
, type
);
2769 decl
= TYPE_NAME (type
);
2771 /* Suppress generate debug symbol entries for these types,
2772 since for normal C++ they are just clutter.
2773 However, push_lang_context undoes this if extern "Java" is seen. */
2774 DECL_IGNORED_P (decl
) = 1;
2776 TYPE_FOR_JAVA (type
) = 1;
2780 /* Push a type into the namespace so that the back-ends ignore it. */
2783 record_unknown_type (tree type
, const char* name
)
2785 tree decl
= pushdecl (build_decl (TYPE_DECL
, get_identifier (name
), type
));
2786 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
2787 DECL_IGNORED_P (decl
) = 1;
2788 TYPE_DECL_SUPPRESS_DEBUG (decl
) = 1;
2789 TYPE_SIZE (type
) = TYPE_SIZE (void_type_node
);
2790 TYPE_ALIGN (type
) = 1;
2791 TYPE_USER_ALIGN (type
) = 0;
2792 TYPE_MODE (type
) = TYPE_MODE (void_type_node
);
2795 /* An string for which we should create an IDENTIFIER_NODE at
2798 typedef struct predefined_identifier
2800 /* The name of the identifier. */
2801 const char *const name
;
2802 /* The place where the IDENTIFIER_NODE should be stored. */
2804 /* Nonzero if this is the name of a constructor or destructor. */
2805 const int ctor_or_dtor_p
;
2806 } predefined_identifier
;
2808 /* Create all the predefined identifiers. */
2811 initialize_predefined_identifiers (void)
2813 const predefined_identifier
*pid
;
2815 /* A table of identifiers to create at startup. */
2816 static const predefined_identifier predefined_identifiers
[] = {
2817 { "C++", &lang_name_cplusplus
, 0 },
2818 { "C", &lang_name_c
, 0 },
2819 { "Java", &lang_name_java
, 0 },
2820 { CTOR_NAME
, &ctor_identifier
, 1 },
2821 { "__base_ctor", &base_ctor_identifier
, 1 },
2822 { "__comp_ctor", &complete_ctor_identifier
, 1 },
2823 { DTOR_NAME
, &dtor_identifier
, 1 },
2824 { "__comp_dtor", &complete_dtor_identifier
, 1 },
2825 { "__base_dtor", &base_dtor_identifier
, 1 },
2826 { "__deleting_dtor", &deleting_dtor_identifier
, 1 },
2827 { IN_CHARGE_NAME
, &in_charge_identifier
, 0 },
2828 { "nelts", &nelts_identifier
, 0 },
2829 { THIS_NAME
, &this_identifier
, 0 },
2830 { VTABLE_DELTA_NAME
, &delta_identifier
, 0 },
2831 { VTABLE_PFN_NAME
, &pfn_identifier
, 0 },
2832 { "_vptr", &vptr_identifier
, 0 },
2833 { "__vtt_parm", &vtt_parm_identifier
, 0 },
2834 { "::", &global_scope_name
, 0 },
2835 { "std", &std_identifier
, 0 },
2839 for (pid
= predefined_identifiers
; pid
->name
; ++pid
)
2841 *pid
->node
= get_identifier (pid
->name
);
2842 if (pid
->ctor_or_dtor_p
)
2843 IDENTIFIER_CTOR_OR_DTOR_P (*pid
->node
) = 1;
2847 /* Create the predefined scalar types of C,
2848 and some nodes representing standard constants (0, 1, (void *)0).
2849 Initialize the global binding level.
2850 Make definitions for built-in primitive functions. */
2853 cxx_init_decl_processing (void)
2856 tree void_ftype_ptr
;
2858 /* Create all the identifiers we need. */
2859 initialize_predefined_identifiers ();
2861 /* Create the global variables. */
2862 push_to_top_level ();
2864 current_function_decl
= NULL_TREE
;
2865 current_binding_level
= NULL
;
2866 /* Enter the global namespace. */
2867 my_friendly_assert (global_namespace
== NULL_TREE
, 375);
2868 global_namespace
= build_lang_decl (NAMESPACE_DECL
, global_scope_name
,
2870 begin_scope (sk_namespace
, global_namespace
);
2872 current_lang_name
= NULL_TREE
;
2874 /* Adjust various flags based on command-line settings. */
2875 if (!flag_permissive
)
2876 flag_pedantic_errors
= 1;
2877 if (!flag_no_inline
)
2879 flag_inline_trees
= 1;
2882 if (flag_inline_functions
)
2884 flag_inline_trees
= 2;
2885 flag_inline_functions
= 0;
2888 /* Force minimum function alignment if using the least significant
2889 bit of function pointers to store the virtual bit. */
2890 if (TARGET_PTRMEMFUNC_VBIT_LOCATION
== ptrmemfunc_vbit_in_pfn
2891 && force_align_functions_log
< 1)
2892 force_align_functions_log
= 1;
2895 current_lang_name
= lang_name_c
;
2897 build_common_tree_nodes (flag_signed_char
);
2899 error_mark_list
= build_tree_list (error_mark_node
, error_mark_node
);
2900 TREE_TYPE (error_mark_list
) = error_mark_node
;
2902 /* Create the `std' namespace. */
2903 push_namespace (std_identifier
);
2904 std_node
= current_namespace
;
2907 c_common_nodes_and_builtins ();
2909 java_byte_type_node
= record_builtin_java_type ("__java_byte", 8);
2910 java_short_type_node
= record_builtin_java_type ("__java_short", 16);
2911 java_int_type_node
= record_builtin_java_type ("__java_int", 32);
2912 java_long_type_node
= record_builtin_java_type ("__java_long", 64);
2913 java_float_type_node
= record_builtin_java_type ("__java_float", -32);
2914 java_double_type_node
= record_builtin_java_type ("__java_double", -64);
2915 java_char_type_node
= record_builtin_java_type ("__java_char", -16);
2916 java_boolean_type_node
= record_builtin_java_type ("__java_boolean", -1);
2918 integer_two_node
= build_int_2 (2, 0);
2919 TREE_TYPE (integer_two_node
) = integer_type_node
;
2920 integer_three_node
= build_int_2 (3, 0);
2921 TREE_TYPE (integer_three_node
) = integer_type_node
;
2923 record_builtin_type (RID_BOOL
, "bool", boolean_type_node
);
2924 truthvalue_type_node
= boolean_type_node
;
2925 truthvalue_false_node
= boolean_false_node
;
2926 truthvalue_true_node
= boolean_true_node
;
2928 empty_except_spec
= build_tree_list (NULL_TREE
, NULL_TREE
);
2931 record_builtin_type (RID_MAX
, NULL
, string_type_node
);
2934 delta_type_node
= ptrdiff_type_node
;
2935 vtable_index_type
= ptrdiff_type_node
;
2937 vtt_parm_type
= build_pointer_type (const_ptr_type_node
);
2938 void_ftype
= build_function_type (void_type_node
, void_list_node
);
2939 void_ftype_ptr
= build_function_type (void_type_node
,
2940 tree_cons (NULL_TREE
,
2944 = build_exception_variant (void_ftype_ptr
, empty_except_spec
);
2946 /* C++ extensions */
2948 unknown_type_node
= make_node (UNKNOWN_TYPE
);
2949 record_unknown_type (unknown_type_node
, "unknown type");
2951 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
2952 TREE_TYPE (unknown_type_node
) = unknown_type_node
;
2954 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
2956 TYPE_POINTER_TO (unknown_type_node
) = unknown_type_node
;
2957 TYPE_REFERENCE_TO (unknown_type_node
) = unknown_type_node
;
2960 /* Make sure we get a unique function type, so we can give
2961 its pointer type a name. (This wins for gdb.) */
2962 tree vfunc_type
= make_node (FUNCTION_TYPE
);
2963 TREE_TYPE (vfunc_type
) = integer_type_node
;
2964 TYPE_ARG_TYPES (vfunc_type
) = NULL_TREE
;
2965 layout_type (vfunc_type
);
2967 vtable_entry_type
= build_pointer_type (vfunc_type
);
2969 record_builtin_type (RID_MAX
, VTBL_PTR_TYPE
, vtable_entry_type
);
2972 = build_cplus_array_type (vtable_entry_type
, NULL_TREE
);
2973 layout_type (vtbl_type_node
);
2974 vtbl_type_node
= build_qualified_type (vtbl_type_node
, TYPE_QUAL_CONST
);
2975 record_builtin_type (RID_MAX
, NULL
, vtbl_type_node
);
2976 vtbl_ptr_type_node
= build_pointer_type (vtable_entry_type
);
2977 layout_type (vtbl_ptr_type_node
);
2978 record_builtin_type (RID_MAX
, NULL
, vtbl_ptr_type_node
);
2980 push_namespace (get_identifier ("__cxxabiv1"));
2981 abi_node
= current_namespace
;
2984 global_type_node
= make_node (LANG_TYPE
);
2985 record_unknown_type (global_type_node
, "global type");
2988 current_lang_name
= lang_name_cplusplus
;
2992 tree bad_alloc_type_node
;
2993 tree bad_alloc_decl
;
2994 tree newtype
, deltype
;
2995 tree ptr_ftype_sizetype
;
2997 push_namespace (std_identifier
);
2998 bad_alloc_id
= get_identifier ("bad_alloc");
2999 bad_alloc_type_node
= make_aggr_type (RECORD_TYPE
);
3000 TYPE_CONTEXT (bad_alloc_type_node
) = current_namespace
;
3002 = create_implicit_typedef (bad_alloc_id
, bad_alloc_type_node
);
3003 DECL_CONTEXT (bad_alloc_decl
) = current_namespace
;
3004 TYPE_STUB_DECL (bad_alloc_type_node
) = bad_alloc_decl
;
3008 = build_function_type (ptr_type_node
,
3009 tree_cons (NULL_TREE
,
3012 newtype
= build_exception_variant
3013 (ptr_ftype_sizetype
, add_exception_specifier
3014 (NULL_TREE
, bad_alloc_type_node
, -1));
3015 deltype
= build_exception_variant (void_ftype_ptr
, empty_except_spec
);
3016 push_cp_library_fn (NEW_EXPR
, newtype
);
3017 push_cp_library_fn (VEC_NEW_EXPR
, newtype
);
3018 global_delete_fndecl
= push_cp_library_fn (DELETE_EXPR
, deltype
);
3019 push_cp_library_fn (VEC_DELETE_EXPR
, deltype
);
3023 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype
);
3025 /* Perform other language dependent initializations. */
3026 init_class_processing ();
3027 init_search_processing ();
3028 init_rtti_processing ();
3030 if (flag_exceptions
)
3031 init_exception_processing ();
3033 if (! supports_one_only ())
3036 make_fname_decl
= cp_make_fname_decl
;
3037 start_fname_decls ();
3039 /* Show we use EH for cleanups. */
3040 if (flag_exceptions
)
3041 using_eh_for_cleanups ();
3044 /* Generate an initializer for a function naming variable from
3045 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3046 filled in with the type of the init. */
3049 cp_fname_init (const char* name
, tree
*type_p
)
3051 tree domain
= NULL_TREE
;
3053 tree init
= NULL_TREE
;
3058 length
= strlen (name
);
3059 domain
= build_index_type (size_int (length
));
3060 init
= build_string (length
+ 1, name
);
3063 type
= build_qualified_type (char_type_node
, TYPE_QUAL_CONST
);
3064 type
= build_cplus_array_type (type
, domain
);
3069 TREE_TYPE (init
) = type
;
3071 init
= error_mark_node
;
3076 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3077 decl, NAME is the initialization string and TYPE_DEP indicates whether
3078 NAME depended on the type of the function. We make use of that to detect
3079 __PRETTY_FUNCTION__ inside a template fn. This is being done
3080 lazily at the point of first use, so we mustn't push the decl now. */
3083 cp_make_fname_decl (tree id
, int type_dep
)
3085 const char *const name
= (type_dep
&& processing_template_decl
3086 ? NULL
: fname_as_string (type_dep
));
3088 tree init
= cp_fname_init (name
, &type
);
3089 tree decl
= build_decl (VAR_DECL
, id
, type
);
3091 /* As we're using pushdecl_with_scope, we must set the context. */
3092 DECL_CONTEXT (decl
) = current_function_decl
;
3093 DECL_PRETTY_FUNCTION_P (decl
) = type_dep
;
3095 TREE_STATIC (decl
) = 1;
3096 TREE_READONLY (decl
) = 1;
3097 DECL_ARTIFICIAL (decl
) = 1;
3098 DECL_INITIAL (decl
) = init
;
3100 TREE_USED (decl
) = 1;
3102 if (current_function_decl
)
3104 struct cp_binding_level
*b
= current_binding_level
;
3105 while (b
->level_chain
->kind
!= sk_function_parms
)
3107 pushdecl_with_scope (decl
, b
);
3108 cp_finish_decl (decl
, init
, NULL_TREE
, LOOKUP_ONLYCONVERTING
);
3111 pushdecl_top_level_and_finish (decl
, init
);
3116 /* Make a definition for a builtin function named NAME in the current
3117 namespace, whose data type is TYPE and whose context is CONTEXT.
3118 TYPE should be a function type with argument types.
3120 CLASS and CODE tell later passes how to compile calls to this function.
3121 See tree.h for possible values.
3123 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3124 the name to be called if we can't opencode the function.
3125 If ATTRS is nonzero, use that for the function's attribute
3129 builtin_function_1 (const char* name
,
3133 enum built_in_class
class,
3134 const char* libname
,
3137 tree decl
= build_library_fn_1 (get_identifier (name
), ERROR_MARK
, type
);
3138 DECL_BUILT_IN_CLASS (decl
) = class;
3139 DECL_FUNCTION_CODE (decl
) = code
;
3140 DECL_CONTEXT (decl
) = context
;
3144 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
3145 we cannot change DECL_ASSEMBLER_NAME until we have installed this
3146 function in the namespace. */
3148 SET_DECL_ASSEMBLER_NAME (decl
, get_identifier (libname
));
3149 make_decl_rtl (decl
, NULL
);
3151 /* Warn if a function in the namespace for users
3152 is used without an occasion to consider it declared. */
3153 if (name
[0] != '_' || name
[1] != '_')
3154 DECL_ANTICIPATED (decl
) = 1;
3156 /* Possibly apply some default attributes to this built-in function. */
3158 decl_attributes (&decl
, attrs
, ATTR_FLAG_BUILT_IN
);
3160 decl_attributes (&decl
, NULL_TREE
, 0);
3165 /* Entry point for the benefit of c_common_nodes_and_builtins.
3167 Make a definition for a builtin function named NAME and whose data type
3168 is TYPE. TYPE should be a function type with argument types. This
3169 function places the anticipated declaration in the global namespace
3170 and additionally in the std namespace if appropriate.
3172 CLASS and CODE tell later passes how to compile calls to this function.
3173 See tree.h for possible values.
3175 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3176 the name to be called if we can't opencode the function.
3178 If ATTRS is nonzero, use that for the function's attribute
3182 builtin_function (const char* name
,
3185 enum built_in_class
class,
3186 const char* libname
,
3189 /* All builtins that don't begin with an '_' should additionally
3190 go in the 'std' namespace. */
3193 push_namespace (std_identifier
);
3194 builtin_function_1 (name
, type
, std_node
, code
, class, libname
, attrs
);
3198 return builtin_function_1 (name
, type
, NULL_TREE
, code
,
3199 class, libname
, attrs
);
3202 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3203 function. Not called directly. */
3206 build_library_fn_1 (tree name
, enum tree_code operator_code
, tree type
)
3208 tree fn
= build_lang_decl (FUNCTION_DECL
, name
, type
);
3209 DECL_EXTERNAL (fn
) = 1;
3210 TREE_PUBLIC (fn
) = 1;
3211 DECL_ARTIFICIAL (fn
) = 1;
3212 TREE_NOTHROW (fn
) = 1;
3213 SET_OVERLOADED_OPERATOR_CODE (fn
, operator_code
);
3214 SET_DECL_LANGUAGE (fn
, lang_c
);
3218 /* Returns the _DECL for a library function with C linkage.
3219 We assume that such functions never throw; if this is incorrect,
3220 callers should unset TREE_NOTHROW. */
3223 build_library_fn (tree name
, tree type
)
3225 return build_library_fn_1 (name
, ERROR_MARK
, type
);
3228 /* Returns the _DECL for a library function with C++ linkage. */
3231 build_cp_library_fn (tree name
, enum tree_code operator_code
, tree type
)
3233 tree fn
= build_library_fn_1 (name
, operator_code
, type
);
3234 TREE_NOTHROW (fn
) = TYPE_NOTHROW_P (type
);
3235 DECL_CONTEXT (fn
) = FROB_CONTEXT (current_namespace
);
3236 SET_DECL_LANGUAGE (fn
, lang_cplusplus
);
3237 set_mangled_name_for_decl (fn
);
3241 /* Like build_library_fn, but takes a C string instead of an
3245 build_library_fn_ptr (const char* name
, tree type
)
3247 return build_library_fn (get_identifier (name
), type
);
3250 /* Like build_cp_library_fn, but takes a C string instead of an
3254 build_cp_library_fn_ptr (const char* name
, tree type
)
3256 return build_cp_library_fn (get_identifier (name
), ERROR_MARK
, type
);
3259 /* Like build_library_fn, but also pushes the function so that we will
3260 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
3263 push_library_fn (tree name
, tree type
)
3265 tree fn
= build_library_fn (name
, type
);
3266 pushdecl_top_level (fn
);
3270 /* Like build_cp_library_fn, but also pushes the function so that it
3271 will be found by normal lookup. */
3274 push_cp_library_fn (enum tree_code operator_code
, tree type
)
3276 tree fn
= build_cp_library_fn (ansi_opname (operator_code
),
3283 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3287 push_void_library_fn (tree name
, tree parmtypes
)
3289 tree type
= build_function_type (void_type_node
, parmtypes
);
3290 return push_library_fn (name
, type
);
3293 /* Like push_library_fn, but also note that this function throws
3294 and does not return. Used for __throw_foo and the like. */
3297 push_throw_library_fn (tree name
, tree type
)
3299 tree fn
= push_library_fn (name
, type
);
3300 TREE_THIS_VOLATILE (fn
) = 1;
3301 TREE_NOTHROW (fn
) = 0;
3305 /* When we call finish_struct for an anonymous union, we create
3306 default copy constructors and such. But, an anonymous union
3307 shouldn't have such things; this function undoes the damage to the
3308 anonymous union type T.
3310 (The reason that we create the synthesized methods is that we don't
3311 distinguish `union { int i; }' from `typedef union { int i; } U'.
3312 The first is an anonymous union; the second is just an ordinary
3316 fixup_anonymous_aggr (tree t
)
3320 /* Wipe out memory of synthesized methods. */
3321 TYPE_HAS_CONSTRUCTOR (t
) = 0;
3322 TYPE_HAS_DEFAULT_CONSTRUCTOR (t
) = 0;
3323 TYPE_HAS_INIT_REF (t
) = 0;
3324 TYPE_HAS_CONST_INIT_REF (t
) = 0;
3325 TYPE_HAS_ASSIGN_REF (t
) = 0;
3326 TYPE_HAS_CONST_ASSIGN_REF (t
) = 0;
3328 /* Splice the implicitly generated functions out of the TYPE_METHODS
3330 q
= &TYPE_METHODS (t
);
3333 if (DECL_ARTIFICIAL (*q
))
3334 *q
= TREE_CHAIN (*q
);
3336 q
= &TREE_CHAIN (*q
);
3339 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
3340 if (TYPE_METHODS (t
))
3341 error ("%Jan anonymous union cannot have function members",
3342 TYPE_MAIN_DECL (t
));
3344 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3345 assignment operators (because they cannot have these methods themselves).
3346 For anonymous unions this is already checked because they are not allowed
3347 in any union, otherwise we have to check it. */
3348 if (TREE_CODE (t
) != UNION_TYPE
)
3352 for (field
= TYPE_FIELDS (t
); field
; field
= TREE_CHAIN (field
))
3353 if (TREE_CODE (field
) == FIELD_DECL
)
3355 type
= TREE_TYPE (field
);
3356 if (CLASS_TYPE_P (type
))
3358 if (TYPE_NEEDS_CONSTRUCTING (type
))
3359 cp_error_at ("member %#D' with constructor not allowed in anonymous aggregate",
3361 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
))
3362 cp_error_at ("member %#D' with destructor not allowed in anonymous aggregate",
3364 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type
))
3365 cp_error_at ("member %#D' with copy assignment operator not allowed in anonymous aggregate",
3372 /* Make sure that a declaration with no declarator is well-formed, i.e.
3373 just declares a tagged type or anonymous union.
3375 Returns the type declared; or NULL_TREE if none. */
3378 check_tag_decl (tree declspecs
)
3382 int saw_typedef
= 0;
3383 tree ob_modifier
= NULL_TREE
;
3385 /* If a class, struct, or enum type is declared by the DECLSPECS
3386 (i.e, if a class-specifier, enum-specifier, or non-typename
3387 elaborated-type-specifier appears in the DECLSPECS),
3388 DECLARED_TYPE is set to the corresponding type. */
3389 tree declared_type
= NULL_TREE
;
3390 bool error_p
= false;
3392 for (link
= declspecs
; link
; link
= TREE_CHAIN (link
))
3394 tree value
= TREE_VALUE (link
);
3396 if (TYPE_P (value
) || TREE_CODE (value
) == TYPE_DECL
3397 || (TREE_CODE (value
) == IDENTIFIER_NODE
3398 && is_typename_at_global_scope (value
)))
3402 if (found_type
== 2 && TREE_CODE (value
) == IDENTIFIER_NODE
)
3404 if (! in_system_header
)
3405 pedwarn ("redeclaration of C++ built-in type `%T'", value
);
3410 && ((TREE_CODE (value
) != TYPENAME_TYPE
&& IS_AGGR_TYPE (value
))
3411 || TREE_CODE (value
) == ENUMERAL_TYPE
))
3413 my_friendly_assert (TYPE_MAIN_DECL (value
) != NULL_TREE
, 261);
3414 declared_type
= value
;
3417 else if (value
== ridpointers
[(int) RID_TYPEDEF
])
3419 else if (value
== ridpointers
[(int) RID_FRIEND
])
3421 if (current_class_type
== NULL_TREE
3422 || current_scope () != current_class_type
)
3423 ob_modifier
= value
;
3427 else if (value
== ridpointers
[(int) RID_STATIC
]
3428 || value
== ridpointers
[(int) RID_EXTERN
]
3429 || value
== ridpointers
[(int) RID_AUTO
]
3430 || value
== ridpointers
[(int) RID_REGISTER
]
3431 || value
== ridpointers
[(int) RID_INLINE
]
3432 || value
== ridpointers
[(int) RID_VIRTUAL
]
3433 || value
== ridpointers
[(int) RID_CONST
]
3434 || value
== ridpointers
[(int) RID_VOLATILE
]
3435 || value
== ridpointers
[(int) RID_EXPLICIT
]
3436 || value
== ridpointers
[(int) RID_THREAD
])
3437 ob_modifier
= value
;
3438 else if (value
== error_mark_node
)
3443 error ("multiple types in one declaration");
3445 if (declared_type
== NULL_TREE
&& ! saw_friend
&& !error_p
)
3446 pedwarn ("declaration does not declare anything");
3447 /* Check for an anonymous union. */
3448 else if (declared_type
&& IS_AGGR_TYPE_CODE (TREE_CODE (declared_type
))
3449 && TYPE_ANONYMOUS_P (declared_type
))
3451 /* 7/3 In a simple-declaration, the optional init-declarator-list
3452 can be omitted only when declaring a class (clause 9) or
3453 enumeration (7.2), that is, when the decl-specifier-seq contains
3454 either a class-specifier, an elaborated-type-specifier with
3455 a class-key (9.1), or an enum-specifier. In these cases and
3456 whenever a class-specifier or enum-specifier is present in the
3457 decl-specifier-seq, the identifiers in these specifiers are among
3458 the names being declared by the declaration (as class-name,
3459 enum-names, or enumerators, depending on the syntax). In such
3460 cases, and except for the declaration of an unnamed bit-field (9.6),
3461 the decl-specifier-seq shall introduce one or more names into the
3462 program, or shall redeclare a name introduced by a previous
3463 declaration. [Example:
3464 enum { }; // ill-formed
3465 typedef class { }; // ill-formed
3469 error ("missing type-name in typedef-declaration");
3472 /* Anonymous unions are objects, so they can have specifiers. */;
3473 SET_ANON_AGGR_TYPE_P (declared_type
);
3475 if (TREE_CODE (declared_type
) != UNION_TYPE
&& pedantic
3476 && !in_system_header
)
3477 pedwarn ("ISO C++ prohibits anonymous structs");
3480 else if (ob_modifier
)
3482 if (ob_modifier
== ridpointers
[(int) RID_INLINE
]
3483 || ob_modifier
== ridpointers
[(int) RID_VIRTUAL
])
3484 error ("`%D' can only be specified for functions", ob_modifier
);
3485 else if (ob_modifier
== ridpointers
[(int) RID_FRIEND
])
3486 error ("`%D' can only be specified inside a class", ob_modifier
);
3487 else if (ob_modifier
== ridpointers
[(int) RID_EXPLICIT
])
3488 error ("`%D' can only be specified for constructors",
3491 error ("`%D' can only be specified for objects and functions",
3495 return declared_type
;
3498 /* Called when a declaration is seen that contains no names to declare.
3499 If its type is a reference to a structure, union or enum inherited
3500 from a containing scope, shadow that tag name for the current scope
3501 with a forward reference.
3502 If its type defines a new named structure or union
3503 or defines an enum, it is valid but we need not do anything here.
3504 Otherwise, it is an error.
3506 C++: may have to grok the declspecs to learn about static,
3507 complain for anonymous unions.
3509 Returns the TYPE declared -- or NULL_TREE if none. */
3512 shadow_tag (tree declspecs
)
3514 tree t
= check_tag_decl (declspecs
);
3519 maybe_process_partial_specialization (t
);
3521 /* This is where the variables in an anonymous union are
3522 declared. An anonymous union declaration looks like:
3524 because there is no declarator after the union, the parser
3525 sends that declaration here. */
3526 if (ANON_AGGR_TYPE_P (t
))
3528 fixup_anonymous_aggr (t
);
3530 if (TYPE_FIELDS (t
))
3532 tree decl
= grokdeclarator (NULL_TREE
, declspecs
, NORMAL
, 0,
3534 finish_anon_union (decl
);
3541 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3544 groktypename (tree typename
)
3548 if (TREE_CODE (typename
) != TREE_LIST
)
3550 split_specs_attrs (TREE_PURPOSE (typename
), &specs
, &attrs
);
3551 type
= grokdeclarator (TREE_VALUE (typename
), specs
,
3552 TYPENAME
, 0, &attrs
);
3554 cplus_decl_attributes (&type
, attrs
, 0);
3558 /* Decode a declarator in an ordinary declaration or data definition.
3559 This is called as soon as the type information and variable name
3560 have been parsed, before parsing the initializer if any.
3561 Here we create the ..._DECL node, fill in its type,
3562 and put it on the list of decls for the current context.
3563 The ..._DECL node is returned as the value.
3565 Exception: for arrays where the length is not specified,
3566 the type is left null, to be filled in by `cp_finish_decl'.
3568 Function definitions do not come here; they go to start_function
3569 instead. However, external and forward declarations of functions
3570 do go through here. Structure field declarations are done by
3571 grokfield and not through here. */
3574 start_decl (tree declarator
,
3578 tree prefix_attributes
)
3584 /* This should only be done once on the top most decl. */
3585 if (have_extern_spec
)
3587 declspecs
= tree_cons (NULL_TREE
, get_identifier ("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
,
3602 deprecated_state
= DEPRECATED_NORMAL
;
3604 if (decl
== NULL_TREE
|| TREE_CODE (decl
) == VOID_TYPE
)
3607 type
= TREE_TYPE (decl
);
3609 if (type
== error_mark_node
)
3612 context
= DECL_CONTEXT (decl
);
3614 if (initialized
&& context
&& TREE_CODE (context
) == NAMESPACE_DECL
3615 && context
!= current_namespace
&& TREE_CODE (decl
) == VAR_DECL
)
3617 /* When parsing the initializer, lookup should use the object's
3619 push_decl_namespace (context
);
3622 /* We are only interested in class contexts, later. */
3623 if (context
&& TREE_CODE (context
) == NAMESPACE_DECL
)
3624 context
= NULL_TREE
;
3627 /* Is it valid for this decl to have an initializer at all?
3628 If not, set INITIALIZED to zero, which will indirectly
3629 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3630 switch (TREE_CODE (decl
))
3633 error ("typedef `%D' is initialized (use __typeof__ instead)", decl
);
3638 error ("function `%#D' is initialized like a variable", decl
);
3648 if (! toplevel_bindings_p ()
3649 && DECL_EXTERNAL (decl
))
3650 warning ("declaration of `%#D' has `extern' and is initialized",
3652 DECL_EXTERNAL (decl
) = 0;
3653 if (toplevel_bindings_p ())
3654 TREE_STATIC (decl
) = 1;
3656 /* Tell `pushdecl' this is an initialized decl
3657 even though we don't yet have the initializer expression.
3658 Also tell `cp_finish_decl' it may store the real initializer. */
3659 DECL_INITIAL (decl
) = error_mark_node
;
3662 /* Set attributes here so if duplicate decl, will have proper attributes. */
3663 cplus_decl_attributes (&decl
, attributes
, 0);
3665 /* If #pragma weak was used, mark the decl weak now. */
3666 if (global_scope_p (current_binding_level
))
3667 maybe_apply_pragma_weak (decl
);
3669 if (TREE_CODE (decl
) == FUNCTION_DECL
3670 && DECL_DECLARED_INLINE_P (decl
)
3671 && DECL_UNINLINABLE (decl
)
3672 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl
)))
3673 warning ("%Jinline function '%D' given attribute noinline", decl
, decl
);
3675 if (context
&& COMPLETE_TYPE_P (complete_type (context
)))
3677 push_nested_class (context
);
3679 if (TREE_CODE (decl
) == VAR_DECL
)
3681 tree field
= lookup_field (context
, DECL_NAME (decl
), 0, false);
3682 if (field
== NULL_TREE
|| TREE_CODE (field
) != VAR_DECL
)
3683 error ("`%#D' is not a static member of `%#T'", decl
, context
);
3686 if (DECL_CONTEXT (field
) != context
)
3688 if (!same_type_p (DECL_CONTEXT (field
), context
))
3689 pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
3690 DECL_CONTEXT (field
), DECL_NAME (decl
),
3691 context
, DECL_NAME (decl
));
3692 DECL_CONTEXT (decl
) = DECL_CONTEXT (field
);
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 %D", decl
);
3701 if (duplicate_decls (decl
, field
))
3707 tree field
= check_classfn (context
, decl
,
3708 (processing_template_decl
3709 > template_class_depth (context
))
3710 ? current_template_parms
3712 if (field
&& duplicate_decls (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 SET_DECL_TEMPLATE_SPECIALIZATION (decl
);
3722 /* [temp.expl.spec] An explicit specialization of a static data
3723 member of a template is a definition if the declaration
3724 includes an initializer; otherwise, it is a declaration.
3726 We check for processing_specialization so this only applies
3727 to the new specialization syntax. */
3728 if (DECL_INITIAL (decl
) == NULL_TREE
&& processing_specialization
)
3729 DECL_EXTERNAL (decl
) = 1;
3732 if (DECL_EXTERNAL (decl
) && ! DECL_TEMPLATE_SPECIALIZATION (decl
))
3733 pedwarn ("declaration of `%#D' outside of class is not definition",
3737 /* Enter this declaration into the symbol table. */
3738 tem
= maybe_push_decl (decl
);
3740 if (processing_template_decl
)
3741 tem
= push_template_decl (tem
);
3742 if (tem
== error_mark_node
)
3743 return error_mark_node
;
3745 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
3746 /* Tell the back-end to use or not use .common as appropriate. If we say
3747 -fconserve-space, we want this to save .data space, at the expense of
3748 wrong semantics. If we say -fno-conserve-space, we want this to
3749 produce errors about redefs; to do this we force variables into the
3751 DECL_COMMON (tem
) = ((TREE_CODE (tem
) != VAR_DECL
3752 || !DECL_THREAD_LOCAL (tem
))
3753 && (flag_conserve_space
|| ! TREE_PUBLIC (tem
)));
3756 if (! processing_template_decl
)
3763 start_decl_1 (tree decl
)
3765 tree type
= TREE_TYPE (decl
);
3766 int initialized
= (DECL_INITIAL (decl
) != NULL_TREE
);
3768 if (type
== error_mark_node
)
3772 /* Is it valid for this decl to have an initializer at all?
3773 If not, set INITIALIZED to zero, which will indirectly
3774 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3776 /* Don't allow initializations for incomplete types except for
3777 arrays which might be completed by the initialization. */
3778 if (COMPLETE_TYPE_P (complete_type (type
)))
3779 ; /* A complete type is ok. */
3780 else if (TREE_CODE (type
) != ARRAY_TYPE
)
3782 error ("variable `%#D' has initializer but incomplete type",
3785 type
= TREE_TYPE (decl
) = error_mark_node
;
3787 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type
))))
3789 if (DECL_LANG_SPECIFIC (decl
) && DECL_TEMPLATE_INFO (decl
))
3790 error ("elements of array `%#D' have incomplete type", decl
);
3791 /* else we already gave an error in start_decl. */
3797 && TREE_CODE (decl
) != TYPE_DECL
3798 && TREE_CODE (decl
) != TEMPLATE_DECL
3799 && type
!= error_mark_node
3800 && IS_AGGR_TYPE (type
)
3801 && ! DECL_EXTERNAL (decl
))
3803 if ((! processing_template_decl
|| ! uses_template_parms (type
))
3804 && !COMPLETE_TYPE_P (complete_type (type
)))
3806 error ("aggregate `%#D' has incomplete type and cannot be defined",
3808 /* Change the type so that assemble_variable will give
3809 DECL an rtl we can live with: (mem (const_int 0)). */
3810 type
= TREE_TYPE (decl
) = error_mark_node
;
3814 /* If any base type in the hierarchy of TYPE needs a constructor,
3815 then we set initialized to 1. This way any nodes which are
3816 created for the purposes of initializing this aggregate
3817 will live as long as it does. This is necessary for global
3818 aggregates which do not have their initializers processed until
3819 the end of the file. */
3820 initialized
= TYPE_NEEDS_CONSTRUCTING (type
);
3825 DECL_INITIAL (decl
) = NULL_TREE
;
3827 /* Create a new scope to hold this declaration if necessary.
3828 Whether or not a new scope is necessary cannot be determined
3829 until after the type has been completed; if the type is a
3830 specialization of a class template it is not until after
3831 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
3832 will be set correctly. */
3833 maybe_push_cleanup_level (type
);
3836 /* Handle initialization of references. DECL, TYPE, and INIT have the
3837 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
3838 but will be set to a new CLEANUP_STMT if a temporary is created
3839 that must be destroyed subsequently.
3841 Returns an initializer expression to use to initialize DECL, or
3842 NULL if the initialization can be performed statically.
3844 Quotes on semantics can be found in ARM 8.4.3. */
3847 grok_reference_init (tree decl
, tree type
, tree init
, tree
*cleanup
)
3851 if (init
== NULL_TREE
)
3853 if ((DECL_LANG_SPECIFIC (decl
) == 0
3854 || DECL_IN_AGGR_P (decl
) == 0)
3855 && ! DECL_THIS_EXTERN (decl
))
3856 error ("`%D' declared as reference but not initialized", decl
);
3860 if (TREE_CODE (init
) == CONSTRUCTOR
)
3862 error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl
);
3866 if (TREE_CODE (init
) == TREE_LIST
)
3867 init
= build_x_compound_expr_from_list (init
, "initializer");
3869 if (TREE_CODE (TREE_TYPE (init
)) == REFERENCE_TYPE
)
3870 init
= convert_from_reference (init
);
3872 if (TREE_CODE (TREE_TYPE (type
)) != ARRAY_TYPE
3873 && TREE_CODE (TREE_TYPE (init
)) == ARRAY_TYPE
)
3874 /* Note: default conversion is only called in very special cases. */
3875 init
= decay_conversion (init
);
3877 /* Convert INIT to the reference type TYPE. This may involve the
3878 creation of a temporary, whose lifetime must be the same as that
3879 of the reference. If so, a DECL_STMT for the temporary will be
3880 added just after the DECL_STMT for DECL. That's why we don't set
3881 DECL_INITIAL for local references (instead assigning to them
3882 explicitly); we need to allow the temporary to be initialized
3884 tmp
= initialize_reference (type
, init
, decl
, cleanup
);
3886 if (tmp
== error_mark_node
)
3888 else if (tmp
== NULL_TREE
)
3890 error ("cannot initialize `%T' from `%T'", type
, TREE_TYPE (init
));
3894 if (TREE_STATIC (decl
) && !TREE_CONSTANT (tmp
))
3897 DECL_INITIAL (decl
) = tmp
;
3902 /* When parsing `int a[] = {1, 2};' we don't know the size of the
3903 array until we finish parsing the initializer. If that's the
3904 situation we're in, update DECL accordingly. */
3907 maybe_deduce_size_from_array_init (tree decl
, tree init
)
3909 tree type
= TREE_TYPE (decl
);
3911 if (TREE_CODE (type
) == ARRAY_TYPE
3912 && TYPE_DOMAIN (type
) == NULL_TREE
3913 && TREE_CODE (decl
) != TYPE_DECL
)
3915 /* do_default is really a C-ism to deal with tentative definitions.
3916 But let's leave it here to ease the eventual merge. */
3917 int do_default
= !DECL_EXTERNAL (decl
);
3918 tree initializer
= init
? init
: DECL_INITIAL (decl
);
3919 int failure
= complete_array_type (type
, initializer
, do_default
);
3922 error ("initializer fails to determine size of `%D'", decl
);
3927 error ("array size missing in `%D'", decl
);
3928 /* If a `static' var's size isn't known, make it extern as
3929 well as static, so it does not get allocated. If it's not
3930 `static', then don't mark it extern; finish_incomplete_decl
3931 will give it a default size and it will get allocated. */
3932 else if (!pedantic
&& TREE_STATIC (decl
) && !TREE_PUBLIC (decl
))
3933 DECL_EXTERNAL (decl
) = 1;
3936 if (pedantic
&& TYPE_DOMAIN (type
) != NULL_TREE
3937 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type
)),
3939 error ("zero-size array `%D'", decl
);
3941 layout_decl (decl
, 0);
3945 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
3946 any appropriate error messages regarding the layout. */
3949 layout_var_decl (tree decl
)
3951 tree type
= TREE_TYPE (decl
);
3953 tree ttype
= target_type (type
);
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 `%D' isn't known", decl
);
3977 TREE_TYPE (decl
) = error_mark_node
;
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
));
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
));
3998 error ("storage size of `%D' 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. */
4013 maybe_commonize_var (tree decl
)
4015 /* Static data in a function with comdat linkage also has comdat
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
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
)))))
4031 /* With weak symbols, we simply make the variable COMDAT;
4032 that will cause copies in multiple translations units to
4034 comdat_linkage (decl
);
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;
4048 /* While for initialized variables, we must use internal
4049 linkage -- which means that multiple copies will not
4051 TREE_PUBLIC (decl
) = 0;
4052 DECL_COMMON (decl
) = 0;
4053 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl
);
4054 warning ("%J you can work around this by removing the initializer",
4059 else if (DECL_LANG_SPECIFIC (decl
) && DECL_COMDAT (decl
))
4060 /* Set it up again; we might have set DECL_INITIAL since the last
4062 comdat_linkage (decl
);
4065 /* Issue an error message if DECL is an uninitialized const variable. */
4068 check_for_uninitialized_const_var (tree decl
)
4070 tree type
= TREE_TYPE (decl
);
4072 /* ``Unless explicitly declared extern, a const object does not have
4073 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4075 if (TREE_CODE (decl
) == VAR_DECL
4076 && TREE_CODE (type
) != REFERENCE_TYPE
4077 && CP_TYPE_CONST_P (type
)
4078 && !TYPE_NEEDS_CONSTRUCTING (type
)
4079 && !DECL_INITIAL (decl
))
4080 error ("uninitialized const `%D'", decl
);
4083 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4084 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4085 initialized. If there are no more such fields, the return value
4089 next_initializable_field (tree field
)
4092 && (TREE_CODE (field
) != FIELD_DECL
4093 || (DECL_C_BIT_FIELD (field
) && !DECL_NAME (field
))
4094 || DECL_ARTIFICIAL (field
)))
4095 field
= TREE_CHAIN (field
);
4100 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
4101 brace-enclosed aggregate initializer.
4103 *INITP is one of a list of initializers describing a brace-enclosed
4104 initializer for an entity of the indicated aggregate TYPE. It may
4105 not presently match the shape of the TYPE; for example:
4107 struct S { int a; int b; };
4108 struct S a[] = { 1, 2, 3, 4 };
4110 Here *INITP will point to TREE_LIST of four elements, rather than a
4111 list of two elements, each itself a list of two elements. This
4112 routine transforms INIT from the former form into the latter. The
4113 revised initializer is returned. */
4116 reshape_init (tree type
, tree
*initp
)
4120 tree old_init_value
;
4122 bool brace_enclosed_p
;
4125 old_init_value
= (TREE_CODE (*initp
) == TREE_LIST
4126 ? TREE_VALUE (*initp
) : old_init
);
4128 my_friendly_assert (old_init_value
, 20030723);
4130 /* If the initializer is brace-enclosed, pull initializers from the
4131 enclosed elements. Advance past the brace-enclosed initializer
4133 if (TREE_CODE (old_init_value
) == CONSTRUCTOR
4134 && BRACE_ENCLOSED_INITIALIZER_P (old_init_value
))
4136 *initp
= TREE_CHAIN (old_init
);
4137 TREE_CHAIN (old_init
) = NULL_TREE
;
4138 inits
= CONSTRUCTOR_ELTS (old_init_value
);
4140 brace_enclosed_p
= true;
4145 brace_enclosed_p
= false;
4148 /* A non-aggregate type is always initialized with a single
4150 if (!CP_AGGREGATE_TYPE_P (type
))
4152 *initp
= TREE_CHAIN (old_init
);
4153 TREE_CHAIN (old_init
) = NULL_TREE
;
4154 /* It is invalid to initialize a non-aggregate type with a
4155 brace-enclosed initializer. */
4156 if (brace_enclosed_p
)
4158 error ("brace-enclosed initializer used to initialize `%T'",
4160 if (TREE_CODE (old_init
) == TREE_LIST
)
4161 TREE_VALUE (old_init
) = error_mark_node
;
4163 old_init
= error_mark_node
;
4171 All implicit type conversions (clause _conv_) are considered when
4172 initializing the aggregate member with an initializer from an
4173 initializer-list. If the initializer can initialize a member,
4174 the member is initialized. Otherwise, if the member is itself a
4175 non-empty subaggregate, brace elision is assumed and the
4176 initializer is considered for the initialization of the first
4177 member of the subaggregate. */
4178 if (!brace_enclosed_p
4179 && can_convert_arg (type
, TREE_TYPE (old_init_value
), old_init_value
))
4181 *initp
= TREE_CHAIN (old_init
);
4182 TREE_CHAIN (old_init
) = NULL_TREE
;
4186 if (TREE_CODE (old_init_value
) == STRING_CST
4187 && TREE_CODE (type
) == ARRAY_TYPE
4188 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type
))))
4190 /* [dcl.init.string]
4192 A char array (whether plain char, signed char, or unsigned char)
4193 can be initialized by a string-literal (optionally enclosed in
4194 braces); a wchar_t array can be initialized by a wide
4195 string-literal (optionally enclosed in braces). */
4196 new_init
= old_init
;
4197 /* Move past the initializer. */
4198 *initp
= TREE_CHAIN (old_init
);
4199 TREE_CHAIN (old_init
) = NULL_TREE
;
4203 /* Build a CONSTRUCTOR to hold the contents of the aggregate. */
4204 new_init
= build_constructor (NULL_TREE
, NULL_TREE
);
4206 if (CLASS_TYPE_P (type
))
4210 field
= next_initializable_field (TYPE_FIELDS (type
));
4216 An initializer for an aggregate member that is an
4217 empty class shall have the form of an empty
4218 initializer-list {}. */
4219 if (!brace_enclosed_p
)
4221 error ("initializer for `%T' must be brace-enclosed",
4223 return error_mark_node
;
4228 /* Loop through the initializable fields, gathering
4234 /* Handle designated initializers, as an extension. */
4235 if (TREE_PURPOSE (*initp
))
4238 pedwarn ("ISO C++ does not allow designated initializers");
4239 field
= lookup_field_1 (type
, TREE_PURPOSE (*initp
),
4240 /*want_type=*/false);
4241 if (!field
|| TREE_CODE (field
) != FIELD_DECL
)
4242 error ("`%T' has no non-static data member named `%D'",
4243 type
, TREE_PURPOSE (*initp
));
4248 field_init
= reshape_init (TREE_TYPE (field
), initp
);
4249 if (field_init
== error_mark_node
)
4250 return error_mark_node
;
4251 TREE_CHAIN (field_init
) = CONSTRUCTOR_ELTS (new_init
);
4252 CONSTRUCTOR_ELTS (new_init
) = field_init
;
4255 When a union is initialized with a brace-enclosed
4256 initializer, the braces shall only contain an
4257 initializer for the first member of the union. */
4258 if (TREE_CODE (type
) == UNION_TYPE
)
4260 field
= next_initializable_field (TREE_CHAIN (field
));
4264 else if (TREE_CODE (type
) == ARRAY_TYPE
4265 || TREE_CODE (type
) == VECTOR_TYPE
)
4270 /* If the bound of the array is known, take no more initializers
4271 than are allowed. */
4272 max_index
= NULL_TREE
;
4273 if (TREE_CODE (type
) == ARRAY_TYPE
)
4275 if (TYPE_DOMAIN (type
))
4276 max_index
= array_type_nelts (type
);
4280 /* For a vector, the representation type is a struct
4281 containing a single member which is an array of the
4282 appropriate size. */
4283 tree rtype
= TYPE_DEBUG_REPRESENTATION_TYPE (type
);
4284 if (rtype
&& TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype
))))
4285 max_index
= array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype
)));
4288 /* Loop through the array elements, gathering initializers. */
4289 for (index
= size_zero_node
;
4290 *initp
&& (!max_index
|| !tree_int_cst_lt (max_index
, index
));
4291 index
= size_binop (PLUS_EXPR
, index
, size_one_node
))
4295 element_init
= reshape_init (TREE_TYPE (type
), initp
);
4296 if (element_init
== error_mark_node
)
4297 return error_mark_node
;
4298 TREE_CHAIN (element_init
) = CONSTRUCTOR_ELTS (new_init
);
4299 CONSTRUCTOR_ELTS (new_init
) = element_init
;
4300 if (TREE_PURPOSE (element_init
))
4302 tree next_index
= TREE_PURPOSE (element_init
);
4303 if (TREE_CODE (next_index
) == IDENTIFIER_NODE
)
4305 error ("name `%D' used in a GNU-style designated "
4306 "initializer for an array", next_index
);
4307 TREE_PURPOSE (element_init
) = NULL_TREE
;
4317 /* The initializers were placed in reverse order in the
4319 CONSTRUCTOR_ELTS (new_init
) = nreverse (CONSTRUCTOR_ELTS (new_init
));
4321 if (TREE_CODE (old_init
) == TREE_LIST
)
4322 new_init
= build_tree_list (TREE_PURPOSE (old_init
), new_init
);
4325 /* If this was a brace-enclosed initializer and all of the
4326 initializers were not used up, there is a problem. */
4327 if (brace_enclosed_p
&& *initp
)
4328 error ("too many initializers for `%T'", type
);
4333 /* Verify INIT (the initializer for DECL), and record the
4334 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
4335 grok_reference_init.
4337 If the return value is non-NULL, it is an expression that must be
4338 evaluated dynamically to initialize DECL. */
4341 check_initializer (tree decl
, tree init
, int flags
, tree
*cleanup
)
4343 tree type
= TREE_TYPE (decl
);
4344 tree init_code
= NULL
;
4346 /* If `start_decl' didn't like having an initialization, ignore it now. */
4347 if (init
!= NULL_TREE
&& DECL_INITIAL (decl
) == NULL_TREE
)
4350 /* If an initializer is present, DECL_INITIAL has been
4351 error_mark_node, to indicate that an as-of-yet unevaluated
4352 initialization will occur. From now on, DECL_INITIAL reflects
4353 the static initialization -- if any -- of DECL. */
4354 DECL_INITIAL (decl
) = NULL_TREE
;
4356 /* Things that are going to be initialized need to have complete
4358 TREE_TYPE (decl
) = type
= complete_type (TREE_TYPE (decl
));
4360 if (type
== error_mark_node
)
4361 /* We will have already complained. */
4363 else if (init
&& COMPLETE_TYPE_P (type
)
4364 && !TREE_CONSTANT (TYPE_SIZE (type
)))
4366 error ("variable-sized object `%D' may not be initialized", decl
);
4369 else if (TREE_CODE (type
) == ARRAY_TYPE
4370 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (type
))))
4372 error ("elements of array `%#D' have incomplete type", decl
);
4375 else if (TREE_CODE (type
) != ARRAY_TYPE
&& !COMPLETE_TYPE_P (type
))
4377 error ("`%D' has incomplete type", decl
);
4378 TREE_TYPE (decl
) = error_mark_node
;
4382 if (TREE_CODE (decl
) == CONST_DECL
)
4384 my_friendly_assert (TREE_CODE (decl
) != REFERENCE_TYPE
, 148);
4386 DECL_INITIAL (decl
) = init
;
4388 my_friendly_assert (init
!= NULL_TREE
, 149);
4391 else if (!DECL_EXTERNAL (decl
) && TREE_CODE (type
) == REFERENCE_TYPE
)
4392 init
= grok_reference_init (decl
, type
, init
, cleanup
);
4395 if (TREE_CODE (init
) == CONSTRUCTOR
4396 && BRACE_ENCLOSED_INITIALIZER_P (init
))
4398 /* [dcl.init] paragraph 13,
4399 If T is a scalar type, then a declaration of the form
4404 reshape_init will complain about the extra braces,
4405 and doesn't do anything useful in the case where TYPE is
4406 scalar, so just don't call it. */
4407 if (CP_AGGREGATE_TYPE_P (type
))
4408 init
= reshape_init (type
, &init
);
4410 if ((*targetm
.vector_opaque_p
) (type
))
4412 error ("opaque vector types cannot be initialized");
4413 init
= error_mark_node
;
4417 /* If DECL has an array type without a specific bound, deduce the
4418 array size from the initializer. */
4419 maybe_deduce_size_from_array_init (decl
, init
);
4420 type
= TREE_TYPE (decl
);
4422 if (TYPE_HAS_CONSTRUCTOR (type
) || TYPE_NEEDS_CONSTRUCTING (type
))
4424 if (TREE_CODE (type
) == ARRAY_TYPE
)
4425 goto initialize_aggr
;
4426 else if (TREE_CODE (init
) == CONSTRUCTOR
4427 && BRACE_ENCLOSED_INITIALIZER_P (init
))
4429 if (TYPE_NON_AGGREGATE_CLASS (type
))
4431 error ("`%D' must be initialized by constructor, not by `{...}'",
4433 init
= error_mark_node
;
4436 goto dont_use_constructor
;
4440 int saved_stmts_are_full_exprs_p
;
4443 saved_stmts_are_full_exprs_p
= 0;
4444 if (building_stmt_tree ())
4446 saved_stmts_are_full_exprs_p
= stmts_are_full_exprs_p ();
4447 current_stmt_tree ()->stmts_are_full_exprs_p
= 1;
4449 init
= build_aggr_init (decl
, init
, flags
);
4450 if (building_stmt_tree ())
4451 current_stmt_tree ()->stmts_are_full_exprs_p
=
4452 saved_stmts_are_full_exprs_p
;
4458 dont_use_constructor
:
4459 if (TREE_CODE (init
) != TREE_VEC
)
4461 init_code
= store_init_value (decl
, init
);
4466 else if (DECL_EXTERNAL (decl
))
4468 else if (TYPE_P (type
) && TYPE_NEEDS_CONSTRUCTING (type
))
4469 goto initialize_aggr
;
4470 else if (IS_AGGR_TYPE (type
))
4472 tree core_type
= strip_array_types (type
);
4474 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type
))
4475 error ("structure `%D' with uninitialized const members", decl
);
4476 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type
))
4477 error ("structure `%D' with uninitialized reference members",
4480 check_for_uninitialized_const_var (decl
);
4483 check_for_uninitialized_const_var (decl
);
4485 if (init
&& init
!= error_mark_node
)
4486 init_code
= build (INIT_EXPR
, type
, decl
, init
);
4491 /* If DECL is not a local variable, give it RTL. */
4494 make_rtl_for_nonlocal_decl (tree decl
, tree init
, const char* asmspec
)
4496 int toplev
= toplevel_bindings_p ();
4499 /* Handle non-variables up front. */
4500 if (TREE_CODE (decl
) != VAR_DECL
)
4502 rest_of_decl_compilation (decl
, asmspec
, toplev
, at_eof
);
4506 /* If we see a class member here, it should be a static data
4508 if (DECL_LANG_SPECIFIC (decl
) && DECL_IN_AGGR_P (decl
))
4510 my_friendly_assert (TREE_STATIC (decl
), 19990828);
4511 /* An in-class declaration of a static data member should be
4512 external; it is only a declaration, and not a definition. */
4513 if (init
== NULL_TREE
)
4514 my_friendly_assert (DECL_EXTERNAL (decl
), 20000723);
4517 /* Set the DECL_ASSEMBLER_NAME for the variable. */
4520 change_decl_assembler_name (decl
, get_identifier (asmspec
));
4521 /* The `register' keyword, when used together with an
4522 asm-specification, indicates that the variable should be
4523 placed in a particular register. */
4524 if (DECL_REGISTER (decl
))
4525 DECL_HARD_REGISTER (decl
) = 1;
4528 /* We don't create any RTL for local variables. */
4529 if (DECL_FUNCTION_SCOPE_P (decl
) && !TREE_STATIC (decl
))
4532 /* We defer emission of local statics until the corresponding
4533 DECL_STMT is expanded. */
4534 defer_p
= DECL_FUNCTION_SCOPE_P (decl
) || DECL_VIRTUAL_P (decl
);
4536 /* We try to defer namespace-scope static constants so that they are
4537 not emitted into the object file unnecessarily. */
4538 if (!DECL_VIRTUAL_P (decl
)
4539 && TREE_READONLY (decl
)
4540 && DECL_INITIAL (decl
) != NULL_TREE
4541 && DECL_INITIAL (decl
) != error_mark_node
4542 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl
))
4544 && !TREE_PUBLIC (decl
))
4546 /* Fool with the linkage of static consts according to #pragma
4548 if (!interface_unknown
&& !TREE_PUBLIC (decl
))
4550 TREE_PUBLIC (decl
) = 1;
4551 DECL_EXTERNAL (decl
) = interface_only
;
4556 /* Likewise for template instantiations. */
4557 else if (DECL_COMDAT (decl
))
4560 /* If we're deferring the variable, we only need to make RTL if
4561 there's an ASMSPEC. Otherwise, we'll lazily create it later when
4562 we need it. (There's no way to lazily create RTL for things that
4563 have assembly specs because the information about the specifier
4564 isn't stored in the tree, yet) */
4565 if (defer_p
&& asmspec
)
4566 make_decl_rtl (decl
, asmspec
);
4567 /* If we're not deferring, go ahead and assemble the variable. */
4569 rest_of_decl_compilation (decl
, asmspec
, toplev
, at_eof
);
4572 /* Generate code to initialize DECL (a local variable). */
4575 initialize_local_var (tree decl
, tree init
)
4577 tree type
= TREE_TYPE (decl
);
4580 my_friendly_assert (TREE_CODE (decl
) == VAR_DECL
4581 || TREE_CODE (decl
) == RESULT_DECL
,
4583 my_friendly_assert (!TREE_STATIC (decl
), 20021010);
4585 if (DECL_SIZE (decl
) == NULL_TREE
)
4587 /* If we used it already as memory, it must stay in memory. */
4588 DECL_INITIAL (decl
) = NULL_TREE
;
4589 TREE_ADDRESSABLE (decl
) = TREE_USED (decl
);
4592 if (DECL_SIZE (decl
) && type
!= error_mark_node
)
4596 /* Compute and store the initial value. */
4597 already_used
= TREE_USED (decl
) || TREE_USED (type
);
4599 /* Perform the initialization. */
4602 int saved_stmts_are_full_exprs_p
;
4604 my_friendly_assert (building_stmt_tree (), 20000906);
4605 saved_stmts_are_full_exprs_p
= stmts_are_full_exprs_p ();
4606 current_stmt_tree ()->stmts_are_full_exprs_p
= 1;
4607 finish_expr_stmt (init
);
4608 current_stmt_tree ()->stmts_are_full_exprs_p
=
4609 saved_stmts_are_full_exprs_p
;
4612 /* Set this to 0 so we can tell whether an aggregate which was
4613 initialized was ever used. Don't do this if it has a
4614 destructor, so we don't complain about the 'resource
4615 allocation is initialization' idiom. Now set
4616 attribute((unused)) on types so decls of that type will be
4617 marked used. (see TREE_USED, above.) */
4618 if (TYPE_NEEDS_CONSTRUCTING (type
)
4620 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type
)
4621 && DECL_NAME (decl
))
4622 TREE_USED (decl
) = 0;
4623 else if (already_used
)
4624 TREE_USED (decl
) = 1;
4627 /* Generate a cleanup, if necessary. */
4628 cleanup
= cxx_maybe_build_cleanup (decl
);
4629 if (DECL_SIZE (decl
) && cleanup
)
4630 finish_decl_cleanup (decl
, cleanup
);
4633 /* Finish processing of a declaration;
4634 install its line number and initial value.
4635 If the length of an array type is not known before,
4636 it must be determined now, from the initial value, or it is an error.
4638 INIT holds the value of an initializer that should be allowed to escape
4641 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
4642 if the (init) syntax was used. */
4645 cp_finish_decl (tree decl
, tree init
, tree asmspec_tree
, int flags
)
4648 tree ttype
= NULL_TREE
;
4650 const char *asmspec
= NULL
;
4651 int was_readonly
= 0;
4653 if (decl
== error_mark_node
)
4658 error ("assignment (not initialization) in declaration");
4662 my_friendly_assert (TREE_CODE (decl
) != RESULT_DECL
, 20030619);
4664 /* Assume no cleanup is required. */
4665 cleanup
= NULL_TREE
;
4667 /* If a name was specified, get the string. */
4668 if (global_scope_p (current_binding_level
))
4669 asmspec_tree
= maybe_apply_renaming_pragma (decl
, asmspec_tree
);
4671 asmspec
= TREE_STRING_POINTER (asmspec_tree
);
4673 if (init
&& TREE_CODE (init
) == NAMESPACE_DECL
)
4675 error ("cannot initialize `%D' to namespace `%D'",
4680 if (current_class_type
4681 && CP_DECL_CONTEXT (decl
) == current_class_type
4682 && TYPE_BEING_DEFINED (current_class_type
)
4683 && (DECL_INITIAL (decl
) || init
))
4684 DECL_INITIALIZED_IN_CLASS_P (decl
) = 1;
4686 if (TREE_CODE (decl
) == VAR_DECL
4687 && DECL_CONTEXT (decl
)
4688 && TREE_CODE (DECL_CONTEXT (decl
)) == NAMESPACE_DECL
4689 && DECL_CONTEXT (decl
) != current_namespace
4692 /* Leave the namespace of the object. */
4693 pop_decl_namespace ();
4696 type
= TREE_TYPE (decl
);
4698 if (type
== error_mark_node
)
4701 if (TYPE_HAS_MUTABLE_P (type
))
4702 TREE_READONLY (decl
) = 0;
4704 if (processing_template_decl
)
4706 /* Add this declaration to the statement-tree. */
4707 if (at_function_scope_p ())
4708 add_decl_stmt (decl
);
4710 if (init
&& DECL_INITIAL (decl
))
4711 DECL_INITIAL (decl
) = init
;
4712 if (TREE_CODE (decl
) == VAR_DECL
4713 && !DECL_PRETTY_FUNCTION_P (decl
)
4714 && !dependent_type_p (TREE_TYPE (decl
)))
4715 maybe_deduce_size_from_array_init (decl
, init
);
4719 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
4720 my_friendly_assert (TREE_CODE (decl
) != PARM_DECL
, 19990828);
4722 /* Take care of TYPE_DECLs up front. */
4723 if (TREE_CODE (decl
) == TYPE_DECL
)
4725 if (type
!= error_mark_node
4726 && IS_AGGR_TYPE (type
) && DECL_NAME (decl
))
4728 if (TREE_TYPE (DECL_NAME (decl
)) && TREE_TYPE (decl
) != type
)
4729 warning ("shadowing previous type declaration of `%#D'", decl
);
4730 set_identifier_type_value (DECL_NAME (decl
), decl
);
4733 /* If we have installed this as the canonical typedef for this
4734 type, and that type has not been defined yet, delay emitting
4735 the debug information for it, as we will emit it later. */
4736 if (TYPE_MAIN_DECL (TREE_TYPE (decl
)) == decl
4737 && !COMPLETE_TYPE_P (TREE_TYPE (decl
)))
4738 TYPE_DECL_SUPPRESS_DEBUG (decl
) = 1;
4740 rest_of_decl_compilation (decl
, NULL
,
4741 DECL_CONTEXT (decl
) == NULL_TREE
, at_eof
);
4745 if (TREE_CODE (decl
) != FUNCTION_DECL
)
4746 ttype
= target_type (type
);
4749 /* Currently, GNU C++ puts constants in text space, making them
4750 impossible to initialize. In the future, one would hope for
4751 an operating system which understood the difference between
4752 initialization and the running of a program. */
4753 if (! DECL_EXTERNAL (decl
) && TREE_READONLY (decl
))
4756 if (TYPE_NEEDS_CONSTRUCTING (type
)
4757 || TREE_CODE (type
) == REFERENCE_TYPE
)
4758 TREE_READONLY (decl
) = 0;
4761 if (TREE_CODE (decl
) == VAR_DECL
)
4763 /* Only PODs can have thread-local storage. Other types may require
4764 various kinds of non-trivial initialization. */
4765 if (DECL_THREAD_LOCAL (decl
) && !pod_type_p (TREE_TYPE (decl
)))
4766 error ("`%D' cannot be thread-local because it has non-POD type `%T'",
4767 decl
, TREE_TYPE (decl
));
4768 /* Convert the initializer to the type of DECL, if we have not
4769 already initialized DECL. */
4770 if (!DECL_INITIALIZED_P (decl
)
4771 /* If !DECL_EXTERNAL then DECL is being defined. In the
4772 case of a static data member initialized inside the
4773 class-specifier, there can be an initializer even if DECL
4774 is *not* defined. */
4775 && (!DECL_EXTERNAL (decl
) || init
))
4777 init
= check_initializer (decl
, init
, flags
, &cleanup
);
4778 /* Thread-local storage cannot be dynamically initialized. */
4779 if (DECL_THREAD_LOCAL (decl
) && init
)
4781 error ("`%D' is thread-local and so cannot be dynamically "
4782 "initialized", decl
);
4789 The memory occupied by any object of static storage
4790 duration is zero-initialized at program startup before
4791 any other initialization takes place.
4793 We cannot create an appropriate initializer until after
4794 the type of DECL is finalized. If DECL_INITIAL is set,
4795 then the DECL is statically initialized, and any
4796 necessary zero-initialization has already been performed. */
4797 if (TREE_STATIC (decl
) && !DECL_INITIAL (decl
))
4798 DECL_INITIAL (decl
) = build_zero_init (TREE_TYPE (decl
),
4799 /*nelts=*/NULL_TREE
,
4800 /*static_storage_p=*/true);
4801 /* Remember that the initialization for this variable has
4803 DECL_INITIALIZED_P (decl
) = 1;
4805 /* If the variable has an array type, lay out the type, even if
4806 there is no initializer. It is valid to index through the
4807 array, and we must get TYPE_ALIGN set correctly on the array
4809 else if (TREE_CODE (type
) == ARRAY_TYPE
)
4813 /* Add this declaration to the statement-tree. This needs to happen
4814 after the call to check_initializer so that the DECL_STMT for a
4815 reference temp is added before the DECL_STMT for the reference itself. */
4816 if (at_function_scope_p ())
4817 add_decl_stmt (decl
);
4819 if (TREE_CODE (decl
) == VAR_DECL
)
4820 layout_var_decl (decl
);
4822 /* Output the assembler code and/or RTL code for variables and functions,
4823 unless the type is an undefined structure or union.
4824 If not, it will get done when the type is completed. */
4825 if (TREE_CODE (decl
) == VAR_DECL
|| TREE_CODE (decl
) == FUNCTION_DECL
)
4827 if (TREE_CODE (decl
) == VAR_DECL
)
4828 maybe_commonize_var (decl
);
4830 make_rtl_for_nonlocal_decl (decl
, init
, asmspec
);
4832 if (TREE_CODE (type
) == FUNCTION_TYPE
4833 || TREE_CODE (type
) == METHOD_TYPE
)
4834 abstract_virtuals_error (decl
,
4835 strip_array_types (TREE_TYPE (type
)));
4836 else if (POINTER_TYPE_P (type
) || TREE_CODE (type
) == ARRAY_TYPE
)
4838 /* If it's either a pointer or an array type, strip through all
4839 of them but the last one. If the last is an array type, issue
4840 an error if the element type is abstract. */
4841 while (POINTER_TYPE_P (TREE_TYPE (type
))
4842 || TREE_CODE (TREE_TYPE (type
)) == ARRAY_TYPE
)
4843 type
= TREE_TYPE (type
);
4844 if (TREE_CODE (type
) == ARRAY_TYPE
)
4845 abstract_virtuals_error (decl
, TREE_TYPE (type
));
4848 abstract_virtuals_error (decl
, type
);
4850 if (TREE_CODE (decl
) == FUNCTION_DECL
4851 || TREE_TYPE (decl
) == error_mark_node
)
4852 /* No initialization required. */
4854 else if (DECL_EXTERNAL (decl
)
4855 && ! (DECL_LANG_SPECIFIC (decl
)
4856 && DECL_NOT_REALLY_EXTERN (decl
)))
4859 DECL_INITIAL (decl
) = init
;
4863 /* A variable definition. */
4864 if (DECL_FUNCTION_SCOPE_P (decl
))
4866 /* This is a local declaration. */
4867 maybe_inject_for_scope_var (decl
);
4868 /* Initialize the local variable. */
4869 if (processing_template_decl
)
4871 if (init
|| DECL_INITIAL (decl
) == error_mark_node
)
4872 DECL_INITIAL (decl
) = init
;
4874 else if (!TREE_STATIC (decl
))
4875 initialize_local_var (decl
, init
);
4878 if (TREE_STATIC (decl
))
4879 expand_static_init (decl
, init
);
4883 /* Undo call to `pushclass' that was done in `start_decl'
4884 due to initialization of qualified member variable.
4885 I.e., Foo::x = 10; */
4887 tree context
= CP_DECL_CONTEXT (decl
);
4890 && (TREE_CODE (decl
) == VAR_DECL
4891 /* We also have a pushclass done that we need to undo here
4892 if we're at top level and declare a method. */
4893 || TREE_CODE (decl
) == FUNCTION_DECL
)
4894 /* If size hasn't been set, we're still defining it,
4895 and therefore inside the class body; don't pop
4896 the binding level.. */
4897 && COMPLETE_TYPE_P (context
)
4898 && context
== current_class_type
)
4899 pop_nested_class ();
4903 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
4904 reference, insert it in the statement-tree now. */
4911 TREE_READONLY (decl
) = 1;
4913 /* If this was marked 'used', be sure it will be output. */
4914 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl
)))
4915 mark_referenced (DECL_ASSEMBLER_NAME (decl
));
4918 /* This is here for a midend callback from c-common.c. */
4921 finish_decl (tree decl
, tree init
, tree asmspec_tree
)
4923 cp_finish_decl (decl
, init
, asmspec_tree
, 0);
4926 /* Returns a declaration for a VAR_DECL as if:
4928 extern "C" TYPE NAME;
4930 had been seen. Used to create compiler-generated global
4934 declare_global_var (tree name
, tree type
)
4938 push_to_top_level ();
4939 decl
= build_decl (VAR_DECL
, name
, type
);
4940 TREE_PUBLIC (decl
) = 1;
4941 DECL_EXTERNAL (decl
) = 1;
4942 DECL_ARTIFICIAL (decl
) = 1;
4944 cp_finish_decl (decl
, NULL_TREE
, NULL_TREE
, 0);
4945 pop_from_top_level ();
4950 /* Returns a pointer to the `atexit' function. Note that if
4951 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
4952 `__cxa_atexit' function specified in the IA64 C++ ABI. */
4955 get_atexit_node (void)
4966 if (flag_use_cxa_atexit
)
4968 /* The declaration for `__cxa_atexit' is:
4970 int __cxa_atexit (void (*)(void *), void *, void *)
4972 We build up the argument types and then then function type
4975 /* First, build the pointer-to-function type for the first
4977 arg_types
= tree_cons (NULL_TREE
, ptr_type_node
, void_list_node
);
4978 fn_type
= build_function_type (void_type_node
, arg_types
);
4979 fn_ptr_type
= build_pointer_type (fn_type
);
4980 /* Then, build the rest of the argument types. */
4981 arg_types
= tree_cons (NULL_TREE
, ptr_type_node
, void_list_node
);
4982 arg_types
= tree_cons (NULL_TREE
, ptr_type_node
, arg_types
);
4983 arg_types
= tree_cons (NULL_TREE
, fn_ptr_type
, arg_types
);
4984 /* And the final __cxa_atexit type. */
4985 fn_type
= build_function_type (integer_type_node
, arg_types
);
4986 fn_ptr_type
= build_pointer_type (fn_type
);
4987 name
= "__cxa_atexit";
4991 /* The declaration for `atexit' is:
4993 int atexit (void (*)());
4995 We build up the argument types and then then function type
4997 fn_type
= build_function_type (void_type_node
, void_list_node
);
4998 fn_ptr_type
= build_pointer_type (fn_type
);
4999 arg_types
= tree_cons (NULL_TREE
, fn_ptr_type
, void_list_node
);
5000 /* Build the final atexit type. */
5001 fn_type
= build_function_type (integer_type_node
, arg_types
);
5005 /* Now, build the function declaration. */
5006 push_lang_context (lang_name_c
);
5007 atexit_fndecl
= build_library_fn_ptr (name
, fn_type
);
5008 mark_used (atexit_fndecl
);
5009 pop_lang_context ();
5010 atexit_node
= decay_conversion (atexit_fndecl
);
5015 /* Returns the __dso_handle VAR_DECL. */
5018 get_dso_handle_node (void)
5020 if (dso_handle_node
)
5021 return dso_handle_node
;
5023 /* Declare the variable. */
5024 dso_handle_node
= declare_global_var (get_identifier ("__dso_handle"),
5027 return dso_handle_node
;
5030 /* Begin a new function with internal linkage whose job will be simply
5031 to destroy some particular variable. */
5033 static GTY(()) int start_cleanup_cnt
;
5036 start_cleanup_fn (void)
5038 int old_interface_only
= interface_only
;
5039 int old_interface_unknown
= interface_unknown
;
5045 push_to_top_level ();
5047 /* No need to mangle this. */
5048 push_lang_context (lang_name_c
);
5051 interface_unknown
= 1;
5053 /* Build the parameter-types. */
5054 parmtypes
= void_list_node
;
5055 /* Functions passed to __cxa_atexit take an additional parameter.
5056 We'll just ignore it. After we implement the new calling
5057 convention for destructors, we can eliminate the use of
5058 additional cleanup functions entirely in the -fnew-abi case. */
5059 if (flag_use_cxa_atexit
)
5060 parmtypes
= tree_cons (NULL_TREE
, ptr_type_node
, parmtypes
);
5061 /* Build the function type itself. */
5062 fntype
= build_function_type (void_type_node
, parmtypes
);
5063 /* Build the name of the function. */
5064 sprintf (name
, "__tcf_%d", start_cleanup_cnt
++);
5065 /* Build the function declaration. */
5066 fndecl
= build_lang_decl (FUNCTION_DECL
, get_identifier (name
), fntype
);
5067 /* It's a function with internal linkage, generated by the
5069 TREE_PUBLIC (fndecl
) = 0;
5070 DECL_ARTIFICIAL (fndecl
) = 1;
5071 /* Make the function `inline' so that it is only emitted if it is
5072 actually needed. It is unlikely that it will be inlined, since
5073 it is only called via a function pointer, but we avoid unnecessary
5074 emissions this way. */
5075 DECL_INLINE (fndecl
) = 1;
5076 DECL_DECLARED_INLINE_P (fndecl
) = 1;
5077 DECL_INTERFACE_KNOWN (fndecl
) = 1;
5078 /* Build the parameter. */
5079 if (flag_use_cxa_atexit
)
5083 parmdecl
= cp_build_parm_decl (NULL_TREE
, ptr_type_node
);
5084 DECL_CONTEXT (parmdecl
) = fndecl
;
5085 TREE_USED (parmdecl
) = 1;
5086 DECL_ARGUMENTS (fndecl
) = parmdecl
;
5090 start_function (/*specs=*/NULL_TREE
, fndecl
, NULL_TREE
, SF_PRE_PARSED
);
5092 interface_unknown
= old_interface_unknown
;
5093 interface_only
= old_interface_only
;
5095 pop_lang_context ();
5097 return current_function_decl
;
5100 /* Finish the cleanup function begun by start_cleanup_fn. */
5103 end_cleanup_fn (void)
5105 expand_or_defer_fn (finish_function (0));
5107 pop_from_top_level ();
5110 /* Generate code to handle the destruction of DECL, an object with
5111 static storage duration. */
5114 register_dtor_fn (tree decl
)
5121 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl
)))
5124 /* Call build_cleanup before we enter the anonymous function so that
5125 any access checks will be done relative to the current scope,
5126 rather than the scope of the anonymous function. */
5127 build_cleanup (decl
);
5129 /* Now start the function. */
5130 cleanup
= start_cleanup_fn ();
5132 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
5133 to the original function, rather than the anonymous one. That
5134 will make the back-end think that nested functions are in use,
5135 which causes confusion. */
5137 push_deferring_access_checks (dk_no_check
);
5138 fcall
= build_cleanup (decl
);
5139 pop_deferring_access_checks ();
5141 /* Create the body of the anonymous function. */
5142 compound_stmt
= begin_compound_stmt (/*has_no_scope=*/false);
5143 finish_expr_stmt (fcall
);
5144 finish_compound_stmt (compound_stmt
);
5147 /* Call atexit with the cleanup function. */
5148 cxx_mark_addressable (cleanup
);
5149 mark_used (cleanup
);
5150 cleanup
= build_unary_op (ADDR_EXPR
, cleanup
, 0);
5151 if (flag_use_cxa_atexit
)
5153 args
= tree_cons (NULL_TREE
,
5154 build_unary_op (ADDR_EXPR
, get_dso_handle_node (), 0),
5156 args
= tree_cons (NULL_TREE
, null_pointer_node
, args
);
5157 args
= tree_cons (NULL_TREE
, cleanup
, args
);
5160 args
= tree_cons (NULL_TREE
, cleanup
, NULL_TREE
);
5161 finish_expr_stmt (build_function_call (get_atexit_node (), args
));
5164 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
5165 is its initializer. Generate code to handle the construction
5166 and destruction of DECL. */
5169 expand_static_init (tree decl
, tree init
)
5171 my_friendly_assert (TREE_CODE (decl
) == VAR_DECL
, 20021010);
5172 my_friendly_assert (TREE_STATIC (decl
), 20021010);
5174 /* Some variables require no initialization. */
5176 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl
))
5177 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl
)))
5180 if (! toplevel_bindings_p ())
5182 /* Emit code to perform this initialization but once. */
5189 /* Emit code to perform this initialization but once. This code
5192 static int guard = 0;
5194 // Do initialization.
5196 // Register variable for destruction at end of program.
5199 Note that the `temp' variable is only set to 1 *after* the
5200 initialization is complete. This ensures that an exception,
5201 thrown during the construction, will cause the variable to
5202 reinitialized when we pass through this code again, as per:
5206 If the initialization exits by throwing an exception, the
5207 initialization is not complete, so it will be tried again
5208 the next time control enters the declaration.
5210 In theory, this process should be thread-safe, too; multiple
5211 threads should not be able to initialize the variable more
5212 than once. We don't yet attempt to ensure thread-safety. */
5214 /* Create the guard variable. */
5215 guard
= get_guard (decl
);
5217 /* Begin the conditional initialization. */
5218 if_stmt
= begin_if_stmt ();
5219 finish_if_stmt_cond (get_guard_cond (guard
), if_stmt
);
5220 then_clause
= begin_compound_stmt (/*has_no_scope=*/false);
5222 /* Do the initialization itself. */
5223 assignment
= init
? init
: NULL_TREE
;
5225 /* Once the assignment is complete, set TEMP to 1. Since the
5226 construction of the static object is complete at this point,
5227 we want to make sure TEMP is set to 1 even if a temporary
5228 constructed during the initialization throws an exception
5229 when it is destroyed. So, we combine the initialization and
5230 the assignment to TEMP into a single expression, ensuring
5231 that when we call finish_expr_stmt the cleanups will not be
5232 run until after TEMP is set to 1. */
5233 guard_init
= set_guard (guard
);
5235 assignment
= build_compound_expr (assignment
, guard_init
);
5237 assignment
= guard_init
;
5238 finish_expr_stmt (assignment
);
5240 /* Use atexit to register a function for destroying this static
5242 register_dtor_fn (decl
);
5244 finish_compound_stmt (then_clause
);
5245 finish_then_clause (if_stmt
);
5249 static_aggregates
= tree_cons (init
, decl
, static_aggregates
);
5252 /* Finish the declaration of a catch-parameter. */
5255 start_handler_parms (tree declspecs
, tree declarator
)
5260 decl
= grokdeclarator (declarator
, declspecs
, CATCHPARM
,
5262 if (decl
== NULL_TREE
)
5263 error ("invalid catch parameter");
5272 /* Make TYPE a complete type based on INITIAL_VALUE.
5273 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
5274 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
5277 complete_array_type (tree type
, tree initial_value
, int do_default
)
5279 tree maxindex
= NULL_TREE
;
5284 /* An array of character type can be initialized from a
5285 brace-enclosed string constant. */
5286 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type
)))
5287 && TREE_CODE (initial_value
) == CONSTRUCTOR
5288 && CONSTRUCTOR_ELTS (initial_value
)
5289 && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value
)))
5291 && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value
)) == NULL_TREE
)
5292 initial_value
= TREE_VALUE (CONSTRUCTOR_ELTS (initial_value
));
5294 /* Note MAXINDEX is really the maximum index, one less than the
5296 if (TREE_CODE (initial_value
) == STRING_CST
)
5299 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value
)));
5300 maxindex
= build_int_2 ((TREE_STRING_LENGTH (initial_value
)
5303 else if (TREE_CODE (initial_value
) == CONSTRUCTOR
)
5305 tree elts
= CONSTRUCTOR_ELTS (initial_value
);
5307 maxindex
= ssize_int (-1);
5308 for (; elts
; elts
= TREE_CHAIN (elts
))
5310 if (TREE_PURPOSE (elts
))
5311 maxindex
= TREE_PURPOSE (elts
);
5313 maxindex
= size_binop (PLUS_EXPR
, maxindex
, ssize_int (1));
5315 maxindex
= copy_node (maxindex
);
5319 /* Make an error message unless that happened already. */
5320 if (initial_value
!= error_mark_node
)
5323 initial_value
= NULL_TREE
;
5325 /* Prevent further error messages. */
5326 maxindex
= build_int_2 (0, 0);
5333 maxindex
= build_int_2 (0, 0);
5342 domain
= build_index_type (maxindex
);
5343 TYPE_DOMAIN (type
) = domain
;
5345 if (! TREE_TYPE (maxindex
))
5346 TREE_TYPE (maxindex
) = domain
;
5348 itype
= TREE_TYPE (initial_value
);
5351 if (itype
&& !TYPE_DOMAIN (itype
))
5352 TYPE_DOMAIN (itype
) = domain
;
5353 /* The type of the main variant should never be used for arrays
5354 of different sizes. It should only ever be completed with the
5355 size of the array. */
5356 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type
)))
5357 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type
)) = domain
;
5360 /* Lay out the type now that we can get the real answer. */
5367 /* Return zero if something is declared to be a member of type
5368 CTYPE when in the context of CUR_TYPE. STRING is the error
5369 message to print in that case. Otherwise, quietly return 1. */
5372 member_function_or_else (tree ctype
, tree cur_type
, enum overload_flags flags
)
5374 if (ctype
&& ctype
!= cur_type
)
5376 if (flags
== DTOR_FLAG
)
5377 error ("destructor for alien class `%T' cannot be a member",
5380 error ("constructor for alien class `%T' cannot be a member",
5387 /* Subroutine of `grokdeclarator'. */
5389 /* Generate errors possibly applicable for a given set of specifiers.
5390 This is for ARM $7.1.2. */
5393 bad_specifiers (tree object
,
5402 error ("`%D' declared as a `virtual' %s", object
, type
);
5404 error ("`%D' declared as an `inline' %s", object
, type
);
5406 error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
5409 cp_error_at ("`%D' declared as a friend", object
);
5411 && (TREE_CODE (object
) == TYPE_DECL
5412 || (!TYPE_PTRFN_P (TREE_TYPE (object
))
5413 && !TYPE_REFFN_P (TREE_TYPE (object
))
5414 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object
)))))
5415 cp_error_at ("`%D' declared with an exception specification", object
);
5418 /* CTYPE is class type, or null if non-class.
5419 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5421 DECLARATOR is the function's name.
5422 PARMS is a chain of PARM_DECLs for the function.
5423 VIRTUALP is truthvalue of whether the function is virtual or not.
5424 FLAGS are to be passed through to `grokclassfn'.
5425 QUALS are qualifiers indicating whether the function is `const'
5427 RAISES is a list of exceptions that this function can raise.
5428 CHECK is 1 if we must find this method in CTYPE, 0 if we should
5429 not look, and -1 if we should not call `grokclassfn' at all.
5431 Returns `NULL_TREE' if something goes wrong, after issuing
5432 applicable error messages. */
5435 grokfndecl (tree ctype
,
5439 tree orig_declarator
,
5441 enum overload_flags flags
,
5453 int staticp
= ctype
&& TREE_CODE (type
) == FUNCTION_TYPE
;
5454 int has_default_arg
= 0;
5458 type
= build_exception_variant (type
, raises
);
5460 decl
= build_lang_decl (FUNCTION_DECL
, declarator
, type
);
5461 DECL_ARGUMENTS (decl
) = parms
;
5462 /* Propagate volatile out from type to decl. */
5463 if (TYPE_VOLATILE (type
))
5464 TREE_THIS_VOLATILE (decl
) = 1;
5466 /* If this decl has namespace scope, set that up. */
5468 set_decl_namespace (decl
, in_namespace
, friendp
);
5470 DECL_CONTEXT (decl
) = FROB_CONTEXT (current_namespace
);
5472 /* `main' and builtins have implicit 'C' linkage. */
5473 if ((MAIN_NAME_P (declarator
)
5474 || (IDENTIFIER_LENGTH (declarator
) > 10
5475 && IDENTIFIER_POINTER (declarator
)[0] == '_'
5476 && IDENTIFIER_POINTER (declarator
)[1] == '_'
5477 && strncmp (IDENTIFIER_POINTER (declarator
)+2, "builtin_", 8) == 0))
5478 && current_lang_name
== lang_name_cplusplus
5479 && ctype
== NULL_TREE
5480 /* NULL_TREE means global namespace. */
5481 && DECL_CONTEXT (decl
) == NULL_TREE
)
5482 SET_DECL_LANGUAGE (decl
, lang_c
);
5484 /* Should probably propagate const out from type to decl I bet (mrs). */
5487 DECL_STATIC_FUNCTION_P (decl
) = 1;
5488 DECL_CONTEXT (decl
) = ctype
;
5492 DECL_CONTEXT (decl
) = ctype
;
5494 if (ctype
== NULL_TREE
&& DECL_MAIN_P (decl
))
5496 if (processing_template_decl
)
5497 error ("cannot declare `::main' to be a template");
5499 error ("cannot declare `::main' to be inline");
5501 error ("cannot declare `::main' to be static");
5502 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl
)),
5504 error ("`main' must return `int'");
5509 /* Members of anonymous types and local classes have no linkage; make
5510 them internal. If a typedef is made later, this will be changed. */
5511 if (ctype
&& (TYPE_ANONYMOUS_P (ctype
)
5512 || decl_function_context (TYPE_MAIN_DECL (ctype
))))
5517 /* [basic.link]: A name with no linkage (notably, the name of a class
5518 or enumeration declared in a local scope) shall not be used to
5519 declare an entity with linkage.
5521 Only check this for public decls for now. See core 319, 389. */
5522 t
= no_linkage_check (TREE_TYPE (decl
));
5525 if (TYPE_ANONYMOUS_P (t
))
5527 if (DECL_EXTERN_C_P (decl
))
5528 /* Allow this; it's pretty common in C. */;
5531 pedwarn ("non-local function `%#D' uses anonymous type",
5533 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t
)))
5535 `%#D' does not refer to the unqualified type, so it is not used for linkage",
5540 pedwarn ("non-local function `%#D' uses local type `%T'",
5545 TREE_PUBLIC (decl
) = publicp
;
5548 DECL_INTERFACE_KNOWN (decl
) = 1;
5549 DECL_NOT_REALLY_EXTERN (decl
) = 1;
5552 /* If the declaration was declared inline, mark it as such. */
5554 DECL_DECLARED_INLINE_P (decl
) = 1;
5555 /* We inline functions that are explicitly declared inline, or, when
5556 the user explicitly asks us to, all functions. */
5557 if (DECL_DECLARED_INLINE_P (decl
)
5558 || (flag_inline_trees
== 2 && !DECL_INLINE (decl
) && funcdef_flag
))
5559 DECL_INLINE (decl
) = 1;
5561 DECL_EXTERNAL (decl
) = 1;
5562 if (quals
!= NULL_TREE
&& TREE_CODE (type
) == FUNCTION_TYPE
)
5564 error ("%smember function `%D' cannot have `%T' method qualifier",
5565 (ctype
? "static " : "non-"), decl
, TREE_VALUE (quals
));
5569 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl
)))
5570 grok_op_properties (decl
, friendp
, /*complain=*/true);
5572 if (ctype
&& decl_function_context (decl
))
5573 DECL_NO_STATIC_CHAIN (decl
) = 1;
5575 for (t
= TYPE_ARG_TYPES (TREE_TYPE (decl
)); t
; t
= TREE_CHAIN (t
))
5576 if (TREE_PURPOSE (t
)
5577 && TREE_CODE (TREE_PURPOSE (t
)) == DEFAULT_ARG
)
5579 has_default_arg
= 1;
5584 && TREE_CODE (orig_declarator
) == TEMPLATE_ID_EXPR
)
5588 ("defining explicit specialization `%D' in friend declaration",
5592 tree fns
= TREE_OPERAND (orig_declarator
, 0);
5593 tree args
= TREE_OPERAND (orig_declarator
, 1);
5595 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5597 /* Something like `template <class T> friend void f<T>()'. */
5598 error ("invalid use of template-id `%D' in declaration of primary template",
5604 /* A friend declaration of the form friend void f<>(). Record
5605 the information in the TEMPLATE_ID_EXPR. */
5606 SET_DECL_IMPLICIT_INSTANTIATION (decl
);
5608 if (TREE_CODE (fns
) == COMPONENT_REF
)
5610 /* Due to bison parser ickiness, we will have already looked
5611 up an operator_name or PFUNCNAME within the current class
5612 (see template_id in parse.y). If the current class contains
5613 such a name, we'll get a COMPONENT_REF here. Undo that. */
5615 my_friendly_assert (TREE_TYPE (TREE_OPERAND (fns
, 0))
5616 == current_class_type
, 20001120);
5617 fns
= TREE_OPERAND (fns
, 1);
5619 my_friendly_assert (TREE_CODE (fns
) == IDENTIFIER_NODE
5620 || TREE_CODE (fns
) == OVERLOAD
, 20001120);
5621 DECL_TEMPLATE_INFO (decl
) = tree_cons (fns
, args
, NULL_TREE
);
5623 if (has_default_arg
)
5625 error ("default arguments are not allowed in declaration of friend template specialization `%D'",
5632 error ("`inline' is not allowed in declaration of friend template specialization `%D'",
5640 /* Make the init_value nonzero so pushdecl knows this is not
5641 tentative. error_mark_node is replaced later with the BLOCK. */
5642 DECL_INITIAL (decl
) = error_mark_node
;
5644 if (TYPE_NOTHROW_P (type
) || nothrow_libfn_p (decl
))
5645 TREE_NOTHROW (decl
) = 1;
5647 /* Caller will do the rest of this. */
5651 if (flags
== NO_SPECIAL
&& ctype
&& constructor_name_p (declarator
, ctype
))
5652 DECL_CONSTRUCTOR_P (decl
) = 1;
5654 /* Function gets the ugly name, field gets the nice one. This call
5655 may change the type of the function (because of default
5657 if (ctype
!= NULL_TREE
)
5658 grokclassfn (ctype
, decl
, flags
, quals
);
5660 decl
= check_explicit_specialization (orig_declarator
, decl
,
5662 2 * (funcdef_flag
!= 0) +
5663 4 * (friendp
!= 0));
5664 if (decl
== error_mark_node
)
5667 if (ctype
!= NULL_TREE
5668 && (! TYPE_FOR_JAVA (ctype
) || check_java_method (decl
))
5673 old_decl
= check_classfn (ctype
, decl
,
5674 (processing_template_decl
5675 > template_class_depth (ctype
))
5676 ? current_template_parms
5679 if (old_decl
&& TREE_CODE (old_decl
) == TEMPLATE_DECL
)
5680 /* Because grokfndecl is always supposed to return a
5681 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
5682 here. We depend on our callers to figure out that its
5683 really a template that's being returned. */
5684 old_decl
= DECL_TEMPLATE_RESULT (old_decl
);
5686 if (old_decl
&& DECL_STATIC_FUNCTION_P (old_decl
)
5687 && TREE_CODE (TREE_TYPE (decl
)) == METHOD_TYPE
)
5688 /* Remove the `this' parm added by grokclassfn.
5689 XXX Isn't this done in start_function, too? */
5690 revert_static_member_fn (decl
);
5691 if (old_decl
&& DECL_ARTIFICIAL (old_decl
))
5692 error ("definition of implicitly-declared `%D'", old_decl
);
5699 /* Since we've smashed OLD_DECL to its
5700 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
5701 if (TREE_CODE (decl
) == TEMPLATE_DECL
)
5702 decl
= DECL_TEMPLATE_RESULT (decl
);
5704 /* Attempt to merge the declarations. This can fail, in
5705 the case of some invalid specialization declarations. */
5706 pop_p
= push_scope (ctype
);
5707 ok
= duplicate_decls (decl
, old_decl
);
5712 error ("no `%#D' member function declared in class `%T'",
5720 if (DECL_CONSTRUCTOR_P (decl
) && !grok_ctor_properties (ctype
, decl
))
5723 if (ctype
== NULL_TREE
|| check
)
5727 DECL_VIRTUAL_P (decl
) = 1;
5732 /* Create a VAR_DECL named NAME with the indicated TYPE.
5734 If SCOPE is non-NULL, it is the class type or namespace containing
5735 the variable. If SCOPE is NULL, the variable should is created in
5736 the innermost enclosings scope. */
5739 grokvardecl (tree type
,
5741 RID_BIT_TYPE
* specbits_in
,
5747 RID_BIT_TYPE specbits
;
5749 my_friendly_assert (!name
|| TREE_CODE (name
) == IDENTIFIER_NODE
,
5752 specbits
= *specbits_in
;
5754 /* Compute the scope in which to place the variable. */
5757 /* An explicit "extern" specifier indicates a namespace-scope
5759 if (RIDBIT_SETP (RID_EXTERN
, specbits
))
5760 scope
= current_namespace
;
5761 else if (!at_function_scope_p ())
5763 scope
= current_scope ();
5765 scope
= current_namespace
;
5770 && (/* If the variable is a namespace-scope variable declared in a
5771 template, we need DECL_LANG_SPECIFIC. */
5772 (TREE_CODE (scope
) == NAMESPACE_DECL
&& processing_template_decl
)
5773 /* Similarly for namespace-scope variables with language linkage
5775 || (TREE_CODE (scope
) == NAMESPACE_DECL
5776 && current_lang_name
!= lang_name_cplusplus
)
5777 /* Similarly for static data members. */
5779 decl
= build_lang_decl (VAR_DECL
, name
, type
);
5781 decl
= build_decl (VAR_DECL
, name
, type
);
5783 if (scope
&& TREE_CODE (scope
) == NAMESPACE_DECL
)
5784 set_decl_namespace (decl
, scope
, 0);
5786 DECL_CONTEXT (decl
) = scope
;
5788 if (name
&& scope
&& current_lang_name
!= lang_name_c
)
5789 /* We can't mangle lazily here because we don't have any
5790 way to recover whether or not a variable was `extern
5794 if (RIDBIT_SETP (RID_EXTERN
, specbits
))
5796 DECL_THIS_EXTERN (decl
) = 1;
5797 DECL_EXTERNAL (decl
) = !initialized
;
5800 /* In class context, static means one per class,
5801 public access, and static storage. */
5802 if (DECL_CLASS_SCOPE_P (decl
))
5804 TREE_PUBLIC (decl
) = 1;
5805 TREE_STATIC (decl
) = 1;
5806 DECL_EXTERNAL (decl
) = 0;
5808 /* At top level, either `static' or no s.c. makes a definition
5809 (perhaps tentative), and absence of `static' makes it public. */
5810 else if (toplevel_bindings_p ())
5812 TREE_PUBLIC (decl
) = (RIDBIT_NOTSETP (RID_STATIC
, specbits
)
5813 && (DECL_THIS_EXTERN (decl
) || ! constp
));
5814 TREE_STATIC (decl
) = ! DECL_EXTERNAL (decl
);
5816 /* Not at top level, only `static' makes a static definition. */
5819 TREE_STATIC (decl
) = !! RIDBIT_SETP (RID_STATIC
, specbits
);
5820 TREE_PUBLIC (decl
) = DECL_EXTERNAL (decl
);
5823 if (RIDBIT_SETP (RID_THREAD
, specbits
))
5825 if (targetm
.have_tls
)
5826 DECL_THREAD_LOCAL (decl
) = 1;
5828 /* A mere warning is sure to result in improper semantics
5829 at runtime. Don't bother to allow this to compile. */
5830 error ("thread-local storage not supported for this target");
5833 if (TREE_PUBLIC (decl
))
5835 /* [basic.link]: A name with no linkage (notably, the name of a class
5836 or enumeration declared in a local scope) shall not be used to
5837 declare an entity with linkage.
5839 Only check this for public decls for now. */
5840 tree t
= no_linkage_check (TREE_TYPE (decl
));
5843 if (TYPE_ANONYMOUS_P (t
))
5845 if (DECL_EXTERN_C_P (decl
))
5846 /* Allow this; it's pretty common in C. */;
5849 pedwarn ("non-local variable `%#D' uses anonymous type",
5851 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t
)))
5853 `%#D' does not refer to the unqualified type, so it is not used for linkage",
5858 pedwarn ("non-local variable `%#D' uses local type `%T'",
5866 /* Create and return a canonical pointer to member function type, for
5867 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
5870 build_ptrmemfunc_type (tree type
)
5874 tree unqualified_variant
= NULL_TREE
;
5876 if (type
== error_mark_node
)
5879 /* If a canonical type already exists for this type, use it. We use
5880 this method instead of type_hash_canon, because it only does a
5881 simple equality check on the list of field members. */
5883 if ((t
= TYPE_GET_PTRMEMFUNC_TYPE (type
)))
5886 /* Make sure that we always have the unqualified pointer-to-member
5888 if (cp_type_quals (type
) != TYPE_UNQUALIFIED
)
5890 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type
));
5892 t
= make_aggr_type (RECORD_TYPE
);
5893 /* Let the front-end know this is a pointer to member function... */
5894 TYPE_PTRMEMFUNC_FLAG (t
) = 1;
5895 /* ... and not really an aggregate. */
5896 SET_IS_AGGR_TYPE (t
, 0);
5898 field
= build_decl (FIELD_DECL
, pfn_identifier
, type
);
5901 field
= build_decl (FIELD_DECL
, delta_identifier
, delta_type_node
);
5902 TREE_CHAIN (field
) = fields
;
5905 finish_builtin_struct (t
, "__ptrmemfunc_type", fields
, ptr_type_node
);
5907 /* Zap out the name so that the back-end will give us the debugging
5908 information for this anonymous RECORD_TYPE. */
5909 TYPE_NAME (t
) = NULL_TREE
;
5911 /* If this is not the unqualified form of this pointer-to-member
5912 type, set the TYPE_MAIN_VARIANT for this type to be the
5913 unqualified type. Since they are actually RECORD_TYPEs that are
5914 not variants of each other, we must do this manually. */
5915 if (cp_type_quals (type
) != TYPE_UNQUALIFIED
)
5917 t
= build_qualified_type (t
, cp_type_quals (type
));
5918 TYPE_MAIN_VARIANT (t
) = unqualified_variant
;
5919 TYPE_NEXT_VARIANT (t
) = TYPE_NEXT_VARIANT (unqualified_variant
);
5920 TYPE_NEXT_VARIANT (unqualified_variant
) = t
;
5923 /* Cache this pointer-to-member type so that we can find it again
5925 TYPE_SET_PTRMEMFUNC_TYPE (type
, t
);
5930 /* Create and return a pointer to data member type. */
5933 build_ptrmem_type (tree class_type
, tree member_type
)
5935 if (TREE_CODE (member_type
) == METHOD_TYPE
)
5939 arg_types
= TYPE_ARG_TYPES (member_type
);
5940 class_type
= (cp_build_qualified_type
5942 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types
)))));
5944 = build_method_type_directly (class_type
,
5945 TREE_TYPE (member_type
),
5946 TREE_CHAIN (arg_types
));
5947 return build_ptrmemfunc_type (build_pointer_type (member_type
));
5951 my_friendly_assert (TREE_CODE (member_type
) != FUNCTION_TYPE
,
5953 return build_offset_type (class_type
, member_type
);
5957 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
5958 Check to see that the definition is valid. Issue appropriate error
5959 messages. Return 1 if the definition is particularly bad, or 0
5963 check_static_variable_definition (tree decl
, tree type
)
5965 /* Motion 10 at San Diego: If a static const integral data member is
5966 initialized with an integral constant expression, the initializer
5967 may appear either in the declaration (within the class), or in
5968 the definition, but not both. If it appears in the class, the
5969 member is a member constant. The file-scope definition is always
5971 if (!ARITHMETIC_TYPE_P (type
) && TREE_CODE (type
) != ENUMERAL_TYPE
)
5973 error ("invalid in-class initialization of static data member of non-integral type `%T'",
5975 /* If we just return the declaration, crashes will sometimes
5976 occur. We therefore return void_type_node, as if this were a
5977 friend declaration, to cause callers to completely ignore
5978 this declaration. */
5981 else if (!CP_TYPE_CONST_P (type
))
5982 error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
5984 else if (pedantic
&& !INTEGRAL_TYPE_P (type
))
5985 pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl
, type
);
5990 /* Given the SIZE (i.e., number of elements) in an array, compute an
5991 appropriate index type for the array. If non-NULL, NAME is the
5992 name of the thing being declared. */
5995 compute_array_index_type (tree name
, tree size
)
5997 tree type
= TREE_TYPE (size
);
6000 /* The array bound must be an integer type. */
6001 if (!dependent_type_p (type
) && !INTEGRAL_TYPE_P (type
))
6004 error ("size of array `%D' has non-integral type `%T'", name
, type
);
6006 error ("size of array has non-integral type `%T'", type
);
6007 size
= integer_one_node
;
6008 type
= TREE_TYPE (size
);
6011 if (abi_version_at_least (2)
6012 /* We should only handle value dependent expressions specially. */
6013 ? value_dependent_expression_p (size
)
6014 /* But for abi-1, we handled all instances in templates. This
6015 effects the manglings produced. */
6016 : processing_template_decl
)
6017 return build_index_type (build_min (MINUS_EXPR
, sizetype
,
6018 size
, integer_one_node
));
6020 /* The size might be the result of a cast. */
6021 STRIP_TYPE_NOPS (size
);
6023 /* It might be a const variable or enumeration constant. */
6024 size
= decl_constant_value (size
);
6026 /* Normally, the array-bound will be a constant. */
6027 if (TREE_CODE (size
) == INTEGER_CST
)
6029 /* Check to see if the array bound overflowed. Make that an
6030 error, no matter how generous we're being. */
6031 int old_flag_pedantic_errors
= flag_pedantic_errors
;
6032 int old_pedantic
= pedantic
;
6033 pedantic
= flag_pedantic_errors
= 1;
6034 constant_expression_warning (size
);
6035 pedantic
= old_pedantic
;
6036 flag_pedantic_errors
= old_flag_pedantic_errors
;
6038 /* An array must have a positive number of elements. */
6039 if (INT_CST_LT (size
, integer_zero_node
))
6042 error ("size of array `%D' is negative", name
);
6044 error ("size of array is negative");
6045 size
= integer_one_node
;
6047 /* As an extension we allow zero-sized arrays. We always allow
6048 them in system headers because glibc uses them. */
6049 else if (integer_zerop (size
) && pedantic
&& !in_system_header
)
6052 pedwarn ("ISO C++ forbids zero-size array `%D'", name
);
6054 pedwarn ("ISO C++ forbids zero-size array");
6057 else if (TREE_CONSTANT (size
))
6059 /* `(int) &fn' is not a valid array bound. */
6061 error ("size of array `%D' is not an integral constant-expression",
6064 error ("size of array is not an integral constant-expression");
6069 pedwarn ("ISO C++ forbids variable-size array `%D'", name
);
6071 pedwarn ("ISO C++ forbids variable-size array");
6074 if (processing_template_decl
&& !TREE_CONSTANT (size
))
6075 /* A variable sized array. */
6076 itype
= build_min (MINUS_EXPR
, sizetype
, size
, integer_one_node
);
6079 /* Compute the index of the largest element in the array. It is
6080 one less than the number of elements in the array. */
6082 = fold (cp_build_binary_op (MINUS_EXPR
,
6083 cp_convert (ssizetype
, size
),
6084 cp_convert (ssizetype
, integer_one_node
)));
6085 if (!TREE_CONSTANT (itype
))
6086 /* A variable sized array. */
6087 itype
= variable_size (itype
);
6088 /* Make sure that there was no overflow when creating to a signed
6089 index type. (For example, on a 32-bit machine, an array with
6090 size 2^32 - 1 is too big.) */
6091 else if (TREE_OVERFLOW (itype
))
6093 error ("overflow in array dimension");
6094 TREE_OVERFLOW (itype
) = 0;
6098 /* Create and return the appropriate index type. */
6099 return build_index_type (itype
);
6102 /* Returns the scope (if any) in which the entity declared by
6103 DECLARATOR will be located. If the entity was declared with an
6104 unqualified name, NULL_TREE is returned. */
6107 get_scope_of_declarator (tree declarator
)
6112 switch (TREE_CODE (declarator
))
6118 /* For any of these, the main declarator is the first operand. */
6119 return get_scope_of_declarator (TREE_OPERAND
6123 /* For a pointer-to-member, continue descending. */
6124 if (TREE_CODE (TREE_OPERAND (declarator
, 1))
6126 return get_scope_of_declarator (TREE_OPERAND
6128 /* Otherwise, if the declarator-id is a SCOPE_REF, the scope in
6129 which the declaration occurs is the first operand. */
6130 return TREE_OPERAND (declarator
, 0);
6133 /* Attributes to be applied. The declarator is TREE_VALUE. */
6134 return get_scope_of_declarator (TREE_VALUE (declarator
));
6137 /* Otherwise, we have a declarator-id which is not a qualified
6138 name; the entity will be declared in the current scope. */
6143 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
6144 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
6148 create_array_type_for_decl (tree name
, tree type
, tree size
)
6150 tree itype
= NULL_TREE
;
6151 const char* error_msg
;
6153 /* If things have already gone awry, bail now. */
6154 if (type
== error_mark_node
|| size
== error_mark_node
)
6155 return error_mark_node
;
6157 /* Assume that everything will go OK. */
6160 /* There are some types which cannot be array elements. */
6161 switch (TREE_CODE (type
))
6164 error_msg
= "array of void";
6168 error_msg
= "array of functions";
6171 case REFERENCE_TYPE
:
6172 error_msg
= "array of references";
6176 error_msg
= "array of function members";
6183 /* If something went wrong, issue an error-message and return. */
6187 error ("declaration of `%D' as %s", name
, error_msg
);
6189 error ("creating %s", error_msg
);
6191 return error_mark_node
;
6196 The constant expressions that specify the bounds of the arrays
6197 can be omitted only for the first member of the sequence. */
6198 if (TREE_CODE (type
) == ARRAY_TYPE
&& !TYPE_DOMAIN (type
))
6201 error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
6204 error ("multidimensional array must have bounds for all dimensions except the first");
6206 return error_mark_node
;
6209 /* Figure out the index type for the array. */
6211 itype
= compute_array_index_type (name
, size
);
6213 return build_cplus_array_type (type
, itype
);
6216 /* Check that it's OK to declare a function with the indicated TYPE.
6217 SFK indicates the kind of special function (if any) that this
6218 function is. OPTYPE is the type given in a conversion operator
6219 declaration. Returns the actual return type of the function; that
6220 may be different than TYPE if an error occurs, or for certain
6221 special functions. */
6224 check_special_function_return_type (special_function_kind sfk
,
6230 case sfk_constructor
:
6232 error ("return type specification for constructor invalid");
6234 type
= void_type_node
;
6237 case sfk_destructor
:
6239 error ("return type specification for destructor invalid");
6240 type
= void_type_node
;
6243 case sfk_conversion
:
6244 if (type
&& !same_type_p (type
, optype
))
6245 error ("operator `%T' declared to return `%T'", optype
, type
);
6247 pedwarn ("return type specified for `operator %T'", optype
);
6259 /* Given declspecs and a declarator (abstract or otherwise), determine
6260 the name and type of the object declared and construct a DECL node
6263 DECLSPECS is a chain of tree_list nodes whose value fields
6264 are the storage classes and type specifiers.
6266 DECL_CONTEXT says which syntactic context this declaration is in:
6267 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6268 FUNCDEF for a function definition. Like NORMAL but a few different
6269 error messages in each case. Return value may be zero meaning
6270 this definition is too screwy to try to parse.
6271 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
6272 handle member functions (which have FIELD context).
6273 Return value may be zero meaning this definition is too screwy to
6275 PARM for a parameter declaration (either within a function prototype
6276 or before a function body). Make a PARM_DECL, or return void_type_node.
6277 CATCHPARM for a parameter declaration before a catch clause.
6278 TYPENAME if for a typename (in a cast or sizeof).
6279 Don't make a DECL node; just return the ..._TYPE node.
6280 FIELD for a struct or union field; make a FIELD_DECL.
6281 BITFIELD for a field with specified width.
6282 INITIALIZED is 1 if the decl has an initializer.
6284 ATTRLIST is a pointer to the list of attributes, which may be NULL
6285 if there are none; *ATTRLIST may be modified if attributes from inside
6286 the declarator should be applied to the declaration.
6288 When this function is called, scoping variables (such as
6289 CURRENT_CLASS_TYPE) should reflect the scope in which the
6290 declaration occurs, not the scope in which the new declaration will
6291 be placed. For example, on:
6295 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6296 should not be `S'. */
6299 grokdeclarator (tree declarator
,
6301 enum decl_context decl_context
,
6305 RID_BIT_TYPE specbits
;
6308 tree type
= NULL_TREE
;
6311 int virtualp
, explicitp
, friendp
, inlinep
, staticp
;
6312 int explicit_int
= 0;
6313 int explicit_char
= 0;
6314 int defaulted_int
= 0;
6315 int extern_langp
= 0;
6316 tree dependant_name
= NULL_TREE
;
6318 tree typedef_decl
= NULL_TREE
;
6320 tree typedef_type
= NULL_TREE
;
6321 int funcdef_flag
= 0;
6322 enum tree_code innermost_code
= ERROR_MARK
;
6325 /* See the code below that used this. */
6326 tree decl_attr
= NULL_TREE
;
6329 /* Keep track of what sort of function is being processed
6330 so that we can warn about default return values, or explicit
6331 return values which do not match prescribed defaults. */
6332 special_function_kind sfk
= sfk_none
;
6334 tree dname
= NULL_TREE
;
6335 tree ctype
= current_class_type
;
6336 tree ctor_return_type
= NULL_TREE
;
6337 enum overload_flags flags
= NO_SPECIAL
;
6338 tree quals
= NULL_TREE
;
6339 tree raises
= NULL_TREE
;
6340 int template_count
= 0;
6341 tree in_namespace
= NULL_TREE
;
6342 tree returned_attrs
= NULL_TREE
;
6343 tree scope
= NULL_TREE
;
6344 tree parms
= NULL_TREE
;
6346 RIDBIT_RESET_ALL (specbits
);
6347 if (decl_context
== FUNCDEF
)
6348 funcdef_flag
= 1, decl_context
= NORMAL
;
6349 else if (decl_context
== MEMFUNCDEF
)
6350 funcdef_flag
= -1, decl_context
= FIELD
;
6351 else if (decl_context
== BITFIELD
)
6352 bitfield
= 1, decl_context
= FIELD
;
6354 /* Look inside a declarator for the name being declared
6355 and get it as a string, for an error message. */
6357 tree
*next
= &declarator
;
6361 while (next
&& *next
)
6364 switch (TREE_CODE (decl
))
6367 /* For attributes. */
6368 next
= &TREE_VALUE (decl
);
6373 next
= &TREE_OPERAND (decl
, 0);
6376 case BIT_NOT_EXPR
: /* For C++ destructors! */
6378 tree name
= TREE_OPERAND (decl
, 0);
6379 tree rename
= NULL_TREE
;
6381 my_friendly_assert (flags
== NO_SPECIAL
, 152);
6383 sfk
= sfk_destructor
;
6385 TREE_OPERAND (decl
, 0) = name
= constructor_name (name
);
6386 my_friendly_assert (TREE_CODE (name
) == IDENTIFIER_NODE
, 153);
6387 if (ctype
== NULL_TREE
)
6389 if (current_class_type
== NULL_TREE
)
6391 error ("destructors must be member functions");
6396 tree t
= constructor_name (current_class_type
);
6403 tree t
= constructor_name (ctype
);
6410 error ("destructor `%T' must match class name `%T'",
6412 TREE_OPERAND (decl
, 0) = rename
;
6418 case ADDR_EXPR
: /* C++ reference declaration */
6423 innermost_code
= TREE_CODE (decl
);
6424 next
= &TREE_OPERAND (decl
, 0);
6428 innermost_code
= TREE_CODE (decl
);
6429 if (decl_context
== FIELD
&& ctype
== NULL_TREE
)
6430 ctype
= current_class_type
;
6432 && TREE_OPERAND (decl
, 0)
6433 && (TREE_CODE (TREE_OPERAND (decl
, 0)) == TYPE_DECL
6434 && constructor_name_p (DECL_NAME (TREE_OPERAND (decl
, 0)),
6436 TREE_OPERAND (decl
, 0) = constructor_name (ctype
);
6437 next
= &TREE_OPERAND (decl
, 0);
6439 if (ctype
!= NULL_TREE
6440 && decl
!= NULL_TREE
&& flags
!= DTOR_FLAG
6441 && constructor_name_p (decl
, ctype
))
6443 sfk
= sfk_constructor
;
6444 ctor_return_type
= ctype
;
6449 case TEMPLATE_ID_EXPR
:
6451 tree fns
= TREE_OPERAND (decl
, 0);
6454 if (TREE_CODE (dname
) == COMPONENT_REF
)
6455 dname
= TREE_OPERAND (dname
, 1);
6456 if (TREE_CODE (dname
) != IDENTIFIER_NODE
)
6458 my_friendly_assert (is_overloaded_fn (dname
),
6460 dname
= DECL_NAME (get_first_fn (dname
));
6465 case IDENTIFIER_NODE
:
6466 if (TREE_CODE (decl
) == IDENTIFIER_NODE
)
6471 if (C_IS_RESERVED_WORD (dname
))
6473 error ("declarator-id missing; using reserved word `%D'",
6475 name
= IDENTIFIER_POINTER (dname
);
6477 else if (!IDENTIFIER_TYPENAME_P (dname
))
6478 name
= IDENTIFIER_POINTER (dname
);
6481 my_friendly_assert (flags
== NO_SPECIAL
, 154);
6482 flags
= TYPENAME_FLAG
;
6483 ctor_return_type
= TREE_TYPE (dname
);
6484 sfk
= sfk_conversion
;
6485 if (is_typename_at_global_scope (dname
))
6486 name
= IDENTIFIER_POINTER (dname
);
6488 name
= "<invalid operator>";
6495 /* Perform error checking, and decide on a ctype. */
6496 tree cname
= TREE_OPERAND (decl
, 0);
6497 if (cname
== NULL_TREE
)
6499 else if (TREE_CODE (cname
) == NAMESPACE_DECL
)
6502 in_namespace
= TREE_OPERAND (decl
, 0);
6504 else if (! is_aggr_type (cname
, 1))
6506 /* Must test TREE_OPERAND (decl, 1), in case user gives
6507 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
6508 else if (TREE_OPERAND (decl
, 1)
6509 && TREE_CODE (TREE_OPERAND (decl
, 1)) == INDIRECT_REF
)
6511 else if (TREE_CODE (cname
) == TEMPLATE_TYPE_PARM
6512 || TREE_CODE (cname
) == BOUND_TEMPLATE_TEMPLATE_PARM
)
6514 /* This might be declaring a member of a template
6515 parm to be a friend. */
6517 dependant_name
= TREE_OPERAND (decl
, 1);
6519 else if (ctype
== NULL_TREE
)
6521 else if (TREE_COMPLEXITY (decl
) == current_class_depth
)
6525 if (! UNIQUELY_DERIVED_FROM_P (cname
, ctype
))
6527 error ("type `%T' is not derived from type `%T'",
6535 /* It is valid to write:
6537 class C { void f(); };
6541 The standard is not clear about whether `typedef const C D' is
6542 legal; as of 2002-09-15 the committee is considering
6543 that question. EDG 3.0 allows that syntax.
6544 Therefore, we do as well. */
6546 ctype
= TYPE_MAIN_VARIANT (ctype
);
6547 /* Update the declarator so that when we process it
6548 again the correct type is present. */
6549 TREE_OPERAND (decl
, 0) = ctype
;
6551 if (ctype
&& TREE_CODE (TREE_OPERAND (decl
, 1)) == TYPE_DECL
6552 && constructor_name_p (DECL_NAME (TREE_OPERAND (decl
, 1)),
6554 TREE_OPERAND (decl
, 1) = constructor_name (ctype
);
6555 next
= &TREE_OPERAND (decl
, 1);
6561 if (TREE_CODE (name
) == BIT_NOT_EXPR
)
6562 name
= TREE_OPERAND (name
, 0);
6564 if (!constructor_name_p (decl
, ctype
))
6566 else if (decl
== name
)
6568 sfk
= sfk_constructor
;
6569 ctor_return_type
= ctype
;
6573 sfk
= sfk_destructor
;
6574 ctor_return_type
= ctype
;
6576 TREE_OPERAND (decl
, 0) = constructor_name (ctype
);
6577 next
= &TREE_OPERAND (decl
, 0);
6588 /* Parse error puts this typespec where
6589 a declarator should go. */
6590 error ("`%T' specified as declarator-id", DECL_NAME (decl
));
6591 if (TREE_TYPE (decl
) == current_class_type
)
6592 error (" perhaps you want `%T' for a constructor",
6593 current_class_name
);
6594 dname
= DECL_NAME (decl
);
6595 name
= IDENTIFIER_POINTER (dname
);
6597 /* Avoid giving two errors for this. */
6598 IDENTIFIER_CLASS_VALUE (dname
) = NULL_TREE
;
6600 declspecs
= tree_cons (NULL_TREE
, integer_type_node
, declspecs
);
6606 next
= &BASELINK_FUNCTIONS (decl
);
6610 /* Sometimes, we see a template-name used as part of a
6611 decl-specifier like in
6612 std::allocator alloc;
6613 Handle that gracefully. */
6614 error ("invalid use of template-name '%E' in a declarator", decl
);
6615 return error_mark_node
;
6619 my_friendly_assert (0, 20020917);
6624 /* A function definition's declarator must have the form of
6625 a function declarator. */
6627 if (funcdef_flag
&& innermost_code
!= CALL_EXPR
)
6630 if (((dname
&& IDENTIFIER_OPNAME_P (dname
)) || flags
== TYPENAME_FLAG
)
6631 && innermost_code
!= CALL_EXPR
6632 && ! (ctype
&& declspecs
== NULL_TREE
))
6634 error ("declaration of `%D' as non-function", dname
);
6635 return void_type_node
;
6638 /* Anything declared one level down from the top level
6639 must be one of the parameters of a function
6640 (because the body is at least two levels down). */
6642 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
6643 by not allowing C++ class definitions to specify their parameters
6644 with xdecls (must be spec.d in the parmlist).
6646 Since we now wait to push a class scope until we are sure that
6647 we are in a legitimate method context, we must set oldcname
6648 explicitly (since current_class_name is not yet alive).
6650 We also want to avoid calling this a PARM if it is in a namespace. */
6652 if (decl_context
== NORMAL
&& !toplevel_bindings_p ())
6654 struct cp_binding_level
*b
= current_binding_level
;
6655 current_binding_level
= b
->level_chain
;
6656 if (current_binding_level
!= 0 && toplevel_bindings_p ())
6657 decl_context
= PARM
;
6658 current_binding_level
= b
;
6662 name
= decl_context
== PARM
? "parameter" : "type name";
6664 /* Look through the decl specs and record which ones appear.
6665 Some typespecs are defined as built-in typenames.
6666 Others, the ones that are modifiers of other types,
6667 are represented by bits in SPECBITS: set the bits for
6668 the modifiers that appear. Storage class keywords are also in SPECBITS.
6670 If there is a typedef name or a type, store the type in TYPE.
6671 This includes builtin typedefs such as `int'.
6673 Set EXPLICIT_INT if the type is `int' or `char' and did not
6674 come from a user typedef.
6676 Set LONGLONG if `long' is mentioned twice.
6678 For C++, constructors and destructors have their own fast treatment. */
6680 for (spec
= declspecs
; spec
; spec
= TREE_CHAIN (spec
))
6685 /* Certain parse errors slip through. For example,
6686 `int class;' is not caught by the parser. Try
6687 weakly to recover here. */
6688 if (TREE_CODE (spec
) != TREE_LIST
)
6691 id
= TREE_VALUE (spec
);
6693 /* If the entire declaration is itself tagged as deprecated then
6694 suppress reports of deprecated items. */
6695 if (!adding_implicit_members
&& id
&& TREE_DEPRECATED (id
))
6697 if (deprecated_state
!= DEPRECATED_SUPPRESS
)
6698 warn_deprecated_use (id
);
6701 if (TREE_CODE (id
) == IDENTIFIER_NODE
)
6703 if (id
== ridpointers
[(int) RID_INT
]
6704 || id
== ridpointers
[(int) RID_CHAR
]
6705 || id
== ridpointers
[(int) RID_BOOL
]
6706 || id
== ridpointers
[(int) RID_WCHAR
])
6710 if (id
== ridpointers
[(int) RID_BOOL
])
6711 error ("`bool' is now a keyword");
6713 error ("extraneous `%T' ignored", id
);
6717 if (id
== ridpointers
[(int) RID_INT
])
6719 else if (id
== ridpointers
[(int) RID_CHAR
])
6721 type
= TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id
));
6725 /* C++ aggregate types. */
6726 if (IDENTIFIER_HAS_TYPE_VALUE (id
))
6729 error ("multiple declarations `%T' and `%T'", type
, id
);
6731 type
= IDENTIFIER_TYPE_VALUE (id
);
6735 for (i
= (int) RID_FIRST_MODIFIER
; i
<= (int) RID_LAST_MODIFIER
; i
++)
6737 if (ridpointers
[i
] == id
)
6739 if (i
== (int) RID_LONG
&& RIDBIT_SETP (i
, specbits
))
6741 if (pedantic
&& ! in_system_header
&& warn_long_long
)
6742 pedwarn ("ISO C++ does not support `long long'");
6744 error ("`long long long' is too long for GCC");
6748 else if (RIDBIT_SETP (i
, specbits
))
6749 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id
));
6751 /* Diagnose "__thread extern" or "__thread static". */
6752 if (RIDBIT_SETP (RID_THREAD
, specbits
))
6754 if (i
== (int)RID_EXTERN
)
6755 error ("`__thread' before `extern'");
6756 else if (i
== (int)RID_STATIC
)
6757 error ("`__thread' before `static'");
6760 if (i
== (int)RID_EXTERN
6761 && TREE_PURPOSE (spec
) == error_mark_node
)
6762 /* This extern was part of a language linkage. */
6765 RIDBIT_SET (i
, specbits
);
6770 else if (TREE_CODE (id
) == TYPE_DECL
)
6773 error ("multiple declarations `%T' and `%T'", type
,
6777 type
= TREE_TYPE (id
);
6778 TREE_VALUE (spec
) = type
;
6784 error ("two or more data types in declaration of `%s'", name
);
6785 else if (TREE_CODE (id
) == IDENTIFIER_NODE
)
6787 tree t
= lookup_name (id
, 1);
6788 if (!t
|| TREE_CODE (t
) != TYPE_DECL
)
6789 error ("`%s' fails to be a typedef or built in type",
6790 IDENTIFIER_POINTER (id
));
6793 type
= TREE_TYPE (t
);
6797 else if (id
!= error_mark_node
)
6798 /* Can't change CLASS nodes into RECORD nodes here! */
6805 /* See the code below that used this. */
6807 decl_attr
= DECL_ATTRIBUTES (typedef_decl
);
6809 typedef_type
= type
;
6811 /* No type at all: default to `int', and set DEFAULTED_INT
6812 because it was not a user-defined typedef. */
6814 if (type
== NULL_TREE
6815 && (RIDBIT_SETP (RID_SIGNED
, specbits
)
6816 || RIDBIT_SETP (RID_UNSIGNED
, specbits
)
6817 || RIDBIT_SETP (RID_LONG
, specbits
)
6818 || RIDBIT_SETP (RID_SHORT
, specbits
)))
6820 /* These imply 'int'. */
6821 type
= integer_type_node
;
6825 if (sfk
!= sfk_none
)
6826 type
= check_special_function_return_type (sfk
, type
,
6828 else if (type
== NULL_TREE
)
6834 /* We handle `main' specially here, because 'main () { }' is so
6835 common. With no options, it is allowed. With -Wreturn-type,
6836 it is a warning. It is only an error with -pedantic-errors. */
6837 is_main
= (funcdef_flag
6838 && dname
&& MAIN_NAME_P (dname
)
6839 && ctype
== NULL_TREE
6840 && in_namespace
== NULL_TREE
6841 && current_namespace
== global_namespace
);
6843 if (in_system_header
|| flag_ms_extensions
)
6844 /* Allow it, sigh. */;
6845 else if (pedantic
|| ! is_main
)
6846 pedwarn ("ISO C++ forbids declaration of `%s' with no type",
6848 else if (warn_return_type
)
6849 warning ("ISO C++ forbids declaration of `%s' with no type",
6852 type
= integer_type_node
;
6857 /* Now process the modifiers that were specified
6858 and check for invalid combinations. */
6860 /* Long double is a special combination. */
6862 if (RIDBIT_SETP (RID_LONG
, specbits
)
6863 && TYPE_MAIN_VARIANT (type
) == double_type_node
)
6865 RIDBIT_RESET (RID_LONG
, specbits
);
6866 type
= build_qualified_type (long_double_type_node
,
6867 cp_type_quals (type
));
6870 /* Check all other uses of type modifiers. */
6872 if (RIDBIT_SETP (RID_UNSIGNED
, specbits
)
6873 || RIDBIT_SETP (RID_SIGNED
, specbits
)
6874 || RIDBIT_SETP (RID_LONG
, specbits
)
6875 || RIDBIT_SETP (RID_SHORT
, specbits
))
6879 if (TREE_CODE (type
) == REAL_TYPE
)
6880 error ("short, signed or unsigned invalid for `%s'", name
);
6881 else if (TREE_CODE (type
) != INTEGER_TYPE
)
6882 error ("long, short, signed or unsigned invalid for `%s'", name
);
6883 else if (RIDBIT_SETP (RID_LONG
, specbits
)
6884 && RIDBIT_SETP (RID_SHORT
, specbits
))
6885 error ("long and short specified together for `%s'", name
);
6886 else if ((RIDBIT_SETP (RID_LONG
, specbits
)
6887 || RIDBIT_SETP (RID_SHORT
, specbits
))
6889 error ("long or short specified with char for `%s'", name
);
6890 else if ((RIDBIT_SETP (RID_LONG
, specbits
)
6891 || RIDBIT_SETP (RID_SHORT
, specbits
))
6892 && TREE_CODE (type
) == REAL_TYPE
)
6893 error ("long or short specified with floating type for `%s'", name
);
6894 else if (RIDBIT_SETP (RID_SIGNED
, specbits
)
6895 && RIDBIT_SETP (RID_UNSIGNED
, specbits
))
6896 error ("signed and unsigned given together for `%s'", name
);
6900 if (!explicit_int
&& !defaulted_int
&& !explicit_char
&& pedantic
)
6902 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
6904 if (flag_pedantic_errors
)
6909 /* Discard the type modifiers if they are invalid. */
6912 RIDBIT_RESET (RID_UNSIGNED
, specbits
);
6913 RIDBIT_RESET (RID_SIGNED
, specbits
);
6914 RIDBIT_RESET (RID_LONG
, specbits
);
6915 RIDBIT_RESET (RID_SHORT
, specbits
);
6920 if (RIDBIT_SETP (RID_COMPLEX
, specbits
)
6921 && TREE_CODE (type
) != INTEGER_TYPE
&& TREE_CODE (type
) != REAL_TYPE
)
6923 error ("complex invalid for `%s'", name
);
6924 RIDBIT_RESET (RID_COMPLEX
, specbits
);
6927 /* Decide whether an integer type is signed or not.
6928 Optionally treat bitfields as signed by default. */
6929 if (RIDBIT_SETP (RID_UNSIGNED
, specbits
)
6932 It is implementation-defined whether a plain (neither
6933 explicitly signed or unsigned) char, short, int, or long
6934 bit-field is signed or unsigned.
6936 Naturally, we extend this to long long as well. Note that
6937 this does not include wchar_t. */
6938 || (bitfield
&& !flag_signed_bitfields
6939 && RIDBIT_NOTSETP (RID_SIGNED
, specbits
)
6940 /* A typedef for plain `int' without `signed' can be
6941 controlled just like plain `int', but a typedef for
6942 `signed int' cannot be so controlled. */
6944 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl
))
6945 && (TREE_CODE (type
) == INTEGER_TYPE
6946 || TREE_CODE (type
) == CHAR_TYPE
)
6947 && !same_type_p (TYPE_MAIN_VARIANT (type
), wchar_type_node
)))
6950 type
= long_long_unsigned_type_node
;
6951 else if (RIDBIT_SETP (RID_LONG
, specbits
))
6952 type
= long_unsigned_type_node
;
6953 else if (RIDBIT_SETP (RID_SHORT
, specbits
))
6954 type
= short_unsigned_type_node
;
6955 else if (type
== char_type_node
)
6956 type
= unsigned_char_type_node
;
6957 else if (typedef_decl
)
6958 type
= c_common_unsigned_type (type
);
6960 type
= unsigned_type_node
;
6962 else if (RIDBIT_SETP (RID_SIGNED
, specbits
)
6963 && type
== char_type_node
)
6964 type
= signed_char_type_node
;
6966 type
= long_long_integer_type_node
;
6967 else if (RIDBIT_SETP (RID_LONG
, specbits
))
6968 type
= long_integer_type_node
;
6969 else if (RIDBIT_SETP (RID_SHORT
, specbits
))
6970 type
= short_integer_type_node
;
6972 if (RIDBIT_SETP (RID_COMPLEX
, specbits
))
6974 /* If we just have "complex", it is equivalent to
6975 "complex double", but if any modifiers at all are specified it is
6976 the complex form of TYPE. E.g, "complex short" is
6977 "complex short int". */
6979 if (defaulted_int
&& ! longlong
6980 && ! (RIDBIT_SETP (RID_LONG
, specbits
)
6981 || RIDBIT_SETP (RID_SHORT
, specbits
)
6982 || RIDBIT_SETP (RID_SIGNED
, specbits
)
6983 || RIDBIT_SETP (RID_UNSIGNED
, specbits
)))
6984 type
= complex_double_type_node
;
6985 else if (type
== integer_type_node
)
6986 type
= complex_integer_type_node
;
6987 else if (type
== float_type_node
)
6988 type
= complex_float_type_node
;
6989 else if (type
== double_type_node
)
6990 type
= complex_double_type_node
;
6991 else if (type
== long_double_type_node
)
6992 type
= complex_long_double_type_node
;
6994 type
= build_complex_type (type
);
6997 type_quals
= TYPE_UNQUALIFIED
;
6998 if (RIDBIT_SETP (RID_CONST
, specbits
))
6999 type_quals
|= TYPE_QUAL_CONST
;
7000 if (RIDBIT_SETP (RID_VOLATILE
, specbits
))
7001 type_quals
|= TYPE_QUAL_VOLATILE
;
7002 if (RIDBIT_SETP (RID_RESTRICT
, specbits
))
7003 type_quals
|= TYPE_QUAL_RESTRICT
;
7004 if (sfk
== sfk_conversion
&& type_quals
!= TYPE_UNQUALIFIED
)
7005 error ("qualifiers are not allowed on declaration of `operator %T'",
7008 type_quals
|= cp_type_quals (type
);
7009 type
= cp_build_qualified_type_real
7010 (type
, type_quals
, ((typedef_decl
&& !DECL_ARTIFICIAL (typedef_decl
)
7011 ? tf_ignore_bad_quals
: 0) | tf_error
| tf_warning
));
7012 /* We might have ignored or rejected some of the qualifiers. */
7013 type_quals
= cp_type_quals (type
);
7016 inlinep
= !! RIDBIT_SETP (RID_INLINE
, specbits
);
7017 virtualp
= RIDBIT_SETP (RID_VIRTUAL
, specbits
);
7018 RIDBIT_RESET (RID_VIRTUAL
, specbits
);
7019 explicitp
= RIDBIT_SETP (RID_EXPLICIT
, specbits
) != 0;
7020 RIDBIT_RESET (RID_EXPLICIT
, specbits
);
7022 if (RIDBIT_SETP (RID_STATIC
, specbits
))
7023 staticp
= 1 + (decl_context
== FIELD
);
7025 if (virtualp
&& staticp
== 2)
7027 error ("member `%D' cannot be declared both virtual and static",
7031 friendp
= RIDBIT_SETP (RID_FRIEND
, specbits
);
7032 RIDBIT_RESET (RID_FRIEND
, specbits
);
7034 if (dependant_name
&& !friendp
)
7036 error ("`%T::%D' is not a valid declarator", ctype
, dependant_name
);
7037 return void_type_node
;
7040 /* Warn if two storage classes are given. Default to `auto'. */
7042 if (RIDBIT_ANY_SET (specbits
))
7044 if (RIDBIT_SETP (RID_STATIC
, specbits
)) nclasses
++;
7045 if (RIDBIT_SETP (RID_EXTERN
, specbits
) && !extern_langp
) nclasses
++;
7046 if (RIDBIT_SETP (RID_THREAD
, specbits
)) nclasses
++;
7047 if (decl_context
== PARM
&& nclasses
> 0)
7048 error ("storage class specifiers invalid in parameter declarations");
7049 if (RIDBIT_SETP (RID_TYPEDEF
, specbits
))
7051 if (decl_context
== PARM
)
7052 error ("typedef declaration invalid in parameter declaration");
7055 if (RIDBIT_SETP (RID_AUTO
, specbits
)) nclasses
++;
7056 if (RIDBIT_SETP (RID_REGISTER
, specbits
)) nclasses
++;
7057 if (!nclasses
&& !friendp
&& extern_langp
)
7061 /* Give error if `virtual' is used outside of class declaration. */
7063 && (current_class_name
== NULL_TREE
|| decl_context
!= FIELD
))
7065 error ("virtual outside class declaration");
7069 /* Static anonymous unions are dealt with here. */
7070 if (staticp
&& decl_context
== TYPENAME
7071 && TREE_CODE (declspecs
) == TREE_LIST
7072 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs
)))
7073 decl_context
= FIELD
;
7075 /* Warn about storage classes that are invalid for certain
7076 kinds of declarations (parameters, typenames, etc.). */
7078 /* "static __thread" and "extern __thread" are allowed. */
7080 && RIDBIT_SETP (RID_THREAD
, specbits
)
7081 && (RIDBIT_SETP (RID_EXTERN
, specbits
)
7082 || RIDBIT_SETP (RID_STATIC
, specbits
)))
7086 error ("multiple storage classes in declaration of `%s'", name
);
7087 else if (decl_context
!= NORMAL
&& nclasses
> 0)
7089 if ((decl_context
== PARM
|| decl_context
== CATCHPARM
)
7090 && (RIDBIT_SETP (RID_REGISTER
, specbits
)
7091 || RIDBIT_SETP (RID_AUTO
, specbits
)))
7093 else if (RIDBIT_SETP (RID_TYPEDEF
, specbits
))
7095 else if (decl_context
== FIELD
7096 /* C++ allows static class elements. */
7097 && RIDBIT_SETP (RID_STATIC
, specbits
))
7098 /* C++ also allows inlines and signed and unsigned elements,
7099 but in those cases we don't come in here. */
7103 if (decl_context
== FIELD
)
7105 tree tmp
= NULL_TREE
;
7110 /* Avoid trying to get an operand off an identifier node. */
7111 if (TREE_CODE (declarator
) == IDENTIFIER_NODE
)
7114 tmp
= TREE_OPERAND (declarator
, 0);
7115 op
= IDENTIFIER_OPNAME_P (tmp
);
7116 if (IDENTIFIER_TYPENAME_P (tmp
))
7118 if (is_typename_at_global_scope (tmp
))
7119 name
= IDENTIFIER_POINTER (tmp
);
7121 name
= "<invalid operator>";
7124 error ("storage class specified for %s `%s'",
7125 op
? "member operator" : "field",
7130 if (decl_context
== PARM
|| decl_context
== CATCHPARM
)
7131 error ("storage class specified for parameter `%s'", name
);
7133 error ("storage class specified for typename");
7135 RIDBIT_RESET (RID_REGISTER
, specbits
);
7136 RIDBIT_RESET (RID_AUTO
, specbits
);
7137 RIDBIT_RESET (RID_EXTERN
, specbits
);
7138 RIDBIT_RESET (RID_THREAD
, specbits
);
7141 else if (RIDBIT_SETP (RID_EXTERN
, specbits
) && initialized
&& !funcdef_flag
)
7143 if (toplevel_bindings_p ())
7145 /* It's common practice (and completely valid) to have a const
7146 be initialized and declared extern. */
7147 if (!(type_quals
& TYPE_QUAL_CONST
))
7148 warning ("`%s' initialized and declared `extern'", name
);
7151 error ("`%s' has both `extern' and initializer", name
);
7153 else if (RIDBIT_SETP (RID_EXTERN
, specbits
) && funcdef_flag
7154 && ! toplevel_bindings_p ())
7155 error ("nested function `%s' declared `extern'", name
);
7156 else if (toplevel_bindings_p ())
7158 if (RIDBIT_SETP (RID_AUTO
, specbits
))
7159 error ("top-level declaration of `%s' specifies `auto'", name
);
7161 else if (RIDBIT_SETP (RID_THREAD
, specbits
)
7162 && !RIDBIT_SETP (RID_EXTERN
, specbits
)
7163 && !RIDBIT_SETP (RID_STATIC
, specbits
))
7165 error ("function-scope `%s' implicitly auto and declared `__thread'",
7167 RIDBIT_RESET (RID_THREAD
, specbits
);
7170 if (nclasses
> 0 && friendp
)
7171 error ("storage class specifiers invalid in friend function declarations");
7173 scope
= get_scope_of_declarator (declarator
);
7175 /* Now figure out the structure of the declarator proper.
7176 Descend through it, creating more complex types, until we reach
7177 the declared identifier (or NULL_TREE, in an abstract declarator). */
7179 while (declarator
&& TREE_CODE (declarator
) != IDENTIFIER_NODE
7180 && TREE_CODE (declarator
) != TEMPLATE_ID_EXPR
)
7182 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
7183 an INDIRECT_REF (for *...),
7184 a CALL_EXPR (for ...(...)),
7185 an identifier (for the name being declared)
7186 or a null pointer (for the place in an absolute declarator
7187 where the name was omitted).
7188 For the last two cases, we have just exited the loop.
7190 For C++ it could also be
7191 a SCOPE_REF (for class :: ...). In this case, we have converted
7192 sensible names to types, and those are the values we use to
7193 qualify the member name.
7194 an ADDR_EXPR (for &...),
7195 a BIT_NOT_EXPR (for destructors)
7197 At this point, TYPE is the type of elements of an array,
7198 or for a function to return, or for a pointer to point to.
7199 After this sequence of ifs, TYPE is the type of the
7200 array or function or pointer, and DECLARATOR has had its
7201 outermost layer removed. */
7203 if (type
== error_mark_node
)
7205 if (declarator
== error_mark_node
)
7206 return error_mark_node
;
7207 else if (TREE_CODE (declarator
) == SCOPE_REF
)
7208 declarator
= TREE_OPERAND (declarator
, 1);
7210 declarator
= TREE_OPERAND (declarator
, 0);
7213 if (quals
!= NULL_TREE
7214 && (declarator
== NULL_TREE
7215 || TREE_CODE (declarator
) != SCOPE_REF
))
7217 if (ctype
== NULL_TREE
&& TREE_CODE (type
) == METHOD_TYPE
)
7218 ctype
= TYPE_METHOD_BASETYPE (type
);
7219 if (ctype
!= NULL_TREE
)
7221 tree dummy
= build_decl (TYPE_DECL
, NULL_TREE
, type
);
7222 grok_method_quals (ctype
, dummy
, quals
);
7223 type
= TREE_TYPE (dummy
);
7228 switch (TREE_CODE (declarator
))
7232 /* We encode a declarator with embedded attributes using
7234 tree attrs
= TREE_PURPOSE (declarator
);
7238 declarator
= TREE_VALUE (declarator
);
7239 inner_decl
= declarator
;
7240 while (inner_decl
!= NULL_TREE
7241 && TREE_CODE (inner_decl
) == TREE_LIST
)
7242 inner_decl
= TREE_VALUE (inner_decl
);
7244 if (inner_decl
== NULL_TREE
7245 || TREE_CODE (inner_decl
) == IDENTIFIER_NODE
)
7246 attr_flags
|= (int) ATTR_FLAG_DECL_NEXT
;
7247 if (TREE_CODE (inner_decl
) == CALL_EXPR
)
7248 attr_flags
|= (int) ATTR_FLAG_FUNCTION_NEXT
;
7249 if (TREE_CODE (inner_decl
) == ARRAY_REF
)
7250 attr_flags
|= (int) ATTR_FLAG_ARRAY_NEXT
;
7251 returned_attrs
= decl_attributes (&type
,
7252 chainon (returned_attrs
, attrs
),
7259 tree size
= TREE_OPERAND (declarator
, 1);
7260 declarator
= TREE_OPERAND (declarator
, 0);
7262 type
= create_array_type_for_decl (dname
, type
, size
);
7265 && (TREE_CODE (declarator
) == INDIRECT_REF
7266 || TREE_CODE (declarator
) == ADDR_EXPR
))
7267 /* We can never complete an array type which is the target of a
7268 pointer, so go ahead and lay it out. */
7279 tree inner_parms
= CALL_DECLARATOR_PARMS (declarator
);
7280 tree inner_decl
= TREE_OPERAND (declarator
, 0);
7282 /* Declaring a function type.
7283 Make sure we have a valid type for the function to return. */
7285 /* We now know that the TYPE_QUALS don't apply to the
7286 decl, but to its return type. */
7287 type_quals
= TYPE_UNQUALIFIED
;
7289 /* Warn about some types functions can't return. */
7291 if (TREE_CODE (type
) == FUNCTION_TYPE
)
7293 error ("`%s' declared as function returning a function", name
);
7294 type
= integer_type_node
;
7296 if (TREE_CODE (type
) == ARRAY_TYPE
)
7298 error ("`%s' declared as function returning an array", name
);
7299 type
= integer_type_node
;
7302 if (inner_decl
&& TREE_CODE (inner_decl
) == SCOPE_REF
)
7303 inner_decl
= TREE_OPERAND (inner_decl
, 1);
7305 if (inner_decl
&& TREE_CODE (inner_decl
) == TEMPLATE_ID_EXPR
)
7308 /* Pick up type qualifiers which should be applied to `this'. */
7309 quals
= CALL_DECLARATOR_QUALS (declarator
);
7311 /* Pick up the exception specifications. */
7312 raises
= CALL_DECLARATOR_EXCEPTION_SPEC (declarator
);
7314 /* Say it's a definition only for the CALL_EXPR
7315 closest to the identifier. */
7318 && (TREE_CODE (inner_decl
) == IDENTIFIER_NODE
7319 || TREE_CODE (inner_decl
) == TEMPLATE_ID_EXPR
7320 || TREE_CODE (inner_decl
) == BIT_NOT_EXPR
);
7322 if (ctype
== NULL_TREE
7323 && decl_context
== FIELD
7325 && (friendp
== 0 || dname
== current_class_name
))
7326 ctype
= current_class_type
;
7328 if (ctype
&& sfk
== sfk_conversion
)
7329 TYPE_HAS_CONVERSION (ctype
) = 1;
7330 if (ctype
&& constructor_name_p (dname
, ctype
))
7332 /* We are within a class's scope. If our declarator name
7333 is the same as the class name, and we are defining
7334 a function, then it is a constructor/destructor, and
7335 therefore returns a void type. */
7337 if (flags
== DTOR_FLAG
)
7339 /* ISO C++ 12.4/2. A destructor may not be
7340 declared const or volatile. A destructor may
7343 error ("destructor cannot be static member function");
7346 error ("destructors may not be `%s'",
7347 IDENTIFIER_POINTER (TREE_VALUE (quals
)));
7350 if (decl_context
== FIELD
)
7352 if (! member_function_or_else (ctype
,
7355 return void_type_node
;
7358 else /* It's a constructor. */
7362 /* ISO C++ 12.1. A constructor may not be
7363 declared const or volatile. A constructor may
7364 not be virtual. A constructor may not be
7367 error ("constructor cannot be static member function");
7370 pedwarn ("constructors cannot be declared virtual");
7375 error ("constructors may not be `%s'",
7376 IDENTIFIER_POINTER (TREE_VALUE (quals
)));
7380 RID_BIT_TYPE tmp_bits
;
7381 memcpy (&tmp_bits
, &specbits
, sizeof (RID_BIT_TYPE
));
7382 RIDBIT_RESET (RID_INLINE
, tmp_bits
);
7383 RIDBIT_RESET (RID_STATIC
, tmp_bits
);
7384 if (RIDBIT_ANY_SET (tmp_bits
))
7385 error ("return value type specifier for constructor ignored");
7387 if (decl_context
== FIELD
)
7389 if (! member_function_or_else (ctype
,
7392 return void_type_node
;
7393 TYPE_HAS_CONSTRUCTOR (ctype
) = 1;
7394 if (sfk
!= sfk_constructor
)
7398 if (decl_context
== FIELD
)
7404 error ("can't initialize friend function `%s'", name
);
7407 /* Cannot be both friend and virtual. */
7408 error ("virtual functions cannot be friends");
7409 RIDBIT_RESET (RID_FRIEND
, specbits
);
7412 if (decl_context
== NORMAL
)
7413 error ("friend declaration not in class definition");
7414 if (current_function_decl
&& funcdef_flag
)
7415 error ("can't define friend function `%s' in a local class definition",
7419 /* Construct the function type and go to the next
7420 inner layer of declarator. */
7422 declarator
= TREE_OPERAND (declarator
, 0);
7424 arg_types
= grokparms (inner_parms
, &parms
);
7426 if (declarator
&& flags
== DTOR_FLAG
)
7428 /* A destructor declared in the body of a class will
7429 be represented as a BIT_NOT_EXPR. But, we just
7430 want the underlying IDENTIFIER. */
7431 if (TREE_CODE (declarator
) == BIT_NOT_EXPR
)
7432 declarator
= TREE_OPERAND (declarator
, 0);
7434 if (arg_types
!= void_list_node
)
7436 error ("destructors may not have parameters");
7437 arg_types
= void_list_node
;
7442 /* ANSI says that `const int foo ();'
7443 does not make the function foo const. */
7444 type
= build_function_type (type
, arg_types
);
7450 /* Filter out pointers-to-references and references-to-references.
7451 We can get these if a TYPE_DECL is used. */
7453 if (TREE_CODE (type
) == REFERENCE_TYPE
)
7455 error (TREE_CODE (declarator
) == ADDR_EXPR
7456 ? "cannot declare reference to `%#T'"
7457 : "cannot declare pointer to `%#T'", type
);
7458 type
= TREE_TYPE (type
);
7460 else if (VOID_TYPE_P (type
)
7461 && (ctype
|| TREE_CODE (declarator
) == ADDR_EXPR
))
7462 error (ctype
? "cannot declare pointer to `%#T' member"
7463 : "cannot declare reference to `%#T'", type
);
7465 /* Merge any constancy or volatility into the target type
7468 /* We now know that the TYPE_QUALS don't apply to the decl,
7469 but to the target of the pointer. */
7470 type_quals
= TYPE_UNQUALIFIED
;
7472 if (TREE_CODE (declarator
) == ADDR_EXPR
)
7474 if (!VOID_TYPE_P (type
))
7475 type
= build_reference_type (type
);
7477 else if (TREE_CODE (type
) == METHOD_TYPE
)
7478 type
= build_ptrmemfunc_type (build_pointer_type (type
));
7480 type
= build_ptrmem_type (ctype
, type
);
7482 type
= build_pointer_type (type
);
7484 /* Process a list of type modifier keywords (such as
7485 const or volatile) that were given inside the `*' or `&'. */
7487 if (TREE_TYPE (declarator
))
7495 for (typemodlist
= TREE_TYPE (declarator
); typemodlist
;
7496 typemodlist
= TREE_CHAIN (typemodlist
))
7498 tree qualifier
= TREE_VALUE (typemodlist
);
7500 if (qualifier
== ridpointers
[(int) RID_CONST
])
7503 type_quals
|= TYPE_QUAL_CONST
;
7505 else if (qualifier
== ridpointers
[(int) RID_VOLATILE
])
7508 type_quals
|= TYPE_QUAL_VOLATILE
;
7510 else if (qualifier
== ridpointers
[(int) RID_RESTRICT
])
7513 type_quals
|= TYPE_QUAL_RESTRICT
;
7518 error ("invalid type modifier within pointer declarator");
7522 pedwarn ("duplicate `const'");
7524 pedwarn ("duplicate `volatile'");
7526 pedwarn ("duplicate `restrict'");
7527 type
= cp_build_qualified_type (type
, type_quals
);
7528 type_quals
= cp_type_quals (type
);
7530 declarator
= TREE_OPERAND (declarator
, 0);
7536 /* We have converted type names to NULL_TREE if the
7537 name was bogus, or to a _TYPE node, if not.
7539 The variable CTYPE holds the type we will ultimately
7540 resolve to. The code here just needs to build
7541 up appropriate member types. */
7542 tree sname
= TREE_OPERAND (declarator
, 1);
7545 /* Destructors can have their visibilities changed as well. */
7546 if (TREE_CODE (sname
) == BIT_NOT_EXPR
)
7547 sname
= TREE_OPERAND (sname
, 0);
7549 if (TREE_OPERAND (declarator
, 0) == NULL_TREE
)
7551 /* We had a reference to a global decl, or
7552 perhaps we were given a non-aggregate typedef,
7553 in which case we cleared this out, and should just
7554 keep going as though it wasn't there. */
7558 ctype
= TREE_OPERAND (declarator
, 0);
7561 while (t
!= NULL_TREE
&& CLASS_TYPE_P (t
))
7563 /* You're supposed to have one `template <...>'
7564 for every template class, but you don't need one
7565 for a full specialization. For example:
7567 template <class T> struct S{};
7568 template <> struct S<int> { void f(); };
7569 void S<int>::f () {}
7571 is correct; there shouldn't be a `template <>' for
7572 the definition of `S<int>::f'. */
7573 if (CLASSTYPE_TEMPLATE_INFO (t
)
7574 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t
)
7575 || uses_template_parms (CLASSTYPE_TI_ARGS (t
)))
7576 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t
)))
7577 template_count
+= 1;
7579 t
= TYPE_MAIN_DECL (t
);
7580 t
= DECL_CONTEXT (t
);
7583 if (sname
== NULL_TREE
)
7586 if (TREE_CODE (sname
) == IDENTIFIER_NODE
)
7588 /* This is the `standard' use of the scoping operator:
7589 basetype :: member . */
7591 if (ctype
== current_class_type
)
7597 Is this ill-formed? */
7600 pedwarn ("extra qualification `%T::' on member `%s' ignored",
7603 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
7605 if (NEW_DELETE_OPNAME_P (sname
))
7606 /* Overloaded operator new and operator delete
7607 are always static functions. */
7609 else if (current_class_type
== NULL_TREE
|| friendp
)
7611 = build_method_type_directly (ctype
,
7613 TYPE_ARG_TYPES (type
));
7616 error ("cannot declare member function `%T::%s' within `%T'",
7617 ctype
, name
, current_class_type
);
7618 return error_mark_node
;
7621 else if (RIDBIT_SETP (RID_TYPEDEF
, specbits
)
7622 || COMPLETE_TYPE_P (complete_type (ctype
)))
7624 /* Have to move this code elsewhere in this function.
7625 this code is used for i.e., typedef int A::M; M *pm;
7627 It is? How? jason 10/2/94 */
7629 if (current_class_type
)
7631 error ("cannot declare member `%T::%s' within `%T'",
7632 ctype
, name
, current_class_type
);
7633 return void_type_node
;
7638 cxx_incomplete_type_error (NULL_TREE
, ctype
);
7639 return error_mark_node
;
7644 else if (TREE_CODE (sname
) == SCOPE_REF
)
7649 declarator
= TREE_OPERAND (declarator
, 1);
7650 if (declarator
&& TREE_CODE (declarator
) == CALL_EXPR
)
7651 /* In this case, we will deal with it later. */
7653 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
7654 type
= build_method_type_directly (ctype
,
7656 TYPE_ARG_TYPES (type
));
7662 declarator
= TREE_OPERAND (declarator
, 0);
7666 declarator
= BASELINK_FUNCTIONS (declarator
);
7672 declarator
= NULL_TREE
;
7676 declarator
= NULL_TREE
;
7687 *attrlist
= chainon (returned_attrs
, *attrlist
);
7689 attrlist
= &returned_attrs
;
7692 /* Now TYPE has the actual type. */
7694 /* Did array size calculations overflow? */
7696 if (TREE_CODE (type
) == ARRAY_TYPE
7697 && COMPLETE_TYPE_P (type
)
7698 && TREE_OVERFLOW (TYPE_SIZE (type
)))
7700 error ("size of array `%s' is too large", name
);
7701 /* If we proceed with the array type as it is, we'll eventually
7702 crash in tree_low_cst(). */
7703 type
= error_mark_node
;
7706 if ((decl_context
== FIELD
|| decl_context
== PARM
)
7707 && !processing_template_decl
7708 && variably_modified_type_p (type
))
7710 if (decl_context
== FIELD
)
7711 error ("data member may not have variably modified type `%T'", type
);
7713 error ("parameter may not have variably modified type `%T'", type
);
7714 type
= error_mark_node
;
7717 if (explicitp
== 1 || (explicitp
&& friendp
))
7719 /* [dcl.fct.spec] The explicit specifier shall only be used in
7720 declarations of constructors within a class definition. */
7721 error ("only declarations of constructors can be `explicit'");
7725 if (RIDBIT_SETP (RID_MUTABLE
, specbits
))
7727 if (decl_context
!= FIELD
|| friendp
)
7729 error ("non-member `%s' cannot be declared `mutable'", name
);
7730 RIDBIT_RESET (RID_MUTABLE
, specbits
);
7732 else if (decl_context
== TYPENAME
|| RIDBIT_SETP (RID_TYPEDEF
, specbits
))
7734 error ("non-object member `%s' cannot be declared `mutable'", name
);
7735 RIDBIT_RESET (RID_MUTABLE
, specbits
);
7737 else if (TREE_CODE (type
) == FUNCTION_TYPE
7738 || TREE_CODE (type
) == METHOD_TYPE
)
7740 error ("function `%s' cannot be declared `mutable'", name
);
7741 RIDBIT_RESET (RID_MUTABLE
, specbits
);
7745 error ("static `%s' cannot be declared `mutable'", name
);
7746 RIDBIT_RESET (RID_MUTABLE
, specbits
);
7748 else if (type_quals
& TYPE_QUAL_CONST
)
7750 error ("const `%s' cannot be declared `mutable'", name
);
7751 RIDBIT_RESET (RID_MUTABLE
, specbits
);
7755 if (declarator
== NULL_TREE
7756 || TREE_CODE (declarator
) == ERROR_MARK
7757 || TREE_CODE (declarator
) == IDENTIFIER_NODE
7758 || (TREE_CODE (declarator
) == TEMPLATE_ID_EXPR
7759 && (TREE_CODE (type
) == FUNCTION_TYPE
7760 || TREE_CODE (type
) == METHOD_TYPE
)))
7762 else if (TREE_CODE (declarator
) == TEMPLATE_ID_EXPR
)
7764 error ("template-id `%D' used as a declarator", declarator
);
7768 /* Unexpected declarator format. */
7771 /* If this is declaring a typedef name, return a TYPE_DECL. */
7773 if (RIDBIT_SETP (RID_TYPEDEF
, specbits
) && decl_context
!= TYPENAME
)
7777 /* Note that the grammar rejects storage classes
7778 in typenames, fields or parameters. */
7779 if (current_lang_name
== lang_name_java
)
7780 TYPE_FOR_JAVA (type
) = 1;
7782 if (decl_context
== FIELD
)
7784 if (constructor_name_p (declarator
, current_class_type
))
7785 pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
7787 decl
= build_lang_decl (TYPE_DECL
, declarator
, type
);
7791 decl
= build_decl (TYPE_DECL
, declarator
, type
);
7792 if (in_namespace
|| ctype
)
7793 error ("%Jtypedef name may not be a nested-name-specifier", decl
);
7794 if (!current_function_decl
)
7795 DECL_CONTEXT (decl
) = FROB_CONTEXT (current_namespace
);
7798 /* If the user declares "typedef struct {...} foo" then the
7799 struct will have an anonymous name. Fill that name in now.
7800 Nothing can refer to it, so nothing needs know about the name
7802 if (type
!= error_mark_node
7805 && TREE_CODE (TYPE_NAME (type
)) == TYPE_DECL
7806 && TYPE_ANONYMOUS_P (type
)
7807 /* Don't do this if there are attributes. */
7808 && (!attrlist
|| !*attrlist
)
7809 && cp_type_quals (type
) == TYPE_UNQUALIFIED
)
7811 tree oldname
= TYPE_NAME (type
);
7814 /* Replace the anonymous name with the real name everywhere. */
7815 lookup_tag_reverse (type
, declarator
);
7816 for (t
= TYPE_MAIN_VARIANT (type
); t
; t
= TYPE_NEXT_VARIANT (t
))
7817 if (TYPE_NAME (t
) == oldname
)
7818 TYPE_NAME (t
) = decl
;
7820 if (TYPE_LANG_SPECIFIC (type
))
7821 TYPE_WAS_ANONYMOUS (type
) = 1;
7823 /* If this is a typedef within a template class, the nested
7824 type is a (non-primary) template. The name for the
7825 template needs updating as well. */
7826 if (TYPE_LANG_SPECIFIC (type
) && CLASSTYPE_TEMPLATE_INFO (type
))
7827 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type
))
7828 = TYPE_IDENTIFIER (type
);
7830 /* FIXME remangle member functions; member functions of a
7831 type with external linkage have external linkage. */
7836 if (ctype
== NULL_TREE
)
7838 if (TREE_CODE (type
) != METHOD_TYPE
)
7839 error ("%Jinvalid type qualifier for non-member function type",
7842 ctype
= TYPE_METHOD_BASETYPE (type
);
7844 if (ctype
!= NULL_TREE
)
7845 grok_method_quals (ctype
, decl
, quals
);
7848 if (RIDBIT_SETP (RID_SIGNED
, specbits
)
7849 || (typedef_decl
&& C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl
)))
7850 C_TYPEDEF_EXPLICITLY_SIGNED (decl
) = 1;
7852 bad_specifiers (decl
, "type", virtualp
, quals
!= NULL_TREE
,
7853 inlinep
, friendp
, raises
!= NULL_TREE
);
7858 /* Detect the case of an array type of unspecified size
7859 which came, as such, direct from a typedef name.
7860 We must copy the type, so that the array's domain can be
7861 individually set by the object's initializer. */
7863 if (type
&& typedef_type
7864 && TREE_CODE (type
) == ARRAY_TYPE
&& !TYPE_DOMAIN (type
)
7865 && TYPE_MAIN_VARIANT (type
) == TYPE_MAIN_VARIANT (typedef_type
))
7866 type
= build_cplus_array_type (TREE_TYPE (type
), NULL_TREE
);
7868 /* Detect where we're using a typedef of function type to declare a
7869 function. PARMS will not be set, so we must create it now. */
7871 if (type
== typedef_type
&& TREE_CODE (type
) == FUNCTION_TYPE
)
7873 tree decls
= NULL_TREE
;
7876 for (args
= TYPE_ARG_TYPES (type
); args
; args
= TREE_CHAIN (args
))
7878 tree decl
= cp_build_parm_decl (NULL_TREE
, TREE_VALUE (args
));
7880 TREE_CHAIN (decl
) = decls
;
7884 parms
= nreverse (decls
);
7887 /* If this is a type name (such as, in a cast or sizeof),
7888 compute the type and return it now. */
7890 if (decl_context
== TYPENAME
)
7892 /* Note that the grammar rejects storage classes
7893 in typenames, fields or parameters. */
7894 if (type_quals
!= TYPE_UNQUALIFIED
)
7895 type_quals
= TYPE_UNQUALIFIED
;
7897 /* Special case: "friend class foo" looks like a TYPENAME context. */
7900 if (type_quals
!= TYPE_UNQUALIFIED
)
7902 error ("type qualifiers specified for friend class declaration");
7903 type_quals
= TYPE_UNQUALIFIED
;
7907 error ("`inline' specified for friend class declaration");
7913 /* Don't allow friend declaration without a class-key. */
7914 if (TREE_CODE (type
) == TEMPLATE_TYPE_PARM
)
7915 pedwarn ("template parameters cannot be friends");
7916 else if (TREE_CODE (type
) == TYPENAME_TYPE
)
7917 pedwarn ("friend declaration requires class-key, "
7918 "i.e. `friend class %T::%D'",
7919 TYPE_CONTEXT (type
), TYPENAME_TYPE_FULLNAME (type
));
7921 pedwarn ("friend declaration requires class-key, "
7922 "i.e. `friend %#T'",
7926 /* Only try to do this stuff if we didn't already give up. */
7927 if (type
!= integer_type_node
)
7929 /* A friendly class? */
7930 if (current_class_type
)
7931 make_friend_class (current_class_type
, TYPE_MAIN_VARIANT (type
),
7934 error ("trying to make class `%T' a friend of global scope",
7937 type
= void_type_node
;
7942 if (ctype
== NULL_TREE
)
7944 if (TREE_CODE (type
) != METHOD_TYPE
)
7945 error ("invalid qualifiers on non-member function type");
7947 ctype
= TYPE_METHOD_BASETYPE (type
);
7951 tree dummy
= build_decl (TYPE_DECL
, declarator
, type
);
7952 grok_method_quals (ctype
, dummy
, quals
);
7953 type
= TREE_TYPE (dummy
);
7959 else if (declarator
== NULL_TREE
&& decl_context
!= PARM
7960 && decl_context
!= CATCHPARM
7961 && TREE_CODE (type
) != UNION_TYPE
7964 error ("abstract declarator `%T' used as declaration", type
);
7965 declarator
= make_anon_name ();
7968 /* `void' at top level (not within pointer)
7969 is allowed only in typedefs or type names.
7970 We don't complain about parms either, but that is because
7971 a better error message can be made later. */
7973 if (TREE_CODE (type
) == VOID_TYPE
&& decl_context
!= PARM
)
7976 error ("unnamed variable or field declared void");
7977 else if (TREE_CODE (declarator
) == IDENTIFIER_NODE
)
7979 if (IDENTIFIER_OPNAME_P (declarator
))
7982 error ("variable or field `%s' declared void", name
);
7985 error ("variable or field declared void");
7986 type
= integer_type_node
;
7989 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
7990 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
7992 if (decl_context
== PARM
|| decl_context
== CATCHPARM
)
7994 if (ctype
|| in_namespace
)
7995 error ("cannot use `::' in parameter declaration");
7997 /* A parameter declared as an array of T is really a pointer to T.
7998 One declared as a function is really a pointer to a function.
7999 One declared as a member is really a pointer to member. */
8001 if (TREE_CODE (type
) == ARRAY_TYPE
)
8003 /* Transfer const-ness of array into that of type pointed to. */
8004 type
= build_pointer_type (TREE_TYPE (type
));
8005 type_quals
= TYPE_UNQUALIFIED
;
8007 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
8008 type
= build_pointer_type (type
);
8014 if (decl_context
== PARM
)
8016 decl
= cp_build_parm_decl (declarator
, type
);
8018 bad_specifiers (decl
, "parameter", virtualp
, quals
!= NULL_TREE
,
8019 inlinep
, friendp
, raises
!= NULL_TREE
);
8021 else if (decl_context
== FIELD
)
8023 /* The C99 flexible array extension. */
8024 if (!staticp
&& TREE_CODE (type
) == ARRAY_TYPE
8025 && TYPE_DOMAIN (type
) == NULL_TREE
)
8027 tree itype
= compute_array_index_type (dname
, integer_zero_node
);
8028 type
= build_cplus_array_type (TREE_TYPE (type
), itype
);
8031 if (type
== error_mark_node
)
8033 /* Happens when declaring arrays of sizes which
8034 are error_mark_node, for example. */
8037 else if (in_namespace
&& !friendp
)
8039 /* Something like struct S { int N::j; }; */
8040 error ("invalid use of `::'");
8043 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
8046 tree function_context
;
8048 /* We catch the others as conflicts with the builtin
8050 if (friendp
&& declarator
== ridpointers
[(int) RID_SIGNED
])
8052 error ("function `%D' cannot be declared friend",
8059 if (ctype
== NULL_TREE
)
8060 ctype
= current_class_type
;
8062 if (ctype
== NULL_TREE
)
8064 error ("can't make `%D' into a method -- not in a class",
8066 return void_type_node
;
8069 /* ``A union may [ ... ] not [ have ] virtual functions.''
8071 if (virtualp
&& TREE_CODE (ctype
) == UNION_TYPE
)
8073 error ("function `%D' declared virtual inside a union",
8075 return void_type_node
;
8078 if (NEW_DELETE_OPNAME_P (declarator
))
8082 error ("`%D' cannot be declared virtual, since it is always static",
8087 else if (staticp
< 2)
8088 type
= build_method_type_directly (ctype
,
8090 TYPE_ARG_TYPES (type
));
8093 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
8094 function_context
= (ctype
!= NULL_TREE
) ?
8095 decl_function_context (TYPE_MAIN_DECL (ctype
)) : NULL_TREE
;
8096 publicp
= (! friendp
|| ! staticp
)
8097 && function_context
== NULL_TREE
;
8098 decl
= grokfndecl (ctype
, type
,
8099 TREE_CODE (declarator
) != TEMPLATE_ID_EXPR
8100 ? declarator
: dname
,
8103 virtualp
, flags
, quals
, raises
,
8104 friendp
? -1 : 0, friendp
, publicp
, inlinep
,
8105 funcdef_flag
, template_count
, in_namespace
);
8106 if (decl
== NULL_TREE
)
8109 /* This clobbers the attrs stored in `decl' from `attrlist'. */
8110 /* The decl and setting of decl_attr is also turned off. */
8111 decl
= build_decl_attribute_variant (decl
, decl_attr
);
8114 /* [class.conv.ctor]
8116 A constructor declared without the function-specifier
8117 explicit that can be called with a single parameter
8118 specifies a conversion from the type of its first
8119 parameter to the type of its class. Such a constructor
8120 is called a converting constructor. */
8122 DECL_NONCONVERTING_P (decl
) = 1;
8123 else if (DECL_CONSTRUCTOR_P (decl
))
8125 /* The constructor can be called with exactly one
8126 parameter if there is at least one parameter, and
8127 any subsequent parameters have default arguments.
8128 Ignore any compiler-added parms. */
8129 tree arg_types
= FUNCTION_FIRST_USER_PARMTYPE (decl
);
8131 if (arg_types
== void_list_node
8133 && TREE_CHAIN (arg_types
)
8134 && TREE_CHAIN (arg_types
) != void_list_node
8135 && !TREE_PURPOSE (TREE_CHAIN (arg_types
))))
8136 DECL_NONCONVERTING_P (decl
) = 1;
8139 else if (TREE_CODE (type
) == METHOD_TYPE
)
8141 /* We only get here for friend declarations of
8142 members of other classes. */
8143 /* All method decls are public, so tell grokfndecl to set
8144 TREE_PUBLIC, also. */
8145 decl
= grokfndecl (ctype
, type
,
8146 TREE_CODE (declarator
) != TEMPLATE_ID_EXPR
8147 ? declarator
: dname
,
8150 virtualp
, flags
, quals
, raises
,
8151 friendp
? -1 : 0, friendp
, 1, 0, funcdef_flag
,
8152 template_count
, in_namespace
);
8153 if (decl
== NULL_TREE
)
8156 else if (!staticp
&& !dependent_type_p (type
)
8157 && !COMPLETE_TYPE_P (complete_type (type
))
8158 && (TREE_CODE (type
) != ARRAY_TYPE
|| initialized
== 0))
8161 error ("field `%D' has incomplete type", declarator
);
8163 error ("name `%T' has incomplete type", type
);
8165 /* If we're instantiating a template, tell them which
8166 instantiation made the field's type be incomplete. */
8167 if (current_class_type
8168 && TYPE_NAME (current_class_type
)
8169 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type
))
8170 && declspecs
&& TREE_VALUE (declspecs
)
8171 && TREE_TYPE (TREE_VALUE (declspecs
)) == type
)
8172 error (" in instantiation of template `%T'",
8173 current_class_type
);
8175 type
= error_mark_node
;
8182 error ("`%s' is neither function nor member function; cannot be declared friend",
8183 IDENTIFIER_POINTER (declarator
));
8191 /* Friends are treated specially. */
8192 if (ctype
== current_class_type
)
8193 warning ("member functions are implicitly friends of their class");
8194 else if (decl
&& DECL_NAME (decl
))
8196 if (template_class_depth (current_class_type
) == 0)
8198 decl
= check_explicit_specialization
8199 (declarator
, decl
, template_count
,
8200 2 * (funcdef_flag
!= 0) + 4);
8201 if (decl
== error_mark_node
)
8202 return error_mark_node
;
8205 decl
= do_friend (ctype
, declarator
, decl
,
8206 *attrlist
, flags
, quals
, funcdef_flag
);
8210 return void_type_node
;
8213 /* Structure field. It may not be a function, except for C++. */
8215 if (decl
== NULL_TREE
)
8221 /* An attempt is being made to initialize a non-static
8222 member. But, from [class.mem]:
8224 4 A member-declarator can contain a
8225 constant-initializer only if it declares a static
8226 member (_class.static_) of integral or enumeration
8227 type, see _class.static.data_.
8229 This used to be relatively common practice, but
8230 the rest of the compiler does not correctly
8231 handle the initialization unless the member is
8232 static so we make it static below. */
8233 pedwarn ("ISO C++ forbids initialization of member `%D'",
8235 pedwarn ("making `%D' static", declarator
);
8239 if (uses_template_parms (type
))
8240 /* We'll check at instantiation time. */
8242 else if (check_static_variable_definition (declarator
,
8244 /* If we just return the declaration, crashes
8245 will sometimes occur. We therefore return
8246 void_type_node, as if this was a friend
8247 declaration, to cause callers to completely
8248 ignore this declaration. */
8249 return void_type_node
;
8254 /* C++ allows static class members. All other work
8255 for this is done by grokfield. */
8256 decl
= build_lang_decl (VAR_DECL
, declarator
, type
);
8257 TREE_STATIC (decl
) = 1;
8258 /* In class context, 'static' means public access. */
8259 TREE_PUBLIC (decl
) = DECL_EXTERNAL (decl
) = 1;
8263 decl
= build_decl (FIELD_DECL
, declarator
, type
);
8264 DECL_NONADDRESSABLE_P (decl
) = bitfield
;
8265 if (RIDBIT_SETP (RID_MUTABLE
, specbits
))
8267 DECL_MUTABLE_P (decl
) = 1;
8268 RIDBIT_RESET (RID_MUTABLE
, specbits
);
8272 bad_specifiers (decl
, "field", virtualp
, quals
!= NULL_TREE
,
8273 inlinep
, friendp
, raises
!= NULL_TREE
);
8276 else if (TREE_CODE (type
) == FUNCTION_TYPE
8277 || TREE_CODE (type
) == METHOD_TYPE
)
8285 if (TREE_CODE (declarator
) == TEMPLATE_ID_EXPR
)
8286 original_name
= dname
;
8288 original_name
= declarator
;
8290 if (RIDBIT_SETP (RID_AUTO
, specbits
))
8291 error ("storage class `auto' invalid for function `%s'", name
);
8292 else if (RIDBIT_SETP (RID_REGISTER
, specbits
))
8293 error ("storage class `register' invalid for function `%s'", name
);
8294 else if (RIDBIT_SETP (RID_THREAD
, specbits
))
8295 error ("storage class `__thread' invalid for function `%s'", name
);
8297 /* Function declaration not at top level.
8298 Storage classes other than `extern' are not allowed
8299 and `extern' makes no difference. */
8300 if (! toplevel_bindings_p ()
8301 && (RIDBIT_SETP (RID_STATIC
, specbits
)
8302 || RIDBIT_SETP (RID_INLINE
, specbits
))
8305 if (RIDBIT_SETP (RID_STATIC
, specbits
))
8306 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name
);
8308 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name
);
8311 if (ctype
== NULL_TREE
)
8315 error ("virtual non-class function `%s'", name
);
8319 else if (TREE_CODE (type
) == FUNCTION_TYPE
&& staticp
< 2
8320 && !NEW_DELETE_OPNAME_P (original_name
))
8321 type
= build_method_type_directly (ctype
,
8323 TYPE_ARG_TYPES (type
));
8325 /* Record presence of `static'. */
8326 publicp
= (ctype
!= NULL_TREE
8327 || RIDBIT_SETP (RID_EXTERN
, specbits
)
8328 || !RIDBIT_SETP (RID_STATIC
, specbits
));
8330 decl
= grokfndecl (ctype
, type
, original_name
, parms
, declarator
,
8331 virtualp
, flags
, quals
, raises
,
8333 publicp
, inlinep
, funcdef_flag
,
8334 template_count
, in_namespace
);
8335 if (decl
== NULL_TREE
)
8340 int invalid_static
= 0;
8342 /* Don't allow a static member function in a class, and forbid
8343 declaring main to be static. */
8344 if (TREE_CODE (type
) == METHOD_TYPE
)
8346 pedwarn ("cannot declare member function `%D' to have static linkage", decl
);
8349 else if (current_function_decl
)
8351 /* FIXME need arm citation */
8352 error ("cannot declare static function inside another function");
8359 RIDBIT_RESET (RID_STATIC
, specbits
);
8365 /* It's a variable. */
8367 /* An uninitialized decl with `extern' is a reference. */
8368 decl
= grokvardecl (type
, declarator
, &specbits
,
8370 (type_quals
& TYPE_QUAL_CONST
) != 0,
8371 ctype
? ctype
: in_namespace
);
8372 bad_specifiers (decl
, "variable", virtualp
, quals
!= NULL_TREE
,
8373 inlinep
, friendp
, raises
!= NULL_TREE
);
8377 DECL_CONTEXT (decl
) = ctype
;
8380 pedwarn ("`static' may not be used when defining (as opposed to declaring) a static data member");
8382 RIDBIT_RESET (RID_STATIC
, specbits
);
8384 if (RIDBIT_SETP (RID_REGISTER
, specbits
) && TREE_STATIC (decl
))
8386 error ("static member `%D' declared `register'", decl
);
8387 RIDBIT_RESET (RID_REGISTER
, specbits
);
8389 if (RIDBIT_SETP (RID_EXTERN
, specbits
) && pedantic
)
8391 pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
8393 RIDBIT_RESET (RID_EXTERN
, specbits
);
8398 my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE
, specbits
), 19990927);
8400 /* Record `register' declaration for warnings on &
8401 and in case doing stupid register allocation. */
8403 if (RIDBIT_SETP (RID_REGISTER
, specbits
))
8404 DECL_REGISTER (decl
) = 1;
8406 if (RIDBIT_SETP (RID_EXTERN
, specbits
))
8407 DECL_THIS_EXTERN (decl
) = 1;
8409 if (RIDBIT_SETP (RID_STATIC
, specbits
))
8410 DECL_THIS_STATIC (decl
) = 1;
8412 /* Record constancy and volatility. There's no need to do this
8413 when processing a template; we'll do this for the instantiated
8414 declaration based on the type of DECL. */
8415 if (!processing_template_decl
)
8416 c_apply_type_quals_to_decl (type_quals
, decl
);
8422 /* Subroutine of start_function. Ensure that each of the parameter
8423 types (as listed in PARMS) is complete, as is required for a
8424 function definition. */
8427 require_complete_types_for_parms (tree parms
)
8429 for (; parms
; parms
= TREE_CHAIN (parms
))
8431 if (VOID_TYPE_P (TREE_TYPE (parms
)))
8432 /* grokparms will have already issued an error. */
8433 TREE_TYPE (parms
) = error_mark_node
;
8434 else if (complete_type_or_else (TREE_TYPE (parms
), parms
))
8436 layout_decl (parms
, 0);
8437 DECL_ARG_TYPE (parms
) = type_passed_as (TREE_TYPE (parms
));
8442 /* Returns nonzero if T is a local variable. */
8445 local_variable_p (tree t
)
8447 if ((TREE_CODE (t
) == VAR_DECL
8448 /* A VAR_DECL with a context that is a _TYPE is a static data
8450 && !TYPE_P (CP_DECL_CONTEXT (t
))
8451 /* Any other non-local variable must be at namespace scope. */
8452 && !DECL_NAMESPACE_SCOPE_P (t
))
8453 || (TREE_CODE (t
) == PARM_DECL
))
8459 /* Returns nonzero if T is an automatic local variable or a label.
8460 (These are the declarations that need to be remapped when the code
8461 containing them is duplicated.) */
8464 nonstatic_local_decl_p (tree t
)
8466 return ((local_variable_p (t
) && !TREE_STATIC (t
))
8467 || TREE_CODE (t
) == LABEL_DECL
8468 || TREE_CODE (t
) == RESULT_DECL
);
8471 /* Like local_variable_p, but suitable for use as a tree-walking
8475 local_variable_p_walkfn (tree
* tp
,
8476 int* walk_subtrees ATTRIBUTE_UNUSED
,
8477 void* data ATTRIBUTE_UNUSED
)
8479 return ((local_variable_p (*tp
) && !DECL_ARTIFICIAL (*tp
))
8483 /* Check that ARG, which is a default-argument expression for a
8484 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
8485 something goes wrong. DECL may also be a _TYPE node, rather than a
8486 DECL, if there is no DECL available. */
8489 check_default_argument (tree decl
, tree arg
)
8494 if (TREE_CODE (arg
) == DEFAULT_ARG
)
8495 /* We get a DEFAULT_ARG when looking at an in-class declaration
8496 with a default argument. Ignore the argument for now; we'll
8497 deal with it after the class is complete. */
8500 if (processing_template_decl
|| uses_template_parms (arg
))
8501 /* We don't do anything checking until instantiation-time. Note
8502 that there may be uninstantiated arguments even for an
8503 instantiated function, since default arguments are not
8504 instantiated until they are needed. */
8513 decl_type
= TREE_TYPE (decl
);
8515 if (arg
== error_mark_node
8516 || decl
== error_mark_node
8517 || TREE_TYPE (arg
) == error_mark_node
8518 || decl_type
== error_mark_node
)
8519 /* Something already went wrong. There's no need to check
8521 return error_mark_node
;
8523 /* [dcl.fct.default]
8525 A default argument expression is implicitly converted to the
8527 if (!TREE_TYPE (arg
)
8528 || !can_convert_arg (decl_type
, TREE_TYPE (arg
), arg
))
8531 error ("default argument for `%#D' has type `%T'",
8532 decl
, TREE_TYPE (arg
));
8534 error ("default argument for parameter of type `%T' has type `%T'",
8535 decl_type
, TREE_TYPE (arg
));
8537 return error_mark_node
;
8540 /* [dcl.fct.default]
8542 Local variables shall not be used in default argument
8545 The keyword `this' shall not be used in a default argument of a
8547 var
= walk_tree_without_duplicates (&arg
, local_variable_p_walkfn
,
8551 error ("default argument `%E' uses local variable `%D'",
8553 return error_mark_node
;
8560 /* Decode the list of parameter types for a function type.
8561 Given the list of things declared inside the parens,
8562 return a list of types.
8564 We determine whether ellipsis parms are used by PARMLIST_ELLIPSIS_P
8565 flag. If unset, we append void_list_node. A parmlist declared
8566 as `(void)' is accepted as the empty parmlist.
8568 *PARMS is set to the chain of PARM_DECLs created. */
8571 grokparms (tree first_parm
, tree
*parms
)
8573 tree result
= NULL_TREE
;
8574 tree decls
= NULL_TREE
;
8575 int ellipsis
= !first_parm
|| PARMLIST_ELLIPSIS_P (first_parm
);
8579 my_friendly_assert (!first_parm
|| TREE_PARMLIST (first_parm
), 20001115);
8581 for (parm
= first_parm
; parm
!= NULL_TREE
; parm
= chain
)
8583 tree type
= NULL_TREE
;
8584 tree decl
= TREE_VALUE (parm
);
8585 tree init
= TREE_PURPOSE (parm
);
8588 chain
= TREE_CHAIN (parm
);
8589 /* @@ weak defense against parse errors. */
8590 if (TREE_CODE (decl
) != VOID_TYPE
8591 && TREE_CODE (decl
) != TREE_LIST
)
8593 /* Give various messages as the need arises. */
8594 if (TREE_CODE (decl
) == STRING_CST
)
8595 error ("invalid string constant `%E'", decl
);
8596 else if (TREE_CODE (decl
) == INTEGER_CST
)
8597 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
8601 if (parm
== void_list_node
)
8604 split_specs_attrs (TREE_PURPOSE (decl
), &specs
, &attrs
);
8605 decl
= grokdeclarator (TREE_VALUE (decl
), specs
,
8606 PARM
, init
!= NULL_TREE
, &attrs
);
8607 if (! decl
|| TREE_TYPE (decl
) == error_mark_node
)
8611 cplus_decl_attributes (&decl
, attrs
, 0);
8613 type
= TREE_TYPE (decl
);
8614 if (VOID_TYPE_P (type
))
8616 if (same_type_p (type
, void_type_node
)
8617 && !DECL_NAME (decl
) && !result
&& !chain
&& !ellipsis
)
8618 /* this is a parmlist of `(void)', which is ok. */
8620 cxx_incomplete_type_error (decl
, type
);
8621 /* It's not a good idea to actually create parameters of
8622 type `void'; other parts of the compiler assume that a
8623 void type terminates the parameter list. */
8624 type
= error_mark_node
;
8625 TREE_TYPE (decl
) = error_mark_node
;
8628 if (type
!= error_mark_node
)
8630 /* Top-level qualifiers on the parameters are
8631 ignored for function types. */
8632 type
= cp_build_qualified_type (type
, 0);
8633 if (TREE_CODE (type
) == METHOD_TYPE
)
8635 error ("parameter `%D' invalidly declared method type", decl
);
8636 type
= build_pointer_type (type
);
8637 TREE_TYPE (decl
) = type
;
8639 else if (abstract_virtuals_error (decl
, type
))
8640 any_error
= 1; /* Seems like a good idea. */
8641 else if (POINTER_TYPE_P (type
))
8643 /* [dcl.fct]/6, parameter types cannot contain pointers
8644 (references) to arrays of unknown bound. */
8645 tree t
= TREE_TYPE (type
);
8646 int ptr
= TYPE_PTR_P (type
);
8652 else if (TREE_CODE (t
) != ARRAY_TYPE
)
8654 else if (!TYPE_DOMAIN (t
))
8658 if (TREE_CODE (t
) == ARRAY_TYPE
)
8659 error ("parameter `%D' includes %s to array of unknown bound `%T'",
8660 decl
, ptr
? "pointer" : "reference", t
);
8663 if (!any_error
&& init
)
8664 init
= check_default_argument (decl
, init
);
8669 TREE_CHAIN (decl
) = decls
;
8671 result
= tree_cons (init
, type
, result
);
8673 decls
= nreverse (decls
);
8674 result
= nreverse (result
);
8676 result
= chainon (result
, void_list_node
);
8683 /* D is a constructor or overloaded `operator='.
8685 Let T be the class in which D is declared. Then, this function
8688 -1 if D's is an ill-formed constructor or copy assignment operator
8689 whose first parameter is of type `T'.
8690 0 if D is not a copy constructor or copy assignment
8692 1 if D is a copy constructor or copy assignment operator whose
8693 first parameter is a reference to const qualified T.
8694 2 if D is a copy constructor or copy assignment operator whose
8695 first parameter is a reference to non-const qualified T.
8697 This function can be used as a predicate. Positive values indicate
8698 a copy constructor and nonzero values indicate a copy assignment
8708 my_friendly_assert (DECL_FUNCTION_MEMBER_P (d
), 20011208);
8710 if (DECL_TEMPLATE_INFO (d
) && is_member_template (DECL_TI_TEMPLATE (d
)))
8711 /* Instantiations of template member functions are never copy
8712 functions. Note that member functions of templated classes are
8713 represented as template functions internally, and we must
8714 accept those as copy functions. */
8717 args
= FUNCTION_FIRST_USER_PARMTYPE (d
);
8721 arg_type
= TREE_VALUE (args
);
8723 if (TYPE_MAIN_VARIANT (arg_type
) == DECL_CONTEXT (d
))
8725 /* Pass by value copy assignment operator. */
8728 else if (TREE_CODE (arg_type
) == REFERENCE_TYPE
8729 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type
)) == DECL_CONTEXT (d
))
8731 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type
)))
8737 args
= TREE_CHAIN (args
);
8739 if (args
&& args
!= void_list_node
&& !TREE_PURPOSE (args
))
8740 /* There are more non-optional args. */
8746 /* Remember any special properties of member function DECL. */
8748 void grok_special_member_properties (tree decl
)
8750 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P(decl
))
8751 ; /* Not special. */
8752 else if (DECL_CONSTRUCTOR_P (decl
))
8754 int ctor
= copy_fn_p (decl
);
8760 A non-template constructor for class X is a copy
8761 constructor if its first parameter is of type X&, const
8762 X&, volatile X& or const volatile X&, and either there
8763 are no other parameters or else all other parameters have
8764 default arguments. */
8765 TYPE_HAS_INIT_REF (DECL_CONTEXT (decl
)) = 1;
8767 TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl
)) = 1;
8769 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl
)))
8770 TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl
)) = 1;
8772 else if (DECL_OVERLOADED_OPERATOR_P (decl
) == NOP_EXPR
)
8776 A non-template assignment operator for class X is a copy
8777 assignment operator if its parameter is of type X, X&, const
8778 X&, volatile X& or const volatile X&. */
8780 int assop
= copy_fn_p (decl
);
8784 TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl
)) = 1;
8786 TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl
)) = 1;
8787 if (DECL_PURE_VIRTUAL_P (decl
))
8788 TYPE_HAS_ABSTRACT_ASSIGN_REF (DECL_CONTEXT (decl
)) = 1;
8793 /* Check a constructor DECL has the correct form. Complains
8794 if the class has a constructor of the form X(X). */
8797 grok_ctor_properties (tree ctype
, tree decl
)
8799 int ctor_parm
= copy_fn_p (decl
);
8805 A declaration of a constructor for a class X is ill-formed if
8806 its first parameter is of type (optionally cv-qualified) X
8807 and either there are no other parameters or else all other
8808 parameters have default arguments.
8810 We *don't* complain about member template instantiations that
8811 have this form, though; they can occur as we try to decide
8812 what constructor to use during overload resolution. Since
8813 overload resolution will never prefer such a constructor to
8814 the non-template copy constructor (which is either explicitly
8815 or implicitly defined), there's no need to worry about their
8816 existence. Theoretically, they should never even be
8817 instantiated, but that's hard to forestall. */
8818 error ("invalid constructor; you probably meant `%T (const %T&)'",
8826 /* An operator with this code is unary, but can also be binary. */
8829 ambi_op_p (enum tree_code code
)
8831 return (code
== INDIRECT_REF
8832 || code
== ADDR_EXPR
8833 || code
== CONVERT_EXPR
8834 || code
== NEGATE_EXPR
8835 || code
== PREINCREMENT_EXPR
8836 || code
== PREDECREMENT_EXPR
);
8839 /* An operator with this name can only be unary. */
8842 unary_op_p (enum tree_code code
)
8844 return (code
== TRUTH_NOT_EXPR
8845 || code
== BIT_NOT_EXPR
8846 || code
== COMPONENT_REF
8847 || code
== TYPE_EXPR
);
8850 /* DECL is a declaration for an overloaded operator. Returns true if
8851 the declaration is valid; false otherwise. If COMPLAIN is true,
8852 errors are issued for invalid declarations. */
8855 grok_op_properties (tree decl
, int friendp
, bool complain
)
8857 tree argtypes
= TYPE_ARG_TYPES (TREE_TYPE (decl
));
8859 int methodp
= (TREE_CODE (TREE_TYPE (decl
)) == METHOD_TYPE
);
8860 tree name
= DECL_NAME (decl
);
8861 enum tree_code operator_code
;
8865 /* Assume that the declaration is valid. */
8868 /* Count the number of arguments. */
8869 for (argtype
= argtypes
, arity
= 0;
8870 argtype
&& argtype
!= void_list_node
;
8871 argtype
= TREE_CHAIN (argtype
))
8874 if (current_class_type
== NULL_TREE
)
8877 if (DECL_CONV_FN_P (decl
))
8878 operator_code
= TYPE_EXPR
;
8882 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
8883 if (ansi_opname (CODE) == name) \
8885 operator_code = (CODE); \
8888 else if (ansi_assopname (CODE) == name) \
8890 operator_code = (CODE); \
8891 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
8895 #include "operators.def"
8901 my_friendly_assert (operator_code
!= LAST_CPLUS_TREE_CODE
, 20000526);
8902 SET_OVERLOADED_OPERATOR_CODE (decl
, operator_code
);
8906 switch (operator_code
)
8909 TYPE_HAS_NEW_OPERATOR (current_class_type
) = 1;
8913 TYPE_GETS_DELETE (current_class_type
) |= 1;
8917 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type
) = 1;
8920 case VEC_DELETE_EXPR
:
8921 TYPE_GETS_DELETE (current_class_type
) |= 2;
8929 if (operator_code
== NEW_EXPR
|| operator_code
== VEC_NEW_EXPR
)
8930 TREE_TYPE (decl
) = coerce_new_type (TREE_TYPE (decl
));
8931 else if (operator_code
== DELETE_EXPR
|| operator_code
== VEC_DELETE_EXPR
)
8932 TREE_TYPE (decl
) = coerce_delete_type (TREE_TYPE (decl
));
8935 /* An operator function must either be a non-static member function
8936 or have at least one parameter of a class, a reference to a class,
8937 an enumeration, or a reference to an enumeration. 13.4.0.6 */
8938 if (! methodp
|| DECL_STATIC_FUNCTION_P (decl
))
8940 if (operator_code
== TYPE_EXPR
8941 || operator_code
== CALL_EXPR
8942 || operator_code
== COMPONENT_REF
8943 || operator_code
== ARRAY_REF
8944 || operator_code
== NOP_EXPR
)
8945 error ("`%D' must be a nonstatic member function", decl
);
8950 if (DECL_STATIC_FUNCTION_P (decl
))
8951 error ("`%D' must be either a non-static member function or a non-member function", decl
);
8953 for (p
= argtypes
; p
&& p
!= void_list_node
; p
= TREE_CHAIN (p
))
8955 tree arg
= non_reference (TREE_VALUE (p
));
8956 /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
8957 because these checks are performed even on
8958 template functions. */
8959 if (IS_AGGR_TYPE (arg
) || TREE_CODE (arg
) == ENUMERAL_TYPE
)
8963 if (!p
|| p
== void_list_node
)
8968 error ("`%D' must have an argument of class or "
8976 /* There are no restrictions on the arguments to an overloaded
8978 if (operator_code
== CALL_EXPR
)
8981 if (IDENTIFIER_TYPENAME_P (name
) && ! DECL_TEMPLATE_INFO (decl
))
8983 tree t
= TREE_TYPE (name
);
8986 int ref
= (TREE_CODE (t
) == REFERENCE_TYPE
);
8987 const char *what
= 0;
8990 t
= TYPE_MAIN_VARIANT (TREE_TYPE (t
));
8992 if (TREE_CODE (t
) == VOID_TYPE
)
8994 else if (t
== current_class_type
)
8995 what
= "the same type";
8996 /* Don't force t to be complete here. */
8997 else if (IS_AGGR_TYPE (t
)
8998 && COMPLETE_TYPE_P (t
)
8999 && DERIVED_FROM_P (t
, current_class_type
))
9000 what
= "a base class";
9002 if (what
&& warn_conversion
)
9003 warning ("conversion to %s%s will never use a type conversion operator",
9004 ref
? "a reference to " : "", what
);
9007 if (operator_code
== COND_EXPR
)
9010 error ("ISO C++ prohibits overloading operator ?:");
9012 else if (ambi_op_p (operator_code
))
9015 /* We pick the one-argument operator codes by default, so
9016 we don't have to change anything. */
9018 else if (arity
== 2)
9020 /* If we thought this was a unary operator, we now know
9021 it to be a binary operator. */
9022 switch (operator_code
)
9025 operator_code
= MULT_EXPR
;
9029 operator_code
= BIT_AND_EXPR
;
9033 operator_code
= PLUS_EXPR
;
9037 operator_code
= MINUS_EXPR
;
9040 case PREINCREMENT_EXPR
:
9041 operator_code
= POSTINCREMENT_EXPR
;
9044 case PREDECREMENT_EXPR
:
9045 operator_code
= POSTDECREMENT_EXPR
;
9052 SET_OVERLOADED_OPERATOR_CODE (decl
, operator_code
);
9054 if ((operator_code
== POSTINCREMENT_EXPR
9055 || operator_code
== POSTDECREMENT_EXPR
)
9056 && ! processing_template_decl
9057 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes
)), integer_type_node
))
9060 error ("postfix `%D' must take `int' as its argument",
9064 ("postfix `%D' must take `int' as its second argument",
9071 error ("`%D' must take either zero or one argument", decl
);
9073 error ("`%D' must take either one or two arguments", decl
);
9076 /* More Effective C++ rule 6. */
9078 && (operator_code
== POSTINCREMENT_EXPR
9079 || operator_code
== POSTDECREMENT_EXPR
9080 || operator_code
== PREINCREMENT_EXPR
9081 || operator_code
== PREDECREMENT_EXPR
))
9083 tree arg
= TREE_VALUE (argtypes
);
9084 tree ret
= TREE_TYPE (TREE_TYPE (decl
));
9085 if (methodp
|| TREE_CODE (arg
) == REFERENCE_TYPE
)
9086 arg
= TREE_TYPE (arg
);
9087 arg
= TYPE_MAIN_VARIANT (arg
);
9088 if (operator_code
== PREINCREMENT_EXPR
9089 || operator_code
== PREDECREMENT_EXPR
)
9091 if (TREE_CODE (ret
) != REFERENCE_TYPE
9092 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret
)),
9094 warning ("prefix `%D' should return `%T'", decl
,
9095 build_reference_type (arg
));
9099 if (!same_type_p (TYPE_MAIN_VARIANT (ret
), arg
))
9100 warning ("postfix `%D' should return `%T'", decl
, arg
);
9104 else if (unary_op_p (operator_code
))
9109 error ("`%D' must take `void'", decl
);
9111 error ("`%D' must take exactly one argument", decl
);
9114 else /* if (binary_op_p (operator_code)) */
9119 error ("`%D' must take exactly one argument", decl
);
9121 error ("`%D' must take exactly two arguments", decl
);
9124 /* More Effective C++ rule 7. */
9126 && (operator_code
== TRUTH_ANDIF_EXPR
9127 || operator_code
== TRUTH_ORIF_EXPR
9128 || operator_code
== COMPOUND_EXPR
))
9129 warning ("user-defined `%D' always evaluates both arguments",
9133 /* Effective C++ rule 23. */
9136 && !DECL_ASSIGNMENT_OPERATOR_P (decl
)
9137 && (operator_code
== PLUS_EXPR
9138 || operator_code
== MINUS_EXPR
9139 || operator_code
== TRUNC_DIV_EXPR
9140 || operator_code
== MULT_EXPR
9141 || operator_code
== TRUNC_MOD_EXPR
)
9142 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl
))) == REFERENCE_TYPE
)
9143 warning ("`%D' should return by value", decl
);
9146 for (; argtypes
&& argtypes
!= void_list_node
;
9147 argtypes
= TREE_CHAIN (argtypes
))
9148 if (TREE_PURPOSE (argtypes
))
9150 TREE_PURPOSE (argtypes
) = NULL_TREE
;
9151 if (operator_code
== POSTINCREMENT_EXPR
9152 || operator_code
== POSTDECREMENT_EXPR
)
9155 pedwarn ("`%D' cannot have default arguments", decl
);
9158 error ("`%D' cannot have default arguments", decl
);
9167 tag_name (enum tag_types code
)
9184 /* Name lookup in an elaborated-type-specifier (after the keyword
9185 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
9186 elaborated-type-specifier is invalid, issue a diagnostic and return
9187 error_mark_node; otherwise, return the *_TYPE to which it referred.
9188 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
9191 check_elaborated_type_specifier (enum tag_types tag_code
,
9193 bool allow_template_p
)
9199 struct S { struct S *p; };
9201 name lookup will find the TYPE_DECL for the implicit "S::S"
9202 typedef. Adjust for that here. */
9203 if (DECL_SELF_REFERENCE_P (decl
))
9204 decl
= TYPE_NAME (TREE_TYPE (decl
));
9206 type
= TREE_TYPE (decl
);
9210 If the identifier resolves to a typedef-name or a template
9211 type-parameter, the elaborated-type-specifier is ill-formed.
9213 In other words, the only legitimate declaration to use in the
9214 elaborated type specifier is the implicit typedef created when
9215 the type is declared. */
9216 if (!DECL_IMPLICIT_TYPEDEF_P (decl
))
9218 error ("using typedef-name `%D' after `%s'", decl
, tag_name (tag_code
));
9219 return IS_AGGR_TYPE (type
) ? type
: error_mark_node
;
9222 if (TREE_CODE (type
) == TEMPLATE_TYPE_PARM
)
9224 error ("using template type parameter `%T' after `%s'",
9225 type
, tag_name (tag_code
));
9226 return error_mark_node
;
9228 else if (TREE_CODE (type
) != RECORD_TYPE
9229 && TREE_CODE (type
) != UNION_TYPE
9230 && tag_code
!= enum_type
)
9232 error ("`%T' referred to as `%s'", type
, tag_name (tag_code
));
9233 return error_mark_node
;
9235 else if (TREE_CODE (type
) != ENUMERAL_TYPE
9236 && tag_code
== enum_type
)
9238 error ("`%T' referred to as enum", type
);
9239 return error_mark_node
;
9241 else if (!allow_template_p
9242 && TREE_CODE (type
) == RECORD_TYPE
9243 && CLASSTYPE_IS_TEMPLATE (type
))
9245 /* If a class template appears as elaborated type specifier
9246 without a template header such as:
9248 template <class T> class C {};
9249 void f(class C); // No template header here
9251 then the required template argument is missing. */
9253 error ("template argument required for `%s %T'",
9254 tag_name (tag_code
),
9255 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type
)));
9256 return error_mark_node
;
9262 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
9263 Define the tag as a forward-reference if it is not defined.
9265 If a declaration is given, process it here, and report an error if
9266 multiple declarations are not identical.
9268 GLOBALIZE is false when this is also a definition. Only look in
9269 the current frame for the name (since C++ allows new names in any
9272 TEMPLATE_HEADER_P is true when this declaration is preceded by
9273 a set of template parameters. */
9276 xref_tag (enum tag_types tag_code
, tree name
,
9277 bool globalize
, bool template_header_p
)
9279 enum tree_code code
;
9281 struct cp_binding_level
*b
= current_binding_level
;
9282 tree context
= NULL_TREE
;
9284 timevar_push (TV_NAME_LOOKUP
);
9286 my_friendly_assert (TREE_CODE (name
) == IDENTIFIER_NODE
, 0);
9298 code
= ENUMERAL_TYPE
;
9306 /* If we know we are defining this tag, only look it up in
9307 this scope and don't try to find it as a type. */
9308 t
= lookup_tag (code
, name
, b
, 1);
9312 tree decl
= lookup_name (name
, 2);
9314 if (decl
&& DECL_CLASS_TEMPLATE_P (decl
))
9315 decl
= DECL_TEMPLATE_RESULT (decl
);
9317 if (decl
&& TREE_CODE (decl
) == TYPE_DECL
)
9319 /* Two cases we need to consider when deciding if a class
9320 template is allowed as an elaborated type specifier:
9321 1. It is a self reference to its own class.
9322 2. It comes with a template header.
9326 template <class T> class C {
9327 class C *c1; // DECL_SELF_REFERENCE_P is true
9330 template <class U> class C; // template_header_p is true
9331 template <class T> class C<T>::D {
9332 class C *c2; // DECL_SELF_REFERENCE_P is true
9335 t
= check_elaborated_type_specifier (tag_code
,
9338 | DECL_SELF_REFERENCE_P (decl
));
9339 if (t
== error_mark_node
)
9340 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, error_mark_node
);
9345 if (t
&& current_class_type
9346 && template_class_depth (current_class_type
)
9347 && template_header_p
)
9349 /* Since GLOBALIZE is nonzero, we are not looking at a
9350 definition of this tag. Since, in addition, we are currently
9351 processing a (member) template declaration of a template
9352 class, we must be very careful; consider:
9359 { template <class V>
9360 friend struct S1; };
9362 Here, the S2::S1 declaration should not be confused with the
9363 outer declaration. In particular, the inner version should
9364 have a template parameter of level 2, not level 1. This
9365 would be particularly important if the member declaration
9368 template <class V = U> friend struct S1;
9370 say, when we should tsubst into `U' when instantiating
9371 S2. On the other hand, when presented with:
9381 we must find the inner binding eventually. We
9382 accomplish this by making sure that the new type we
9383 create to represent this declaration has the right
9385 context
= TYPE_CONTEXT (t
);
9392 /* If no such tag is yet defined, create a forward-reference node
9393 and record it as the "definition".
9394 When a real declaration of this type is found,
9395 the forward-reference will be altered into a real type. */
9396 if (code
== ENUMERAL_TYPE
)
9398 error ("use of enum `%#D' without previous declaration", name
);
9399 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, error_mark_node
);
9403 t
= make_aggr_type (code
);
9404 TYPE_CONTEXT (t
) = context
;
9405 pushtag (name
, t
, globalize
);
9410 if (!globalize
&& processing_template_decl
&& IS_AGGR_TYPE (t
))
9411 redeclare_class_template (t
, current_template_parms
);
9414 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP
, t
);
9418 xref_tag_from_type (tree old
, tree id
, int globalize
)
9420 enum tag_types tag_kind
;
9422 if (TREE_CODE (old
) == RECORD_TYPE
)
9423 tag_kind
= (CLASSTYPE_DECLARED_CLASS (old
) ? class_type
: record_type
);
9425 tag_kind
= union_type
;
9427 if (id
== NULL_TREE
)
9428 id
= TYPE_IDENTIFIER (old
);
9430 return xref_tag (tag_kind
, id
, globalize
, false);
9433 /* REF is a type (named NAME), for which we have just seen some
9434 baseclasses. BASE_LIST is a list of those baseclasses; the
9435 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
9436 the base-class. TREE_VIA_VIRTUAL indicates virtual
9437 inheritance. CODE_TYPE_NODE indicates whether REF is a class,
9438 struct, or union. */
9441 xref_basetypes (tree ref
, tree base_list
)
9443 /* In the declaration `A : X, Y, ... Z' we mark all the types
9444 (A, X, Y, ..., Z) so we can check for duplicates. */
9448 enum tag_types tag_code
;
9450 if (ref
== error_mark_node
)
9453 if (TREE_CODE (ref
) == UNION_TYPE
)
9455 error ("derived union `%T' invalid", ref
);
9459 tag_code
= (CLASSTYPE_DECLARED_CLASS (ref
) ? class_type
: record_type
);
9461 /* First, make sure that any templates in base-classes are
9462 instantiated. This ensures that if we call ourselves recursively
9463 we do not get confused about which classes are marked and which
9468 tree basetype
= TREE_VALUE (*basep
);
9469 if (!(processing_template_decl
&& uses_template_parms (basetype
))
9470 && !complete_type_or_else (basetype
, NULL
))
9471 /* An incomplete type. Remove it from the list. */
9472 *basep
= TREE_CHAIN (*basep
);
9474 basep
= &TREE_CHAIN (*basep
);
9477 SET_CLASSTYPE_MARKED (ref
);
9478 i
= list_length (base_list
);
9481 tree binfo
= TYPE_BINFO (ref
);
9482 tree binfos
= make_tree_vec (i
);
9483 tree accesses
= make_tree_vec (i
);
9485 BINFO_BASETYPES (binfo
) = binfos
;
9486 BINFO_BASEACCESSES (binfo
) = accesses
;
9488 for (i
= 0; base_list
; base_list
= TREE_CHAIN (base_list
))
9490 tree access
= TREE_PURPOSE (base_list
);
9491 int via_virtual
= TREE_VIA_VIRTUAL (base_list
);
9492 tree basetype
= TREE_VALUE (base_list
);
9495 if (access
== access_default_node
)
9496 /* The base of a derived struct is public by default. */
9497 access
= (tag_code
== class_type
9498 ? access_private_node
: access_public_node
);
9500 if (basetype
&& TREE_CODE (basetype
) == TYPE_DECL
)
9501 basetype
= TREE_TYPE (basetype
);
9503 || (TREE_CODE (basetype
) != RECORD_TYPE
9504 && TREE_CODE (basetype
) != TYPENAME_TYPE
9505 && TREE_CODE (basetype
) != TEMPLATE_TYPE_PARM
9506 && TREE_CODE (basetype
) != BOUND_TEMPLATE_TEMPLATE_PARM
))
9508 error ("base type `%T' fails to be a struct or class type",
9513 if (CLASSTYPE_MARKED (basetype
))
9515 if (basetype
== ref
)
9516 error ("recursive type `%T' undefined", basetype
);
9518 error ("duplicate base type `%T' invalid", basetype
);
9522 if (TYPE_FOR_JAVA (basetype
)
9523 && (current_lang_depth () == 0))
9524 TYPE_FOR_JAVA (ref
) = 1;
9526 if (CLASS_TYPE_P (basetype
))
9528 base_binfo
= TYPE_BINFO (basetype
);
9529 /* This flag will be in the binfo of the base type, we must
9530 clear it after copying the base binfos. */
9531 BINFO_DEPENDENT_BASE_P (base_binfo
)
9532 = dependent_type_p (basetype
);
9535 base_binfo
= make_binfo (size_zero_node
, basetype
,
9536 NULL_TREE
, NULL_TREE
);
9538 TREE_VEC_ELT (binfos
, i
) = base_binfo
;
9539 TREE_VEC_ELT (accesses
, i
) = access
;
9540 /* This flag will be in the binfo of the base type, we must
9541 clear it after copying the base binfos. */
9542 TREE_VIA_VIRTUAL (base_binfo
) = via_virtual
;
9544 SET_CLASSTYPE_MARKED (basetype
);
9546 /* We are free to modify these bits because they are meaningless
9547 at top level, and BASETYPE is a top-level type. */
9548 if (via_virtual
|| TYPE_USES_VIRTUAL_BASECLASSES (basetype
))
9550 TYPE_USES_VIRTUAL_BASECLASSES (ref
) = 1;
9551 /* Converting to a virtual base class requires looking
9552 up the offset of the virtual base. */
9553 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref
) = 1;
9556 if (CLASS_TYPE_P (basetype
))
9558 TYPE_HAS_NEW_OPERATOR (ref
)
9559 |= TYPE_HAS_NEW_OPERATOR (basetype
);
9560 TYPE_HAS_ARRAY_NEW_OPERATOR (ref
)
9561 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype
);
9562 TYPE_GETS_DELETE (ref
) |= TYPE_GETS_DELETE (basetype
);
9563 /* If the base-class uses multiple inheritance, so do we. */
9564 TYPE_USES_MULTIPLE_INHERITANCE (ref
)
9565 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype
);
9566 /* Likewise, if converting to a base of the base may require
9567 code, then we may need to generate code to convert to a
9569 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref
)
9570 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype
);
9575 TREE_VEC_LENGTH (accesses
) = TREE_VEC_LENGTH (binfos
) = i
;
9577 BINFO_BASEACCESSES (binfo
) = BINFO_BASETYPES (binfo
) = NULL_TREE
;
9581 TYPE_USES_MULTIPLE_INHERITANCE (ref
) = 1;
9582 /* If there is more than one non-empty they cannot be at the same
9584 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref
) = 1;
9588 /* Copy the base binfos, collect the virtual bases and set the
9589 inheritance order chain. */
9590 copy_base_binfos (TYPE_BINFO (ref
), ref
, NULL_TREE
);
9591 CLASSTYPE_VBASECLASSES (ref
) = nreverse (CLASSTYPE_VBASECLASSES (ref
));
9593 if (TYPE_FOR_JAVA (ref
))
9595 if (TYPE_USES_MULTIPLE_INHERITANCE (ref
))
9596 error ("Java class '%T' cannot have multiple bases", ref
);
9597 if (CLASSTYPE_VBASECLASSES (ref
))
9598 error ("Java class '%T' cannot have virtual bases", ref
);
9601 /* Unmark all the types. */
9604 tree basetype
= BINFO_TYPE (BINFO_BASETYPE (TYPE_BINFO (ref
), i
));
9606 CLEAR_CLASSTYPE_MARKED (basetype
);
9607 if (CLASS_TYPE_P (basetype
))
9609 TREE_VIA_VIRTUAL (TYPE_BINFO (basetype
)) = 0;
9610 BINFO_DEPENDENT_BASE_P (TYPE_BINFO (basetype
)) = 0;
9613 CLEAR_CLASSTYPE_MARKED (ref
);
9617 /* Begin compiling the definition of an enumeration type.
9618 NAME is its name (or null if anonymous).
9619 Returns the type object, as yet incomplete.
9620 Also records info about it so that build_enumerator
9621 may be used to declare the individual values as they are read. */
9624 start_enum (tree name
)
9626 tree enumtype
= NULL_TREE
;
9627 struct cp_binding_level
*b
= current_binding_level
;
9629 /* If this is the real definition for a previous forward reference,
9630 fill in the contents in the same object that used to be the
9631 forward reference. */
9633 if (name
!= NULL_TREE
)
9634 enumtype
= lookup_tag (ENUMERAL_TYPE
, name
, b
, 1);
9636 if (enumtype
!= NULL_TREE
&& TREE_CODE (enumtype
) == ENUMERAL_TYPE
)
9638 error ("multiple definition of `%#T'", enumtype
);
9639 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype
));
9640 /* Clear out TYPE_VALUES, and start again. */
9641 TYPE_VALUES (enumtype
) = NULL_TREE
;
9645 enumtype
= make_node (ENUMERAL_TYPE
);
9646 pushtag (name
, enumtype
, 0);
9652 /* After processing and defining all the values of an enumeration type,
9653 install their decls in the enumeration type and finish it off.
9654 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
9657 finish_enum (tree enumtype
)
9669 integer_type_kind itk
;
9670 tree underlying_type
= NULL_TREE
;
9672 /* We built up the VALUES in reverse order. */
9673 TYPE_VALUES (enumtype
) = nreverse (TYPE_VALUES (enumtype
));
9675 /* For an enum defined in a template, just set the type of the values;
9676 all further processing is postponed until the template is
9677 instantiated. We need to set the type so that tsubst of a CONST_DECL
9679 if (processing_template_decl
)
9681 for (values
= TYPE_VALUES (enumtype
);
9683 values
= TREE_CHAIN (values
))
9684 TREE_TYPE (TREE_VALUE (values
)) = enumtype
;
9685 if (at_function_scope_p ())
9686 add_stmt (build_min (TAG_DEFN
, enumtype
));
9690 /* Determine the minimum and maximum values of the enumerators. */
9691 if (TYPE_VALUES (enumtype
))
9693 minnode
= maxnode
= NULL_TREE
;
9695 for (values
= TYPE_VALUES (enumtype
);
9697 values
= TREE_CHAIN (values
))
9699 decl
= TREE_VALUE (values
);
9701 /* [dcl.enum]: Following the closing brace of an enum-specifier,
9702 each enumerator has the type of its enumeration. Prior to the
9703 closing brace, the type of each enumerator is the type of its
9704 initializing value. */
9705 TREE_TYPE (decl
) = enumtype
;
9707 /* Update the minimum and maximum values, if appropriate. */
9708 value
= DECL_INITIAL (decl
);
9709 /* Figure out what the minimum and maximum values of the
9712 minnode
= maxnode
= value
;
9713 else if (tree_int_cst_lt (maxnode
, value
))
9715 else if (tree_int_cst_lt (value
, minnode
))
9718 /* Set the TREE_TYPE for the values as well. That's so that when
9719 we call decl_constant_value we get an entity of the right type
9720 (but with the constant value). But first make a copy so we
9721 don't clobber shared INTEGER_CSTs. */
9722 if (TREE_TYPE (value
) != enumtype
)
9724 value
= DECL_INITIAL (decl
) = copy_node (value
);
9725 TREE_TYPE (value
) = enumtype
;
9732 If the enumerator-list is empty, the underlying type is as if
9733 the enumeration had a single enumerator with value 0. */
9734 minnode
= maxnode
= integer_zero_node
;
9736 /* Compute the number of bits require to represent all values of the
9737 enumeration. We must do this before the type of MINNODE and
9738 MAXNODE are transformed, since min_precision relies on the
9739 TREE_TYPE of the value it is passed. */
9740 unsignedp
= tree_int_cst_sgn (minnode
) >= 0;
9741 lowprec
= min_precision (minnode
, unsignedp
);
9742 highprec
= min_precision (maxnode
, unsignedp
);
9743 precision
= MAX (lowprec
, highprec
);
9745 /* Determine the underlying type of the enumeration.
9749 The underlying type of an enumeration is an integral type that
9750 can represent all the enumerator values defined in the
9751 enumeration. It is implementation-defined which integral type is
9752 used as the underlying type for an enumeration except that the
9753 underlying type shall not be larger than int unless the value of
9754 an enumerator cannot fit in an int or unsigned int.
9756 We use "int" or an "unsigned int" as the underlying type, even if
9757 a smaller integral type would work, unless the user has
9758 explicitly requested that we use the smallest possible type. */
9759 for (itk
= (flag_short_enums
? itk_char
: itk_int
);
9763 underlying_type
= integer_types
[itk
];
9764 if (TYPE_PRECISION (underlying_type
) >= precision
9765 && TYPE_UNSIGNED (underlying_type
) == unsignedp
)
9768 if (itk
== itk_none
)
9772 IF no integral type can represent all the enumerator values, the
9773 enumeration is ill-formed. */
9774 error ("no integral type can represent all of the enumerator values "
9775 "for `%T'", enumtype
);
9776 precision
= TYPE_PRECISION (long_long_integer_type_node
);
9777 underlying_type
= integer_types
[itk_unsigned_long_long
];
9780 /* Compute the minium and maximum values for the type.
9784 For an enumeration where emin is the smallest enumerator and emax
9785 is the largest, the values of the enumeration are the values of the
9786 underlying type in the range bmin to bmax, where bmin and bmax are,
9787 respectively, the smallest and largest values of the smallest bit-
9788 field that can store emin and emax. */
9789 TYPE_PRECISION (enumtype
) = precision
;
9790 set_min_and_max_values_for_integral_type (enumtype
, precision
, unsignedp
);
9794 The value of sizeof() applied to an enumeration type, an object
9795 of an enumeration type, or an enumerator, is the value of sizeof()
9796 applied to the underlying type. */
9797 TYPE_SIZE (enumtype
) = TYPE_SIZE (underlying_type
);
9798 TYPE_SIZE_UNIT (enumtype
) = TYPE_SIZE_UNIT (underlying_type
);
9799 TYPE_MODE (enumtype
) = TYPE_MODE (underlying_type
);
9800 TYPE_ALIGN (enumtype
) = TYPE_ALIGN (underlying_type
);
9801 TYPE_USER_ALIGN (enumtype
) = TYPE_USER_ALIGN (underlying_type
);
9802 TYPE_UNSIGNED (enumtype
) = TYPE_UNSIGNED (underlying_type
);
9804 /* Convert each of the enumerators to the type of the underlying
9805 type of the enumeration. */
9806 for (values
= TYPE_VALUES (enumtype
); values
; values
= TREE_CHAIN (values
))
9808 decl
= TREE_VALUE (values
);
9809 value
= perform_implicit_conversion (underlying_type
,
9810 DECL_INITIAL (decl
));
9811 TREE_TYPE (value
) = enumtype
;
9812 DECL_INITIAL (decl
) = value
;
9813 TREE_VALUE (values
) = value
;
9816 /* Fix up all variant types of this enum type. */
9817 for (t
= TYPE_MAIN_VARIANT (enumtype
); t
; t
= TYPE_NEXT_VARIANT (t
))
9819 TYPE_VALUES (t
) = TYPE_VALUES (enumtype
);
9820 TYPE_MIN_VALUE (t
) = TYPE_MIN_VALUE (enumtype
);
9821 TYPE_MAX_VALUE (t
) = TYPE_MAX_VALUE (enumtype
);
9822 TYPE_SIZE (t
) = TYPE_SIZE (enumtype
);
9823 TYPE_SIZE_UNIT (t
) = TYPE_SIZE_UNIT (enumtype
);
9824 TYPE_MODE (t
) = TYPE_MODE (enumtype
);
9825 TYPE_PRECISION (t
) = TYPE_PRECISION (enumtype
);
9826 TYPE_ALIGN (t
) = TYPE_ALIGN (enumtype
);
9827 TYPE_USER_ALIGN (t
) = TYPE_USER_ALIGN (enumtype
);
9828 TYPE_UNSIGNED (t
) = TYPE_UNSIGNED (enumtype
);
9831 /* Finish debugging output for this type. */
9832 rest_of_type_compilation (enumtype
, namespace_bindings_p ());
9835 /* Build and install a CONST_DECL for an enumeration constant of the
9836 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
9837 Assignment of sequential values by default is handled here. */
9840 build_enumerator (tree name
, tree value
, tree enumtype
)
9846 /* Remove no-op casts from the value. */
9848 STRIP_TYPE_NOPS (value
);
9850 if (! processing_template_decl
)
9852 /* Validate and default VALUE. */
9853 if (value
!= NULL_TREE
)
9855 value
= decl_constant_value (value
);
9857 if (TREE_CODE (value
) == INTEGER_CST
)
9859 value
= perform_integral_promotions (value
);
9860 constant_expression_warning (value
);
9864 error ("enumerator value for `%D' not integer constant", name
);
9869 /* Default based on previous value. */
9870 if (value
== NULL_TREE
)
9874 if (TYPE_VALUES (enumtype
))
9876 /* The next value is the previous value ... */
9877 prev_value
= DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype
)));
9879 value
= cp_build_binary_op (PLUS_EXPR
,
9883 if (tree_int_cst_lt (value
, prev_value
))
9884 error ("overflow in enumeration values at `%D'", name
);
9887 value
= integer_zero_node
;
9890 /* Remove no-op casts from the value. */
9891 STRIP_TYPE_NOPS (value
);
9894 /* C++ associates enums with global, function, or class declarations. */
9895 context
= current_scope ();
9897 context
= current_namespace
;
9899 /* Build the actual enumeration constant. Note that the enumeration
9900 constants have the type of their initializers until the
9901 enumeration is complete:
9905 Following the closing brace of an enum-specifier, each enumer-
9906 ator has the type of its enumeration. Prior to the closing
9907 brace, the type of each enumerator is the type of its
9910 In finish_enum we will reset the type. Of course, if we're
9911 processing a template, there may be no value. */
9912 type
= value
? TREE_TYPE (value
) : NULL_TREE
;
9914 if (context
&& context
== current_class_type
)
9915 /* This enum declaration is local to the class. We need the full
9916 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
9917 decl
= build_lang_decl (CONST_DECL
, name
, type
);
9919 /* It's a global enum, or it's local to a function. (Note local to
9920 a function could mean local to a class method. */
9921 decl
= build_decl (CONST_DECL
, name
, type
);
9923 DECL_CONTEXT (decl
) = FROB_CONTEXT (context
);
9924 TREE_CONSTANT (decl
) = 1;
9925 TREE_INVARIANT (decl
) = 1;
9926 TREE_READONLY (decl
) = 1;
9927 DECL_INITIAL (decl
) = value
;
9929 if (context
&& context
== current_class_type
)
9930 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
9931 on the TYPE_FIELDS list for `S'. (That's so that you can say
9932 things like `S::i' later.) */
9933 finish_member_declaration (decl
);
9937 /* Add this enumeration constant to the list for this type. */
9938 TYPE_VALUES (enumtype
) = tree_cons (name
, decl
, TYPE_VALUES (enumtype
));
9942 /* We're defining DECL. Make sure that it's type is OK. */
9945 check_function_type (tree decl
, tree current_function_parms
)
9947 tree fntype
= TREE_TYPE (decl
);
9948 tree return_type
= complete_type (TREE_TYPE (fntype
));
9950 /* In a function definition, arg types must be complete. */
9951 require_complete_types_for_parms (current_function_parms
);
9953 if (!COMPLETE_OR_VOID_TYPE_P (return_type
))
9955 error ("return type `%#T' is incomplete", TREE_TYPE (fntype
));
9957 /* Make it return void instead, but don't change the
9958 type of the DECL_RESULT, in case we have a named return value. */
9959 if (TREE_CODE (fntype
) == METHOD_TYPE
)
9961 tree ctype
= TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype
)));
9963 = build_method_type_directly (ctype
,
9965 FUNCTION_ARG_CHAIN (decl
));
9969 = build_function_type (void_type_node
,
9970 TYPE_ARG_TYPES (TREE_TYPE (decl
)));
9972 = build_exception_variant (fntype
,
9973 TYPE_RAISES_EXCEPTIONS (fntype
));
9976 abstract_virtuals_error (decl
, TREE_TYPE (fntype
));
9979 /* Create the FUNCTION_DECL for a function definition.
9980 DECLSPECS and DECLARATOR are the parts of the declaration;
9981 they describe the function's name and the type it returns,
9982 but twisted together in a fashion that parallels the syntax of C.
9984 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
9985 DECLARATOR is really the DECL for the function we are about to
9986 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
9987 indicating that the function is an inline defined in-class.
9989 This function creates a binding context for the function body
9990 as well as setting up the FUNCTION_DECL in current_function_decl.
9992 Returns 1 on success. If the DECLARATOR is not suitable for a function
9993 (it defines a datum instead), we return 0, which tells
9994 yyparse to report a parse error.
9996 For C++, we must first check whether that datum makes any sense.
9997 For example, "class A local_a(1,2);" means that variable local_a
9998 is an aggregate of type A, which should have a constructor
9999 applied to it with the argument list [1, 2]. */
10002 start_function (tree declspecs
, tree declarator
, tree attrs
, int flags
)
10005 tree ctype
= NULL_TREE
;
10008 int doing_friend
= 0;
10009 struct cp_binding_level
*bl
;
10010 tree current_function_parms
;
10012 /* Sanity check. */
10013 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node
)) == VOID_TYPE
, 160);
10014 my_friendly_assert (TREE_CHAIN (void_list_node
) == NULL_TREE
, 161);
10016 /* This should only be done once on the top most decl. */
10017 if (have_extern_spec
)
10019 declspecs
= tree_cons (NULL_TREE
, get_identifier ("extern"), declspecs
);
10020 have_extern_spec
= false;
10023 if (flags
& SF_PRE_PARSED
)
10025 decl1
= declarator
;
10027 fntype
= TREE_TYPE (decl1
);
10028 if (TREE_CODE (fntype
) == METHOD_TYPE
)
10029 ctype
= TYPE_METHOD_BASETYPE (fntype
);
10031 /* ISO C++ 11.4/5. A friend function defined in a class is in
10032 the (lexical) scope of the class in which it is defined. */
10033 if (!ctype
&& DECL_FRIEND_P (decl1
))
10035 ctype
= DECL_FRIEND_CONTEXT (decl1
);
10037 /* CTYPE could be null here if we're dealing with a template;
10038 for example, `inline friend float foo()' inside a template
10039 will have no CTYPE set. */
10040 if (ctype
&& TREE_CODE (ctype
) != RECORD_TYPE
)
10048 decl1
= grokdeclarator (declarator
, declspecs
, FUNCDEF
, 1, &attrs
);
10049 /* If the declarator is not suitable for a function definition,
10050 cause a syntax error. */
10051 if (decl1
== NULL_TREE
|| TREE_CODE (decl1
) != FUNCTION_DECL
)
10054 cplus_decl_attributes (&decl1
, attrs
, 0);
10056 /* If #pragma weak was used, mark the decl weak now. */
10057 if (global_scope_p (current_binding_level
))
10058 maybe_apply_pragma_weak (decl1
);
10060 fntype
= TREE_TYPE (decl1
);
10062 restype
= TREE_TYPE (fntype
);
10064 if (TREE_CODE (fntype
) == METHOD_TYPE
)
10065 ctype
= TYPE_METHOD_BASETYPE (fntype
);
10066 else if (DECL_MAIN_P (decl1
))
10068 /* If this doesn't return integer_type, or a typedef to
10069 integer_type, complain. */
10070 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl1
)), integer_type_node
))
10072 if (pedantic
|| warn_return_type
)
10073 pedwarn ("return type for `main' changed to `int'");
10074 TREE_TYPE (decl1
) = fntype
= default_function_type
;
10079 if (DECL_DECLARED_INLINE_P (decl1
)
10080 && lookup_attribute ("noinline", attrs
))
10081 warning ("%Jinline function '%D' given attribute noinline", decl1
, decl1
);
10083 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1
))
10084 /* This is a constructor, we must ensure that any default args
10085 introduced by this definition are propagated to the clones
10086 now. The clones are used directly in overload resolution. */
10087 adjust_clone_args (decl1
);
10089 /* Sometimes we don't notice that a function is a static member, and
10090 build a METHOD_TYPE for it. Fix that up now. */
10091 if (ctype
!= NULL_TREE
&& DECL_STATIC_FUNCTION_P (decl1
)
10092 && TREE_CODE (TREE_TYPE (decl1
)) == METHOD_TYPE
)
10094 revert_static_member_fn (decl1
);
10098 /* Set up current_class_type, and enter the scope of the class, if
10101 push_nested_class (ctype
);
10102 else if (DECL_STATIC_FUNCTION_P (decl1
))
10103 push_nested_class (DECL_CONTEXT (decl1
));
10105 /* Now that we have entered the scope of the class, we must restore
10106 the bindings for any template parameters surrounding DECL1, if it
10107 is an inline member template. (Order is important; consider the
10108 case where a template parameter has the same name as a field of
10109 the class.) It is not until after this point that
10110 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
10111 if (flags
& SF_INCLASS_INLINE
)
10112 maybe_begin_member_template_processing (decl1
);
10114 /* Effective C++ rule 15. */
10116 && DECL_OVERLOADED_OPERATOR_P (decl1
) == NOP_EXPR
10117 && TREE_CODE (TREE_TYPE (fntype
)) == VOID_TYPE
)
10118 warning ("`operator=' should return a reference to `*this'");
10120 /* Make the init_value nonzero so pushdecl knows this is not tentative.
10121 error_mark_node is replaced below (in poplevel) with the BLOCK. */
10122 if (!DECL_INITIAL (decl1
))
10123 DECL_INITIAL (decl1
) = error_mark_node
;
10125 /* This function exists in static storage.
10126 (This does not mean `static' in the C sense!) */
10127 TREE_STATIC (decl1
) = 1;
10129 /* We must call push_template_decl after current_class_type is set
10130 up. (If we are processing inline definitions after exiting a
10131 class scope, current_class_type will be NULL_TREE until set above
10132 by push_nested_class.) */
10133 if (processing_template_decl
)
10134 decl1
= push_template_decl (decl1
);
10136 /* We are now in the scope of the function being defined. */
10137 current_function_decl
= decl1
;
10139 /* Save the parm names or decls from this function's declarator
10140 where store_parm_decls will find them. */
10141 current_function_parms
= DECL_ARGUMENTS (decl1
);
10143 /* Make sure the parameter and return types are reasonable. When
10144 you declare a function, these types can be incomplete, but they
10145 must be complete when you define the function. */
10146 if (! processing_template_decl
)
10147 check_function_type (decl1
, current_function_parms
);
10149 /* Build the return declaration for the function. */
10150 restype
= TREE_TYPE (fntype
);
10151 /* Promote the value to int before returning it. */
10152 if (c_promoting_integer_type_p (restype
))
10153 restype
= type_promotes_to (restype
);
10154 if (DECL_RESULT (decl1
) == NULL_TREE
)
10156 DECL_RESULT (decl1
)
10157 = build_decl (RESULT_DECL
, 0, TYPE_MAIN_VARIANT (restype
));
10158 c_apply_type_quals_to_decl (cp_type_quals (restype
),
10159 DECL_RESULT (decl1
));
10162 /* Initialize RTL machinery. We cannot do this until
10163 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
10164 even when processing a template; this is how we get
10165 CFUN set up, and our per-function variables initialized.
10166 FIXME factor out the non-RTL stuff. */
10167 bl
= current_binding_level
;
10168 allocate_struct_function (decl1
);
10169 current_binding_level
= bl
;
10171 /* Even though we're inside a function body, we still don't want to
10172 call expand_expr to calculate the size of a variable-sized array.
10173 We haven't necessarily assigned RTL to all variables yet, so it's
10174 not safe to try to expand expressions involving them. */
10175 immediate_size_expand
= 0;
10176 cfun
->x_dont_save_pending_sizes_p
= 1;
10178 /* Start the statement-tree, start the tree now. */
10179 begin_stmt_tree (&DECL_SAVED_TREE (decl1
));
10181 /* Let the user know we're compiling this function. */
10182 announce_function (decl1
);
10184 /* Record the decl so that the function name is defined.
10185 If we already have a decl for this name, and it is a FUNCTION_DECL,
10186 use the old decl. */
10187 if (!processing_template_decl
&& !(flags
& SF_PRE_PARSED
))
10189 /* A specialization is not used to guide overload resolution. */
10190 if (!DECL_FUNCTION_MEMBER_P (decl1
)
10191 && !(DECL_USE_TEMPLATE (decl1
) &&
10192 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1
))))
10194 tree olddecl
= pushdecl (decl1
);
10196 if (olddecl
== error_mark_node
)
10197 /* If something went wrong when registering the declaration,
10198 use DECL1; we have to have a FUNCTION_DECL to use when
10199 parsing the body of the function. */
10202 /* Otherwise, OLDDECL is either a previous declaration of
10203 the same function or DECL1 itself. */
10208 /* We need to set the DECL_CONTEXT. */
10209 if (!DECL_CONTEXT (decl1
) && DECL_TEMPLATE_INFO (decl1
))
10210 DECL_CONTEXT (decl1
) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1
));
10211 /* And make sure we have enough default args. */
10212 check_default_args (decl1
);
10214 fntype
= TREE_TYPE (decl1
);
10217 /* Reset these in case the call to pushdecl changed them. */
10218 current_function_decl
= decl1
;
10219 cfun
->decl
= decl1
;
10221 /* If we are (erroneously) defining a function that we have already
10222 defined before, wipe out what we knew before. */
10223 if (!DECL_PENDING_INLINE_P (decl1
))
10224 DECL_SAVED_FUNCTION_DATA (decl1
) = NULL
;
10226 if (ctype
&& !doing_friend
&& !DECL_STATIC_FUNCTION_P (decl1
))
10228 /* We know that this was set up by `grokclassfn'. We do not
10229 wait until `store_parm_decls', since evil parse errors may
10230 never get us to that point. Here we keep the consistency
10231 between `current_class_type' and `current_class_ptr'. */
10232 tree t
= DECL_ARGUMENTS (decl1
);
10234 my_friendly_assert (t
!= NULL_TREE
&& TREE_CODE (t
) == PARM_DECL
,
10236 my_friendly_assert (TREE_CODE (TREE_TYPE (t
)) == POINTER_TYPE
,
10239 cp_function_chain
->x_current_class_ref
10240 = build_indirect_ref (t
, NULL
);
10241 cp_function_chain
->x_current_class_ptr
= t
;
10243 /* Constructors and destructors need to know whether they're "in
10244 charge" of initializing virtual base classes. */
10245 t
= TREE_CHAIN (t
);
10246 if (DECL_HAS_IN_CHARGE_PARM_P (decl1
))
10248 current_in_charge_parm
= t
;
10249 t
= TREE_CHAIN (t
);
10251 if (DECL_HAS_VTT_PARM_P (decl1
))
10253 if (DECL_NAME (t
) != vtt_parm_identifier
)
10255 current_vtt_parm
= t
;
10259 if (DECL_INTERFACE_KNOWN (decl1
))
10261 tree ctx
= decl_function_context (decl1
);
10263 if (DECL_NOT_REALLY_EXTERN (decl1
))
10264 DECL_EXTERNAL (decl1
) = 0;
10266 if (ctx
!= NULL_TREE
&& DECL_DECLARED_INLINE_P (ctx
)
10267 && TREE_PUBLIC (ctx
))
10268 /* This is a function in a local class in an extern inline
10270 comdat_linkage (decl1
);
10272 /* If this function belongs to an interface, it is public.
10273 If it belongs to someone else's interface, it is also external.
10274 This only affects inlines and template instantiations. */
10275 else if (interface_unknown
== 0
10276 && ! DECL_TEMPLATE_INSTANTIATION (decl1
))
10278 if (DECL_DECLARED_INLINE_P (decl1
)
10279 || DECL_TEMPLATE_INSTANTIATION (decl1
)
10280 || processing_template_decl
)
10282 DECL_EXTERNAL (decl1
)
10284 || (DECL_DECLARED_INLINE_P (decl1
)
10285 && ! flag_implement_inlines
10286 && !DECL_VINDEX (decl1
)));
10288 /* For WIN32 we also want to put these in linkonce sections. */
10289 maybe_make_one_only (decl1
);
10292 DECL_EXTERNAL (decl1
) = 0;
10293 DECL_NOT_REALLY_EXTERN (decl1
) = 0;
10294 DECL_INTERFACE_KNOWN (decl1
) = 1;
10296 else if (interface_unknown
&& interface_only
10297 && ! DECL_TEMPLATE_INSTANTIATION (decl1
))
10299 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10300 interface, we will have interface_only set but not
10301 interface_known. In that case, we don't want to use the normal
10302 heuristics because someone will supply a #pragma implementation
10303 elsewhere, and deducing it here would produce a conflict. */
10304 comdat_linkage (decl1
);
10305 DECL_EXTERNAL (decl1
) = 0;
10306 DECL_INTERFACE_KNOWN (decl1
) = 1;
10307 DECL_DEFER_OUTPUT (decl1
) = 1;
10311 /* This is a definition, not a reference.
10312 So clear DECL_EXTERNAL. */
10313 DECL_EXTERNAL (decl1
) = 0;
10315 if ((DECL_DECLARED_INLINE_P (decl1
)
10316 || DECL_TEMPLATE_INSTANTIATION (decl1
))
10317 && ! DECL_INTERFACE_KNOWN (decl1
)
10318 /* Don't try to defer nested functions for now. */
10319 && ! decl_function_context (decl1
))
10320 DECL_DEFER_OUTPUT (decl1
) = 1;
10322 DECL_INTERFACE_KNOWN (decl1
) = 1;
10325 begin_scope (sk_function_parms
, decl1
);
10329 if (DECL_DESTRUCTOR_P (decl1
))
10331 dtor_label
= build_decl (LABEL_DECL
, NULL_TREE
, NULL_TREE
);
10332 DECL_CONTEXT (dtor_label
) = current_function_decl
;
10335 start_fname_decls ();
10337 store_parm_decls (current_function_parms
);
10342 /* Store the parameter declarations into the current function declaration.
10343 This is called after parsing the parameter declarations, before
10344 digesting the body of the function.
10346 Also install to binding contour return value identifier, if any. */
10349 store_parm_decls (tree current_function_parms
)
10351 tree fndecl
= current_function_decl
;
10354 /* This is a chain of any other decls that came in among the parm
10355 declarations. If a parm is declared with enum {foo, bar} x;
10356 then CONST_DECLs for foo and bar are put here. */
10357 tree nonparms
= NULL_TREE
;
10359 if (current_function_parms
)
10361 /* This case is when the function was defined with an ANSI prototype.
10362 The parms already have decls, so we need not do anything here
10363 except record them as in effect
10364 and complain if any redundant old-style parm decls were written. */
10366 tree specparms
= current_function_parms
;
10369 /* Must clear this because it might contain TYPE_DECLs declared
10371 current_binding_level
->names
= NULL
;
10373 /* If we're doing semantic analysis, then we'll call pushdecl
10374 for each of these. We must do them in reverse order so that
10375 they end in the correct forward order. */
10376 specparms
= nreverse (specparms
);
10378 for (parm
= specparms
; parm
; parm
= next
)
10380 next
= TREE_CHAIN (parm
);
10381 if (TREE_CODE (parm
) == PARM_DECL
)
10383 if (DECL_NAME (parm
) == NULL_TREE
10384 || TREE_CODE (parm
) != VOID_TYPE
)
10387 error ("parameter `%D' declared void", parm
);
10391 /* If we find an enum constant or a type tag,
10392 put it aside for the moment. */
10393 TREE_CHAIN (parm
) = NULL_TREE
;
10394 nonparms
= chainon (nonparms
, parm
);
10398 /* Get the decls in their original chain order and record in the
10399 function. This is all and only the PARM_DECLs that were
10400 pushed into scope by the loop above. */
10401 DECL_ARGUMENTS (fndecl
) = getdecls ();
10404 DECL_ARGUMENTS (fndecl
) = NULL_TREE
;
10406 /* Now store the final chain of decls for the arguments
10407 as the decl-chain of the current lexical scope.
10408 Put the enumerators in as well, at the front so that
10409 DECL_ARGUMENTS is not modified. */
10410 current_binding_level
->names
= chainon (nonparms
, DECL_ARGUMENTS (fndecl
));
10412 /* Do the starting of the exception specifications, if we have any. */
10413 if (flag_exceptions
&& !processing_template_decl
10414 && flag_enforce_eh_specs
10415 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl
)))
10416 current_eh_spec_block
= begin_eh_spec_block ();
10420 /* We have finished doing semantic analysis on DECL, but have not yet
10421 generated RTL for its body. Save away our current state, so that
10422 when we want to generate RTL later we know what to do. */
10425 save_function_data (tree decl
)
10427 struct language_function
*f
;
10429 /* Save the language-specific per-function data so that we can
10430 get it back when we really expand this function. */
10431 my_friendly_assert (!DECL_PENDING_INLINE_P (decl
),
10435 f
= ggc_alloc (sizeof (struct language_function
));
10436 memcpy (f
, cp_function_chain
, sizeof (struct language_function
));
10437 DECL_SAVED_FUNCTION_DATA (decl
) = f
;
10439 /* Clear out the bits we don't need. */
10440 f
->base
.x_stmt_tree
.x_last_stmt
= NULL_TREE
;
10441 f
->base
.x_stmt_tree
.x_last_expr_type
= NULL_TREE
;
10442 f
->x_named_label_uses
= NULL
;
10443 f
->bindings
= NULL
;
10444 f
->x_local_names
= NULL
;
10446 /* If we've already decided that we cannot inline this function, we
10447 must remember that fact when we actually go to expand the
10449 if (current_function_cannot_inline
)
10451 f
->cannot_inline
= current_function_cannot_inline
;
10452 DECL_INLINE (decl
) = 0;
10456 /* Add a note to mark the beginning of the main body of the constructor.
10457 This is used to set up the data structures for the cleanup regions for
10458 fully-constructed bases and members. */
10461 begin_constructor_body (void)
10465 /* Add a note to mark the end of the main body of the constructor. This is
10466 used to end the cleanup regions for fully-constructed bases and
10470 finish_constructor_body (void)
10474 /* Do all the processing for the beginning of a destructor; set up the
10475 vtable pointers and cleanups for bases and members. */
10478 begin_destructor_body (void)
10481 tree compound_stmt
;
10483 /* If the dtor is empty, and we know there is not any possible
10484 way we could use any vtable entries, before they are possibly
10485 set by a base class dtor, we don't have to setup the vtables,
10486 as we know that any base class dtor will set up any vtables
10487 it needs. We avoid MI, because one base class dtor can do a
10488 virtual dispatch to an overridden function that would need to
10489 have a non-related vtable set up, we cannot avoid setting up
10490 vtables in that case. We could change this to see if there
10491 is just one vtable.
10493 ??? In the destructor for a class, the vtables are set
10494 appropriately for that class. There will be no non-related
10495 vtables. jason 2001-12-11. */
10496 if_stmt
= begin_if_stmt ();
10498 /* If it is not safe to avoid setting up the vtables, then
10499 someone will change the condition to be boolean_true_node.
10500 (Actually, for now, we do not have code to set the condition
10501 appropriately, so we just assume that we always need to
10502 initialize the vtables.) */
10503 finish_if_stmt_cond (boolean_true_node
, if_stmt
);
10505 compound_stmt
= begin_compound_stmt (/*has_no_scope=*/false);
10507 /* Make all virtual function table pointers in non-virtual base
10508 classes point to CURRENT_CLASS_TYPE's virtual function
10510 initialize_vtbl_ptrs (current_class_ptr
);
10512 finish_compound_stmt (compound_stmt
);
10513 finish_then_clause (if_stmt
);
10516 /* And insert cleanups for our bases and members so that they
10517 will be properly destroyed if we throw. */
10518 push_base_cleanups ();
10521 /* At the end of every destructor we generate code to delete the object if
10522 necessary. Do that now. */
10525 finish_destructor_body (void)
10529 /* Any return from a destructor will end up here; that way all base
10530 and member cleanups will be run when the function returns. */
10531 add_stmt (build_stmt (LABEL_STMT
, dtor_label
));
10533 /* In a virtual destructor, we must call delete. */
10534 if (DECL_VIRTUAL_P (current_function_decl
))
10537 tree virtual_size
= cxx_sizeof (current_class_type
);
10541 At the point of definition of a virtual destructor (including
10542 an implicit definition), non-placement operator delete shall
10543 be looked up in the scope of the destructor's class and if
10544 found shall be accessible and unambiguous. */
10545 exprstmt
= build_op_delete_call
10546 (DELETE_EXPR
, current_class_ptr
, virtual_size
,
10547 /*global_p=*/false, NULL_TREE
);
10549 if_stmt
= begin_if_stmt ();
10550 finish_if_stmt_cond (build (BIT_AND_EXPR
, integer_type_node
,
10551 current_in_charge_parm
,
10554 finish_expr_stmt (exprstmt
);
10555 finish_then_clause (if_stmt
);
10560 /* Do the necessary processing for the beginning of a function body, which
10561 in this case includes member-initializers, but not the catch clauses of
10562 a function-try-block. Currently, this means opening a binding level
10563 for the member-initializers (in a ctor) and member cleanups (in a dtor).
10564 In other functions, this isn't necessary, but it doesn't hurt. */
10567 begin_function_body (void)
10571 if (processing_template_decl
)
10572 /* Do nothing now. */;
10574 /* Always keep the BLOCK node associated with the outermost pair of
10575 curly braces of a function. These are needed for correct
10576 operation of dwarfout.c. */
10577 keep_next_level (true);
10579 stmt
= begin_compound_stmt (/*has_no_scope=*/false);
10580 COMPOUND_STMT_BODY_BLOCK (stmt
) = 1;
10582 if (processing_template_decl
)
10583 /* Do nothing now. */;
10584 else if (DECL_CONSTRUCTOR_P (current_function_decl
))
10585 begin_constructor_body ();
10586 else if (DECL_DESTRUCTOR_P (current_function_decl
))
10587 begin_destructor_body ();
10592 /* Do the processing for the end of a function body. Currently, this means
10593 closing out the cleanups for fully-constructed bases and members, and in
10594 the case of the destructor, deleting the object if desired. Again, this
10595 is only meaningful for [cd]tors, since they are the only functions where
10596 there is a significant distinction between the main body and any
10597 function catch clauses. Handling, say, main() return semantics here
10598 would be wrong, as flowing off the end of a function catch clause for
10599 main() would also need to return 0. */
10602 finish_function_body (tree compstmt
)
10604 /* Close the block. */
10605 finish_compound_stmt (compstmt
);
10607 if (processing_template_decl
)
10608 /* Do nothing now. */;
10609 else if (DECL_CONSTRUCTOR_P (current_function_decl
))
10610 finish_constructor_body ();
10611 else if (DECL_DESTRUCTOR_P (current_function_decl
))
10612 finish_destructor_body ();
10615 /* Finish up a function declaration and compile that function
10616 all the way to assembler language output. The free the storage
10617 for the function definition.
10619 FLAGS is a bitwise or of the following values:
10621 We just finished processing the body of an in-class inline
10622 function definition. (This processing will have taken place
10623 after the class definition is complete.) */
10626 finish_function (int flags
)
10628 tree fndecl
= current_function_decl
;
10629 tree fntype
, ctype
= NULL_TREE
;
10630 int inclass_inline
= (flags
& 2) != 0;
10633 /* When we get some parse errors, we can end up without a
10634 current_function_decl, so cope. */
10635 if (fndecl
== NULL_TREE
)
10636 return error_mark_node
;
10638 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl
)
10639 && DECL_VIRTUAL_P (fndecl
)
10640 && !processing_template_decl
)
10642 tree fnclass
= DECL_CONTEXT (fndecl
);
10643 if (fndecl
== CLASSTYPE_KEY_METHOD (fnclass
))
10644 keyed_classes
= tree_cons (NULL_TREE
, fnclass
, keyed_classes
);
10647 nested
= function_depth
> 1;
10648 fntype
= TREE_TYPE (fndecl
);
10650 /* TREE_READONLY (fndecl) = 1;
10651 This caused &foo to be of type ptr-to-const-function
10652 which then got a warning when stored in a ptr-to-function variable. */
10654 my_friendly_assert (building_stmt_tree (), 20000911);
10656 /* For a cloned function, we've already got all the code we need;
10657 there's no need to add any extra bits. */
10658 if (!DECL_CLONED_FUNCTION_P (fndecl
))
10660 if (DECL_MAIN_P (current_function_decl
))
10662 /* Make it so that `main' always returns 0 by default. */
10664 finish_return_stmt (integer_one_node
);
10666 finish_return_stmt (integer_zero_node
);
10670 /* Finish dealing with exception specifiers. */
10671 if (flag_exceptions
&& !processing_template_decl
10672 && flag_enforce_eh_specs
10673 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl
)))
10674 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
10675 (TREE_TYPE (current_function_decl
)),
10676 current_eh_spec_block
);
10679 finish_fname_decls ();
10681 /* If we're saving up tree structure, tie off the function now. */
10682 finish_stmt_tree (&DECL_SAVED_TREE (fndecl
));
10684 /* If this function can't throw any exceptions, remember that. */
10685 if (!processing_template_decl
10686 && !cp_function_chain
->can_throw
10687 && !flag_non_call_exceptions
)
10688 TREE_NOTHROW (fndecl
) = 1;
10690 /* This must come after expand_function_end because cleanups might
10691 have declarations (from inline functions) that need to go into
10692 this function's blocks. */
10694 /* If the current binding level isn't the outermost binding level
10695 for this function, either there is a bug, or we have experienced
10696 syntax errors and the statement tree is malformed. */
10697 if (current_binding_level
->kind
!= sk_function_parms
)
10699 /* Make sure we have already experienced errors. */
10700 if (errorcount
== 0)
10703 /* Throw away the broken statement tree and extra binding
10705 DECL_SAVED_TREE (fndecl
) = build_stmt (COMPOUND_STMT
, NULL_TREE
);
10707 while (current_binding_level
->kind
!= sk_function_parms
)
10709 if (current_binding_level
->kind
== sk_class
)
10710 pop_nested_class ();
10712 poplevel (0, 0, 0);
10715 poplevel (1, 0, 1);
10717 /* Statements should always be full-expressions at the outermost set
10718 of curly braces for a function. */
10719 my_friendly_assert (stmts_are_full_exprs_p (), 19990831);
10721 /* Set up the named return value optimization, if we can. Candidate
10722 variables are selected in check_return_value. */
10723 if (current_function_return_value
)
10725 tree r
= current_function_return_value
;
10728 if (r
!= error_mark_node
10729 /* This is only worth doing for fns that return in memory--and
10730 simpler, since we don't have to worry about promoted modes. */
10731 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl
)), fndecl
)
10732 /* Only allow this for variables declared in the outer scope of
10733 the function so we know that their lifetime always ends with a
10734 return; see g++.dg/opt/nrv6.C. We could be more flexible if
10735 we were to do this optimization in tree-ssa. */
10736 /* Skip the artificial function body block. */
10737 && (outer
= BLOCK_SUBBLOCKS (BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl
))),
10738 chain_member (r
, BLOCK_VARS (outer
))))
10739 finalize_nrv (&DECL_SAVED_TREE (fndecl
), r
, DECL_RESULT (fndecl
));
10741 current_function_return_value
= NULL_TREE
;
10744 /* Remember that we were in class scope. */
10745 if (current_class_name
)
10746 ctype
= current_class_type
;
10748 /* Must mark the RESULT_DECL as being in this function. */
10749 DECL_CONTEXT (DECL_RESULT (fndecl
)) = fndecl
;
10751 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
10752 to the FUNCTION_DECL node itself. */
10753 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl
)) = fndecl
;
10755 /* Save away current state, if appropriate. */
10756 if (!processing_template_decl
)
10757 save_function_data (fndecl
);
10759 /* If this function calls `setjmp' it cannot be inlined. When
10760 `longjmp' is called it is not guaranteed to restore the value of
10761 local variables that have been modified since the call to
10762 `setjmp'. So, if were to inline this function into some caller
10763 `c', then when we `longjmp', we might not restore all variables
10764 in `c'. (It might seem, at first blush, that there's no way for
10765 this function to modify local variables in `c', but their
10766 addresses may have been stored somewhere accessible to this
10768 if (!processing_template_decl
&& calls_setjmp_p (fndecl
))
10769 DECL_UNINLINABLE (fndecl
) = 1;
10771 /* Complain if there's just no return statement. */
10772 if (warn_return_type
10773 && TREE_CODE (TREE_TYPE (fntype
)) != VOID_TYPE
10774 && !dependent_type_p (TREE_TYPE (fntype
))
10775 && !current_function_returns_value
&& !current_function_returns_null
10776 /* Don't complain if we abort or throw. */
10777 && !current_function_returns_abnormally
10778 && !DECL_NAME (DECL_RESULT (fndecl
))
10779 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
10780 inline function, as we might never be compiled separately. */
10781 && (DECL_INLINE (fndecl
) || processing_template_decl
))
10782 warning ("no return statement in function returning non-void");
10784 /* Store the end of the function, so that we get good line number
10785 info for the epilogue. */
10786 cfun
->function_end_locus
= input_location
;
10788 /* Genericize before inlining. */
10789 if (!processing_template_decl
)
10791 c_genericize (fndecl
);
10793 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
10794 c_warn_unused_result (&DECL_SAVED_TREE (fndecl
));
10797 /* We're leaving the context of this function, so zap cfun. It's still in
10798 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
10800 current_function_decl
= NULL
;
10802 /* If this is an in-class inline definition, we may have to pop the
10803 bindings for the template parameters that we added in
10804 maybe_begin_member_template_processing when start_function was
10806 if (inclass_inline
)
10807 maybe_end_member_template_processing ();
10809 /* Leave the scope of the class. */
10811 pop_nested_class ();
10817 /* Let the error reporting routines know that we're outside a
10818 function. For a nested function, this value is used in
10819 cxx_pop_function_context and then reset via pop_function_context. */
10820 current_function_decl
= NULL_TREE
;
10825 /* Create the FUNCTION_DECL for a function definition.
10826 DECLSPECS and DECLARATOR are the parts of the declaration;
10827 they describe the return type and the name of the function,
10828 but twisted together in a fashion that parallels the syntax of C.
10830 This function creates a binding context for the function body
10831 as well as setting up the FUNCTION_DECL in current_function_decl.
10833 Returns a FUNCTION_DECL on success.
10835 If the DECLARATOR is not suitable for a function (it defines a datum
10836 instead), we return 0, which tells yyparse to report a parse error.
10838 May return void_type_node indicating that this method is actually
10839 a friend. See grokfield for more details.
10841 Came here with a `.pushlevel' .
10843 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
10844 CHANGES TO CODE IN `grokfield'. */
10847 start_method (tree declspecs
, tree declarator
, tree attrlist
)
10849 tree fndecl
= grokdeclarator (declarator
, declspecs
, MEMFUNCDEF
, 0,
10852 if (fndecl
== error_mark_node
)
10853 return error_mark_node
;
10855 if (fndecl
== NULL
|| TREE_CODE (fndecl
) != FUNCTION_DECL
)
10857 error ("invalid member function declaration");
10858 return error_mark_node
;
10862 cplus_decl_attributes (&fndecl
, attrlist
, 0);
10864 /* Pass friends other than inline friend functions back. */
10865 if (fndecl
== void_type_node
)
10868 if (DECL_IN_AGGR_P (fndecl
))
10870 if (DECL_CONTEXT (fndecl
)
10871 && TREE_CODE( DECL_CONTEXT (fndecl
)) != NAMESPACE_DECL
)
10872 error ("`%D' is already defined in class `%T'", fndecl
,
10873 DECL_CONTEXT (fndecl
));
10874 return void_type_node
;
10877 check_template_shadow (fndecl
);
10879 DECL_DECLARED_INLINE_P (fndecl
) = 1;
10880 if (flag_default_inline
)
10881 DECL_INLINE (fndecl
) = 1;
10883 /* We process method specializations in finish_struct_1. */
10884 if (processing_template_decl
&& !DECL_TEMPLATE_SPECIALIZATION (fndecl
))
10886 fndecl
= push_template_decl (fndecl
);
10887 if (fndecl
== error_mark_node
)
10891 if (! DECL_FRIEND_P (fndecl
))
10893 if (TREE_CHAIN (fndecl
))
10895 fndecl
= copy_node (fndecl
);
10896 TREE_CHAIN (fndecl
) = NULL_TREE
;
10898 grok_special_member_properties (fndecl
);
10901 cp_finish_decl (fndecl
, NULL_TREE
, NULL_TREE
, 0);
10903 /* Make a place for the parms. */
10904 begin_scope (sk_function_parms
, fndecl
);
10906 DECL_IN_AGGR_P (fndecl
) = 1;
10910 /* Go through the motions of finishing a function definition.
10911 We don't compile this method until after the whole class has
10914 FINISH_METHOD must return something that looks as though it
10915 came from GROKFIELD (since we are defining a method, after all).
10917 This is called after parsing the body of the function definition.
10918 STMTS is the chain of statements that makes up the function body.
10920 DECL is the ..._DECL that `start_method' provided. */
10923 finish_method (tree decl
)
10925 tree fndecl
= decl
;
10930 if (decl
== void_type_node
)
10933 old_initial
= DECL_INITIAL (fndecl
);
10935 /* Undo the level for the parms (from start_method).
10936 This is like poplevel, but it causes nothing to be
10937 saved. Saving information here confuses symbol-table
10938 output routines. Besides, this information will
10939 be correctly output when this method is actually
10942 /* Clear out the meanings of the local variables of this level;
10943 also record in each decl which block it belongs to. */
10945 for (link
= current_binding_level
->names
; link
; link
= TREE_CHAIN (link
))
10947 if (DECL_NAME (link
) != NULL_TREE
)
10948 pop_binding (DECL_NAME (link
), link
);
10949 my_friendly_assert (TREE_CODE (link
) != FUNCTION_DECL
, 163);
10950 DECL_CONTEXT (link
) = NULL_TREE
;
10953 poplevel (0, 0, 0);
10955 DECL_INITIAL (fndecl
) = old_initial
;
10957 /* We used to check if the context of FNDECL was different from
10958 current_class_type as another way to get inside here. This didn't work
10959 for String.cc in libg++. */
10960 if (DECL_FRIEND_P (fndecl
))
10962 CLASSTYPE_INLINE_FRIENDS (current_class_type
)
10963 = tree_cons (NULL_TREE
, fndecl
, CLASSTYPE_INLINE_FRIENDS (current_class_type
));
10964 decl
= void_type_node
;
10971 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
10972 we can lay it out later, when and if its type becomes complete. */
10975 maybe_register_incomplete_var (tree var
)
10977 my_friendly_assert (TREE_CODE (var
) == VAR_DECL
, 20020406);
10979 /* Keep track of variables with incomplete types. */
10980 if (!processing_template_decl
&& TREE_TYPE (var
) != error_mark_node
10981 && DECL_EXTERNAL (var
))
10983 tree inner_type
= TREE_TYPE (var
);
10985 while (TREE_CODE (inner_type
) == ARRAY_TYPE
)
10986 inner_type
= TREE_TYPE (inner_type
);
10987 inner_type
= TYPE_MAIN_VARIANT (inner_type
);
10989 if ((!COMPLETE_TYPE_P (inner_type
) && CLASS_TYPE_P (inner_type
))
10990 /* RTTI TD entries are created while defining the type_info. */
10991 || (TYPE_LANG_SPECIFIC (inner_type
)
10992 && TYPE_BEING_DEFINED (inner_type
)))
10993 incomplete_vars
= tree_cons (inner_type
, var
, incomplete_vars
);
10997 /* Called when a class type (given by TYPE) is defined. If there are
10998 any existing VAR_DECLs whose type hsa been completed by this
10999 declaration, update them now. */
11002 complete_vars (tree type
)
11004 tree
*list
= &incomplete_vars
;
11006 my_friendly_assert (CLASS_TYPE_P (type
), 20020406);
11009 if (same_type_p (type
, TREE_PURPOSE (*list
)))
11011 tree var
= TREE_VALUE (*list
);
11012 /* Complete the type of the variable. The VAR_DECL itself
11013 will be laid out in expand_expr. */
11014 complete_type (TREE_TYPE (var
));
11015 /* Remove this entry from the list. */
11016 *list
= TREE_CHAIN (*list
);
11019 list
= &TREE_CHAIN (*list
);
11023 /* If DECL is of a type which needs a cleanup, build that cleanup
11027 cxx_maybe_build_cleanup (tree decl
)
11029 tree type
= TREE_TYPE (decl
);
11031 if (type
!= error_mark_node
&& TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
))
11033 int flags
= LOOKUP_NORMAL
|LOOKUP_DESTRUCTOR
;
11036 if (TREE_CODE (type
) == ARRAY_TYPE
)
11040 cxx_mark_addressable (decl
);
11041 rval
= build_unary_op (ADDR_EXPR
, decl
, 0);
11044 /* Optimize for space over speed here. */
11045 if (! TYPE_USES_VIRTUAL_BASECLASSES (type
)
11046 || flag_expensive_optimizations
)
11047 flags
|= LOOKUP_NONVIRTUAL
;
11049 rval
= build_delete (TREE_TYPE (rval
), rval
,
11050 sfk_complete_destructor
, flags
, 0);
11052 if (TYPE_USES_VIRTUAL_BASECLASSES (type
)
11053 && ! TYPE_HAS_DESTRUCTOR (type
))
11054 rval
= build_compound_expr (rval
, build_vbase_delete (type
, decl
));
11061 /* When a stmt has been parsed, this function is called. */
11066 /* Always assume this statement was not an expression statement. If
11067 it actually was an expression statement, its our callers
11068 responsibility to fix this up. */
11069 last_expr_type
= NULL_TREE
;
11072 /* DECL was originally constructed as a non-static member function,
11073 but turned out to be static. Update it accordingly. */
11076 revert_static_member_fn (tree decl
)
11079 tree function
= TREE_TYPE (decl
);
11080 tree args
= TYPE_ARG_TYPES (function
);
11082 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args
)))
11083 != TYPE_UNQUALIFIED
)
11084 error ("static member function `%#D' declared with type qualifiers",
11087 args
= TREE_CHAIN (args
);
11088 tmp
= build_function_type (TREE_TYPE (function
), args
);
11089 tmp
= build_qualified_type (tmp
, cp_type_quals (function
));
11090 tmp
= build_exception_variant (tmp
,
11091 TYPE_RAISES_EXCEPTIONS (function
));
11092 TREE_TYPE (decl
) = tmp
;
11093 if (DECL_ARGUMENTS (decl
))
11094 DECL_ARGUMENTS (decl
) = TREE_CHAIN (DECL_ARGUMENTS (decl
));
11095 DECL_STATIC_FUNCTION_P (decl
) = 1;
11098 /* Initialize the variables used during compilation of a C++
11102 cxx_push_function_context (struct function
* f
)
11104 struct language_function
*p
11105 = ggc_alloc_cleared (sizeof (struct language_function
));
11108 /* Whenever we start a new function, we destroy temporaries in the
11110 current_stmt_tree ()->stmts_are_full_exprs_p
= 1;
11116 if (DECL_SAVED_FUNCTION_DATA (fn
))
11118 /* If we already parsed this function, and we're just expanding it
11119 now, restore saved state. */
11120 *cp_function_chain
= *DECL_SAVED_FUNCTION_DATA (fn
);
11122 /* If we decided that we didn't want to inline this function,
11123 make sure the back-end knows that. */
11124 if (!current_function_cannot_inline
)
11125 current_function_cannot_inline
= cp_function_chain
->cannot_inline
;
11127 /* We don't need the saved data anymore. Unless this is an inline
11128 function; we need the named return value info for
11129 cp_copy_res_decl_for_inlining. */
11130 if (! DECL_INLINE (fn
))
11131 DECL_SAVED_FUNCTION_DATA (fn
) = NULL
;
11136 /* Free the language-specific parts of F, now that we've finished
11137 compiling the function. */
11140 cxx_pop_function_context (struct function
* f
)
11145 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11146 one of the language-independent trees. */
11148 enum cp_tree_node_structure_enum
11149 cp_tree_node_structure (union lang_tree_node
* t
)
11151 switch (TREE_CODE (&t
->generic
))
11153 case DEFAULT_ARG
: return TS_CP_DEFAULT_ARG
;
11154 case IDENTIFIER_NODE
: return TS_CP_IDENTIFIER
;
11155 case OVERLOAD
: return TS_CP_OVERLOAD
;
11156 case TEMPLATE_PARM_INDEX
: return TS_CP_TPI
;
11157 case PTRMEM_CST
: return TS_CP_PTRMEM
;
11158 case BASELINK
: return TS_CP_BASELINK
;
11159 default: return TS_CP_GENERIC
;
11163 /* Build the void_list_node (void_type_node having been created). */
11165 build_void_list_node (void)
11167 tree t
= build_tree_list (NULL_TREE
, void_type_node
);
11168 TREE_PARMLIST (t
) = 1;
11173 cp_missing_noreturn_ok_p (tree decl
)
11175 /* A missing noreturn is ok for the `main' function. */
11176 return DECL_MAIN_P (decl
);
11179 #include "gt-cp-decl.h"
11180 #include "gtype-cp.h"