]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/decl.c
* config/i386/i386.md (*addqi_1_slp): Do not access operands[2].
[gcc.git] / gcc / cp / decl.c
CommitLineData
3fd5abcf 1/* Process declarations and variables for C++ compiler.
d363e7bf 2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3fd5abcf 3 2001, 2002, 2003 Free Software Foundation, Inc.
e5e809f4 4 Contributed by Michael Tiemann (tiemann@cygnus.com)
8d08fdba 5
1c313945 6This file is part of GCC.
8d08fdba 7
1c313945 8GCC is free software; you can redistribute it and/or modify
8d08fdba
MS
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2, or (at your option)
11any later version.
12
1c313945 13GCC is distributed in the hope that it will be useful,
8d08fdba
MS
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
1c313945 19along with GCC; see the file COPYING. If not, write to
e9fa0c7c
RK
20the Free Software Foundation, 59 Temple Place - Suite 330,
21Boston, MA 02111-1307, USA. */
8d08fdba
MS
22
23
1c313945 24/* Process declarations and symbol lookup for C++ front end.
8d08fdba
MS
25 Also constructs types; the standard scalar types at initialization,
26 and structure, union, array and enum types when they are declared. */
27
28/* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
30
8d08fdba 31#include "config.h"
8d052bc7 32#include "system.h"
4977bab6
ZW
33#include "coretypes.h"
34#include "tm.h"
8d08fdba
MS
35#include "tree.h"
36#include "rtl.h"
3bdf5ad1 37#include "expr.h"
8d08fdba
MS
38#include "flags.h"
39#include "cp-tree.h"
25af8512 40#include "tree-inline.h"
8d08fdba
MS
41#include "decl.h"
42#include "lex.h"
49c249e1
JM
43#include "output.h"
44#include "except.h"
54f92bfb 45#include "toplev.h"
e2500fed 46#include "hashtab.h"
0e9295cf 47#include "tm_p.h"
672a6f42 48#include "target.h"
26f943fd 49#include "c-common.h"
ecb0eece 50#include "c-pragma.h"
7437519c 51#include "diagnostic.h"
e2500fed 52#include "debug.h"
22ffcc6f 53#include "timevar.h"
8d08fdba 54
11f6b451
NN
55static tree grokparms (tree);
56static const char *redeclaration_error_message (tree, tree);
57
11f6b451 58static int decl_jump_unsafe (tree);
11f6b451
NN
59static void require_complete_types_for_parms (tree);
60static int ambi_op_p (enum tree_code);
61static int unary_op_p (enum tree_code);
11f6b451 62static void push_local_name (tree);
7e99327d 63static tree grok_reference_init (tree, tree, tree, tree *);
11f6b451
NN
64static tree grokfndecl (tree, tree, tree, tree, int,
65 enum overload_flags, tree,
66 tree, int, int, int, int, int, int, tree);
67static tree grokvardecl (tree, tree, RID_BIT_TYPE *, int, int, tree);
11f6b451
NN
68static void record_unknown_type (tree, const char *);
69static tree builtin_function_1 (const char *, tree, tree, int,
70 enum built_in_class, const char *,
71 tree);
72static tree build_library_fn_1 (tree, enum tree_code, tree);
73static int member_function_or_else (tree, tree, enum overload_flags);
74static void bad_specifiers (tree, const char *, int, int, int, int,
75 int);
11f6b451
NN
76static void check_for_uninitialized_const_var (tree);
77static hashval_t typename_hash (const void *);
78static int typename_compare (const void *, const void *);
11f6b451 79static tree local_variable_p_walkfn (tree *, int *, void *);
11f6b451
NN
80static tree record_builtin_java_type (const char *, int);
81static const char *tag_name (enum tag_types code);
11f6b451
NN
82static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
83static int walk_globals_r (tree, void*);
84static int walk_vtables_r (tree, void*);
11f6b451
NN
85static tree make_label_decl (tree, int);
86static void use_label (tree);
87static void check_previous_goto_1 (tree, struct cp_binding_level *, tree,
152c16a9 88 const location_t *);
11f6b451
NN
89static void check_previous_goto (struct named_label_use_list *);
90static void check_switch_goto (struct cp_binding_level *);
91static void check_previous_gotos (tree);
92static void pop_label (tree, tree);
93static void pop_labels (tree);
94static void maybe_deduce_size_from_array_init (tree, tree);
95static void layout_var_decl (tree);
96static void maybe_commonize_var (tree);
7e99327d 97static tree check_initializer (tree, tree, int, tree *);
11f6b451
NN
98static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
99static void save_function_data (tree);
100static void check_function_type (tree, tree);
101static void begin_constructor_body (void);
102static void finish_constructor_body (void);
103static void begin_destructor_body (void);
104static void finish_destructor_body (void);
105static tree create_array_type_for_decl (tree, tree, tree);
106static tree get_atexit_node (void);
107static tree get_dso_handle_node (void);
108static tree start_cleanup_fn (void);
109static void end_cleanup_fn (void);
110static tree cp_make_fname_decl (tree, int);
111static void initialize_predefined_identifiers (void);
112static tree check_special_function_return_type
113 (special_function_kind, tree, tree);
114static tree push_cp_library_fn (enum tree_code, tree);
115static tree build_cp_library_fn (tree, enum tree_code, tree);
116static void store_parm_decls (tree);
117static int cp_missing_noreturn_ok_p (tree);
8e3df2de
MM
118static void initialize_local_var (tree, tree);
119static void expand_static_init (tree, tree);
120static tree next_initializable_field (tree);
121static tree reshape_init (tree, tree *);
8fbc5ae7 122static tree build_typename_type (tree, tree, tree);
8d08fdba 123
8d08fdba
MS
124/* Erroneous argument lists can use this *IFF* they do not modify it. */
125tree error_mark_list;
126
7f4edbcb 127/* The following symbols are subsumed in the cp_global_trees array, and
68642fb6 128 listed here individually for documentation purposes.
8d08fdba 129
7f4edbcb
BS
130 C++ extensions
131 tree wchar_decl_node;
37c46b43 132
7f4edbcb
BS
133 tree vtable_entry_type;
134 tree delta_type_node;
7f4edbcb 135 tree __t_desc_type_node;
db1147b2 136 tree ti_desc_type_node;
1f4cb92b 137 tree bltn_desc_type_node, ptr_desc_type_node;
db1147b2
NS
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;
387769ed 140 tree ptm_desc_type_node;
db1147b2 141 tree base_desc_type_node;
8d08fdba 142
9e62871e 143 tree class_type_node;
7f4edbcb 144 tree unknown_type_node;
8d08fdba 145
7f4edbcb 146 Array type `vtable_entry_type[]'
8d08fdba 147
7f4edbcb
BS
148 tree vtbl_type_node;
149 tree vtbl_ptr_type_node;
8d08fdba 150
2854d3c6 151 Namespaces,
8d08fdba 152
7f4edbcb 153 tree std_node;
2854d3c6 154 tree abi_node;
8d08fdba 155
7f4edbcb
BS
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.
8d08fdba 159
7f4edbcb 160 tree abort_fndecl;
8d08fdba 161
7f4edbcb 162 The FUNCTION_DECL for the default `::operator delete'.
2986ae00 163
7f4edbcb 164 tree global_delete_fndecl;
8d08fdba 165
7f4edbcb 166 Used by RTTI
669ec2b4
JM
167 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
168 tree tinfo_var_id;
169
7f4edbcb 170*/
8d08fdba 171
7f4edbcb 172tree cp_global_trees[CPTI_MAX];
8d08fdba 173
2c73f9f5 174/* Indicates that there is a type value in some namespace, although
7f4edbcb 175 that is not necessarily in scope at the moment. */
2c73f9f5 176
00e8de68 177tree global_type_node;
2c73f9f5 178
82a2669e 179/* The node that holds the "name" of the global scope. */
00e8de68 180tree global_scope_name;
82a2669e 181
6625cdb5
JM
182/* Used only for jumps to as-yet undefined labels, since jumps to
183 defined labels can have their validity checked immediately. */
184
e2500fed 185struct named_label_use_list GTY(())
e349ee73 186{
e2500fed 187 struct cp_binding_level *binding_level;
e349ee73
MS
188 tree names_in_scope;
189 tree label_decl;
152c16a9 190 location_t o_goto_locus;
6625cdb5 191 struct named_label_use_list *next;
e349ee73
MS
192};
193
ed5511d9 194#define named_label_uses cp_function_chain->x_named_label_uses
8d08fdba 195
8e4ce833
JJ
196#define local_names cp_function_chain->x_local_names
197
8d08fdba
MS
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. */
202tree static_aggregates;
203
8d08fdba
MS
204/* -- end of C++ */
205
81b3411c 206/* A node for the integer constants 2, and 3. */
d11ad92e 207
81b3411c 208tree integer_two_node, integer_three_node;
8d08fdba 209
8d08fdba 210/* Similar, for last_function_parm_tags. */
9cd64686 211tree last_function_parms;
8d08fdba 212
6625cdb5
JM
213/* A list of all LABEL_DECLs in the function that have names. Here so
214 we can clear out their names' definitions at the end of the
215 function, and so we can check the validity of jumps to these labels. */
216
e2500fed 217struct named_label_list GTY(())
6625cdb5 218{
e2500fed 219 struct cp_binding_level *binding_level;
6625cdb5
JM
220 tree names_in_scope;
221 tree old_value;
222 tree label_decl;
223 tree bad_decls;
6625cdb5 224 struct named_label_list *next;
826840d9
RH
225 unsigned int in_try_scope : 1;
226 unsigned int in_catch_scope : 1;
6625cdb5 227};
8d08fdba 228
4519c0a8 229#define named_labels cp_function_chain->x_named_labels
8d08fdba 230\f
b2244c65
MM
231/* The number of function bodies which we are currently processing.
232 (Zero if we are at namespace scope, one inside the body of a
233 function, two inside the body of a function in a local class, etc.) */
234int function_depth;
e23bd218
IR
235
236/* States indicating how grokdeclarator() should handle declspecs marked
237 with __attribute__((deprecated)). An object declared as
238 __attribute__((deprecated)) suppresses warnings of uses of other
239 deprecated items. */
240
241enum deprecated_states {
242 DEPRECATED_NORMAL,
243 DEPRECATED_SUPPRESS
244};
245
246static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
247
248/* Set by add_implicitly_declared_members() to keep those members from
249 being flagged as deprecated or reported as using deprecated
250 types. */
251int adding_implicit_members = 0;
594bb0e7
MM
252
253/* True if a declaration with an `extern' linkage specifier is being
254 processed. */
255bool have_extern_spec;
256
8d08fdba 257\f
0154eaa8
MM
258/* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
259 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
260 time the VAR_DECL was declared, the type was incomplete. */
261
e2500fed 262static GTY(()) tree incomplete_vars;
8d08fdba 263\f
74b846e0
MM
264/* Returns the kind of template specialization we are currently
265 processing, given that it's declaration contained N_CLASS_SCOPES
266 explicit scope qualifications. */
267
268tmpl_spec_kind
11f6b451 269current_tmpl_spec_kind (int n_class_scopes)
74b846e0
MM
270{
271 int n_template_parm_scopes = 0;
272 int seen_specialization_p = 0;
273 int innermost_specialization_p = 0;
e2500fed 274 struct cp_binding_level *b;
74b846e0
MM
275
276 /* Scan through the template parameter scopes. */
a7e8c268
MM
277 for (b = current_binding_level;
278 b->kind == sk_template_parms;
279 b = b->level_chain)
74b846e0
MM
280 {
281 /* If we see a specialization scope inside a parameter scope,
282 then something is wrong. That corresponds to a declaration
283 like:
284
285 template <class T> template <> ...
286
0e339752 287 which is always invalid since [temp.expl.spec] forbids the
74b846e0
MM
288 specialization of a class member template if the enclosing
289 class templates are not explicitly specialized as well. */
a7e8c268 290 if (b->explicit_spec_p)
74b846e0
MM
291 {
292 if (n_template_parm_scopes == 0)
293 innermost_specialization_p = 1;
294 else
295 seen_specialization_p = 1;
296 }
297 else if (seen_specialization_p == 1)
298 return tsk_invalid_member_spec;
299
300 ++n_template_parm_scopes;
301 }
302
303 /* Handle explicit instantiations. */
304 if (processing_explicit_instantiation)
305 {
306 if (n_template_parm_scopes != 0)
307 /* We've seen a template parameter list during an explicit
308 instantiation. For example:
309
310 template <class T> template void f(int);
311
312 This is erroneous. */
313 return tsk_invalid_expl_inst;
314 else
315 return tsk_expl_inst;
316 }
317
318 if (n_template_parm_scopes < n_class_scopes)
319 /* We've not seen enough template headers to match all the
320 specialized classes present. For example:
321
322 template <class T> void R<T>::S<T>::f(int);
323
0e339752 324 This is invalid; there needs to be one set of template
74b846e0
MM
325 parameters for each class. */
326 return tsk_insufficient_parms;
327 else if (n_template_parm_scopes == n_class_scopes)
328 /* We're processing a non-template declaration (even though it may
329 be a member of a template class.) For example:
330
331 template <class T> void S<T>::f(int);
332
333 The `class T' maches the `S<T>', leaving no template headers
334 corresponding to the `f'. */
335 return tsk_none;
336 else if (n_template_parm_scopes > n_class_scopes + 1)
337 /* We've got too many template headers. For example:
338
339 template <> template <class T> void f (T);
340
341 There need to be more enclosing classes. */
342 return tsk_excessive_parms;
343 else
344 /* This must be a template. It's of the form:
345
346 template <class T> template <class U> void S<T>::f(U);
347
348 This is a specialization if the innermost level was a
349 specialization; otherwise it's just a definition of the
350 template. */
351 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
8d08fdba
MS
352}
353
74b846e0
MM
354/* Exit the current scope. */
355
356void
11f6b451 357finish_scope (void)
74b846e0
MM
358{
359 poplevel (0, 0, 0);
360}
361
acef433b
MM
362/* When a label goes out of scope, check to see if that label was used
363 in a valid manner, and issue any appropriate warnings or errors. */
364
365static void
11f6b451 366pop_label (tree label, tree old_value)
acef433b 367{
a7e8c268 368 if (!processing_template_decl)
acef433b 369 {
88848bde
MM
370 if (DECL_INITIAL (label) == NULL_TREE)
371 {
5b030314
NS
372 location_t location;
373
88848bde 374 cp_error_at ("label `%D' used but not defined", label);
5b030314
NS
375 location.file = input_filename;
376 location.line = 0;
88848bde 377 /* Avoid crashing later. */
5b030314 378 define_label (location, DECL_NAME (label));
88848bde 379 }
078721e1 380 else if (warn_unused_label && !TREE_USED (label))
88848bde 381 cp_warning_at ("label `%D' defined but not used", label);
acef433b 382 }
acef433b 383
6625cdb5 384 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
acef433b
MM
385}
386
0811ea8f 387/* At the end of a function, all labels declared within the function
68642fb6 388 go out of scope. BLOCK is the top-level block for the
acef433b
MM
389 function. */
390
391static void
11f6b451 392pop_labels (tree block)
acef433b 393{
6625cdb5 394 struct named_label_list *link;
acef433b
MM
395
396 /* Clear out the definitions of all label names, since their scopes
397 end here. */
6625cdb5 398 for (link = named_labels; link; link = link->next)
acef433b 399 {
6625cdb5 400 pop_label (link->label_decl, link->old_value);
acef433b
MM
401 /* Put the labels into the "variables" of the top-level block,
402 so debugger can see them. */
6625cdb5
JM
403 TREE_CHAIN (link->label_decl) = BLOCK_VARS (block);
404 BLOCK_VARS (block) = link->label_decl;
acef433b
MM
405 }
406
6625cdb5 407 named_labels = NULL;
acef433b
MM
408}
409
8d08fdba
MS
410/* Exit a binding level.
411 Pop the level off, and restore the state of the identifier-decl mappings
412 that were in effect when this level was entered.
413
414 If KEEP == 1, this level had explicit declarations, so
415 and create a "block" (a BLOCK node) for the level
416 to record its declarations and subblocks for symbol table output.
417
8d08fdba
MS
418 If FUNCTIONBODY is nonzero, this level is the body of a function,
419 so create a block as if KEEP were set and also clear out all
420 label names.
421
422 If REVERSE is nonzero, reverse the order of decls before putting
423 them into the BLOCK. */
424
425tree
11f6b451 426poplevel (int keep, int reverse, int functionbody)
8d08fdba 427{
926ce8bd 428 tree link;
8d08fdba
MS
429 /* The chain of decls was accumulated in reverse order.
430 Put it into forward order, just for cleanliness. */
431 tree decls;
432 int tmp = functionbody;
b35d4555 433 int real_functionbody;
b35d4555 434 tree subblocks;
8d08fdba
MS
435 tree block = NULL_TREE;
436 tree decl;
f181d4ae 437 int leaving_for_scope;
ac20c67a 438 scope_kind kind;
f181d4ae 439
22ffcc6f 440 timevar_push (TV_NAME_LOOKUP);
b35d4555 441
a7e8c268 442 my_friendly_assert (current_binding_level->kind != sk_class, 19990916);
b74a0560 443
ac20c67a 444 real_functionbody = (current_binding_level->kind == sk_cleanup
b35d4555 445 ? ((functionbody = 0), tmp) : functionbody);
b35d4555
MM
446 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
447
b74a0560
MM
448 my_friendly_assert (!current_binding_level->class_shadowed,
449 19990414);
8d08fdba 450
536333d4
MM
451 /* We used to use KEEP == 2 to indicate that the new block should go
452 at the beginning of the list of blocks at this binding level,
453 rather than the end. This hack is no longer used. */
454 my_friendly_assert (keep == 0 || keep == 1, 0);
455
ac20c67a 456 if (current_binding_level->keep)
8d08fdba
MS
457 keep = 1;
458
6625cdb5
JM
459 /* Any uses of undefined labels, and any defined labels, now operate
460 under constraints of next binding contour. */
461 if (cfun && !functionbody)
462 {
e2500fed 463 struct cp_binding_level *level_chain;
6625cdb5
JM
464 level_chain = current_binding_level->level_chain;
465 if (level_chain)
466 {
467 struct named_label_use_list *uses;
468 struct named_label_list *labels;
469 for (labels = named_labels; labels; labels = labels->next)
470 if (labels->binding_level == current_binding_level)
471 {
472 tree decl;
a7e8c268 473 if (current_binding_level->kind == sk_try)
826840d9 474 labels->in_try_scope = 1;
a7e8c268 475 if (current_binding_level->kind == sk_catch)
826840d9 476 labels->in_catch_scope = 1;
6625cdb5
JM
477 for (decl = labels->names_in_scope; decl;
478 decl = TREE_CHAIN (decl))
479 if (decl_jump_unsafe (decl))
480 labels->bad_decls = tree_cons (NULL_TREE, decl,
481 labels->bad_decls);
482 labels->binding_level = level_chain;
483 labels->names_in_scope = level_chain->names;
484 }
485
486 for (uses = named_label_uses; uses; uses = uses->next)
487 if (uses->binding_level == current_binding_level)
488 {
489 uses->binding_level = level_chain;
490 uses->names_in_scope = level_chain->names;
491 }
492 }
493 }
494
8d08fdba
MS
495 /* Get the decls in the order they were written.
496 Usually current_binding_level->names is in reverse order.
497 But parameter decls were previously put in forward order. */
498
499 if (reverse)
500 current_binding_level->names
501 = decls = nreverse (current_binding_level->names);
502 else
503 decls = current_binding_level->names;
504
505 /* Output any nested inline functions within this block
506 if they weren't already output. */
8d08fdba
MS
507 for (decl = decls; decl; decl = TREE_CHAIN (decl))
508 if (TREE_CODE (decl) == FUNCTION_DECL
509 && ! TREE_ASM_WRITTEN (decl)
510 && DECL_INITIAL (decl) != NULL_TREE
6060a796
MS
511 && TREE_ADDRESSABLE (decl)
512 && decl_function_context (decl) == current_function_decl)
8d08fdba
MS
513 {
514 /* If this decl was copied from a file-scope decl
515 on account of a block-scope extern decl,
516 propagate TREE_ADDRESSABLE to the file-scope decl. */
517 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
518 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
519 else
520 {
521 push_function_context ();
522 output_inline_function (decl);
523 pop_function_context ();
524 }
525 }
526
d9b2d9da
MM
527 /* When not in function-at-a-time mode, expand_end_bindings will
528 warn about unused variables. But, in function-at-a-time mode
529 expand_end_bindings is not passed the list of variables in the
530 current scope, and therefore no warning is emitted. So, we
531 explicitly warn here. */
532 if (!processing_template_decl)
533 warn_about_unused_variables (getdecls ());
534
8d08fdba
MS
535 /* If there were any declarations or structure tags in that level,
536 or if this level is a function body,
537 create a BLOCK to record them for the life of this function. */
8d08fdba 538 block = NULL_TREE;
f444e36b 539 if (keep == 1 || functionbody)
8d08fdba
MS
540 block = make_node (BLOCK);
541 if (block != NULL_TREE)
542 {
f444e36b
MM
543 BLOCK_VARS (block) = decls;
544 BLOCK_SUBBLOCKS (block) = subblocks;
8d08fdba
MS
545 }
546
547 /* In each subblock, record that this is its superior. */
8d08fdba
MS
548 if (keep >= 0)
549 for (link = subblocks; link; link = TREE_CHAIN (link))
550 BLOCK_SUPERCONTEXT (link) = block;
551
f181d4ae
MM
552 /* We still support the old for-scope rules, whereby the variables
553 in a for-init statement were in scope after the for-statement
92bc1323 554 ended. We only use the new rules if flag_new_for_scope is
f181d4ae 555 nonzero. */
68642fb6 556 leaving_for_scope
a7e8c268 557 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
f181d4ae
MM
558
559 /* Remove declarations for all the DECLs in this level. */
560 for (link = decls; link; link = TREE_CHAIN (link))
561 {
c3783399
NS
562 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
563 && DECL_NAME (link))
f181d4ae 564 {
af6fd53f
GDR
565 cxx_binding *outer_binding
566 = IDENTIFIER_BINDING (DECL_NAME (link))->previous;
f181d4ae
MM
567 tree ns_binding;
568
569 if (!outer_binding)
570 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
c7dda1e3
MM
571 else
572 ns_binding = NULL_TREE;
573
68642fb6 574 if (outer_binding
147135cc 575 && outer_binding->scope == current_binding_level->level_chain)
f181d4ae 576 /* We have something like:
68642fb6 577
f181d4ae
MM
578 int i;
579 for (int i; ;);
68642fb6 580
f181d4ae
MM
581 and we are leaving the `for' scope. There's no reason to
582 keep the binding of the inner `i' in this case. */
d8f8dca1 583 pop_binding (DECL_NAME (link), link);
68642fb6 584 else if ((outer_binding
147135cc
GDR
585 && (TREE_CODE (outer_binding->value) == TYPE_DECL))
586 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
f181d4ae
MM
587 /* Here, we have something like:
588
589 typedef int I;
590
591 void f () {
592 for (int I; ;);
593 }
594
595 We must pop the for-scope binding so we know what's a
596 type and what isn't. */
d8f8dca1 597 pop_binding (DECL_NAME (link), link);
e76a2646 598 else
e76a2646 599 {
f181d4ae
MM
600 /* Mark this VAR_DECL as dead so that we can tell we left it
601 there only for backward compatibility. */
602 DECL_DEAD_FOR_LOCAL (link) = 1;
68642fb6 603
517f3315 604 /* Keep track of what should have happened when we
f181d4ae 605 popped the binding. */
147135cc
GDR
606 if (outer_binding && outer_binding->value)
607 DECL_SHADOWED_FOR_VAR (link) = outer_binding->value;
f181d4ae
MM
608
609 /* Add it to the list of dead variables in the next
610 outermost binding to that we can remove these when we
611 leave that binding. */
612 current_binding_level->level_chain->dead_vars_from_for
613 = tree_cons (NULL_TREE, link,
614 current_binding_level->level_chain->
615 dead_vars_from_for);
616
af6fd53f 617 /* Although we don't pop the cxx_binding, we do clear
147135cc
GDR
618 its SCOPE since the scope is going away now. */
619 IDENTIFIER_BINDING (DECL_NAME (link))->scope = NULL;
e76a2646 620 }
2ee887f2 621 }
68642fb6 622 else
8d6e462b 623 {
f181d4ae 624 /* Remove the binding. */
0034cf72
JM
625 decl = link;
626 if (TREE_CODE (decl) == TREE_LIST)
627 decl = TREE_VALUE (decl);
2f939d94 628 if (DECL_P (decl))
0034cf72
JM
629 pop_binding (DECL_NAME (decl), decl);
630 else if (TREE_CODE (decl) == OVERLOAD)
631 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
68642fb6 632 else
a98facb0 633 abort ();
8d08fdba 634 }
f181d4ae 635 }
8d08fdba 636
f181d4ae
MM
637 /* Remove declarations for any `for' variables from inner scopes
638 that we kept around. */
639 for (link = current_binding_level->dead_vars_from_for;
640 link; link = TREE_CHAIN (link))
d8f8dca1 641 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
2ee887f2 642
f181d4ae
MM
643 /* Restore the IDENTIFIER_TYPE_VALUEs. */
644 for (link = current_binding_level->type_shadowed;
645 link; link = TREE_CHAIN (link))
646 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
acef433b
MM
647
648 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
649 for (link = current_binding_level->shadowed_labels;
68642fb6 650 link;
acef433b 651 link = TREE_CHAIN (link))
6625cdb5 652 pop_label (TREE_VALUE (link), TREE_PURPOSE (link));
acef433b 653
f181d4ae
MM
654 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
655 list if a `using' declaration put them there. The debugging
656 back-ends won't understand OVERLOAD, so we remove them here.
657 Because the BLOCK_VARS are (temporarily) shared with
658 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
659 popped all the bindings. */
660 if (block)
661 {
662 tree* d;
8d6e462b 663
a06d48ef
JM
664 for (d = &BLOCK_VARS (block); *d; )
665 {
666 if (TREE_CODE (*d) == TREE_LIST)
667 *d = TREE_CHAIN (*d);
668 else
669 d = &TREE_CHAIN (*d);
670 }
8d6e462b 671 }
8d08fdba
MS
672
673 /* If the level being exited is the top level of a function,
674 check over all the labels. */
8d08fdba
MS
675 if (functionbody)
676 {
acef433b
MM
677 /* Since this is the top level block of a function, the vars are
678 the function's parameters. Don't leave them in the BLOCK
679 because they are found in the FUNCTION_DECL instead. */
8d08fdba 680 BLOCK_VARS (block) = 0;
acef433b 681 pop_labels (block);
8d08fdba
MS
682 }
683
ac20c67a 684 kind = current_binding_level->kind;
8d08fdba 685
1a6daf15 686 leave_scope ();
8d08fdba
MS
687 if (functionbody)
688 DECL_INITIAL (current_function_decl) = block;
689 else if (block)
f444e36b
MM
690 current_binding_level->blocks
691 = chainon (current_binding_level->blocks, block);
692
8d08fdba
MS
693 /* If we did not make a block for the level just exited,
694 any blocks made for inner levels
695 (since they cannot be recorded as subblocks in that level)
696 must be carried forward so they will later become subblocks
697 of something else. */
698 else if (subblocks)
536333d4
MM
699 current_binding_level->blocks
700 = chainon (current_binding_level->blocks, subblocks);
8d08fdba 701
d9b2d9da
MM
702 /* Each and every BLOCK node created here in `poplevel' is important
703 (e.g. for proper debugging information) so if we created one
704 earlier, mark it as "used". */
705 if (block)
706 TREE_USED (block) = 1;
707
8d08fdba 708 /* Take care of compiler's internal binding structures. */
ac20c67a 709 if (kind == sk_cleanup)
8d08fdba 710 {
d9b2d9da
MM
711 tree scope_stmts;
712
68642fb6 713 scope_stmts
d9b2d9da 714 = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
8d08fdba 715 if (block)
d9b2d9da
MM
716 {
717 SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts)) = block;
718 SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts)) = block;
719 }
720
8f471b0d 721 block = poplevel (keep, reverse, functionbody);
8d08fdba
MS
722 }
723
22ffcc6f 724 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
8d08fdba
MS
725}
726
727/* Delete the node BLOCK from the current binding level.
728 This is used for the block inside a stmt expr ({...})
729 so that the block can be reinserted where appropriate. */
730
731void
11f6b451 732delete_block (tree block)
8d08fdba
MS
733{
734 tree t;
735 if (current_binding_level->blocks == block)
736 current_binding_level->blocks = TREE_CHAIN (block);
737 for (t = current_binding_level->blocks; t;)
738 {
739 if (TREE_CHAIN (t) == block)
740 TREE_CHAIN (t) = TREE_CHAIN (block);
741 else
742 t = TREE_CHAIN (t);
743 }
744 TREE_CHAIN (block) = NULL_TREE;
745 /* Clear TREE_USED which is always set by poplevel.
746 The flag is set again if insert_block is called. */
747 TREE_USED (block) = 0;
748}
749
750/* Insert BLOCK at the end of the list of subblocks of the
751 current binding level. This is used when a BIND_EXPR is expanded,
752 to handle the BLOCK node inside the BIND_EXPR. */
753
754void
11f6b451 755insert_block (tree block)
8d08fdba
MS
756{
757 TREE_USED (block) = 1;
758 current_binding_level->blocks
759 = chainon (current_binding_level->blocks, block);
760}
761
8d08fdba
MS
762/* Set the BLOCK node for the innermost scope
763 (the one we are currently in). */
764
765void
11f6b451 766set_block (tree block ATTRIBUTE_UNUSED )
8d08fdba 767{
f444e36b
MM
768 /* The RTL expansion machinery requires us to provide this callback,
769 but it is not applicable in function-at-a-time mode. */
8d08fdba
MS
770}
771
838dfd8a 772/* Returns nonzero if T is a virtual function table. */
0aafb128
MM
773
774int
11f6b451 775vtable_decl_p (tree t, void* data ATTRIBUTE_UNUSED )
0aafb128
MM
776{
777 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
778}
779
838dfd8a 780/* Returns nonzero if T is a TYPE_DECL for a type with virtual
0aafb128
MM
781 functions. */
782
783int
11f6b451 784vtype_decl_p (tree t, void *data ATTRIBUTE_UNUSED )
0aafb128
MM
785{
786 return (TREE_CODE (t) == TYPE_DECL
34249844
NS
787 && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
788 && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
0aafb128
MM
789}
790
70b76b34
DP
791struct walk_globals_data {
792 walk_globals_pred p;
793 walk_globals_fn f;
794 void *data;
795};
796
797/* Walk the vtable declarations in NAMESPACE. Whenever one is found
838dfd8a
KH
798 for which P returns nonzero, call F with its address. If any call
799 to F returns a nonzero value, return a nonzero value. */
70b76b34
DP
800
801static int
11f6b451 802walk_vtables_r (tree namespace, void* data)
70b76b34
DP
803{
804 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
805 walk_globals_fn f = wgd->f;
806 void *d = wgd->data;
807 tree decl = NAMESPACE_LEVEL (namespace)->vtables;
808 int result = 0;
809
810 for (; decl ; decl = TREE_CHAIN (decl))
0246d49e 811 result |= (*f) (&decl, d);
70b76b34
DP
812
813 return result;
814}
815
816/* Walk the vtable declarations. Whenever one is found for which P
838dfd8a
KH
817 returns nonzero, call F with its address. If any call to F
818 returns a nonzero value, return a nonzero value. */
848eed92
GDR
819bool
820walk_vtables (walk_globals_pred p, walk_globals_fn f, void *data)
70b76b34
DP
821{
822 struct walk_globals_data wgd;
823 wgd.p = p;
824 wgd.f = f;
825 wgd.data = data;
826
827 return walk_namespaces (walk_vtables_r, &wgd);
828}
829
0aafb128
MM
830/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
831 itself, calling F for each. The DATA is passed to F as well. */
832
00e8de68
GDR
833static int
834walk_namespaces_r (tree namespace, walk_namespaces_fn f, void* data)
835{
836 int result = 0;
837 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
8d08fdba 838
00e8de68 839 result |= (*f) (namespace, data);
8d08fdba 840
00e8de68
GDR
841 for (; current; current = TREE_CHAIN (current))
842 result |= walk_namespaces_r (current, f, data);
fc0e7bf5 843
00e8de68 844 return result;
5566b478
MS
845}
846
00e8de68
GDR
847/* Walk all the namespaces, calling F for each. The DATA is passed to
848 F as well. */
849
850int
851walk_namespaces (walk_namespaces_fn f, void* data)
5566b478 852{
00e8de68 853 return walk_namespaces_r (global_namespace, f, data);
8d08fdba
MS
854}
855
00e8de68
GDR
856/* Walk the global declarations in NAMESPACE. Whenever one is found
857 for which P returns nonzero, call F with its address. If any call
858 to F returns a nonzero value, return a nonzero value. */
8d08fdba 859
00e8de68
GDR
860static int
861walk_globals_r (tree namespace, void* data)
862{
863 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
864 walk_globals_pred p = wgd->p;
865 walk_globals_fn f = wgd->f;
866 void *d = wgd->data;
867 tree *t;
868 int result = 0;
8d08fdba 869
00e8de68 870 t = &NAMESPACE_LEVEL (namespace)->names;
9cd64686 871
00e8de68 872 while (*t)
8d08fdba 873 {
00e8de68 874 tree glbl = *t;
8d08fdba 875
00e8de68
GDR
876 if ((*p) (glbl, d))
877 result |= (*f) (t, d);
4b0d3cbe 878
00e8de68
GDR
879 /* If F changed *T, then *T still points at the next item to
880 examine. */
881 if (*t == glbl)
882 t = &TREE_CHAIN (*t);
2c73f9f5 883 }
8d08fdba 884
00e8de68 885 return result;
8d08fdba
MS
886}
887
00e8de68
GDR
888/* Walk the global declarations. Whenever one is found for which P
889 returns true, call F with its address. If any call to F
890 returns true, return true. */
2c73f9f5 891
00e8de68
GDR
892bool
893walk_globals (walk_globals_pred p, walk_globals_fn f, void *data)
2c73f9f5 894{
00e8de68
GDR
895 struct walk_globals_data wgd;
896 wgd.p = p;
897 wgd.f = f;
898 wgd.data = data;
e92cc029 899
00e8de68 900 return walk_namespaces (walk_globals_r, &wgd);
8926095f
MS
901}
902
00e8de68
GDR
903/* Call wrapup_globals_declarations for the globals in NAMESPACE. If
904 DATA is non-NULL, this is the last time we will call
905 wrapup_global_declarations for this NAMESPACE. */
39c01e4c 906
00e8de68
GDR
907int
908wrapup_globals_for_namespace (tree namespace, void* data)
39c01e4c 909{
00e8de68
GDR
910 struct cp_binding_level *level = NAMESPACE_LEVEL (namespace);
911 varray_type statics = level->static_decls;
912 tree *vec = &VARRAY_TREE (statics, 0);
913 int len = VARRAY_ACTIVE_SIZE (statics);
914 int last_time = (data != 0);
68642fb6 915
00e8de68 916 if (last_time)
39c01e4c 917 {
00e8de68
GDR
918 check_global_declarations (vec, len);
919 return 0;
39c01e4c
MM
920 }
921
00e8de68
GDR
922 /* Write out any globals that need to be output. */
923 return wrapup_global_declarations (vec, len);
39c01e4c
MM
924}
925
00e8de68 926\f
9188c363
MM
927/* In C++, you don't have to write `struct S' to refer to `S'; you
928 can just use `S'. We accomplish this by creating a TYPE_DECL as
929 if the user had written `typedef struct S S'. Create and return
930 the TYPE_DECL for TYPE. */
931
932tree
11f6b451 933create_implicit_typedef (tree name, tree type)
9188c363
MM
934{
935 tree decl;
936
937 decl = build_decl (TYPE_DECL, name, type);
c727aa5e 938 DECL_ARTIFICIAL (decl) = 1;
9188c363
MM
939 /* There are other implicit type declarations, like the one *within*
940 a class that allows you to write `S::S'. We must distinguish
941 amongst these. */
942 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
943 TYPE_NAME (type) = decl;
944
945 return decl;
946}
947
8e4ce833
JJ
948/* Remember a local name for name-mangling purposes. */
949
950static void
11f6b451 951push_local_name (tree decl)
8e4ce833
JJ
952{
953 size_t i, nelts;
954 tree t, name;
955
22ffcc6f 956 timevar_push (TV_NAME_LOOKUP);
8e4ce833
JJ
957 if (!local_names)
958 VARRAY_TREE_INIT (local_names, 8, "local_names");
959
960 name = DECL_NAME (decl);
961
962 nelts = VARRAY_ACTIVE_SIZE (local_names);
963 for (i = 0; i < nelts; i++)
964 {
965 t = VARRAY_TREE (local_names, i);
966 if (DECL_NAME (t) == name)
967 {
968 if (!DECL_LANG_SPECIFIC (decl))
969 retrofit_lang_decl (decl);
e2500fed 970 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
8e4ce833
JJ
971 if (DECL_LANG_SPECIFIC (t))
972 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
973 else
974 DECL_DISCRIMINATOR (decl) = 1;
975
976 VARRAY_TREE (local_names, i) = decl;
de94b46c
KG
977 timevar_pop (TV_NAME_LOOKUP);
978 return;
8e4ce833
JJ
979 }
980 }
981
982 VARRAY_PUSH_TREE (local_names, decl);
22ffcc6f 983 timevar_pop (TV_NAME_LOOKUP);
8e4ce833 984}
8d08fdba
MS
985\f
986/* Subroutine of duplicate_decls: return truthvalue of whether
987 or not types of these decls match.
988
989 For C++, we must compare the parameter list so that `int' can match
990 `int&' in a parameter position, but `int&' is not confused with
991 `const int&'. */
e92cc029 992
6060a796 993int
11f6b451 994decls_match (tree newdecl, tree olddecl)
8d08fdba
MS
995{
996 int types_match;
997
347d73d7
ML
998 if (newdecl == olddecl)
999 return 1;
1000
6b4b3deb
MM
1001 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
1002 /* If the two DECLs are not even the same kind of thing, we're not
1003 interested in their types. */
1004 return 0;
1005
1006 if (TREE_CODE (newdecl) == FUNCTION_DECL)
8d08fdba
MS
1007 {
1008 tree f1 = TREE_TYPE (newdecl);
1009 tree f2 = TREE_TYPE (olddecl);
1010 tree p1 = TYPE_ARG_TYPES (f1);
1011 tree p2 = TYPE_ARG_TYPES (f2);
1012
4f1c5b7d 1013 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
eb68cb58
MM
1014 && ! (DECL_EXTERN_C_P (newdecl)
1015 && DECL_EXTERN_C_P (olddecl)))
c5a6fc45
JM
1016 return 0;
1017
8d08fdba 1018 if (TREE_CODE (f1) != TREE_CODE (f2))
e867a179 1019 return 0;
8d08fdba 1020
3bfdc719 1021 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8926095f 1022 {
8b27e9ef
NS
1023 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
1024 && (DECL_BUILT_IN (olddecl)
1025#ifndef NO_IMPLICIT_EXTERN_C
1026 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1027 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1028#endif
1029 ))
a28e3c7f
MS
1030 {
1031 types_match = self_promoting_args_p (p1);
1032 if (p1 == void_list_node)
1033 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1034 }
8b27e9ef
NS
1035#ifndef NO_IMPLICIT_EXTERN_C
1036 else if (p1 == NULL_TREE
1037 && (DECL_EXTERN_C_P (olddecl)
1038 && DECL_IN_SYSTEM_HEADER (olddecl)
1039 && !DECL_CLASS_SCOPE_P (olddecl))
1040 && (DECL_EXTERN_C_P (newdecl)
1041 && DECL_IN_SYSTEM_HEADER (newdecl)
1042 && !DECL_CLASS_SCOPE_P (newdecl)))
a28e3c7f
MS
1043 {
1044 types_match = self_promoting_args_p (p2);
1045 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1046 }
8b27e9ef 1047#endif
8926095f 1048 else
91063b51 1049 types_match = compparms (p1, p2);
8926095f 1050 }
8d08fdba
MS
1051 else
1052 types_match = 0;
1053 }
6b4b3deb 1054 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
51c184be 1055 {
2bb5d995
JM
1056 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1057 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1058 return 0;
1059
ee935db4
MM
1060 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1061 DECL_TEMPLATE_PARMS (olddecl)))
1062 return 0;
1063
f84b4be9 1064 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
ee935db4
MM
1065 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1066 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
f84b4be9
JM
1067 else
1068 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1069 DECL_TEMPLATE_RESULT (newdecl));
51c184be 1070 }
8d08fdba
MS
1071 else
1072 {
1073 if (TREE_TYPE (newdecl) == error_mark_node)
1074 types_match = TREE_TYPE (olddecl) == error_mark_node;
1075 else if (TREE_TYPE (olddecl) == NULL_TREE)
1076 types_match = TREE_TYPE (newdecl) == NULL_TREE;
a0a33927
MS
1077 else if (TREE_TYPE (newdecl) == NULL_TREE)
1078 types_match = 0;
8d08fdba 1079 else
01240200 1080 types_match = comptypes (TREE_TYPE (newdecl),
3bfdc719
MM
1081 TREE_TYPE (olddecl),
1082 COMPARE_REDECLARATION);
8d08fdba
MS
1083 }
1084
1085 return types_match;
1086}
1087
1088/* If NEWDECL is `static' and an `extern' was seen previously,
24f30ed4 1089 warn about it. OLDDECL is the previous declaration.
8d08fdba
MS
1090
1091 Note that this does not apply to the C++ case of declaring
1092 a variable `extern const' and then later `const'.
1093
8d08fdba
MS
1094 Don't complain about built-in functions, since they are beyond
1095 the user's control. */
1096
a5e6b29b 1097void
11f6b451 1098warn_extern_redeclared_static (tree newdecl, tree olddecl)
8d08fdba 1099{
83182544 1100 static const char *const explicit_extern_static_warning
8251199e 1101 = "`%D' was declared `extern' and later `static'";
83182544 1102 static const char *const implicit_extern_static_warning
8251199e
JM
1103 = "`%D' was declared implicitly `extern' and later `static'";
1104
24f30ed4
MM
1105 tree name;
1106
68642fb6 1107 if (TREE_CODE (newdecl) == TYPE_DECL
655dc6ee 1108 || TREE_CODE (newdecl) == TEMPLATE_DECL
a2a9e21c
GDR
1109 || TREE_CODE (newdecl) == CONST_DECL
1110 || TREE_CODE (newdecl) == NAMESPACE_DECL)
8d08fdba 1111 return;
68642fb6 1112
963d5758
MM
1113 /* Don't get confused by static member functions; that's a different
1114 use of `static'. */
1115 if (TREE_CODE (newdecl) == FUNCTION_DECL
1116 && DECL_STATIC_FUNCTION_P (newdecl))
1117 return;
8d08fdba 1118
24f30ed4
MM
1119 /* If the old declaration was `static', or the new one isn't, then
1120 then everything is OK. */
1121 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1122 return;
1123
1124 /* It's OK to declare a builtin function as `static'. */
1125 if (TREE_CODE (olddecl) == FUNCTION_DECL
1126 && DECL_ARTIFICIAL (olddecl))
1127 return;
1128
8d08fdba 1129 name = DECL_ASSEMBLER_NAME (newdecl);
33bd39a2 1130 pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
24f30ed4
MM
1131 ? implicit_extern_static_warning
1132 : explicit_extern_static_warning, newdecl);
1133 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
8d08fdba
MS
1134}
1135
b1a19c7c
MM
1136/* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1137 If the redeclaration is invalid, a diagnostic is issued, and the
1138 error_mark_node is returned. Otherwise, OLDDECL is returned.
8d08fdba 1139
b1a19c7c
MM
1140 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1141 returned. */
8d08fdba 1142
b1a19c7c 1143tree
11f6b451 1144duplicate_decls (tree newdecl, tree olddecl)
8d08fdba 1145{
8d08fdba
MS
1146 unsigned olddecl_uid = DECL_UID (olddecl);
1147 int olddecl_friend = 0, types_match = 0;
0b60dfe3 1148 int new_defines_function = 0;
5566b478
MS
1149
1150 if (newdecl == olddecl)
b1a19c7c 1151 return olddecl;
8d08fdba 1152
8926095f 1153 types_match = decls_match (newdecl, olddecl);
8d08fdba 1154
8d08fdba
MS
1155 /* If either the type of the new decl or the type of the old decl is an
1156 error_mark_node, then that implies that we have already issued an
1157 error (earlier) for some bogus type specification, and in that case,
1158 it is rather pointless to harass the user with yet more error message
0b60dfe3 1159 about the same declaration, so just pretend the types match here. */
bd6dd845
MS
1160 if (TREE_TYPE (newdecl) == error_mark_node
1161 || TREE_TYPE (olddecl) == error_mark_node)
8d08fdba 1162 types_match = 1;
68642fb6 1163
97055d5c
AO
1164 if (DECL_P (olddecl)
1165 && TREE_CODE (newdecl) == FUNCTION_DECL
1166 && TREE_CODE (olddecl) == FUNCTION_DECL
1167 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1168 {
1169 if (DECL_DECLARED_INLINE_P (newdecl)
1170 && DECL_UNINLINABLE (newdecl)
1171 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1172 /* Already warned elsewhere. */;
1173 else if (DECL_DECLARED_INLINE_P (olddecl)
1174 && DECL_UNINLINABLE (olddecl)
1175 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1176 /* Already warned. */;
1177 else if (DECL_DECLARED_INLINE_P (newdecl)
1178 && DECL_UNINLINABLE (olddecl)
1179 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1180 {
ddd2d57e
RH
1181 warning ("%Jfunction '%D' redeclared as inline", newdecl, newdecl);
1182 warning ("%Jprevious declaration of '%D' with attribute noinline",
1183 olddecl, olddecl);
97055d5c
AO
1184 }
1185 else if (DECL_DECLARED_INLINE_P (olddecl)
1186 && DECL_UNINLINABLE (newdecl)
1187 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1188 {
ddd2d57e
RH
1189 warning ("%Jfunction '%D' redeclared with attribute noinline",
1190 newdecl, newdecl);
1191 warning ("%Jprevious declaration of '%D' was inline",
1192 olddecl, olddecl);
97055d5c
AO
1193 }
1194 }
1195
a1c65f9f 1196 /* Check for redeclaration and other discrepancies. */
d22c8596 1197 if (TREE_CODE (olddecl) == FUNCTION_DECL
9f33663b
JM
1198 && DECL_ARTIFICIAL (olddecl))
1199 {
1200 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1201 {
d52e4867
RS
1202 /* Avoid warnings redeclaring anticipated built-ins. */
1203 if (DECL_ANTICIPATED (olddecl))
b1a19c7c 1204 return NULL_TREE;
d52e4867 1205
9f33663b
JM
1206 /* If you declare a built-in or predefined function name as static,
1207 the old definition is overridden, but optionally warn this was a
1208 bad choice of name. */
1209 if (! TREE_PUBLIC (newdecl))
1210 {
1211 if (warn_shadow)
33bd39a2 1212 warning ("shadowing %s function `%#D'",
9f33663b
JM
1213 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1214 olddecl);
1215 /* Discard the old built-in function. */
b1a19c7c 1216 return NULL_TREE;
9f33663b
JM
1217 }
1218 /* If the built-in is not ansi, then programs can override
1219 it even globally without an error. */
1220 else if (! DECL_BUILT_IN (olddecl))
33bd39a2 1221 warning ("library function `%#D' redeclared as non-function `%#D'",
9f33663b
JM
1222 olddecl, newdecl);
1223 else
1224 {
33bd39a2
ZW
1225 error ("declaration of `%#D'", newdecl);
1226 error ("conflicts with built-in declaration `%#D'",
a4443a08 1227 olddecl);
9f33663b 1228 }
b1a19c7c 1229 return NULL_TREE;
a4443a08 1230 }
9f33663b 1231 else if (!types_match)
8d08fdba 1232 {
d52e4867
RS
1233 /* Avoid warnings redeclaring anticipated built-ins. */
1234 if (DECL_ANTICIPATED (olddecl))
1235 ; /* Do nothing yet. */
1236 else if ((DECL_EXTERN_C_P (newdecl)
7e99327d
MM
1237 && DECL_EXTERN_C_P (olddecl))
1238 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1239 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
a4443a08 1240 {
9f33663b
JM
1241 /* A near match; override the builtin. */
1242
1243 if (TREE_PUBLIC (newdecl))
a4443a08 1244 {
33bd39a2
ZW
1245 warning ("new declaration `%#D'", newdecl);
1246 warning ("ambiguates built-in declaration `%#D'",
9f33663b 1247 olddecl);
a4443a08 1248 }
9f33663b 1249 else if (warn_shadow)
33bd39a2 1250 warning ("shadowing %s function `%#D'",
9f33663b
JM
1251 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1252 olddecl);
a4443a08 1253 }
9f33663b
JM
1254 else
1255 /* Discard the old built-in function. */
b1a19c7c 1256 return NULL_TREE;
04a9d080
RS
1257
1258 /* Replace the old RTL to avoid problems with inlining. */
1259 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
8d08fdba 1260 }
10326855 1261 /* Even if the types match, prefer the new declarations type
7df87825 1262 for anticipated built-ins, for exception lists, etc... */
10326855 1263 else if (DECL_ANTICIPATED (olddecl))
7072018e 1264 {
74869a85
NS
1265 tree type = TREE_TYPE (newdecl);
1266 tree attribs = (*targetm.merge_type_attributes)
1267 (TREE_TYPE (olddecl), type);
1268
1269 type = build_type_attribute_variant (type, attribs);
1270 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
7072018e 1271 }
68642fb6 1272
7e99327d
MM
1273 /* Whether or not the builtin can throw exceptions has no
1274 bearing on this declarator. */
1275 TREE_NOTHROW (olddecl) = 0;
1276
24f30ed4
MM
1277 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1278 {
1279 /* If a builtin function is redeclared as `static', merge
1280 the declarations, but make the original one static. */
1281 DECL_THIS_STATIC (olddecl) = 1;
1282 TREE_PUBLIC (olddecl) = 0;
9bfadf57 1283
421844e7
MM
1284 /* Make the old declaration consistent with the new one so
1285 that all remnants of the builtin-ness of this function
1286 will be banished. */
5d2ed28c 1287 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
19e7881c 1288 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
24f30ed4 1289 }
39211cd5
MS
1290 }
1291 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1292 {
9ed182dc
JM
1293 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1294 && TREE_CODE (newdecl) != TYPE_DECL
1295 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
1296 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
1297 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1298 && TREE_CODE (olddecl) != TYPE_DECL
1299 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
1300 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1301 == TYPE_DECL))))
1302 {
1303 /* We do nothing special here, because C++ does such nasty
1304 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1305 get shadowed, and know that if we need to find a TYPE_DECL
1306 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1307 slot of the identifier. */
b1a19c7c 1308 return NULL_TREE;
9ed182dc
JM
1309 }
1310
39211cd5 1311 if ((TREE_CODE (newdecl) == FUNCTION_DECL
5566b478 1312 && DECL_FUNCTION_TEMPLATE_P (olddecl))
39211cd5 1313 || (TREE_CODE (olddecl) == FUNCTION_DECL
5566b478 1314 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
b1a19c7c 1315 return NULL_TREE;
9ed182dc 1316
33bd39a2 1317 error ("`%#D' redeclared as different kind of symbol", newdecl);
39211cd5
MS
1318 if (TREE_CODE (olddecl) == TREE_LIST)
1319 olddecl = TREE_VALUE (olddecl);
8251199e 1320 cp_error_at ("previous declaration of `%#D'", olddecl);
39211cd5
MS
1321
1322 /* New decl is completely inconsistent with the old one =>
1323 tell caller to replace the old one. */
1324
b1a19c7c 1325 return NULL_TREE;
8d08fdba 1326 }
8d08fdba
MS
1327 else if (!types_match)
1328 {
4f1c5b7d 1329 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
7bdbfa05
MM
1330 /* These are certainly not duplicate declarations; they're
1331 from different scopes. */
b1a19c7c 1332 return NULL_TREE;
7bdbfa05 1333
8926095f 1334 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
f0e01782
MS
1335 {
1336 /* The name of a class template may not be declared to refer to
1337 any other template, class, function, object, namespace, value,
e92cc029 1338 or type in the same scope. */
5566b478
MS
1339 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1340 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
f0e01782 1341 {
33bd39a2 1342 error ("declaration of template `%#D'", newdecl);
8251199e 1343 cp_error_at ("conflicts with previous declaration `%#D'",
f0e01782
MS
1344 olddecl);
1345 }
ec255269
MS
1346 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1347 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1348 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
91063b51 1349 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
75650646 1350 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
b9201622
NS
1351 DECL_TEMPLATE_PARMS (olddecl))
1352 /* Template functions can be disambiguated by
1353 return type. */
1354 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1355 TREE_TYPE (TREE_TYPE (olddecl))))
ec255269 1356 {
33bd39a2 1357 error ("new declaration `%#D'", newdecl);
8251199e 1358 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
ec255269 1359 }
b1a19c7c 1360 return NULL_TREE;
f0e01782 1361 }
8926095f
MS
1362 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1363 {
eb68cb58 1364 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
8926095f 1365 {
33bd39a2 1366 error ("declaration of C function `%#D' conflicts with",
8926095f 1367 newdecl);
8251199e 1368 cp_error_at ("previous declaration `%#D' here", olddecl);
8926095f 1369 }
00595019 1370 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
91063b51 1371 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
700f8a87 1372 {
33bd39a2 1373 error ("new declaration `%#D'", newdecl);
8251199e 1374 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
700f8a87
MS
1375 }
1376 else
b1a19c7c 1377 return NULL_TREE;
8926095f 1378 }
8d08fdba
MS
1379
1380 /* Already complained about this, so don't do so again. */
a4443a08 1381 else if (current_class_type == NULL_TREE
8d08fdba
MS
1382 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
1383 {
a2a9e21c
GDR
1384 error ("conflicting declaration '%#D'", newdecl);
1385 cp_error_at ("'%D' has a previous declaration as `%#D'",
1386 olddecl, olddecl);
b1a19c7c 1387 return NULL_TREE;
8d08fdba
MS
1388 }
1389 }
68642fb6 1390 else if (TREE_CODE (newdecl) == FUNCTION_DECL
75650646
MM
1391 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1392 && (!DECL_TEMPLATE_INFO (newdecl)
68642fb6 1393 || (DECL_TI_TEMPLATE (newdecl)
75650646
MM
1394 != DECL_TI_TEMPLATE (olddecl))))
1395 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1396 && (!DECL_TEMPLATE_INFO (olddecl)
68642fb6 1397 || (DECL_TI_TEMPLATE (olddecl)
75650646 1398 != DECL_TI_TEMPLATE (newdecl))))))
386b8a85
JM
1399 /* It's OK to have a template specialization and a non-template
1400 with the same type, or to have specializations of two
75650646
MM
1401 different templates with the same type. Note that if one is a
1402 specialization, and the other is an instantiation of the same
1403 template, that we do not exit at this point. That situation
1404 can occur if we instantiate a template class, and then
0e339752 1405 specialize one of its methods. This situation is valid, but
75650646 1406 the declarations must be merged in the usual way. */
b1a19c7c 1407 return NULL_TREE;
68642fb6
UD
1408 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1409 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
75650646
MM
1410 && !DECL_USE_TEMPLATE (newdecl))
1411 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1412 && !DECL_USE_TEMPLATE (olddecl))))
1413 /* One of the declarations is a template instantiation, and the
1414 other is not a template at all. That's OK. */
b1a19c7c 1415 return NULL_TREE;
85c6cbaf
ML
1416 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
1417 && DECL_NAMESPACE_ALIAS (newdecl)
1418 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
b1a19c7c
MM
1419 /* In [namespace.alias] we have:
1420
1421 In a declarative region, a namespace-alias-definition can be
1422 used to redefine a namespace-alias declared in that declarative
1423 region to refer only to the namespace to which it already
1424 refers.
1425
1426 Therefore, if we encounter a second alias directive for the same
1427 alias, we can just ignore the second directive. */
1428 return olddecl;
8d08fdba
MS
1429 else
1430 {
d8e178a0 1431 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
8251199e 1432 if (errmsg)
8d08fdba 1433 {
33bd39a2 1434 error (errmsg, newdecl);
8d08fdba
MS
1435 if (DECL_NAME (olddecl) != NULL_TREE)
1436 cp_error_at ((DECL_INITIAL (olddecl)
2c73f9f5 1437 && namespace_bindings_p ())
8251199e
JM
1438 ? "`%#D' previously defined here"
1439 : "`%#D' previously declared here", olddecl);
b1a19c7c 1440 return error_mark_node;
8d08fdba
MS
1441 }
1442 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1443 && DECL_INITIAL (olddecl) != NULL_TREE
1444 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1445 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1446 {
1447 /* Prototype decl follows defn w/o prototype. */
8251199e 1448 cp_warning_at ("prototype for `%#D'", newdecl);
ddd2d57e 1449 warning ("%Jfollows non-prototype definition here", olddecl);
8d08fdba
MS
1450 }
1451 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1452 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
8926095f
MS
1453 {
1454 /* extern "C" int foo ();
1455 int foo () { bar (); }
1456 is OK. */
46ccf50a 1457 if (current_lang_depth () == 0)
5d2ed28c 1458 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
8926095f
MS
1459 else
1460 {
8251199e 1461 cp_error_at ("previous declaration of `%#D' with %L linkage",
8926095f 1462 olddecl, DECL_LANGUAGE (olddecl));
33bd39a2 1463 error ("conflicts with new declaration with %L linkage",
8926095f
MS
1464 DECL_LANGUAGE (newdecl));
1465 }
1466 }
e1cd6e56 1467
a6f02587 1468 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
c32381b1
JM
1469 ;
1470 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
e1cd6e56
MS
1471 {
1472 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1473 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1474 int i = 1;
1475
1476 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1477 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
68642fb6 1478
e1cd6e56
MS
1479 for (; t1 && t1 != void_list_node;
1480 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1481 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1482 {
2507f3b5
RK
1483 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1484 TREE_PURPOSE (t2)))
e1cd6e56 1485 {
624a5800
CR
1486 pedwarn ("default argument given for parameter %d of `%#D'",
1487 i, newdecl);
1488 cp_pedwarn_at ("after previous specification in `%#D'",
1489 olddecl);
e1cd6e56
MS
1490 }
1491 else
1492 {
33bd39a2 1493 error ("default argument given for parameter %d of `%#D'",
e1cd6e56 1494 i, newdecl);
8251199e 1495 cp_error_at ("after previous specification in `%#D'",
e1cd6e56
MS
1496 olddecl);
1497 }
1498 }
a5894242 1499
79065db2
MM
1500 if (DECL_DECLARED_INLINE_P (newdecl)
1501 && ! DECL_DECLARED_INLINE_P (olddecl)
7fcdf4c2 1502 && TREE_ADDRESSABLE (olddecl) && warn_inline)
dff6b454 1503 {
ddd2d57e
RH
1504 warning ("`%#D' was used before it was declared inline", newdecl);
1505 warning ("%Jprevious non-inline declaration here", olddecl);
dff6b454 1506 }
e1cd6e56 1507 }
8d08fdba
MS
1508 }
1509
4782bd5b
RS
1510 /* Do not merge an implicit typedef with an explicit one. In:
1511
1512 class A;
1513 ...
1514 typedef class A A __attribute__ ((foo));
1515
1516 the attribute should apply only to the typedef. */
1517 if (TREE_CODE (olddecl) == TYPE_DECL
1518 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1519 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
b1a19c7c 1520 return NULL_TREE;
4782bd5b 1521
8d08fdba
MS
1522 /* If new decl is `static' and an `extern' was seen previously,
1523 warn about it. */
1524 warn_extern_redeclared_static (newdecl, olddecl);
1525
e92cc029 1526 /* We have committed to returning 1 at this point. */
8d08fdba
MS
1527 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1528 {
1529 /* Now that functions must hold information normally held
1530 by field decls, there is extra work to do so that
1531 declaration information does not get destroyed during
1532 definition. */
1533 if (DECL_VINDEX (olddecl))
1534 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1535 if (DECL_CONTEXT (olddecl))
1536 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
e1cd6e56
MS
1537 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1538 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
fee7654e 1539 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
864b83b9 1540 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
4a67c9e9 1541 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
963d5758 1542 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
e0fff4b3
JM
1543 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1544 SET_OVERLOADED_OPERATOR_CODE
1545 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
0b60dfe3 1546 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
68642fb6 1547
0b60dfe3
BK
1548 /* Optionally warn about more than one declaration for the same
1549 name, but don't warn about a function declaration followed by a
1550 definition. */
1551 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1552 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
a1c65f9f 1553 /* Don't warn about extern decl followed by definition. */
0b60dfe3 1554 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
a1c65f9f 1555 /* Don't warn about friends, let add_friend take care of it. */
3581fae0 1556 && ! (DECL_FRIEND_P (newdecl) || DECL_FRIEND_P (olddecl)))
0b60dfe3 1557 {
33bd39a2 1558 warning ("redundant redeclaration of `%D' in same scope", newdecl);
8251199e 1559 cp_warning_at ("previous declaration of `%D'", olddecl);
0b60dfe3 1560 }
8d08fdba
MS
1561 }
1562
1563 /* Deal with C++: must preserve virtual function table size. */
1564 if (TREE_CODE (olddecl) == TYPE_DECL)
1565 {
926ce8bd
KH
1566 tree newtype = TREE_TYPE (newdecl);
1567 tree oldtype = TREE_TYPE (olddecl);
8d08fdba
MS
1568
1569 if (newtype != error_mark_node && oldtype != error_mark_node
1570 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
e93ee644
MM
1571 CLASSTYPE_FRIEND_CLASSES (newtype)
1572 = CLASSTYPE_FRIEND_CLASSES (oldtype);
7df87825 1573
970d6386 1574 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
8d08fdba
MS
1575 }
1576
8d08fdba
MS
1577 /* Copy all the DECL_... slots specified in the new decl
1578 except for any that we copy here from the old type. */
91d231cb 1579 DECL_ATTRIBUTES (newdecl)
f6897b10 1580 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
8d08fdba 1581
5566b478
MS
1582 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1583 {
4d85e00e 1584 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
68642fb6 1585 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
4d85e00e
MM
1586 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1587 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
68642fb6 1588
daa8df65
MM
1589 /* If the new declaration is a definition, update the file and
1590 line information on the declaration. */
06d5e633
NS
1591 if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)) == NULL_TREE
1592 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl)) != NULL_TREE)
daa8df65 1593 {
f31686a3
RH
1594 DECL_SOURCE_LOCATION (olddecl)
1595 = DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (olddecl))
1596 = DECL_SOURCE_LOCATION (newdecl);
daa8df65
MM
1597 }
1598
c11889ce
MM
1599 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1600 {
1601 DECL_INLINE (DECL_TEMPLATE_RESULT (olddecl))
1602 |= DECL_INLINE (DECL_TEMPLATE_RESULT (newdecl));
1603 DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (olddecl))
1604 |= DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (newdecl));
1605 }
1606
b1a19c7c 1607 return olddecl;
5566b478 1608 }
68642fb6 1609
8d08fdba
MS
1610 if (types_match)
1611 {
1612 /* Automatically handles default parameters. */
1613 tree oldtype = TREE_TYPE (olddecl);
e1cd6e56 1614 tree newtype;
8d08fdba 1615
e1cd6e56 1616 /* Merge the data types specified in the two decls. */
6da794e8 1617 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
e1cd6e56 1618
6da794e8 1619 /* If merge_types produces a non-typedef type, just use the old type. */
9076e292
JM
1620 if (TREE_CODE (newdecl) == TYPE_DECL
1621 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1622 newtype = oldtype;
1623
8d08fdba 1624 if (TREE_CODE (newdecl) == VAR_DECL)
17bbb839
MM
1625 {
1626 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1627 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
39703eb9
MM
1628 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1629 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
17bbb839
MM
1630 }
1631
6da794e8 1632 /* Do this after calling `merge_types' so that default
8d08fdba
MS
1633 parameters don't confuse us. */
1634 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1635 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
1636 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
1637 {
f30432d7 1638 TREE_TYPE (newdecl) = build_exception_variant (newtype,
8d08fdba 1639 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
f30432d7 1640 TREE_TYPE (olddecl) = build_exception_variant (newtype,
8d08fdba
MS
1641 TYPE_RAISES_EXCEPTIONS (oldtype));
1642
9a224b4a 1643 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
f31686a3 1644 && DECL_SOURCE_LINE (olddecl) != 0
da20811c 1645 && flag_exceptions
4cc1d462
NS
1646 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
1647 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
8d08fdba 1648 {
33bd39a2 1649 error ("declaration of `%F' throws different exceptions",
f31686a3 1650 newdecl);
a09ba2e0 1651 cp_error_at ("than previous declaration `%F'", olddecl);
8d08fdba
MS
1652 }
1653 }
1654 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1655
1656 /* Lay the type out, unless already done. */
407f03b8 1657 if (! same_type_p (newtype, oldtype)
5566b478 1658 && TREE_TYPE (newdecl) != error_mark_node
5156628f 1659 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe
MS
1660 layout_type (TREE_TYPE (newdecl));
1661
5566b478
MS
1662 if ((TREE_CODE (newdecl) == VAR_DECL
1663 || TREE_CODE (newdecl) == PARM_DECL
1664 || TREE_CODE (newdecl) == RESULT_DECL
1665 || TREE_CODE (newdecl) == FIELD_DECL
1666 || TREE_CODE (newdecl) == TYPE_DECL)
5156628f 1667 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe 1668 layout_decl (newdecl, 0);
8d08fdba
MS
1669
1670 /* Merge the type qualifiers. */
1671 if (TREE_READONLY (newdecl))
1672 TREE_READONLY (olddecl) = 1;
1673 if (TREE_THIS_VOLATILE (newdecl))
1674 TREE_THIS_VOLATILE (olddecl) = 1;
1675
1676 /* Merge the initialization information. */
8926095f
MS
1677 if (DECL_INITIAL (newdecl) == NULL_TREE
1678 && DECL_INITIAL (olddecl) != NULL_TREE)
1679 {
1680 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
f31686a3 1681 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
b0d06515
MM
1682 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1683 && DECL_LANG_SPECIFIC (newdecl)
4d85e00e 1684 && DECL_LANG_SPECIFIC (olddecl))
69ee8086
RH
1685 {
1686 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1687 DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl);
1688 }
8926095f 1689 }
39211cd5
MS
1690
1691 /* Merge the section attribute.
1692 We want to issue an error if the sections conflict but that must be
1693 done later in decl_attributes since we are called before attributes
1694 are assigned. */
1695 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1696 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1697
a157febd
GK
1698 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1699 {
1700 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1701 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1331d16f 1702 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
220a35cc
RS
1703 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1704 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1705 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1331d16f
RS
1706 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1707 DECL_IS_PURE (newdecl) |= DECL_IS_PURE (olddecl);
c740732f
MM
1708 /* Keep the old RTL. */
1709 COPY_DECL_RTL (olddecl, newdecl);
1710 }
1711 else if (TREE_CODE (newdecl) == VAR_DECL
1712 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1713 {
1714 /* Keep the old RTL. We cannot keep the old RTL if the old
1715 declaration was for an incomplete object and the new
1716 declaration is not since many attributes of the RTL will
1717 change. */
1718 COPY_DECL_RTL (olddecl, newdecl);
a157febd 1719 }
8d08fdba
MS
1720 }
1721 /* If cannot merge, then use the new type and qualifiers,
1722 and don't preserve the old rtl. */
1723 else
1724 {
1725 /* Clean out any memory we had of the old declaration. */
1726 tree oldstatic = value_member (olddecl, static_aggregates);
1727 if (oldstatic)
1728 TREE_VALUE (oldstatic) = error_mark_node;
1729
1730 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1731 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1732 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1733 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1734 }
1735
1736 /* Merge the storage class information. */
45806a3f
FS
1737 merge_weak (newdecl, olddecl);
1738
e92cc029 1739 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
794d4a61 1740 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
a9aedbc2
MS
1741 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1742 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1743 if (! DECL_EXTERNAL (olddecl))
1744 DECL_EXTERNAL (newdecl) = 0;
68642fb6 1745
0b60dfe3 1746 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
8d08fdba 1747 {
a9aedbc2
MS
1748 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1749 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
77be6f82 1750 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
68642fb6 1751 DECL_TEMPLATE_INSTANTIATED (newdecl)
2b0a63a3 1752 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
0b60dfe3
BK
1753 /* Don't really know how much of the language-specific
1754 values we should copy from old to new. */
1755 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
e2500fed
GK
1756 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
1757 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
0b60dfe3 1758 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
fbf1c34b 1759 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3febd123
NS
1760 DECL_INITIALIZED_IN_CLASS_P (newdecl)
1761 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
0b60dfe3 1762 olddecl_friend = DECL_FRIEND_P (olddecl);
6a629cac
MM
1763
1764 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1765 if (TREE_CODE (newdecl) == FUNCTION_DECL
1766 || DECL_FUNCTION_TEMPLATE_P (newdecl))
bb5e8a7f
MM
1767 {
1768 DECL_BEFRIENDING_CLASSES (newdecl)
1769 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1770 DECL_BEFRIENDING_CLASSES (olddecl));
ca9e1382
KL
1771 /* DECL_THUNKS is only valid for virtual functions,
1772 otherwise it is a DECL_FRIEND_CONTEXT. */
1773 if (DECL_VIRTUAL_P (newdecl))
1774 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
bb5e8a7f 1775 }
8d08fdba
MS
1776 }
1777
8d08fdba
MS
1778 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1779 {
68642fb6
UD
1780 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1781 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
75650646
MM
1782 {
1783 /* If newdecl is not a specialization, then it is not a
1784 template-related function at all. And that means that we
bf7c02dd 1785 should have exited above, returning 0. */
75650646
MM
1786 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
1787 0);
1788
68642fb6 1789 if (TREE_USED (olddecl))
75650646 1790 /* From [temp.expl.spec]:
68642fb6 1791
75650646
MM
1792 If a template, a member template or the member of a class
1793 template is explicitly specialized then that
1794 specialization shall be declared before the first use of
1795 that specialization that would cause an implicit
1796 instantiation to take place, in every translation unit in
1797 which such a use occurs. */
33bd39a2 1798 error ("explicit specialization of %D after first use",
75650646
MM
1799 olddecl);
1800
1801 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
d03d18e8
KL
1802
1803 /* [temp.expl.spec/14] We don't inline explicit specialization
1804 just because the primary template says so. */
75650646 1805 }
d03d18e8
KL
1806 else
1807 {
1808 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1809 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
faae18ab 1810
d03d18e8 1811 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
faae18ab 1812
d03d18e8
KL
1813 /* If either decl says `inline', this fn is inline, unless
1814 its definition was passed already. */
1815 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
1816 DECL_INLINE (olddecl) = 1;
1817 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
1818
1819 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1820 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1821 }
97055d5c 1822
5daf7c0a
JM
1823 /* Preserve abstractness on cloned [cd]tors. */
1824 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1825
700f8a87
MS
1826 if (! types_match)
1827 {
5d2ed28c 1828 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
92643fea 1829 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
19e7881c 1830 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
5566b478
MS
1831 }
1832 if (! types_match || new_defines_function)
1833 {
6f1b4c42
JM
1834 /* These need to be copied so that the names are available.
1835 Note that if the types do match, we'll preserve inline
1836 info and other bits, but if not, we won't. */
700f8a87
MS
1837 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1838 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
700f8a87 1839 }
8d08fdba
MS
1840 if (new_defines_function)
1841 /* If defining a function declared with other language
1842 linkage, use the previously declared language linkage. */
5d2ed28c 1843 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
6f1b4c42 1844 else if (types_match)
8d08fdba
MS
1845 {
1846 /* If redeclaring a builtin function, and not a definition,
1847 it stays built in. */
1848 if (DECL_BUILT_IN (olddecl))
1849 {
26db82d8 1850 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
39211cd5 1851 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
8d08fdba
MS
1852 /* If we're keeping the built-in definition, keep the rtl,
1853 regardless of declaration matches. */
19e7881c 1854 SET_DECL_RTL (newdecl, DECL_RTL (olddecl));
8d08fdba
MS
1855 }
1856 else
084c1779 1857 DECL_ESTIMATED_INSNS (newdecl) = DECL_ESTIMATED_INSNS (olddecl);
8d08fdba
MS
1858
1859 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
8d08fdba
MS
1860 /* Don't clear out the arguments if we're redefining a function. */
1861 if (DECL_ARGUMENTS (olddecl))
1862 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1863 }
1864 }
0b1161fc
MM
1865 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1866 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
a9aedbc2 1867
8d08fdba
MS
1868 /* Now preserve various other info from the definition. */
1869 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
1870 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
1871 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
92643fea 1872 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
8d08fdba 1873
f4f206f4 1874 /* If either declaration has a nondefault visibility, use it. */
facef326
MA
1875 if (DECL_VISIBILITY (olddecl) != VISIBILITY_DEFAULT)
1876 {
1877 if (DECL_VISIBILITY (newdecl) != VISIBILITY_DEFAULT
1878 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
1879 {
1880 warning ("%J'%D': visibility attribute ignored because it",
1881 newdecl, newdecl);
1882 warning ("%Jconflicts with previous declaration here", olddecl);
1883 }
1884 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
1885 }
1886
8d08fdba
MS
1887 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1888 {
1889 int function_size;
8d08fdba
MS
1890
1891 function_size = sizeof (struct tree_decl);
1892
730e1556
KG
1893 memcpy ((char *) olddecl + sizeof (struct tree_common),
1894 (char *) newdecl + sizeof (struct tree_common),
1895 function_size - sizeof (struct tree_common));
8d08fdba 1896
75650646 1897 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
b3445994
MM
1898 /* If newdecl is a template instantiation, it is possible that
1899 the following sequence of events has occurred:
1900
1901 o A friend function was declared in a class template. The
1902 class template was instantiated.
1903
1904 o The instantiation of the friend declaration was
1905 recorded on the instantiation list, and is newdecl.
1906
1907 o Later, however, instantiate_class_template called pushdecl
1908 on the newdecl to perform name injection. But, pushdecl in
1909 turn called duplicate_decls when it discovered that another
1910 declaration of a global function with the same name already
1911 existed.
1912
1913 o Here, in duplicate_decls, we decided to clobber newdecl.
1914
1915 If we're going to do that, we'd better make sure that
1916 olddecl, and not newdecl, is on the list of
1917 instantiations so that if we try to do the instantiation
1918 again we won't get the clobbered declaration. */
1919 reregister_specialization (newdecl,
1920 DECL_TI_TEMPLATE (newdecl),
1921 olddecl);
8d08fdba
MS
1922 }
1923 else
1924 {
730e1556
KG
1925 memcpy ((char *) olddecl + sizeof (struct tree_common),
1926 (char *) newdecl + sizeof (struct tree_common),
1927 sizeof (struct tree_decl) - sizeof (struct tree_common)
2f9834e8 1928 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
8d08fdba
MS
1929 }
1930
1931 DECL_UID (olddecl) = olddecl_uid;
1932 if (olddecl_friend)
1933 DECL_FRIEND_P (olddecl) = 1;
1934
d9525bec
BK
1935 /* NEWDECL contains the merged attribute lists.
1936 Update OLDDECL to be the same. */
91d231cb 1937 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
d9525bec 1938
16e31964
DS
1939 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
1940 so that encode_section_info has a chance to look at the new decl
1941 flags and attributes. */
1942 if (DECL_RTL_SET_P (olddecl)
1943 && (TREE_CODE (olddecl) == FUNCTION_DECL
1944 || (TREE_CODE (olddecl) == VAR_DECL
1945 && TREE_STATIC (olddecl))))
1946 make_decl_rtl (olddecl, NULL);
1947
b1a19c7c 1948 return olddecl;
8d08fdba 1949}
8d08fdba
MS
1950\f
1951/* Generate an implicit declaration for identifier FUNCTIONID
1952 as a function of type int (). Print a warning if appropriate. */
1953
1954tree
11f6b451 1955implicitly_declare (tree functionid)
8d08fdba 1956{
926ce8bd 1957 tree decl;
8d08fdba
MS
1958
1959 /* We used to reuse an old implicit decl here,
1960 but this loses with inline functions because it can clobber
1961 the saved decl chains. */
1962 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
1963
1964 DECL_EXTERNAL (decl) = 1;
1965 TREE_PUBLIC (decl) = 1;
1966
cab1f180 1967 /* ISO standard says implicit declarations are in the innermost block.
d22c8596 1968 So we record the decl in the standard fashion. */
8d08fdba 1969 pushdecl (decl);
3e411c3f 1970 rest_of_decl_compilation (decl, NULL, 0, 0);
8d08fdba
MS
1971
1972 if (warn_implicit
1973 /* Only one warning per identifier. */
1974 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
1975 {
33bd39a2 1976 pedwarn ("implicit declaration of function `%#D'", decl);
8d08fdba
MS
1977 }
1978
1979 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
1980
8d08fdba
MS
1981 return decl;
1982}
1983
8251199e 1984/* Return zero if the declaration NEWDECL is valid
8d08fdba
MS
1985 when the declaration OLDDECL (assumed to be for the same name)
1986 has already been seen.
1987 Otherwise return an error message format string with a %s
1988 where the identifier should go. */
1989
d8e178a0 1990static const char *
11f6b451 1991redeclaration_error_message (tree newdecl, tree olddecl)
8d08fdba
MS
1992{
1993 if (TREE_CODE (newdecl) == TYPE_DECL)
1994 {
1995 /* Because C++ can put things into name space for free,
1996 constructs like "typedef struct foo { ... } foo"
1997 would look like an erroneous redeclaration. */
3bfdc719 1998 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
8251199e 1999 return 0;
8d08fdba 2000 else
8251199e 2001 return "redefinition of `%#D'";
8d08fdba
MS
2002 }
2003 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2004 {
2005 /* If this is a pure function, its olddecl will actually be
2006 the original initialization to `0' (which we force to call
2007 abort()). Don't complain about redefinition in this case. */
fee7654e 2008 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
8251199e 2009 return 0;
8d08fdba 2010
2c73f9f5 2011 /* If both functions come from different namespaces, this is not
a1c65f9f 2012 a redeclaration - this is a conflict with a used function. */
6eb3bb27 2013 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2c73f9f5 2014 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
8251199e 2015 return "`%D' conflicts with used function";
2c73f9f5 2016
db5ae43f
MS
2017 /* We'll complain about linkage mismatches in
2018 warn_extern_redeclared_static. */
2019
2c73f9f5 2020 /* Defining the same name twice is no good. */
8d08fdba 2021 if (DECL_INITIAL (olddecl) != NULL_TREE
faae18ab 2022 && DECL_INITIAL (newdecl) != NULL_TREE)
8d08fdba
MS
2023 {
2024 if (DECL_NAME (olddecl) == NULL_TREE)
8251199e 2025 return "`%#D' not declared in class";
8d08fdba 2026 else
8251199e 2027 return "redefinition of `%#D'";
8d08fdba 2028 }
8251199e 2029 return 0;
8d08fdba 2030 }
51c184be
MS
2031 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2032 {
ec255269 2033 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
5362b086 2034 && (DECL_TEMPLATE_RESULT (newdecl)
f4381d62 2035 != DECL_TEMPLATE_RESULT (olddecl))
ec255269
MS
2036 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
2037 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
2038 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
d0f062fb
NS
2039 && COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2040 && COMPLETE_TYPE_P (TREE_TYPE (olddecl))))
8251199e
JM
2041 return "redefinition of `%#D'";
2042 return 0;
51c184be 2043 }
1f51a992 2044 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
8d08fdba
MS
2045 {
2046 /* Objects declared at top level: */
2047 /* If at least one is a reference, it's ok. */
2048 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
8251199e 2049 return 0;
8926095f 2050 /* Reject two definitions. */
8251199e 2051 return "redefinition of `%#D'";
8d08fdba
MS
2052 }
2053 else
2054 {
2055 /* Objects declared with block scope: */
2056 /* Reject two definitions, and reject a definition
2057 together with an external reference. */
2058 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
8251199e
JM
2059 return "redeclaration of `%#D'";
2060 return 0;
8d08fdba
MS
2061 }
2062}
2063\f
acef433b 2064/* Create a new label, named ID. */
8d08fdba 2065
acef433b 2066static tree
11f6b451 2067make_label_decl (tree id, int local_p)
8d08fdba 2068{
acef433b 2069 tree decl;
8d08fdba 2070
acef433b 2071 decl = build_decl (LABEL_DECL, id, void_type_node);
acef433b
MM
2072
2073 DECL_CONTEXT (decl) = current_function_decl;
2074 DECL_MODE (decl) = VOIDmode;
2075 C_DECLARED_LABEL_FLAG (decl) = local_p;
8d08fdba 2076
acef433b
MM
2077 /* Say where one reference is to the label, for the sake of the
2078 error if it is not defined. */
f31686a3 2079 DECL_SOURCE_LOCATION (decl) = input_location;
acef433b
MM
2080
2081 /* Record the fact that this identifier is bound to this label. */
2082 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2083
6625cdb5
JM
2084 return decl;
2085}
2086
2087/* Record this label on the list of used labels so that we can check
2088 at the end of the function to see whether or not the label was
2089 actually defined, and so we can check when the label is defined whether
2090 this use is valid. */
2091
2092static void
11f6b451 2093use_label (tree decl)
6625cdb5
JM
2094{
2095 if (named_label_uses == NULL
2096 || named_label_uses->names_in_scope != current_binding_level->names
2097 || named_label_uses->label_decl != decl)
2098 {
2099 struct named_label_use_list *new_ent;
c68b0a84 2100 new_ent = ggc_alloc (sizeof (struct named_label_use_list));
e349ee73
MS
2101 new_ent->label_decl = decl;
2102 new_ent->names_in_scope = current_binding_level->names;
2103 new_ent->binding_level = current_binding_level;
82a98427 2104 new_ent->o_goto_locus = input_location;
e349ee73
MS
2105 new_ent->next = named_label_uses;
2106 named_label_uses = new_ent;
8d08fdba 2107 }
acef433b 2108}
8d08fdba 2109
acef433b
MM
2110/* Look for a label named ID in the current function. If one cannot
2111 be found, create one. (We keep track of used, but undefined,
2112 labels, and complain about them at the end of a function.) */
8d08fdba 2113
68642fb6 2114tree
11f6b451 2115lookup_label (tree id)
acef433b
MM
2116{
2117 tree decl;
6625cdb5 2118 struct named_label_list *ent;
8d08fdba 2119
22ffcc6f 2120 timevar_push (TV_NAME_LOOKUP);
acef433b
MM
2121 /* You can't use labels at global scope. */
2122 if (current_function_decl == NULL_TREE)
2123 {
2124 error ("label `%s' referenced outside of any function",
2125 IDENTIFIER_POINTER (id));
22ffcc6f 2126 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
acef433b 2127 }
68642fb6 2128
acef433b
MM
2129 /* See if we've already got this label. */
2130 decl = IDENTIFIER_LABEL_VALUE (id);
2131 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
22ffcc6f 2132 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba 2133
acef433b
MM
2134 /* Record this label on the list of labels used in this function.
2135 We do this before calling make_label_decl so that we get the
2136 IDENTIFIER_LABEL_VALUE before the new label is declared. */
c68b0a84 2137 ent = ggc_alloc_cleared (sizeof (struct named_label_list));
6625cdb5
JM
2138 ent->old_value = IDENTIFIER_LABEL_VALUE (id);
2139 ent->next = named_labels;
2140 named_labels = ent;
2141
acef433b
MM
2142 /* We need a new label. */
2143 decl = make_label_decl (id, /*local_p=*/0);
6625cdb5 2144
acef433b 2145 /* Now fill in the information we didn't have before. */
6625cdb5 2146 ent->label_decl = decl;
8d08fdba 2147
22ffcc6f 2148 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba
MS
2149}
2150
acef433b 2151/* Declare a local label named ID. */
8d08fdba
MS
2152
2153tree
11f6b451 2154declare_local_label (tree id)
8d08fdba 2155{
acef433b 2156 tree decl;
8d08fdba 2157
acef433b
MM
2158 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2159 this scope we can restore the old value of
2160 IDENTIFIER_TYPE_VALUE. */
68642fb6 2161 current_binding_level->shadowed_labels
acef433b
MM
2162 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2163 current_binding_level->shadowed_labels);
2164 /* Look for the label. */
2165 decl = make_label_decl (id, /*local_p=*/1);
2166 /* Now fill in the information we didn't have before. */
2167 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
68642fb6 2168
acef433b 2169 return decl;
8d08fdba
MS
2170}
2171
6625cdb5
JM
2172/* Returns nonzero if it is ill-formed to jump past the declaration of
2173 DECL. Returns 2 if it's also a real problem. */
2174
2175static int
11f6b451 2176decl_jump_unsafe (tree decl)
6625cdb5
JM
2177{
2178 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
2179 return 0;
2180
2181 if (DECL_INITIAL (decl) == NULL_TREE
2182 && pod_type_p (TREE_TYPE (decl)))
2183 return 0;
2184
2185 /* This is really only important if we're crossing an initialization.
2186 The POD stuff is just pedantry; why should it matter if the class
2187 contains a field of pointer to member type? */
2188 if (DECL_INITIAL (decl)
2189 || (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))))
2190 return 2;
2191 return 1;
2192}
2193
2194/* Check that a single previously seen jump to a newly defined label
2195 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2196 the jump context; NAMES are the names in scope in LEVEL at the jump
2197 context; FILE and LINE are the source position of the jump or 0. */
2198
2199static void
11f6b451
NN
2200check_previous_goto_1 (tree decl,
2201 struct cp_binding_level* level,
152c16a9 2202 tree names, const location_t *locus)
6625cdb5
JM
2203{
2204 int identified = 0;
2205 int saw_eh = 0;
e2500fed 2206 struct cp_binding_level *b = current_binding_level;
6625cdb5
JM
2207 for (; b; b = b->level_chain)
2208 {
2209 tree new_decls = b->names;
2210 tree old_decls = (b == level ? names : NULL_TREE);
2211 for (; new_decls != old_decls;
2212 new_decls = TREE_CHAIN (new_decls))
2213 {
2214 int problem = decl_jump_unsafe (new_decls);
2215 if (! problem)
2216 continue;
2217
2218 if (! identified)
2219 {
2220 if (decl)
33bd39a2 2221 pedwarn ("jump to label `%D'", decl);
6625cdb5
JM
2222 else
2223 pedwarn ("jump to case label");
2224
152c16a9
GDR
2225 if (locus)
2226 pedwarn ("%H from here", locus);
6625cdb5
JM
2227 identified = 1;
2228 }
2229
826840d9 2230 if (problem > 1)
6625cdb5
JM
2231 cp_error_at (" crosses initialization of `%#D'",
2232 new_decls);
2233 else
2234 cp_pedwarn_at (" enters scope of non-POD `%#D'",
2235 new_decls);
2236 }
2237
2238 if (b == level)
2239 break;
a7e8c268 2240 if ((b->kind == sk_try || b->kind == sk_catch) && ! saw_eh)
6625cdb5
JM
2241 {
2242 if (! identified)
2243 {
2244 if (decl)
33bd39a2 2245 pedwarn ("jump to label `%D'", decl);
6625cdb5
JM
2246 else
2247 pedwarn ("jump to case label");
2248
152c16a9
GDR
2249 if (locus)
2250 pedwarn ("%H from here", locus);
6625cdb5
JM
2251 identified = 1;
2252 }
a7e8c268 2253 if (b->kind == sk_try)
826840d9
RH
2254 error (" enters try block");
2255 else
2256 error (" enters catch block");
6625cdb5
JM
2257 saw_eh = 1;
2258 }
2259 }
2260}
2261
2262static void
11f6b451 2263check_previous_goto (struct named_label_use_list* use)
6625cdb5
JM
2264{
2265 check_previous_goto_1 (use->label_decl, use->binding_level,
152c16a9 2266 use->names_in_scope, &use->o_goto_locus);
6625cdb5
JM
2267}
2268
2269static void
11f6b451 2270check_switch_goto (struct cp_binding_level* level)
6625cdb5 2271{
152c16a9 2272 check_previous_goto_1 (NULL_TREE, level, level->names, NULL);
6625cdb5
JM
2273}
2274
2275/* Check that any previously seen jumps to a newly defined label DECL
2276 are OK. Called by define_label. */
2277
2278static void
11f6b451 2279check_previous_gotos (tree decl)
6625cdb5
JM
2280{
2281 struct named_label_use_list **usep;
2282
2283 if (! TREE_USED (decl))
2284 return;
2285
2286 for (usep = &named_label_uses; *usep; )
2287 {
2288 struct named_label_use_list *use = *usep;
2289 if (use->label_decl == decl)
2290 {
2291 check_previous_goto (use);
2292 *usep = use->next;
2293 }
2294 else
2295 usep = &(use->next);
2296 }
2297}
2298
2299/* Check that a new jump to a label DECL is OK. Called by
2300 finish_goto_stmt. */
2301
2302void
11f6b451 2303check_goto (tree decl)
6625cdb5
JM
2304{
2305 int identified = 0;
2306 tree bad;
2307 struct named_label_list *lab;
2308
e3cd9945
APB
2309 /* We can't know where a computed goto is jumping. So we assume
2310 that it's OK. */
2311 if (! DECL_P (decl))
2312 return;
2313
6625cdb5
JM
2314 /* If the label hasn't been defined yet, defer checking. */
2315 if (! DECL_INITIAL (decl))
2316 {
2317 use_label (decl);
2318 return;
2319 }
2320
2321 for (lab = named_labels; lab; lab = lab->next)
2322 if (decl == lab->label_decl)
2323 break;
2324
2325 /* If the label is not on named_labels it's a gcc local label, so
2326 it must be in an outer scope, so jumping to it is always OK. */
2327 if (lab == 0)
2328 return;
2329
826840d9
RH
2330 if ((lab->in_try_scope || lab->in_catch_scope || lab->bad_decls)
2331 && !identified)
6625cdb5
JM
2332 {
2333 cp_pedwarn_at ("jump to label `%D'", decl);
2334 pedwarn (" from here");
2335 identified = 1;
2336 }
2337
2338 for (bad = lab->bad_decls; bad; bad = TREE_CHAIN (bad))
2339 {
2340 tree b = TREE_VALUE (bad);
2341 int u = decl_jump_unsafe (b);
2342
2343 if (u > 1 && DECL_ARTIFICIAL (b))
2344 /* Can't skip init of __exception_info. */
ddd2d57e 2345 error ("%J enters catch block", b);
6625cdb5
JM
2346 else if (u > 1)
2347 cp_error_at (" skips initialization of `%#D'", b);
2348 else
2349 cp_pedwarn_at (" enters scope of non-POD `%#D'", b);
2350 }
2351
826840d9 2352 if (lab->in_try_scope)
6625cdb5 2353 error (" enters try block");
826840d9
RH
2354 else if (lab->in_catch_scope)
2355 error (" enters catch block");
6625cdb5
JM
2356}
2357
8d08fdba 2358/* Define a label, specifying the location in the source file.
b9c87401 2359 Return the LABEL_DECL node for the label. */
8d08fdba
MS
2360
2361tree
5b030314 2362define_label (location_t location, tree name)
8d08fdba 2363{
f01b0acb 2364 tree decl = lookup_label (name);
6625cdb5 2365 struct named_label_list *ent;
926ce8bd 2366 struct cp_binding_level *p;
6625cdb5 2367
22ffcc6f 2368 timevar_push (TV_NAME_LOOKUP);
6625cdb5
JM
2369 for (ent = named_labels; ent; ent = ent->next)
2370 if (ent->label_decl == decl)
2371 break;
8d08fdba 2372
3dc9aec6 2373 /* After labels, make any new cleanups in the function go into their
8d08fdba 2374 own new (temporary) binding contour. */
a7e8c268
MM
2375 for (p = current_binding_level;
2376 p->kind != sk_function_parms;
2377 p = p->level_chain)
3dc9aec6 2378 p->more_cleanups_ok = 0;
8d08fdba 2379
e1cd6e56 2380 if (name == get_identifier ("wchar_t"))
33bd39a2 2381 pedwarn ("label named wchar_t");
e1cd6e56 2382
8d08fdba 2383 if (DECL_INITIAL (decl) != NULL_TREE)
b9c87401 2384 error ("duplicate label `%D'", decl);
8d08fdba
MS
2385 else
2386 {
8d08fdba
MS
2387 /* Mark label as having been defined. */
2388 DECL_INITIAL (decl) = error_mark_node;
2389 /* Say where in the source. */
f31686a3 2390 DECL_SOURCE_LOCATION (decl) = location;
6625cdb5
JM
2391 if (ent)
2392 {
2393 ent->names_in_scope = current_binding_level->names;
2394 ent->binding_level = current_binding_level;
2395 }
2396 check_previous_gotos (decl);
8d08fdba 2397 }
b9c87401 2398
22ffcc6f 2399 timevar_pop (TV_NAME_LOOKUP);
b9c87401 2400 return decl;
8d08fdba
MS
2401}
2402
a5894242
MS
2403struct cp_switch
2404{
e2500fed 2405 struct cp_binding_level *level;
a5894242 2406 struct cp_switch *next;
56cb9733
MM
2407 /* The SWITCH_STMT being built. */
2408 tree switch_stmt;
2409 /* A splay-tree mapping the low element of a case range to the high
2410 element, or NULL_TREE if there is no high element. Used to
2411 determine whether or not a new case label duplicates an old case
2412 label. We need a tree, rather than simply a hash table, because
2413 of the GNU case range extension. */
2414 splay_tree cases;
a5894242
MS
2415};
2416
56cb9733
MM
2417/* A stack of the currently active switch statements. The innermost
2418 switch statement is on the top of the stack. There is no need to
2419 mark the stack for garbage collection because it is only active
2420 during the processing of the body of a function, and we never
2421 collect at that point. */
5362b086 2422
a5894242
MS
2423static struct cp_switch *switch_stack;
2424
56cb9733
MM
2425/* Called right after a switch-statement condition is parsed.
2426 SWITCH_STMT is the switch statement being parsed. */
2427
a5894242 2428void
11f6b451 2429push_switch (tree switch_stmt)
a5894242 2430{
c68b0a84 2431 struct cp_switch *p = xmalloc (sizeof (struct cp_switch));
a5894242
MS
2432 p->level = current_binding_level;
2433 p->next = switch_stack;
56cb9733
MM
2434 p->switch_stmt = switch_stmt;
2435 p->cases = splay_tree_new (case_compare, NULL, NULL);
a5894242
MS
2436 switch_stack = p;
2437}
2438
2439void
11f6b451 2440pop_switch (void)
a5894242 2441{
bedda2da 2442 struct cp_switch *cs;
5362b086 2443
bedda2da 2444 cs = switch_stack;
56cb9733 2445 splay_tree_delete (cs->cases);
a5894242 2446 switch_stack = switch_stack->next;
bedda2da 2447 free (cs);
a5894242
MS
2448}
2449
b0a1da19
JM
2450/* Note that we've seen a definition of a case label, and complain if this
2451 is a bad place for one. */
e92cc029 2452
3e4d04a1 2453tree
11f6b451 2454finish_case_label (tree low_value, tree high_value)
8d08fdba 2455{
3e4d04a1 2456 tree cond, r;
926ce8bd 2457 struct cp_binding_level *p;
a5894242 2458
56cb9733
MM
2459 if (processing_template_decl)
2460 {
8f17b5c5
MM
2461 tree label;
2462
56cb9733
MM
2463 /* For templates, just add the case label; we'll do semantic
2464 analysis at instantiation-time. */
8f17b5c5 2465 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
3e4d04a1 2466 return add_stmt (build_case_label (low_value, high_value, label));
56cb9733
MM
2467 }
2468
2469 /* Find the condition on which this switch statement depends. */
2470 cond = SWITCH_COND (switch_stack->switch_stmt);
2471 if (cond && TREE_CODE (cond) == TREE_LIST)
2472 cond = TREE_VALUE (cond);
56cb9733 2473
3e4d04a1 2474 r = c_add_case_label (switch_stack->cases, cond, low_value, high_value);
8d08fdba 2475
6625cdb5 2476 check_switch_goto (switch_stack->level);
a5894242 2477
3dc9aec6 2478 /* After labels, make any new cleanups in the function go into their
8d08fdba 2479 own new (temporary) binding contour. */
a7e8c268
MM
2480 for (p = current_binding_level;
2481 p->kind != sk_function_parms;
2482 p = p->level_chain)
3dc9aec6 2483 p->more_cleanups_ok = 0;
3e4d04a1
RH
2484
2485 return r;
8d08fdba
MS
2486}
2487\f
7ddedda4
MM
2488/* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2489
e2500fed 2490static hashval_t
11f6b451 2491typename_hash (const void* k)
7ddedda4 2492{
e2500fed
GK
2493 hashval_t hash;
2494 tree t = (tree) k;
7ddedda4 2495
7bdfd72e
KG
2496 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2497 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
7ddedda4
MM
2498
2499 return hash;
2500}
2501
2502/* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
2503
e2500fed 2504static int
11f6b451 2505typename_compare (const void * k1, const void * k2)
7ddedda4
MM
2506{
2507 tree t1;
2508 tree t2;
2509 tree d1;
2510 tree d2;
2511
2512 t1 = (tree) k1;
2513 t2 = (tree) k2;
2514 d1 = TYPE_NAME (t1);
2515 d2 = TYPE_NAME (t2);
68642fb6 2516
7ddedda4 2517 return (DECL_NAME (d1) == DECL_NAME (d2)
e2500fed 2518 && TYPE_CONTEXT (t1) == TYPE_CONTEXT (t2)
68642fb6 2519 && ((TREE_TYPE (t1) != NULL_TREE)
7ddedda4
MM
2520 == (TREE_TYPE (t2) != NULL_TREE))
2521 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
2522 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
2523}
2524
45869a6c
MM
2525/* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
2526 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
2527 is non-NULL, this type is being created by the implicit typename
2528 extension, and BASE_TYPE is a type named `t' in some base class of
68642fb6 2529 `T' which depends on template parameters.
45869a6c
MM
2530
2531 Returns the new TYPENAME_TYPE. */
2532
e2500fed
GK
2533static GTY ((param_is (union tree_node))) htab_t typename_htab;
2534
8ce33230 2535static tree
8fbc5ae7 2536build_typename_type (tree context, tree name, tree fullname)
45869a6c
MM
2537{
2538 tree t;
2539 tree d;
fad205ff 2540 void **e;
45869a6c 2541
e2500fed 2542 if (typename_htab == NULL)
9cd64686 2543 {
e2500fed
GK
2544 typename_htab = htab_create_ggc (61, &typename_hash,
2545 &typename_compare, NULL);
9cd64686 2546 }
45869a6c
MM
2547
2548 /* Build the TYPENAME_TYPE. */
33848bb0 2549 t = make_aggr_type (TYPENAME_TYPE);
45869a6c
MM
2550 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
2551 TYPENAME_TYPE_FULLNAME (t) = fullname;
45869a6c
MM
2552
2553 /* Build the corresponding TYPE_DECL. */
2554 d = build_decl (TYPE_DECL, name, t);
2555 TYPE_NAME (TREE_TYPE (d)) = d;
2556 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2557 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2642b9bf 2558 DECL_ARTIFICIAL (d) = 1;
45869a6c 2559
7ddedda4 2560 /* See if we already have this type. */
e2500fed
GK
2561 e = htab_find_slot (typename_htab, t, INSERT);
2562 if (*e)
2563 t = (tree) *e;
7ddedda4 2564 else
e2500fed 2565 *e = t;
7ddedda4 2566
45869a6c
MM
2567 return t;
2568}
2569
3baa501d
MM
2570/* Resolve `typename CONTEXT::NAME'. Returns an appropriate type,
2571 unless an error occurs, in which case error_mark_node is returned.
4f2b0fb2
NS
2572 If we locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is
2573 set, we return that, rather than the _TYPE it corresponds to, in
2574 other cases we look through the type decl. If TF_ERROR is set,
2575 complain about errors, otherwise be quiet. */
3baa501d 2576
5566b478 2577tree
11f6b451 2578make_typename_type (tree context, tree name, tsubst_flags_t complain)
5566b478 2579{
b2b7d40a 2580 tree fullname;
a80e4195 2581
5dc5d13c
KL
2582 if (name == error_mark_node
2583 || context == NULL_TREE
2584 || context == error_mark_node)
2585 return error_mark_node;
2586
2f939d94 2587 if (TYPE_P (name))
78638e24 2588 {
68642fb6
UD
2589 if (!(TYPE_LANG_SPECIFIC (name)
2590 && (CLASSTYPE_IS_TEMPLATE (name)
78638e24
MM
2591 || CLASSTYPE_USE_TEMPLATE (name))))
2592 name = TYPE_IDENTIFIER (name);
2593 else
2594 /* Create a TEMPLATE_ID_EXPR for the type. */
2595 name = build_nt (TEMPLATE_ID_EXPR,
2596 CLASSTYPE_TI_TEMPLATE (name),
2597 CLASSTYPE_TI_ARGS (name));
2598 }
653cc74a 2599 else if (TREE_CODE (name) == TYPE_DECL)
a80e4195 2600 name = DECL_NAME (name);
b2b7d40a
JM
2601
2602 fullname = name;
2603
2604 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11686454
JM
2605 {
2606 name = TREE_OPERAND (name, 0);
2607 if (TREE_CODE (name) == TEMPLATE_DECL)
2608 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
2609 }
8a2b77e7
JM
2610 if (TREE_CODE (name) == TEMPLATE_DECL)
2611 {
33bd39a2 2612 error ("`%D' used without template parameters", name);
8a2b77e7
JM
2613 return error_mark_node;
2614 }
5d872564
NS
2615 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 20030802);
2616
04ddee1b
BK
2617 if (TREE_CODE (context) == NAMESPACE_DECL)
2618 {
2619 /* We can get here from typename_sub0 in the explicit_template_type
2620 expansion. Just fail. */
4f2b0fb2 2621 if (complain & tf_error)
33bd39a2 2622 error ("no class template named `%#T' in `%#T'",
3baa501d 2623 name, context);
04ddee1b
BK
2624 return error_mark_node;
2625 }
2626
9579624e 2627 if (!dependent_type_p (context)
b77ead33 2628 || currently_open_class (context))
5566b478 2629 {
b2b7d40a
JM
2630 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
2631 {
ad810b22 2632 tree tmpl = NULL_TREE;
b2b7d40a 2633 if (IS_AGGR_TYPE (context))
86ac0575 2634 tmpl = lookup_field (context, name, 0, false);
ad810b22 2635 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
b2b7d40a 2636 {
4f2b0fb2 2637 if (complain & tf_error)
33bd39a2 2638 error ("no class template named `%#T' in `%#T'",
3baa501d 2639 name, context);
b2b7d40a
JM
2640 return error_mark_node;
2641 }
ffb690bd 2642
2b59fc25 2643 if (complain & tf_error)
6df5158a 2644 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
ba59df78 2645
68642fb6 2646 return lookup_template_class (tmpl,
ad810b22 2647 TREE_OPERAND (fullname, 1),
68642fb6 2648 NULL_TREE, context,
f9c244b8 2649 /*entering_scope=*/0,
42eaed49 2650 tf_error | tf_warning | tf_user);
b2b7d40a
JM
2651 }
2652 else
5566b478 2653 {
b4f70b3d 2654 tree t;
68642fb6 2655
b4f70b3d 2656 if (!IS_AGGR_TYPE (context))
b2b7d40a 2657 {
4f2b0fb2 2658 if (complain & tf_error)
33bd39a2 2659 error ("no type named `%#T' in `%#T'", name, context);
b2b7d40a
JM
2660 return error_mark_node;
2661 }
1107c4b3 2662
86ac0575 2663 t = lookup_field (context, name, 0, true);
7d4bdeed 2664 if (t)
4f2b0fb2 2665 {
8c081e84
MM
2666 if (TREE_CODE (t) != TYPE_DECL)
2667 {
2668 if (complain & tf_error)
2669 error ("no type named `%#T' in `%#T'", name, context);
2670 return error_mark_node;
2671 }
2672
2b59fc25 2673 if (complain & tf_error)
6df5158a 2674 perform_or_defer_access_check (TYPE_BINFO (context), t);
ba59df78 2675
4f2b0fb2
NS
2676 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
2677 t = TREE_TYPE (t);
ba3307c0 2678
4f2b0fb2
NS
2679 return t;
2680 }
5566b478 2681 }
5566b478 2682 }
11249cf0
MM
2683
2684 /* If the CONTEXT is not a template type, then either the field is
2685 there now or its never going to be. */
9579624e 2686 if (!dependent_type_p (context))
11249cf0 2687 {
4f2b0fb2 2688 if (complain & tf_error)
33bd39a2 2689 error ("no type named `%#T' in `%#T'", name, context);
11249cf0
MM
2690 return error_mark_node;
2691 }
68642fb6 2692
8fbc5ae7 2693 return build_typename_type (context, name, fullname);
5566b478
MS
2694}
2695
b8c6534b
KL
2696/* Resolve `CONTEXT::template NAME'. Returns an appropriate type,
2697 unless an error occurs, in which case error_mark_node is returned.
4f2b0fb2
NS
2698 If we locate a TYPE_DECL, we return that, rather than the _TYPE it
2699 corresponds to. If COMPLAIN zero, don't complain about any errors
2700 that occur. */
b8c6534b
KL
2701
2702tree
11f6b451 2703make_unbound_class_template (tree context, tree name, tsubst_flags_t complain)
b8c6534b
KL
2704{
2705 tree t;
2706 tree d;
2707
2708 if (TYPE_P (name))
2709 name = TYPE_IDENTIFIER (name);
2710 else if (DECL_P (name))
2711 name = DECL_NAME (name);
2712 if (TREE_CODE (name) != IDENTIFIER_NODE)
a98facb0 2713 abort ();
b8c6534b 2714
9579624e 2715 if (!dependent_type_p (context)
b8c6534b
KL
2716 || currently_open_class (context))
2717 {
2718 tree tmpl = NULL_TREE;
2719
2720 if (IS_AGGR_TYPE (context))
86ac0575 2721 tmpl = lookup_field (context, name, 0, false);
b8c6534b
KL
2722
2723 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2724 {
4f09be91 2725 if (complain & tf_error)
33bd39a2 2726 error ("no class template named `%#T' in `%#T'", name, context);
b8c6534b
KL
2727 return error_mark_node;
2728 }
2729
2b59fc25 2730 if (complain & tf_error)
6df5158a 2731 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
b8c6534b
KL
2732
2733 return tmpl;
2734 }
2735
2736 /* Build the UNBOUND_CLASS_TEMPLATE. */
2737 t = make_aggr_type (UNBOUND_CLASS_TEMPLATE);
2738 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
2739 TREE_TYPE (t) = NULL_TREE;
2740
2741 /* Build the corresponding TEMPLATE_DECL. */
2742 d = build_decl (TEMPLATE_DECL, name, t);
2743 TYPE_NAME (TREE_TYPE (d)) = d;
2744 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2745 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2746 DECL_ARTIFICIAL (d) = 1;
2747
2748 return t;
2749}
2750
8d08fdba 2751\f
47aa0df4
MM
2752
2753/* A chain of TYPE_DECLs for the builtin types. */
2754
2755static GTY(()) tree builtin_type_decls;
2756
2757/* Return a chain of TYPE_DECLs for the builtin types. */
2758
2759tree
edaf3e03 2760cxx_builtin_type_decls (void)
47aa0df4
MM
2761{
2762 return builtin_type_decls;
2763}
2764
8d08fdba 2765/* Push the declarations of builtin types into the namespace.
4b0d3cbe
MM
2766 RID_INDEX is the index of the builtin type in the array
2767 RID_POINTERS. NAME is the name used when looking up the builtin
2768 type. TYPE is the _TYPE node for the builtin type. */
8d08fdba 2769
eaa7c03f 2770void
11f6b451
NN
2771record_builtin_type (enum rid rid_index,
2772 const char* name,
2773 tree type)
8d08fdba
MS
2774{
2775 tree rname = NULL_TREE, tname = NULL_TREE;
a703fb38 2776 tree tdecl = NULL_TREE;
8d08fdba 2777
0e5921e8 2778 if ((int) rid_index < (int) RID_MAX)
8d08fdba
MS
2779 rname = ridpointers[(int) rid_index];
2780 if (name)
2781 tname = get_identifier (name);
2782
4b0d3cbe
MM
2783 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
2784 eliminated. Built-in types should not be looked up name; their
2785 names are keywords that the parser can recognize. However, there
2786 is code in c-common.c that uses identifier_global_value to look
2787 up built-in types by name. */
8d08fdba
MS
2788 if (tname)
2789 {
4b0d3cbe
MM
2790 tdecl = build_decl (TYPE_DECL, tname, type);
2791 DECL_ARTIFICIAL (tdecl) = 1;
a7e8c268 2792 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
8d08fdba 2793 }
4b0d3cbe 2794 if (rname)
8d08fdba 2795 {
4b0d3cbe 2796 if (!tdecl)
8d08fdba 2797 {
4b0d3cbe
MM
2798 tdecl = build_decl (TYPE_DECL, rname, type);
2799 DECL_ARTIFICIAL (tdecl) = 1;
8d08fdba 2800 }
4b0d3cbe 2801 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
8d08fdba 2802 }
4b0d3cbe
MM
2803
2804 if (!TYPE_NAME (type))
2805 TYPE_NAME (type) = tdecl;
47aa0df4
MM
2806
2807 if (tdecl)
2808 {
2809 TREE_CHAIN (tdecl) = builtin_type_decls;
2810 builtin_type_decls = tdecl;
2811 }
8d08fdba
MS
2812}
2813
eff71ab0 2814/* Record one of the standard Java types.
4d8a1dd6
MM
2815 * Declare it as having the given NAME.
2816 * If SIZE > 0, it is the size of one of the integral types;
2817 * otherwise it is the negative of the size of one of the other types. */
eff71ab0
PB
2818
2819static tree
11f6b451 2820record_builtin_java_type (const char* name, int size)
eff71ab0
PB
2821{
2822 tree type, decl;
2823 if (size > 0)
2824 type = make_signed_type (size);
2825 else if (size > -32)
a1c65f9f 2826 { /* "__java_char" or ""__java_boolean". */
eff71ab0
PB
2827 type = make_unsigned_type (-size);
2828 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
2829 }
2830 else
a1c65f9f 2831 { /* "__java_float" or ""__java_double". */
eff71ab0
PB
2832 type = make_node (REAL_TYPE);
2833 TYPE_PRECISION (type) = - size;
2834 layout_type (type);
2835 }
0e5921e8 2836 record_builtin_type (RID_MAX, name, type);
eff71ab0 2837 decl = TYPE_NAME (type);
e229f2cd
PB
2838
2839 /* Suppress generate debug symbol entries for these types,
2840 since for normal C++ they are just clutter.
a1c65f9f 2841 However, push_lang_context undoes this if extern "Java" is seen. */
eff71ab0 2842 DECL_IGNORED_P (decl) = 1;
e229f2cd 2843
eff71ab0
PB
2844 TYPE_FOR_JAVA (type) = 1;
2845 return type;
2846}
2847
a1c65f9f 2848/* Push a type into the namespace so that the back-ends ignore it. */
036407f7
ML
2849
2850static void
11f6b451 2851record_unknown_type (tree type, const char* name)
036407f7
ML
2852{
2853 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
2854 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
2855 DECL_IGNORED_P (decl) = 1;
2856 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
2857 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
2858 TYPE_ALIGN (type) = 1;
11cf4d18 2859 TYPE_USER_ALIGN (type) = 0;
036407f7 2860 TYPE_MODE (type) = TYPE_MODE (void_type_node);
68642fb6 2861}
036407f7 2862
d43829f9
MM
2863/* An string for which we should create an IDENTIFIER_NODE at
2864 startup. */
2865
2866typedef struct predefined_identifier
2867{
2868 /* The name of the identifier. */
8b60264b 2869 const char *const name;
d43829f9 2870 /* The place where the IDENTIFIER_NODE should be stored. */
8b60264b 2871 tree *const node;
838dfd8a 2872 /* Nonzero if this is the name of a constructor or destructor. */
8b60264b 2873 const int ctor_or_dtor_p;
d43829f9
MM
2874} predefined_identifier;
2875
2876/* Create all the predefined identifiers. */
2877
2878static void
11f6b451 2879initialize_predefined_identifiers (void)
d43829f9 2880{
8b60264b 2881 const predefined_identifier *pid;
d43829f9
MM
2882
2883 /* A table of identifiers to create at startup. */
8b60264b 2884 static const predefined_identifier predefined_identifiers[] = {
298d6f60
MM
2885 { "C++", &lang_name_cplusplus, 0 },
2886 { "C", &lang_name_c, 0 },
2887 { "Java", &lang_name_java, 0 },
2888 { CTOR_NAME, &ctor_identifier, 1 },
2889 { "__base_ctor", &base_ctor_identifier, 1 },
2890 { "__comp_ctor", &complete_ctor_identifier, 1 },
2891 { DTOR_NAME, &dtor_identifier, 1 },
2892 { "__comp_dtor", &complete_dtor_identifier, 1 },
2893 { "__base_dtor", &base_dtor_identifier, 1 },
2894 { "__deleting_dtor", &deleting_dtor_identifier, 1 },
298d6f60 2895 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
298d6f60
MM
2896 { "nelts", &nelts_identifier, 0 },
2897 { THIS_NAME, &this_identifier, 0 },
c4372ef4 2898 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
298d6f60 2899 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
298d6f60 2900 { "_vptr", &vptr_identifier, 0 },
3ec6bad3 2901 { "__vtt_parm", &vtt_parm_identifier, 0 },
82a2669e 2902 { "::", &global_scope_name, 0 },
1f6e1acc 2903 { "std", &std_identifier, 0 },
298d6f60 2904 { NULL, NULL, 0 }
d43829f9
MM
2905 };
2906
2907 for (pid = predefined_identifiers; pid->name; ++pid)
298d6f60
MM
2908 {
2909 *pid->node = get_identifier (pid->name);
2910 if (pid->ctor_or_dtor_p)
2911 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
2912 }
d43829f9
MM
2913}
2914
8d08fdba
MS
2915/* Create the predefined scalar types of C,
2916 and some nodes representing standard constants (0, 1, (void *)0).
2917 Initialize the global binding level.
2918 Make definitions for built-in primitive functions. */
2919
2920void
11f6b451 2921cxx_init_decl_processing (void)
8d08fdba 2922{
10841285
MM
2923 tree void_ftype;
2924 tree void_ftype_ptr;
8d08fdba 2925
d43829f9
MM
2926 /* Create all the identifiers we need. */
2927 initialize_predefined_identifiers ();
8d08fdba 2928
8f17b5c5 2929 /* Fill in back-end hooks. */
d363e7bf 2930 lang_missing_noreturn_ok_p = &cp_missing_noreturn_ok_p;
99dccabc 2931
9cd64686
MM
2932 /* Create the global variables. */
2933 push_to_top_level ();
8012c983 2934
82a2669e 2935 current_function_decl = NULL_TREE;
1ec57cf0 2936 current_binding_level = NULL;
a1c65f9f 2937 /* Enter the global namespace. */
30394414 2938 my_friendly_assert (global_namespace == NULL_TREE, 375);
82a2669e
GDR
2939 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
2940 void_type_node);
ac20c67a 2941 begin_scope (sk_namespace, global_namespace);
82a2669e 2942
30394414
JM
2943 current_lang_name = NULL_TREE;
2944
bccd95ae 2945 /* Adjust various flags based on command-line settings. */
4a386498 2946 if (!flag_permissive)
2642b9bf 2947 flag_pedantic_errors = 1;
bccd95ae 2948 if (!flag_no_inline)
b850de4f
MM
2949 {
2950 flag_inline_trees = 1;
2951 flag_no_inline = 1;
2952 }
acc72c37
MM
2953 if (flag_inline_functions)
2954 {
2955 flag_inline_trees = 2;
2956 flag_inline_functions = 0;
2957 }
830fcda8 2958
f963b5d9
RS
2959 /* Force minimum function alignment if using the least significant
2960 bit of function pointers to store the virtual bit. */
2961 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
2962 && force_align_functions_log < 1)
2963 force_align_functions_log = 1;
2964
8d08fdba
MS
2965 /* Initially, C. */
2966 current_lang_name = lang_name_c;
2967
81b3411c
BS
2968 build_common_tree_nodes (flag_signed_char);
2969
8d08fdba
MS
2970 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
2971 TREE_TYPE (error_mark_list) = error_mark_node;
2972
6bcedb4e 2973 /* Create the `std' namespace. */
1dbb6023
NS
2974 push_namespace (std_identifier);
2975 std_node = current_namespace;
2976 pop_namespace ();
5362b086 2977
eaa7c03f 2978 c_common_nodes_and_builtins ();
37c46b43 2979
4d8a1dd6
MM
2980 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
2981 java_short_type_node = record_builtin_java_type ("__java_short", 16);
2982 java_int_type_node = record_builtin_java_type ("__java_int", 32);
2983 java_long_type_node = record_builtin_java_type ("__java_long", 64);
2984 java_float_type_node = record_builtin_java_type ("__java_float", -32);
2985 java_double_type_node = record_builtin_java_type ("__java_double", -64);
2986 java_char_type_node = record_builtin_java_type ("__java_char", -16);
2987 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
eff71ab0 2988
8d08fdba
MS
2989 integer_two_node = build_int_2 (2, 0);
2990 TREE_TYPE (integer_two_node) = integer_type_node;
2991 integer_three_node = build_int_2 (3, 0);
2992 TREE_TYPE (integer_three_node) = integer_type_node;
8d08fdba 2993
255512c1 2994 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
de7df9eb
JM
2995 truthvalue_type_node = boolean_type_node;
2996 truthvalue_false_node = boolean_false_node;
2997 truthvalue_true_node = boolean_true_node;
2986ae00 2998
4cc1d462 2999 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
5fd8e536
JM
3000
3001#if 0
3e411c3f 3002 record_builtin_type (RID_MAX, NULL, string_type_node);
5fd8e536
JM
3003#endif
3004
1f84ec23
MM
3005 delta_type_node = ptrdiff_type_node;
3006 vtable_index_type = ptrdiff_type_node;
c7e266a6 3007
3ec6bad3 3008 vtt_parm_type = build_pointer_type (const_ptr_type_node);
10841285
MM
3009 void_ftype = build_function_type (void_type_node, void_list_node);
3010 void_ftype_ptr = build_function_type (void_type_node,
3011 tree_cons (NULL_TREE,
3012 ptr_type_node,
3013 void_list_node));
824b9a4c 3014 void_ftype_ptr
4cc1d462 3015 = build_exception_variant (void_ftype_ptr, empty_except_spec);
8d08fdba 3016
8d08fdba
MS
3017 /* C++ extensions */
3018
3019 unknown_type_node = make_node (UNKNOWN_TYPE);
036407f7
ML
3020 record_unknown_type (unknown_type_node, "unknown type");
3021
8d08fdba
MS
3022 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3023 TREE_TYPE (unknown_type_node) = unknown_type_node;
a6967cc0 3024
a6967cc0
JM
3025 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3026 result. */
8d08fdba
MS
3027 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3028 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3029
c4372ef4
NS
3030 {
3031 /* Make sure we get a unique function type, so we can give
3032 its pointer type a name. (This wins for gdb.) */
3033 tree vfunc_type = make_node (FUNCTION_TYPE);
3034 TREE_TYPE (vfunc_type) = integer_type_node;
3035 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3036 layout_type (vfunc_type);
3037
3038 vtable_entry_type = build_pointer_type (vfunc_type);
3039 }
0e5921e8 3040 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
8d08fdba 3041
8d08fdba 3042 vtbl_type_node
52bf7d5d 3043 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
8d08fdba 3044 layout_type (vtbl_type_node);
91063b51 3045 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3e411c3f 3046 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
849da744
MM
3047 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3048 layout_type (vtbl_ptr_type_node);
3e411c3f 3049 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
8d08fdba 3050
1f84ec23
MM
3051 push_namespace (get_identifier ("__cxxabiv1"));
3052 abi_node = current_namespace;
3053 pop_namespace ();
6633d636 3054
2c73f9f5 3055 global_type_node = make_node (LANG_TYPE);
036407f7 3056 record_unknown_type (global_type_node, "global type");
2c73f9f5 3057
db5ae43f
MS
3058 /* Now, C++. */
3059 current_lang_name = lang_name_cplusplus;
8d08fdba 3060
ced78d8b 3061 {
4b0d3cbe
MM
3062 tree bad_alloc_id;
3063 tree bad_alloc_type_node;
3064 tree bad_alloc_decl;
3065 tree newtype, deltype;
10841285
MM
3066 tree ptr_ftype_sizetype;
3067
1dbb6023 3068 push_namespace (std_identifier);
4b0d3cbe
MM
3069 bad_alloc_id = get_identifier ("bad_alloc");
3070 bad_alloc_type_node = make_aggr_type (RECORD_TYPE);
3071 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3072 bad_alloc_decl
3073 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3074 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3075 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
1dbb6023 3076 pop_namespace ();
4b0d3cbe 3077
10841285
MM
3078 ptr_ftype_sizetype
3079 = build_function_type (ptr_type_node,
3080 tree_cons (NULL_TREE,
c9f8536c 3081 size_type_node,
10841285 3082 void_list_node));
2c73f9f5 3083 newtype = build_exception_variant
0ba8a114
NS
3084 (ptr_ftype_sizetype, add_exception_specifier
3085 (NULL_TREE, bad_alloc_type_node, -1));
4cc1d462 3086 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
596ea4e5
AS
3087 push_cp_library_fn (NEW_EXPR, newtype);
3088 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3089 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3090 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
ced78d8b 3091 }
8d08fdba
MS
3092
3093 abort_fndecl
1f84ec23 3094 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
8d08fdba 3095
8d08fdba
MS
3096 /* Perform other language dependent initializations. */
3097 init_class_processing ();
8d08fdba 3098 init_search_processing ();
db48b831 3099 init_rtti_processing ();
8d08fdba 3100
6467930b 3101 if (flag_exceptions)
8d2733ca 3102 init_exception_processing ();
9e9ff709 3103
7fcdf4c2 3104 if (! supports_one_only ())
72b7eeff 3105 flag_weak = 0;
8d08fdba 3106
2ce07e2d 3107 make_fname_decl = cp_make_fname_decl;
0ba8a114 3108 start_fname_decls ();
8d08fdba 3109
e9a25f70
JL
3110 /* Show we use EH for cleanups. */
3111 using_eh_for_cleanups ();
62c154ed 3112
d9cf7c82
JM
3113 /* Maintain consistency. Perhaps we should just complain if they
3114 say -fwritable-strings? */
3115 if (flag_writable_strings)
3116 flag_const_strings = 0;
62c154ed
JM
3117}
3118
0ba8a114 3119/* Generate an initializer for a function naming variable from
bb885938 3120 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
f4f206f4 3121 filled in with the type of the init. */
0ba8a114
NS
3122
3123tree
bb885938 3124cp_fname_init (const char* name, tree *type_p)
0ba8a114
NS
3125{
3126 tree domain = NULL_TREE;
3127 tree type;
3128 tree init = NULL_TREE;
3129 size_t length = 0;
3130
3131 if (name)
3132 {
3133 length = strlen (name);
3134 domain = build_index_type (size_int (length));
3135 init = build_string (length + 1, name);
3136 }
3137
3138 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3139 type = build_cplus_array_type (type, domain);
3140
bb885938
NS
3141 *type_p = type;
3142
0ba8a114
NS
3143 if (init)
3144 TREE_TYPE (init) = type;
3145 else
bb885938 3146 init = error_mark_node;
0ba8a114
NS
3147
3148 return init;
3149}
3150
2ce07e2d
NS
3151/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3152 decl, NAME is the initialization string and TYPE_DEP indicates whether
3153 NAME depended on the type of the function. We make use of that to detect
0ba8a114
NS
3154 __PRETTY_FUNCTION__ inside a template fn. This is being done
3155 lazily at the point of first use, so we musn't push the decl now. */
2ce07e2d
NS
3156
3157static tree
11f6b451 3158cp_make_fname_decl (tree id, int type_dep)
2ce07e2d 3159{
83182544 3160 const char *const name = (type_dep && processing_template_decl
e913996d 3161 ? NULL : fname_as_string (type_dep));
bb885938
NS
3162 tree type;
3163 tree init = cp_fname_init (name, &type);
3164 tree decl = build_decl (VAR_DECL, id, type);
2ce07e2d 3165
6cce57b0 3166 /* As we're using pushdecl_with_scope, we must set the context. */
0ba8a114
NS
3167 DECL_CONTEXT (decl) = current_function_decl;
3168 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3169
2ce07e2d
NS
3170 TREE_STATIC (decl) = 1;
3171 TREE_READONLY (decl) = 1;
2ce07e2d 3172 DECL_ARTIFICIAL (decl) = 1;
2ce07e2d 3173 DECL_INITIAL (decl) = init;
0ba8a114
NS
3174
3175 TREE_USED (decl) = 1;
5362b086 3176
6cce57b0
JM
3177 if (current_function_decl)
3178 {
3179 struct cp_binding_level *b = current_binding_level;
a7e8c268 3180 while (b->level_chain->kind != sk_function_parms)
6cce57b0
JM
3181 b = b->level_chain;
3182 pushdecl_with_scope (decl, b);
ad16ae7f 3183 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
e913996d 3184 }
ad16ae7f
MM
3185 else
3186 pushdecl_top_level_and_finish (decl, init);
0ba8a114 3187
2ce07e2d
NS
3188 return decl;
3189}
3190
d52e4867
RS
3191/* Make a definition for a builtin function named NAME in the current
3192 namespace, whose data type is TYPE and whose context is CONTEXT.
3193 TYPE should be a function type with argument types.
8d08fdba 3194
0c11ada6
JM
3195 CLASS and CODE tell later passes how to compile calls to this function.
3196 See tree.h for possible values.
3197
3198 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6a2dd09a
RS
3199 the name to be called if we can't opencode the function.
3200 If ATTRS is nonzero, use that for the function's attribute
3201 list. */
8d08fdba 3202
d52e4867 3203static tree
11f6b451
NN
3204builtin_function_1 (const char* name,
3205 tree type,
3206 tree context,
3207 int code,
3208 enum built_in_class class,
3209 const char* libname,
3210 tree attrs)
8d08fdba 3211{
596ea4e5 3212 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
3213 DECL_BUILT_IN_CLASS (decl) = class;
3214 DECL_FUNCTION_CODE (decl) = code;
d52e4867 3215 DECL_CONTEXT (decl) = context;
12a22e76 3216
6bcedb4e 3217 pushdecl (decl);
6bcedb4e 3218
8d08fdba
MS
3219 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
3220 we cannot change DECL_ASSEMBLER_NAME until we have installed this
3221 function in the namespace. */
0c11ada6 3222 if (libname)
92643fea
MM
3223 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
3224 make_decl_rtl (decl, NULL);
935d1834
ZW
3225
3226 /* Warn if a function in the namespace for users
3227 is used without an occasion to consider it declared. */
3228 if (name[0] != '_' || name[1] != '_')
3229 DECL_ANTICIPATED (decl) = 1;
3230
6431177a 3231 /* Possibly apply some default attributes to this built-in function. */
6a2dd09a
RS
3232 if (attrs)
3233 decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
3234 else
3235 decl_attributes (&decl, NULL_TREE, 0);
6431177a 3236
8d08fdba
MS
3237 return decl;
3238}
7f4edbcb 3239
d52e4867
RS
3240/* Entry point for the benefit of c_common_nodes_and_builtins.
3241
34cd5ae7 3242 Make a definition for a builtin function named NAME and whose data type
d52e4867
RS
3243 is TYPE. TYPE should be a function type with argument types. This
3244 function places the anticipated declaration in the global namespace
3245 and additionally in the std namespace if appropriate.
3246
3247 CLASS and CODE tell later passes how to compile calls to this function.
3248 See tree.h for possible values.
3249
3250 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6a2dd09a
RS
3251 the name to be called if we can't opencode the function.
3252
3253 If ATTRS is nonzero, use that for the function's attribute
3254 list. */
d52e4867
RS
3255
3256tree
11f6b451
NN
3257builtin_function (const char* name,
3258 tree type,
3259 int code,
3260 enum built_in_class class,
3261 const char* libname,
3262 tree attrs)
d52e4867
RS
3263{
3264 /* All builtins that don't begin with an '_' should additionally
3265 go in the 'std' namespace. */
3266 if (name[0] != '_')
3267 {
3268 push_namespace (std_identifier);
6a2dd09a 3269 builtin_function_1 (name, type, std_node, code, class, libname, attrs);
d52e4867
RS
3270 pop_namespace ();
3271 }
3272
6a2dd09a
RS
3273 return builtin_function_1 (name, type, NULL_TREE, code,
3274 class, libname, attrs);
d52e4867
RS
3275}
3276
0c11ada6
JM
3277/* Generate a FUNCTION_DECL with the typical flags for a runtime library
3278 function. Not called directly. */
3279
3280static tree
11f6b451 3281build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
0c11ada6
JM
3282{
3283 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3284 DECL_EXTERNAL (fn) = 1;
3285 TREE_PUBLIC (fn) = 1;
3286 DECL_ARTIFICIAL (fn) = 1;
3287 TREE_NOTHROW (fn) = 1;
596ea4e5 3288 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
5d2ed28c 3289 SET_DECL_LANGUAGE (fn, lang_c);
0c11ada6
JM
3290 return fn;
3291}
c2a37c55 3292
0c11ada6
JM
3293/* Returns the _DECL for a library function with C linkage.
3294 We assume that such functions never throw; if this is incorrect,
3295 callers should unset TREE_NOTHROW. */
c2a37c55 3296
7f4edbcb 3297tree
11f6b451 3298build_library_fn (tree name, tree type)
0c11ada6 3299{
19e7881c 3300 return build_library_fn_1 (name, ERROR_MARK, type);
0c11ada6
JM
3301}
3302
3303/* Returns the _DECL for a library function with C++ linkage. */
3304
596ea4e5 3305static tree
11f6b451 3306build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
0c11ada6 3307{
596ea4e5 3308 tree fn = build_library_fn_1 (name, operator_code, type);
0c11ada6 3309 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6bbf1598 3310 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
5d2ed28c 3311 SET_DECL_LANGUAGE (fn, lang_cplusplus);
0c11ada6 3312 set_mangled_name_for_decl (fn);
0c11ada6
JM
3313 return fn;
3314}
3315
3316/* Like build_library_fn, but takes a C string instead of an
3317 IDENTIFIER_NODE. */
3318
3319tree
11f6b451 3320build_library_fn_ptr (const char* name, tree type)
7f4edbcb 3321{
0c11ada6
JM
3322 return build_library_fn (get_identifier (name), type);
3323}
3324
3325/* Like build_cp_library_fn, but takes a C string instead of an
3326 IDENTIFIER_NODE. */
3327
3328tree
11f6b451 3329build_cp_library_fn_ptr (const char* name, tree type)
0c11ada6 3330{
596ea4e5 3331 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
3332}
3333
3334/* Like build_library_fn, but also pushes the function so that we will
3335 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
3336
3337tree
11f6b451 3338push_library_fn (tree name, tree type)
0c11ada6
JM
3339{
3340 tree fn = build_library_fn (name, type);
3341 pushdecl_top_level (fn);
3342 return fn;
3343}
3344
3345/* Like build_cp_library_fn, but also pushes the function so that it
3346 will be found by normal lookup. */
3347
596ea4e5 3348static tree
11f6b451 3349push_cp_library_fn (enum tree_code operator_code, tree type)
0c11ada6 3350{
5362b086 3351 tree fn = build_cp_library_fn (ansi_opname (operator_code),
596ea4e5
AS
3352 operator_code,
3353 type);
0c11ada6
JM
3354 pushdecl (fn);
3355 return fn;
3356}
3357
3358/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3359 a FUNCTION_TYPE. */
3360
3361tree
11f6b451 3362push_void_library_fn (tree name, tree parmtypes)
0c11ada6
JM
3363{
3364 tree type = build_function_type (void_type_node, parmtypes);
3365 return push_library_fn (name, type);
3366}
3367
cf74fb86 3368/* Like push_library_fn, but also note that this function throws
0c11ada6
JM
3369 and does not return. Used for __throw_foo and the like. */
3370
3371tree
11f6b451 3372push_throw_library_fn (tree name, tree type)
0c11ada6 3373{
cf74fb86 3374 tree fn = push_library_fn (name, type);
0c11ada6
JM
3375 TREE_THIS_VOLATILE (fn) = 1;
3376 TREE_NOTHROW (fn) = 0;
3377 return fn;
7f4edbcb 3378}
8d08fdba 3379\f
61a127b3
MM
3380/* When we call finish_struct for an anonymous union, we create
3381 default copy constructors and such. But, an anonymous union
3382 shouldn't have such things; this function undoes the damage to the
3383 anonymous union type T.
3384
3385 (The reason that we create the synthesized methods is that we don't
3386 distinguish `union { int i; }' from `typedef union { int i; } U'.
3387 The first is an anonymous union; the second is just an ordinary
3388 union type.) */
3389
3390void
11f6b451 3391fixup_anonymous_aggr (tree t)
61a127b3
MM
3392{
3393 tree *q;
3394
f4f206f4 3395 /* Wipe out memory of synthesized methods. */
61a127b3
MM
3396 TYPE_HAS_CONSTRUCTOR (t) = 0;
3397 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3398 TYPE_HAS_INIT_REF (t) = 0;
3399 TYPE_HAS_CONST_INIT_REF (t) = 0;
3400 TYPE_HAS_ASSIGN_REF (t) = 0;
61a127b3
MM
3401 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3402
3403 /* Splice the implicitly generated functions out of the TYPE_METHODS
3404 list. */
3405 q = &TYPE_METHODS (t);
3406 while (*q)
3407 {
3408 if (DECL_ARTIFICIAL (*q))
3409 *q = TREE_CHAIN (*q);
3410 else
3411 q = &TREE_CHAIN (*q);
3412 }
3413
cab1f180 3414 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
61a127b3 3415 if (TYPE_METHODS (t))
ddd2d57e
RH
3416 error ("%Jan anonymous union cannot have function members",
3417 TYPE_MAIN_DECL (t));
a1c2b86d
JJ
3418
3419 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3420 assignment operators (because they cannot have these methods themselves).
3421 For anonymous unions this is already checked because they are not allowed
3422 in any union, otherwise we have to check it. */
3423 if (TREE_CODE (t) != UNION_TYPE)
3424 {
3425 tree field, type;
3426
3427 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3428 if (TREE_CODE (field) == FIELD_DECL)
3429 {
3430 type = TREE_TYPE (field);
3431 if (CLASS_TYPE_P (type))
3432 {
3433 if (TYPE_NEEDS_CONSTRUCTING (type))
3434 cp_error_at ("member %#D' with constructor not allowed in anonymous aggregate",
3435 field);
3436 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3437 cp_error_at ("member %#D' with destructor not allowed in anonymous aggregate",
3438 field);
3439 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3440 cp_error_at ("member %#D' with copy assignment operator not allowed in anonymous aggregate",
3441 field);
3442 }
3443 }
3444 }
61a127b3
MM
3445}
3446
72a93143 3447/* Make sure that a declaration with no declarator is well-formed, i.e.
a723baf1 3448 just declares a tagged type or anonymous union.
8d08fdba 3449
a723baf1 3450 Returns the type declared; or NULL_TREE if none. */
8d08fdba 3451
72a93143 3452tree
11f6b451 3453check_tag_decl (tree declspecs)
8d08fdba 3454{
72a93143 3455 int found_type = 0;
2bdb0643 3456 int saw_friend = 0;
e8186ecf 3457 int saw_typedef = 0;
2986ae00 3458 tree ob_modifier = NULL_TREE;
926ce8bd 3459 tree link;
a723baf1
MM
3460 /* If a class, struct, or enum type is declared by the DECLSPECS
3461 (i.e, if a class-specifier, enum-specifier, or non-typename
3462 elaborated-type-specifier appears in the DECLSPECS),
3463 DECLARED_TYPE is set to the corresponding type. */
3464 tree declared_type = NULL_TREE;
3465 bool error_p = false;
8d08fdba
MS
3466
3467 for (link = declspecs; link; link = TREE_CHAIN (link))
3468 {
a723baf1 3469 tree value = TREE_VALUE (link);
8d08fdba 3470
c003e212 3471 if (TYPE_P (value) || TREE_CODE (value) == TYPE_DECL
2bdb0643 3472 || (TREE_CODE (value) == IDENTIFIER_NODE
c003e212 3473 && is_typename_at_global_scope (value)))
8d08fdba 3474 {
72a93143 3475 ++found_type;
5566b478 3476
bd0d5d4a
JM
3477 if (found_type == 2 && TREE_CODE (value) == IDENTIFIER_NODE)
3478 {
3479 if (! in_system_header)
33bd39a2 3480 pedwarn ("redeclaration of C++ built-in type `%T'", value);
bd0d5d4a
JM
3481 return NULL_TREE;
3482 }
3483
3484 if (TYPE_P (value)
3485 && ((TREE_CODE (value) != TYPENAME_TYPE && IS_AGGR_TYPE (value))
3486 || TREE_CODE (value) == ENUMERAL_TYPE))
72a93143
JM
3487 {
3488 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
a723baf1 3489 declared_type = value;
72a93143 3490 }
8d08fdba 3491 }
e8186ecf
GDR
3492 else if (value == ridpointers[(int) RID_TYPEDEF])
3493 saw_typedef = 1;
83f660b7
JM
3494 else if (value == ridpointers[(int) RID_FRIEND])
3495 {
83f660b7
JM
3496 if (current_class_type == NULL_TREE
3497 || current_scope () != current_class_type)
3498 ob_modifier = value;
2bdb0643
JM
3499 else
3500 saw_friend = 1;
83f660b7 3501 }
8d08fdba 3502 else if (value == ridpointers[(int) RID_STATIC]
2986ae00
MS
3503 || value == ridpointers[(int) RID_EXTERN]
3504 || value == ridpointers[(int) RID_AUTO]
28cbf42c
MS
3505 || value == ridpointers[(int) RID_REGISTER]
3506 || value == ridpointers[(int) RID_INLINE]
3507 || value == ridpointers[(int) RID_VIRTUAL]
72a93143
JM
3508 || value == ridpointers[(int) RID_CONST]
3509 || value == ridpointers[(int) RID_VOLATILE]
7a1f3f5f
RH
3510 || value == ridpointers[(int) RID_EXPLICIT]
3511 || value == ridpointers[(int) RID_THREAD])
2986ae00 3512 ob_modifier = value;
a723baf1
MM
3513 else if (value == error_mark_node)
3514 error_p = true;
8d08fdba
MS
3515 }
3516
72a93143
JM
3517 if (found_type > 1)
3518 error ("multiple types in one declaration");
7e2067ca 3519
a723baf1 3520 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
7e2067ca 3521 pedwarn ("declaration does not declare anything");
1951a1b6 3522 /* Check for an anonymous union. */
a723baf1
MM
3523 else if (declared_type && IS_AGGR_TYPE_CODE (TREE_CODE (declared_type))
3524 && TYPE_ANONYMOUS_P (declared_type))
0dd3962d 3525 {
e8186ecf
GDR
3526 /* 7/3 In a simple-declaration, the optional init-declarator-list
3527 can be omitted only when declaring a class (clause 9) or
3528 enumeration (7.2), that is, when the decl-specifier-seq contains
3529 either a class-specifier, an elaborated-type-specifier with
3530 a class-key (9.1), or an enum-specifier. In these cases and
3531 whenever a class-specifier or enum-specifier is present in the
3532 decl-specifier-seq, the identifiers in these specifiers are among
3533 the names being declared by the declaration (as class-name,
3534 enum-names, or enumerators, depending on the syntax). In such
3535 cases, and except for the declaration of an unnamed bit-field (9.6),
3536 the decl-specifier-seq shall introduce one or more names into the
3537 program, or shall redeclare a name introduced by a previous
3538 declaration. [Example:
3539 enum { }; // ill-formed
3540 typedef class { }; // ill-formed
3541 --end example] */
3542 if (saw_typedef)
3543 {
357351e5 3544 error ("missing type-name in typedef-declaration");
e8186ecf
GDR
3545 return NULL_TREE;
3546 }
0dd3962d 3547 /* Anonymous unions are objects, so they can have specifiers. */;
a723baf1 3548 SET_ANON_AGGR_TYPE_P (declared_type);
6bdb8141 3549
a723baf1
MM
3550 if (TREE_CODE (declared_type) != UNION_TYPE && pedantic
3551 && !in_system_header)
6bdb8141 3552 pedwarn ("ISO C++ prohibits anonymous structs");
0dd3962d
JM
3553 }
3554
83f660b7 3555 else if (ob_modifier)
8d08fdba 3556 {
83f660b7
JM
3557 if (ob_modifier == ridpointers[(int) RID_INLINE]
3558 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
33bd39a2 3559 error ("`%D' can only be specified for functions", ob_modifier);
83f660b7 3560 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
33bd39a2 3561 error ("`%D' can only be specified inside a class", ob_modifier);
83f660b7 3562 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
33bd39a2 3563 error ("`%D' can only be specified for constructors",
83f660b7
JM
3564 ob_modifier);
3565 else
33bd39a2 3566 error ("`%D' can only be specified for objects and functions",
83f660b7 3567 ob_modifier);
72a93143 3568 }
8d08fdba 3569
a723baf1 3570 return declared_type;
72a93143
JM
3571}
3572
3573/* Called when a declaration is seen that contains no names to declare.
3574 If its type is a reference to a structure, union or enum inherited
3575 from a containing scope, shadow that tag name for the current scope
3576 with a forward reference.
3577 If its type defines a new named structure or union
3578 or defines an enum, it is valid but we need not do anything here.
3579 Otherwise, it is an error.
3580
3581 C++: may have to grok the declspecs to learn about static,
a723baf1 3582 complain for anonymous unions.
72a93143 3583
a723baf1
MM
3584 Returns the TYPE declared -- or NULL_TREE if none. */
3585
3586tree
11f6b451 3587shadow_tag (tree declspecs)
72a93143
JM
3588{
3589 tree t = check_tag_decl (declspecs);
3590
a723baf1
MM
3591 if (!t)
3592 return NULL_TREE;
3593
3594 maybe_process_partial_specialization (t);
72a93143
JM
3595
3596 /* This is where the variables in an anonymous union are
3597 declared. An anonymous union declaration looks like:
3598 union { ... } ;
3599 because there is no declarator after the union, the parser
3600 sends that declaration here. */
a723baf1 3601 if (ANON_AGGR_TYPE_P (t))
72a93143 3602 {
6bdb8141 3603 fixup_anonymous_aggr (t);
72a93143
JM
3604
3605 if (TYPE_FIELDS (t))
3606 {
3607 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
91d231cb 3608 NULL);
72a93143
JM
3609 finish_anon_union (decl);
3610 }
8d08fdba 3611 }
a723baf1
MM
3612
3613 return t;
8d08fdba
MS
3614}
3615\f
3616/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3617
3618tree
11f6b451 3619groktypename (tree typename)
8d08fdba 3620{
98884b26
JM
3621 tree specs, attrs;
3622 tree type;
8d08fdba
MS
3623 if (TREE_CODE (typename) != TREE_LIST)
3624 return typename;
98884b26
JM
3625 split_specs_attrs (TREE_PURPOSE (typename), &specs, &attrs);
3626 type = grokdeclarator (TREE_VALUE (typename), specs,
3627 TYPENAME, 0, &attrs);
3628 if (attrs)
3629 cplus_decl_attributes (&type, attrs, 0);
3630 return type;
8d08fdba
MS
3631}
3632
3633/* Decode a declarator in an ordinary declaration or data definition.
3634 This is called as soon as the type information and variable name
3635 have been parsed, before parsing the initializer if any.
3636 Here we create the ..._DECL node, fill in its type,
3637 and put it on the list of decls for the current context.
3638 The ..._DECL node is returned as the value.
3639
3640 Exception: for arrays where the length is not specified,
82580166 3641 the type is left null, to be filled in by `cp_finish_decl'.
8d08fdba
MS
3642
3643 Function definitions do not come here; they go to start_function
3644 instead. However, external and forward declarations of functions
3645 do go through here. Structure field declarations are done by
3646 grokfield and not through here. */
3647
8d08fdba 3648tree
11f6b451
NN
3649start_decl (tree declarator,
3650 tree declspecs,
3651 int initialized,
3652 tree attributes,
3653 tree prefix_attributes)
8d08fdba 3654{
59387d2e 3655 tree decl;
926ce8bd 3656 tree type, tem;
8d08fdba 3657 tree context;
8d08fdba 3658
e92cc029 3659 /* This should only be done once on the top most decl. */
594bb0e7 3660 if (have_extern_spec)
8d08fdba 3661 {
1f8f4a0b
MM
3662 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"),
3663 declspecs);
594bb0e7 3664 have_extern_spec = false;
8d08fdba
MS
3665 }
3666
e23bd218
IR
3667 /* An object declared as __attribute__((deprecated)) suppresses
3668 warnings of uses of other deprecated items. */
3669 if (lookup_attribute ("deprecated", attributes))
3670 deprecated_state = DEPRECATED_SUPPRESS;
3671
91d231cb 3672 attributes = chainon (attributes, prefix_attributes);
b17e2870 3673
c11b6f21 3674 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
91d231cb 3675 &attributes);
68642fb6 3676
e23bd218
IR
3677 deprecated_state = DEPRECATED_NORMAL;
3678
a1774733 3679 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
8d08fdba
MS
3680 return NULL_TREE;
3681
3682 type = TREE_TYPE (decl);
3683
44689c12
ML
3684 if (type == error_mark_node)
3685 return NULL_TREE;
3686
4f1c5b7d 3687 context = DECL_CONTEXT (decl);
8d08fdba 3688
9a68c51f
JM
3689 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
3690 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
3691 {
3692 /* When parsing the initializer, lookup should use the object's
a1c65f9f 3693 namespace. */
9a68c51f
JM
3694 push_decl_namespace (context);
3695 }
3696
a1c65f9f 3697 /* We are only interested in class contexts, later. */
2c73f9f5
ML
3698 if (context && TREE_CODE (context) == NAMESPACE_DECL)
3699 context = NULL_TREE;
3700
8d08fdba
MS
3701 if (initialized)
3702 /* Is it valid for this decl to have an initializer at all?
3703 If not, set INITIALIZED to zero, which will indirectly
82580166 3704 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba
MS
3705 switch (TREE_CODE (decl))
3706 {
3707 case TYPE_DECL:
4a7510cb 3708 error ("typedef `%D' is initialized (use __typeof__ instead)", decl);
95f79357 3709 initialized = 0;
8d08fdba
MS
3710 break;
3711
3712 case FUNCTION_DECL:
33bd39a2 3713 error ("function `%#D' is initialized like a variable", decl);
8d08fdba
MS
3714 initialized = 0;
3715 break;
3716
3717 default:
3e41d13b 3718 break;
8d08fdba
MS
3719 }
3720
8d08fdba
MS
3721 if (initialized)
3722 {
a9aedbc2 3723 if (! toplevel_bindings_p ()
8d08fdba 3724 && DECL_EXTERNAL (decl))
33bd39a2 3725 warning ("declaration of `%#D' has `extern' and is initialized",
8d08fdba
MS
3726 decl);
3727 DECL_EXTERNAL (decl) = 0;
5566b478 3728 if (toplevel_bindings_p ())
8d08fdba
MS
3729 TREE_STATIC (decl) = 1;
3730
3731 /* Tell `pushdecl' this is an initialized decl
3732 even though we don't yet have the initializer expression.
82580166 3733 Also tell `cp_finish_decl' it may store the real initializer. */
8d08fdba
MS
3734 DECL_INITIAL (decl) = error_mark_node;
3735 }
3736
fa20888b 3737 /* Set attributes here so if duplicate decl, will have proper attributes. */
91d231cb 3738 cplus_decl_attributes (&decl, attributes, 0);
fa20888b 3739
ecb0eece 3740 /* If #pragma weak was used, mark the decl weak now. */
5f52c0e0 3741 if (global_scope_p (current_binding_level))
ecb0eece
RH
3742 maybe_apply_pragma_weak (decl);
3743
97055d5c
AO
3744 if (TREE_CODE (decl) == FUNCTION_DECL
3745 && DECL_DECLARED_INLINE_P (decl)
3746 && DECL_UNINLINABLE (decl)
3747 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
ddd2d57e 3748 warning ("%Jinline function '%D' given attribute noinline", decl, decl);
97055d5c 3749
d0f062fb 3750 if (context && COMPLETE_TYPE_P (complete_type (context)))
5b605f68 3751 {
14d22dd6 3752 push_nested_class (context);
e97e5263 3753
5b605f68
MS
3754 if (TREE_CODE (decl) == VAR_DECL)
3755 {
86ac0575 3756 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5b605f68 3757 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
33bd39a2 3758 error ("`%#D' is not a static member of `%#T'", decl, context);
e349ee73
MS
3759 else
3760 {
3761 if (DECL_CONTEXT (field) != context)
f2d773a2 3762 {
a723baf1
MM
3763 if (!same_type_p (DECL_CONTEXT (field), context))
3764 pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
3765 DECL_CONTEXT (field), DECL_NAME (decl),
3766 context, DECL_NAME (decl));
f2d773a2
JM
3767 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
3768 }
75650646
MM
3769 /* Static data member are tricky; an in-class initialization
3770 still doesn't provide a definition, so the in-class
3771 declaration will have DECL_EXTERNAL set, but will have an
3772 initialization. Thus, duplicate_decls won't warn
3773 about this situation, and so we check here. */
3774 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
33bd39a2 3775 error ("duplicate initialization of %D", decl);
e349ee73
MS
3776 if (duplicate_decls (decl, field))
3777 decl = field;
3778 }
5b605f68 3779 }
f30432d7
MS
3780 else
3781 {
d43f603d
KL
3782 tree field = check_classfn (context, decl,
3783 processing_template_decl
3784 > template_class_depth (context));
f30432d7
MS
3785 if (field && duplicate_decls (decl, field))
3786 decl = field;
3787 }
3788
3789 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
dff3e828 3790 DECL_IN_AGGR_P (decl) = 0;
68642fb6 3791 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
1f6e1acc 3792 || CLASSTYPE_TEMPLATE_INSTANTIATION (context))
84e6233f
JM
3793 {
3794 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
3795 /* [temp.expl.spec] An explicit specialization of a static data
3796 member of a template is a definition if the declaration
3797 includes an initializer; otherwise, it is a declaration.
3798
3799 We check for processing_specialization so this only applies
3800 to the new specialization syntax. */
3801 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
3802 DECL_EXTERNAL (decl) = 1;
3803 }
f30432d7 3804
b7698cf0 3805 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
33bd39a2 3806 pedwarn ("declaration of `%#D' outside of class is not definition",
f30432d7 3807 decl);
5b605f68
MS
3808 }
3809
9188c363
MM
3810 /* Enter this declaration into the symbol table. */
3811 tem = maybe_push_decl (decl);
2ee887f2 3812
5156628f 3813 if (processing_template_decl)
cd9f6678 3814 tem = push_template_decl (tem);
156fc2bb
KL
3815 if (tem == error_mark_node)
3816 return error_mark_node;
5566b478 3817
2ee887f2 3818#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a3203465 3819 /* Tell the back-end to use or not use .common as appropriate. If we say
a50f0918
MS
3820 -fconserve-space, we want this to save .data space, at the expense of
3821 wrong semantics. If we say -fno-conserve-space, we want this to
3822 produce errors about redefs; to do this we force variables into the
3823 data segment. */
ca5dd8b7
JJ
3824 DECL_COMMON (tem) = ((TREE_CODE (tem) != VAR_DECL
3825 || !DECL_THREAD_LOCAL (tem))
c456a45a 3826 && (flag_conserve_space || ! TREE_PUBLIC (tem)));
2ee887f2 3827#endif
68642fb6 3828
5156628f 3829 if (! processing_template_decl)
5566b478 3830 start_decl_1 (tem);
8d08fdba 3831
8d08fdba
MS
3832 return tem;
3833}
3834
5566b478 3835void
11f6b451 3836start_decl_1 (tree decl)
8d08fdba 3837{
5566b478
MS
3838 tree type = TREE_TYPE (decl);
3839 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
8d08fdba 3840
44689c12
ML
3841 if (type == error_mark_node)
3842 return;
3843
bd0d5d4a 3844 maybe_push_cleanup_level (type);
5566b478
MS
3845
3846 if (initialized)
3847 /* Is it valid for this decl to have an initializer at all?
3848 If not, set INITIALIZED to zero, which will indirectly
3849 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba 3850 {
5566b478
MS
3851 /* Don't allow initializations for incomplete types except for
3852 arrays which might be completed by the initialization. */
d0f062fb 3853 if (COMPLETE_TYPE_P (complete_type (type)))
5566b478
MS
3854 ; /* A complete type is ok. */
3855 else if (TREE_CODE (type) != ARRAY_TYPE)
8d08fdba 3856 {
33bd39a2 3857 error ("variable `%#D' has initializer but incomplete type",
5566b478
MS
3858 decl);
3859 initialized = 0;
25eb19ff 3860 type = TREE_TYPE (decl) = error_mark_node;
5566b478 3861 }
d0f062fb 3862 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5566b478
MS
3863 {
3864 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
33bd39a2 3865 error ("elements of array `%#D' have incomplete type", decl);
5566b478
MS
3866 /* else we already gave an error in start_decl. */
3867 initialized = 0;
8d08fdba 3868 }
8d08fdba
MS
3869 }
3870
5566b478
MS
3871 if (!initialized
3872 && TREE_CODE (decl) != TYPE_DECL
3873 && TREE_CODE (decl) != TEMPLATE_DECL
07c88314 3874 && type != error_mark_node
5362b086 3875 && IS_AGGR_TYPE (type)
07c88314 3876 && ! DECL_EXTERNAL (decl))
8d08fdba 3877 {
5156628f 3878 if ((! processing_template_decl || ! uses_template_parms (type))
d0f062fb 3879 && !COMPLETE_TYPE_P (complete_type (type)))
5566b478 3880 {
0154eaa8 3881 error ("aggregate `%#D' has incomplete type and cannot be defined",
5566b478
MS
3882 decl);
3883 /* Change the type so that assemble_variable will give
3884 DECL an rtl we can live with: (mem (const_int 0)). */
25eb19ff 3885 type = TREE_TYPE (decl) = error_mark_node;
5566b478
MS
3886 }
3887 else
3888 {
3889 /* If any base type in the hierarchy of TYPE needs a constructor,
3890 then we set initialized to 1. This way any nodes which are
3891 created for the purposes of initializing this aggregate
3892 will live as long as it does. This is necessary for global
3893 aggregates which do not have their initializers processed until
3894 the end of the file. */
3895 initialized = TYPE_NEEDS_CONSTRUCTING (type);
3896 }
3897 }
3898
5566b478
MS
3899 if (! initialized)
3900 DECL_INITIAL (decl) = NULL_TREE;
3901}
3902
7e99327d
MM
3903/* Handle initialization of references. DECL, TYPE, and INIT have the
3904 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
3905 but will be set to a new CLEANUP_STMT if a temporary is created
cd0be382 3906 that must be destroyed subsequently.
7e99327d
MM
3907
3908 Returns an initializer expression to use to initialize DECL, or
3909 NULL if the initialization can be performed statically.
e92cc029
MS
3910
3911 Quotes on semantics can be found in ARM 8.4.3. */
3912
8e4ce833 3913static tree
7e99327d 3914grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
5566b478
MS
3915{
3916 tree tmp;
3917
3918 if (init == NULL_TREE)
3919 {
3920 if ((DECL_LANG_SPECIFIC (decl) == 0
3921 || DECL_IN_AGGR_P (decl) == 0)
3922 && ! DECL_THIS_EXTERN (decl))
33bd39a2 3923 error ("`%D' declared as reference but not initialized", decl);
8e4ce833 3924 return NULL_TREE;
5566b478
MS
3925 }
3926
ed5511d9 3927 if (TREE_CODE (init) == CONSTRUCTOR)
5566b478 3928 {
33bd39a2 3929 error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
8e4ce833 3930 return NULL_TREE;
8d08fdba
MS
3931 }
3932
3933 if (TREE_CODE (init) == TREE_LIST)
c7b62f14 3934 init = build_x_compound_expr_from_list (init, "initializer");
8d08fdba 3935
8ccc31eb
MS
3936 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
3937 init = convert_from_reference (init);
3938
8d08fdba
MS
3939 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
3940 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
0a72704b
MM
3941 /* Note: default conversion is only called in very special cases. */
3942 init = decay_conversion (init);
68642fb6 3943
24bef158
MM
3944 /* Convert INIT to the reference type TYPE. This may involve the
3945 creation of a temporary, whose lifetime must be the same as that
3946 of the reference. If so, a DECL_STMT for the temporary will be
3947 added just after the DECL_STMT for DECL. That's why we don't set
3948 DECL_INITIAL for local references (instead assigning to them
3949 explicitly); we need to allow the temporary to be initialized
3950 first. */
7e99327d 3951 tmp = initialize_reference (type, init, decl, cleanup);
8d08fdba 3952
a3203465 3953 if (tmp == error_mark_node)
8e4ce833
JJ
3954 return NULL_TREE;
3955 else if (tmp == NULL_TREE)
8d08fdba 3956 {
33bd39a2 3957 error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
8e4ce833 3958 return NULL_TREE;
8d08fdba 3959 }
8d08fdba 3960
8e4ce833
JJ
3961 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
3962 return tmp;
3963
08ac397c 3964 DECL_INITIAL (decl) = tmp;
8e4ce833
JJ
3965
3966 return NULL_TREE;
8d08fdba
MS
3967}
3968
27778b73
MM
3969/* When parsing `int a[] = {1, 2};' we don't know the size of the
3970 array until we finish parsing the initializer. If that's the
3971 situation we're in, update DECL accordingly. */
3972
3973static void
11f6b451 3974maybe_deduce_size_from_array_init (tree decl, tree init)
27778b73
MM
3975{
3976 tree type = TREE_TYPE (decl);
3977
3978 if (TREE_CODE (type) == ARRAY_TYPE
3979 && TYPE_DOMAIN (type) == NULL_TREE
3980 && TREE_CODE (decl) != TYPE_DECL)
3981 {
f2ae0c45
JM
3982 /* do_default is really a C-ism to deal with tentative definitions.
3983 But let's leave it here to ease the eventual merge. */
3984 int do_default = !DECL_EXTERNAL (decl);
27778b73
MM
3985 tree initializer = init ? init : DECL_INITIAL (decl);
3986 int failure = complete_array_type (type, initializer, do_default);
3987
3988 if (failure == 1)
33bd39a2 3989 error ("initializer fails to determine size of `%D'", decl);
27778b73
MM
3990
3991 if (failure == 2)
3992 {
3993 if (do_default)
33bd39a2 3994 error ("array size missing in `%D'", decl);
27778b73
MM
3995 /* If a `static' var's size isn't known, make it extern as
3996 well as static, so it does not get allocated. If it's not
3997 `static', then don't mark it extern; finish_incomplete_decl
3998 will give it a default size and it will get allocated. */
3999 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4000 DECL_EXTERNAL (decl) = 1;
4001 }
4002
4003 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
4004 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
4005 integer_zero_node))
33bd39a2 4006 error ("zero-size array `%D'", decl);
27778b73
MM
4007
4008 layout_decl (decl, 0);
4009 }
4010}
4011
4012/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
57b52417 4013 any appropriate error messages regarding the layout. */
27778b73 4014
57b52417 4015static void
11f6b451 4016layout_var_decl (tree decl)
27778b73 4017{
57b52417 4018 tree type = TREE_TYPE (decl);
c95cd22e 4019#if 0
57b52417 4020 tree ttype = target_type (type);
c95cd22e 4021#endif
57b52417
MM
4022
4023 /* If we haven't already layed out this declaration, do so now.
4024 Note that we must not call complete type for an external object
4025 because it's type might involve templates that we are not
34cd5ae7 4026 supposed to instantiate yet. (And it's perfectly valid to say
57b52417
MM
4027 `extern X x' for some incomplete type `X'.) */
4028 if (!DECL_EXTERNAL (decl))
4029 complete_type (type);
7de85f7e 4030 if (!DECL_SIZE (decl)
328de7c2 4031 && TREE_TYPE (decl) != error_mark_node
7de85f7e
MM
4032 && (COMPLETE_TYPE_P (type)
4033 || (TREE_CODE (type) == ARRAY_TYPE
4034 && !TYPE_DOMAIN (type)
4035 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
27778b73
MM
4036 layout_decl (decl, 0);
4037
c82dbd95 4038 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
27778b73
MM
4039 {
4040 /* An automatic variable with an incomplete type: that is an error.
4041 Don't talk about array types here, since we took care of that
4042 message in grokdeclarator. */
33bd39a2 4043 error ("storage size of `%D' isn't known", decl);
27778b73
MM
4044 TREE_TYPE (decl) = error_mark_node;
4045 }
ae673f14
JM
4046#if 0
4047 /* Keep this code around in case we later want to control debug info
4048 based on whether a type is "used". (jason 1999-11-11) */
4049
27778b73
MM
4050 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
4051 /* Let debugger know it should output info for this type. */
4052 note_debug_info_needed (ttype);
4053
4054 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4055 note_debug_info_needed (DECL_CONTEXT (decl));
ae673f14 4056#endif
27778b73
MM
4057
4058 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4059 && DECL_SIZE (decl) != NULL_TREE
4060 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4061 {
4062 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4063 constant_expression_warning (DECL_SIZE (decl));
4064 else
33bd39a2 4065 error ("storage size of `%D' isn't constant", decl);
27778b73 4066 }
8e4ce833
JJ
4067
4068 if (TREE_STATIC (decl)
4069 && !DECL_ARTIFICIAL (decl)
4070 && current_function_decl
4071 && DECL_CONTEXT (decl) == current_function_decl)
4072 push_local_name (decl);
27778b73
MM
4073}
4074
27778b73
MM
4075/* If a local static variable is declared in an inline function, or if
4076 we have a weak definition, we must endeavor to create only one
4077 instance of the variable at link-time. */
4078
4079static void
11f6b451 4080maybe_commonize_var (tree decl)
27778b73
MM
4081{
4082 /* Static data in a function with comdat linkage also has comdat
4083 linkage. */
4084 if (TREE_STATIC (decl)
4085 /* Don't mess with __FUNCTION__. */
cf74fb86 4086 && ! DECL_ARTIFICIAL (decl)
0b50d7f1
MM
4087 && DECL_FUNCTION_SCOPE_P (decl)
4088 /* Unfortunately, import_export_decl has not always been called
4089 before the function is processed, so we cannot simply check
4090 DECL_COMDAT. */
9e6aaf5e 4091 && (DECL_COMDAT (DECL_CONTEXT (decl))
0b50d7f1
MM
4092 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4093 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4094 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
27778b73 4095 {
0dbc5cd3 4096 if (flag_weak)
27778b73 4097 {
0dbc5cd3
MM
4098 /* With weak symbols, we simply make the variable COMDAT;
4099 that will cause copies in multiple translations units to
4100 be merged. */
4101 comdat_linkage (decl);
4102 }
4103 else
4104 {
4105 if (DECL_INITIAL (decl) == NULL_TREE
4106 || DECL_INITIAL (decl) == error_mark_node)
27778b73 4107 {
0dbc5cd3
MM
4108 /* Without weak symbols, we can use COMMON to merge
4109 uninitialized variables. */
27778b73
MM
4110 TREE_PUBLIC (decl) = 1;
4111 DECL_COMMON (decl) = 1;
4112 }
0dbc5cd3 4113 else
27778b73 4114 {
0dbc5cd3
MM
4115 /* While for initialized variables, we must use internal
4116 linkage -- which means that multiple copies will not
4117 be merged. */
4118 TREE_PUBLIC (decl) = 0;
4119 DECL_COMMON (decl) = 0;
27778b73 4120 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
ddd2d57e
RH
4121 warning ("%J you can work around this by removing the initializer",
4122 decl);
27778b73
MM
4123 }
4124 }
4125 }
4126 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4127 /* Set it up again; we might have set DECL_INITIAL since the last
4128 time. */
4129 comdat_linkage (decl);
4130}
4131
91063b51
MM
4132/* Issue an error message if DECL is an uninitialized const variable. */
4133
4134static void
11f6b451 4135check_for_uninitialized_const_var (tree decl)
91063b51
MM
4136{
4137 tree type = TREE_TYPE (decl);
4138
4139 /* ``Unless explicitly declared extern, a const object does not have
4140 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4141 7.1.6 */
4142 if (TREE_CODE (decl) == VAR_DECL
4143 && TREE_CODE (type) != REFERENCE_TYPE
4144 && CP_TYPE_CONST_P (type)
4145 && !TYPE_NEEDS_CONSTRUCTING (type)
4146 && !DECL_INITIAL (decl))
33bd39a2 4147 error ("uninitialized const `%D'", decl);
91063b51
MM
4148}
4149
8e3df2de
MM
4150/* FIELD is a FIELD_DECL or NULL. In the former case, the value
4151 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4152 initialized. If there are no more such fields, the return value
4153 will be NULL. */
4154
4155static tree
4156next_initializable_field (tree field)
4157{
4158 while (field
4159 && (TREE_CODE (field) != FIELD_DECL
4160 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4161 || DECL_ARTIFICIAL (field)))
4162 field = TREE_CHAIN (field);
4163
4164 return field;
4165}
4166
4167/* Undo the brace-elision allowed by [dcl.init.aggr] in a
4168 brace-enclosed aggregate initializer.
4169
4170 *INITP is one of a list of initializers describing a brace-enclosed
4171 initializer for an entity of the indicated aggregate TYPE. It may
4172 not presently match the shape of the TYPE; for example:
4173
4174 struct S { int a; int b; };
4175 struct S a[] = { 1, 2, 3, 4 };
4176
4177 Here *INITP will point to TREE_LIST of four elements, rather than a
4178 list of two elements, each itself a list of two elements. This
4179 routine transforms INIT from the former form into the latter. The
4180 revised initializer is returned. */
4181
4182static tree
4183reshape_init (tree type, tree *initp)
4184{
4185 tree inits;
4186 tree old_init;
4187 tree old_init_value;
4188 tree new_init;
4189 bool brace_enclosed_p;
4190
4191 old_init = *initp;
4192 old_init_value = (TREE_CODE (*initp) == TREE_LIST
4193 ? TREE_VALUE (*initp) : old_init);
4194
ee20f4ee 4195 my_friendly_assert (old_init_value, 20030723);
ee7ecb29 4196
8e3df2de
MM
4197 /* If the initializer is brace-enclosed, pull initializers from the
4198 enclosed elements. Advance past the brace-enclosed initializer
4199 now. */
dbe85b80
JM
4200 if (TREE_CODE (old_init_value) == CONSTRUCTOR
4201 && TREE_TYPE (old_init_value) == NULL_TREE
8e3df2de
MM
4202 && TREE_HAS_CONSTRUCTOR (old_init_value))
4203 {
4204 *initp = TREE_CHAIN (old_init);
4205 TREE_CHAIN (old_init) = NULL_TREE;
4206 inits = CONSTRUCTOR_ELTS (old_init_value);
4207 initp = &inits;
4208 brace_enclosed_p = true;
4209 }
4210 else
4211 {
4212 inits = NULL_TREE;
4213 brace_enclosed_p = false;
4214 }
4215
4216 /* A non-aggregate type is always initialized with a single
4217 initializer. */
4218 if (!CP_AGGREGATE_TYPE_P (type))
4219 {
4220 *initp = TREE_CHAIN (old_init);
4221 TREE_CHAIN (old_init) = NULL_TREE;
4222 /* It is invalid to initialize a non-aggregate type with a
4223 brace-enclosed initializer. */
4224 if (brace_enclosed_p)
4225 {
4226 error ("brace-enclosed initializer used to initialize `%T'",
4227 type);
4228 if (TREE_CODE (old_init) == TREE_LIST)
4229 TREE_VALUE (old_init) = error_mark_node;
4230 else
4231 old_init = error_mark_node;
4232 }
4233
4234 return old_init;
4235 }
4236
4237 /* [dcl.init.aggr]
4238
4239 All implicit type conversions (clause _conv_) are considered when
4240 initializing the aggregate member with an initializer from an
4241 initializer-list. If the initializer can initialize a member,
4242 the member is initialized. Otherwise, if the member is itself a
4243 non-empty subaggregate, brace elision is assumed and the
4244 initializer is considered for the initialization of the first
4245 member of the subaggregate. */
dbe85b80 4246 if (!brace_enclosed_p
8e3df2de
MM
4247 && can_convert_arg (type, TREE_TYPE (old_init_value), old_init_value))
4248 {
4249 *initp = TREE_CHAIN (old_init);
4250 TREE_CHAIN (old_init) = NULL_TREE;
4251 return old_init;
4252 }
4253
3fa3c4bd 4254 if (TREE_CODE (old_init_value) == STRING_CST
8e3df2de 4255 && TREE_CODE (type) == ARRAY_TYPE
42328048 4256 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
8e3df2de
MM
4257 {
4258 /* [dcl.init.string]
4259
4260 A char array (whether plain char, signed char, or unsigned char)
4261 can be initialized by a string-literal (optionally enclosed in
4262 braces); a wchar_t array can be initialized by a wide
4263 string-literal (optionally enclosed in braces). */
4264 new_init = old_init;
4265 /* Move past the initializer. */
4266 *initp = TREE_CHAIN (old_init);
4267 TREE_CHAIN (old_init) = NULL_TREE;
4268 }
4269 else
4270 {
4271 /* Build a CONSTRUCTOR to hold the contents of the aggregate. */
dcf92453 4272 new_init = build_constructor (type, NULL_TREE);
8e3df2de
MM
4273 TREE_HAS_CONSTRUCTOR (new_init) = 1;
4274
4275 if (CLASS_TYPE_P (type))
4276 {
4277 tree field;
4278
4279 field = next_initializable_field (TYPE_FIELDS (type));
4280
4281 if (!field)
4282 {
4283 /* [dcl.init.aggr]
4284
4285 An initializer for an aggregate member that is an
4286 empty class shall have the form of an empty
4287 initializer-list {}. */
4288 if (!brace_enclosed_p)
0dff37fb
MM
4289 {
4290 error ("initializer for `%T' must be brace-enclosed",
4291 type);
4292 return error_mark_node;
4293 }
8e3df2de
MM
4294 }
4295 else
4296 {
4297 /* Loop through the initializable fields, gathering
4298 initializers. */
446d5e47 4299 while (*initp)
8e3df2de
MM
4300 {
4301 tree field_init;
4302
446d5e47
MM
4303 /* Handle designated initializers, as an extension. */
4304 if (TREE_PURPOSE (*initp))
4305 {
4306 if (pedantic)
4307 pedwarn ("ISO C++ does not allow designated initializers");
4308 field = lookup_field_1 (type, TREE_PURPOSE (*initp),
4309 /*want_type=*/false);
4310 if (!field || TREE_CODE (field) != FIELD_DECL)
4311 error ("`%T' has no non-static data member named `%D'",
4312 type, TREE_PURPOSE (*initp));
4313 }
4314 if (!field)
4315 break;
4316
8e3df2de 4317 field_init = reshape_init (TREE_TYPE (field), initp);
0dff37fb
MM
4318 if (field_init == error_mark_node)
4319 return error_mark_node;
8e3df2de
MM
4320 TREE_CHAIN (field_init) = CONSTRUCTOR_ELTS (new_init);
4321 CONSTRUCTOR_ELTS (new_init) = field_init;
4322 /* [dcl.init.aggr]
4323
4324 When a union is initialized with a brace-enclosed
4325 initializer, the braces shall only contain an
4326 initializer for the first member of the union. */
4327 if (TREE_CODE (type) == UNION_TYPE)
4328 break;
8e3df2de
MM
4329 field = next_initializable_field (TREE_CHAIN (field));
4330 }
4331 }
4332 }
4333 else if (TREE_CODE (type) == ARRAY_TYPE)
4334 {
4335 tree index;
4336 tree max_index;
4337
4338 /* If the bound of the array is known, take no more initializers
4339 than are allowed. */
4340 max_index = (TYPE_DOMAIN (type)
4341 ? array_type_nelts (type) : NULL_TREE);
4342 /* Loop through the array elements, gathering initializers. */
4343 for (index = size_zero_node;
4344 *initp && (!max_index || !tree_int_cst_lt (max_index, index));
4345 index = size_binop (PLUS_EXPR, index, size_one_node))
4346 {
4347 tree element_init;
4348
4349 element_init = reshape_init (TREE_TYPE (type), initp);
0dff37fb
MM
4350 if (element_init == error_mark_node)
4351 return error_mark_node;
8e3df2de
MM
4352 TREE_CHAIN (element_init) = CONSTRUCTOR_ELTS (new_init);
4353 CONSTRUCTOR_ELTS (new_init) = element_init;
4354 if (TREE_PURPOSE (element_init))
c11889ce
MM
4355 {
4356 tree next_index = TREE_PURPOSE (element_init);
4357 if (TREE_CODE (next_index) == IDENTIFIER_NODE)
4358 {
4359 error ("name `%D' used in a GNU-style designated "
4360 "initializer for an array", next_index);
4361 TREE_PURPOSE (element_init) = NULL_TREE;
4362 }
4363 else
4364 index = next_index;
4365 }
8e3df2de
MM
4366 }
4367 }
4368 else
4369 abort ();
4370
4371 /* The initializers were placed in reverse order in the
4372 CONSTRUCTOR. */
4373 CONSTRUCTOR_ELTS (new_init) = nreverse (CONSTRUCTOR_ELTS (new_init));
4374
4375 if (TREE_CODE (old_init) == TREE_LIST)
4376 new_init = build_tree_list (TREE_PURPOSE (old_init), new_init);
4377 }
4378
4379 /* If this was a brace-enclosed initializer and all of the
4380 initializers were not used up, there is a problem. */
4381 if (brace_enclosed_p && *initp)
4382 error ("too many initializers for `%T'", type);
4383
4384 return new_init;
4385}
4386
c82dbd95 4387/* Verify INIT (the initializer for DECL), and record the
7e99327d
MM
4388 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
4389 grok_reference_init.
8e3df2de
MM
4390
4391 If the return value is non-NULL, it is an expression that must be
4392 evaluated dynamically to initialize DECL. */
27778b73 4393
c82dbd95 4394static tree
7e99327d 4395check_initializer (tree decl, tree init, int flags, tree *cleanup)
27778b73 4396{
17bbb839 4397 tree type = TREE_TYPE (decl);
25ebb82a 4398 tree init_code = NULL;
fc0e7bf5 4399
27778b73
MM
4400 /* If `start_decl' didn't like having an initialization, ignore it now. */
4401 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
4402 init = NULL_TREE;
27778b73 4403
17bbb839
MM
4404 /* If an initializer is present, DECL_INITIAL has been
4405 error_mark_node, to indicate that an as-of-yet unevaluated
4406 initialization will occur. From now on, DECL_INITIAL reflects
4407 the static initialization -- if any -- of DECL. */
4408 DECL_INITIAL (decl) = NULL_TREE;
4409
328de7c2
MM
4410 /* Things that are going to be initialized need to have complete
4411 type. */
4412 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
c82dbd95 4413
328de7c2
MM
4414 if (type == error_mark_node)
4415 /* We will have already complained. */
4416 init = NULL_TREE;
4417 else if (init && COMPLETE_TYPE_P (type)
4418 && !TREE_CONSTANT (TYPE_SIZE (type)))
4419 {
4420 error ("variable-sized object `%D' may not be initialized", decl);
4421 init = NULL_TREE;
4422 }
4423 else if (TREE_CODE (type) == ARRAY_TYPE
4424 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4425 {
4426 error ("elements of array `%#D' have incomplete type", decl);
4427 init = NULL_TREE;
4428 }
4429 else if (TREE_CODE (type) != ARRAY_TYPE && !COMPLETE_TYPE_P (type))
4430 {
4431 error ("`%D' has incomplete type", decl);
4432 TREE_TYPE (decl) = error_mark_node;
4433 init = NULL_TREE;
27778b73
MM
4434 }
4435
4436 if (TREE_CODE (decl) == CONST_DECL)
4437 {
4438 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
4439
4440 DECL_INITIAL (decl) = init;
4441
27778b73
MM
4442 my_friendly_assert (init != NULL_TREE, 149);
4443 init = NULL_TREE;
4444 }
c82dbd95 4445 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7e99327d 4446 init = grok_reference_init (decl, type, init, cleanup);
27778b73
MM
4447 else if (init)
4448 {
8e3df2de 4449 if (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
a16f2357
GK
4450 {
4451 /* [dcl.init] paragraph 13,
4452 If T is a scalar type, then a declaration of the form
4453 T x = { a };
4454 is equivalent to
4455 T x = a;
4456
4457 reshape_init will complain about the extra braces,
4458 and doesn't do anything useful in the case where TYPE is
4459 scalar, so just don't call it. */
4460 if (CP_AGGREGATE_TYPE_P (type))
4461 init = reshape_init (type, &init);
6e1b3a7c
AH
4462
4463 if ((*targetm.vector_opaque_p) (type))
4464 {
4465 error ("opaque vector types cannot be initialized");
4466 init = error_mark_node;
4467 }
a16f2357 4468 }
8e3df2de
MM
4469
4470 /* If DECL has an array type without a specific bound, deduce the
4471 array size from the initializer. */
4472 maybe_deduce_size_from_array_init (decl, init);
4473 type = TREE_TYPE (decl);
4474 if (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
4475 TREE_TYPE (init) = type;
4476
27778b73
MM
4477 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
4478 {
4479 if (TREE_CODE (type) == ARRAY_TYPE)
8e3df2de 4480 goto initialize_aggr;
27778b73
MM
4481 else if (TREE_CODE (init) == CONSTRUCTOR
4482 && TREE_HAS_CONSTRUCTOR (init))
4483 {
4484 if (TYPE_NON_AGGREGATE_CLASS (type))
4485 {
33bd39a2 4486 error ("`%D' must be initialized by constructor, not by `{...}'",
8e3df2de 4487 decl);
27778b73
MM
4488 init = error_mark_node;
4489 }
4490 else
4491 goto dont_use_constructor;
4492 }
8e3df2de
MM
4493 else
4494 {
4495 int saved_stmts_are_full_exprs_p;
4496
4497 initialize_aggr:
4498 saved_stmts_are_full_exprs_p = 0;
4499 if (building_stmt_tree ())
4500 {
4501 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4502 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4503 }
4504 init = build_aggr_init (decl, init, flags);
4505 if (building_stmt_tree ())
4506 current_stmt_tree ()->stmts_are_full_exprs_p =
4507 saved_stmts_are_full_exprs_p;
4508 return init;
4509 }
27778b73
MM
4510 }
4511 else
4512 {
4513 dont_use_constructor:
4514 if (TREE_CODE (init) != TREE_VEC)
25ebb82a
RH
4515 {
4516 init_code = store_init_value (decl, init);
4517 init = NULL;
4518 }
27778b73 4519 }
27778b73
MM
4520 }
4521 else if (DECL_EXTERNAL (decl))
4522 ;
8e3df2de
MM
4523 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
4524 goto initialize_aggr;
4525 else if (IS_AGGR_TYPE (type))
27778b73
MM
4526 {
4527 tree core_type = strip_array_types (type);
4528
8e3df2de
MM
4529 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
4530 error ("structure `%D' with uninitialized const members", decl);
4531 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
4532 error ("structure `%D' with uninitialized reference members",
4533 decl);
27778b73
MM
4534
4535 check_for_uninitialized_const_var (decl);
27778b73
MM
4536 }
4537 else
4538 check_for_uninitialized_const_var (decl);
68642fb6 4539
8e3df2de 4540 if (init && init != error_mark_node)
25ebb82a 4541 init_code = build (INIT_EXPR, type, decl, init);
8e3df2de 4542
25ebb82a 4543 return init_code;
27778b73
MM
4544}
4545
4546/* If DECL is not a local variable, give it RTL. */
4547
4548static void
11f6b451 4549make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
27778b73 4550{
95ee998c
MM
4551 int toplev = toplevel_bindings_p ();
4552 int defer_p;
27778b73 4553
f39ee884
MM
4554 /* Handle non-variables up front. */
4555 if (TREE_CODE (decl) != VAR_DECL)
4556 {
4557 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
4558 return;
4559 }
4560
95ee998c
MM
4561 /* If we see a class member here, it should be a static data
4562 member. */
4563 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
4564 {
4565 my_friendly_assert (TREE_STATIC (decl), 19990828);
4566 /* An in-class declaration of a static data member should be
4567 external; it is only a declaration, and not a definition. */
4568 if (init == NULL_TREE)
4569 my_friendly_assert (DECL_EXTERNAL (decl), 20000723);
4570 }
4571
f39ee884
MM
4572 /* Set the DECL_ASSEMBLER_NAME for the variable. */
4573 if (asmspec)
7ed47c04 4574 {
fccc4eb2 4575 change_decl_assembler_name (decl, get_identifier (asmspec));
7ed47c04
MM
4576 /* The `register' keyword, when used together with an
4577 asm-specification, indicates that the variable should be
4578 placed in a particular register. */
4579 if (DECL_REGISTER (decl))
4580 DECL_C_HARD_REGISTER (decl) = 1;
4581 }
f39ee884 4582
95ee998c
MM
4583 /* We don't create any RTL for local variables. */
4584 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
4585 return;
27778b73 4586
95ee998c
MM
4587 /* We defer emission of local statics until the corresponding
4588 DECL_STMT is expanded. */
4589 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
4590
b602511f
JM
4591 /* We try to defer namespace-scope static constants so that they are
4592 not emitted into the object file unnecessarily. */
4593 if (!DECL_VIRTUAL_P (decl)
4594 && TREE_READONLY (decl)
4595 && DECL_INITIAL (decl) != NULL_TREE
4596 && DECL_INITIAL (decl) != error_mark_node
4597 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
4598 && toplev
4599 && !TREE_PUBLIC (decl))
5cc90635
JM
4600 {
4601 /* Fool with the linkage of static consts according to #pragma
4602 interface. */
4603 if (!interface_unknown && !TREE_PUBLIC (decl))
27778b73 4604 {
95ee998c
MM
4605 TREE_PUBLIC (decl) = 1;
4606 DECL_EXTERNAL (decl) = interface_only;
27778b73 4607 }
27778b73 4608
95ee998c 4609 defer_p = 1;
27778b73 4610 }
b602511f
JM
4611 /* Likewise for template instantiations. */
4612 else if (DECL_COMDAT (decl))
4613 defer_p = 1;
95ee998c 4614
92643fea
MM
4615 /* If we're deferring the variable, we only need to make RTL if
4616 there's an ASMSPEC. Otherwise, we'll lazily create it later when
4617 we need it. (There's no way to lazily create RTL for things that
4618 have assembly specs because the information about the specifier
4619 isn't stored in the tree, yet) */
4620 if (defer_p && asmspec)
6c418184 4621 make_decl_rtl (decl, asmspec);
95ee998c 4622 /* If we're not deferring, go ahead and assemble the variable. */
92643fea 4623 else if (!defer_p)
27778b73 4624 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
27778b73
MM
4625}
4626
ed5511d9 4627/* Generate code to initialize DECL (a local variable). */
27778b73 4628
8e3df2de 4629static void
11f6b451 4630initialize_local_var (tree decl, tree init)
27778b73 4631{
9ed9e79a 4632 tree type = TREE_TYPE (decl);
170b020f 4633 tree cleanup;
27778b73 4634
8e3df2de
MM
4635 my_friendly_assert (TREE_CODE (decl) == VAR_DECL
4636 || TREE_CODE (decl) == RESULT_DECL,
4637 20021010);
4638 my_friendly_assert (!TREE_STATIC (decl), 20021010);
b7b8bcd2 4639
8e3df2de 4640 if (DECL_SIZE (decl) == NULL_TREE)
b7b8bcd2
MM
4641 {
4642 /* If we used it already as memory, it must stay in memory. */
4643 DECL_INITIAL (decl) = NULL_TREE;
4644 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4645 }
4646
27778b73
MM
4647 if (DECL_SIZE (decl) && type != error_mark_node)
4648 {
4649 int already_used;
68642fb6 4650
27778b73 4651 /* Compute and store the initial value. */
27778b73
MM
4652 already_used = TREE_USED (decl) || TREE_USED (type);
4653
8e3df2de
MM
4654 /* Perform the initialization. */
4655 if (init)
27778b73 4656 {
24bef158
MM
4657 int saved_stmts_are_full_exprs_p;
4658
3a0d3e1e 4659 my_friendly_assert (building_stmt_tree (), 20000906);
f2c5f623 4660 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
ae499cce 4661 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
8e3df2de 4662 finish_expr_stmt (init);
5362b086 4663 current_stmt_tree ()->stmts_are_full_exprs_p =
ae499cce 4664 saved_stmts_are_full_exprs_p;
27778b73
MM
4665 }
4666
4667 /* Set this to 0 so we can tell whether an aggregate which was
4668 initialized was ever used. Don't do this if it has a
4669 destructor, so we don't complain about the 'resource
b7b8bcd2
MM
4670 allocation is initialization' idiom. Now set
4671 attribute((unused)) on types so decls of that type will be
4672 marked used. (see TREE_USED, above.) */
27778b73
MM
4673 if (TYPE_NEEDS_CONSTRUCTING (type)
4674 && ! already_used
834c6dff 4675 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
27778b73
MM
4676 && DECL_NAME (decl))
4677 TREE_USED (decl) = 0;
b7b8bcd2 4678 else if (already_used)
27778b73
MM
4679 TREE_USED (decl) = 1;
4680 }
24bef158 4681
8e3df2de 4682 /* Generate a cleanup, if necessary. */
170b020f
MM
4683 cleanup = cxx_maybe_build_cleanup (decl);
4684 if (DECL_SIZE (decl) && cleanup)
4685 finish_decl_cleanup (decl, cleanup);
24bef158
MM
4686}
4687
8d08fdba
MS
4688/* Finish processing of a declaration;
4689 install its line number and initial value.
4690 If the length of an array type is not known before,
4691 it must be determined now, from the initial value, or it is an error.
4692
8b27e9ef 4693 INIT holds the value of an initializer that should be allowed to escape
8d08fdba
MS
4694 the normal rules.
4695
920f9474 4696 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
f78c7bc6 4697 if the (init) syntax was used. */
8d08fdba
MS
4698
4699void
11f6b451 4700cp_finish_decl (tree decl, tree init, tree asmspec_tree, int flags)
8d08fdba 4701{
7e99327d 4702 tree type;
27778b73 4703 tree ttype = NULL_TREE;
7e99327d 4704 tree cleanup;
9c0758dd 4705 const char *asmspec = NULL;
8d08fdba
MS
4706 int was_readonly = 0;
4707
11325dcd
KL
4708 if (decl == error_mark_node)
4709 return;
4710 else if (! decl)
8d08fdba
MS
4711 {
4712 if (init)
8251199e 4713 error ("assignment (not initialization) in declaration");
8d08fdba
MS
4714 return;
4715 }
4716
170b020f
MM
4717 my_friendly_assert (TREE_CODE (decl) != RESULT_DECL, 20030619);
4718
7e99327d
MM
4719 /* Assume no cleanup is required. */
4720 cleanup = NULL_TREE;
4721
a4443a08 4722 /* If a name was specified, get the string. */
5f52c0e0 4723 if (global_scope_p (current_binding_level))
41c64394 4724 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
437081d7 4725 if (asmspec_tree)
5cc90635 4726 asmspec = TREE_STRING_POINTER (asmspec_tree);
8d08fdba 4727
2c73f9f5
ML
4728 if (init && TREE_CODE (init) == NAMESPACE_DECL)
4729 {
33bd39a2 4730 error ("cannot initialize `%D' to namespace `%D'",
2c73f9f5
ML
4731 decl, init);
4732 init = NULL_TREE;
4733 }
4734
6ba89f8e 4735 if (current_class_type
4f1c5b7d 4736 && CP_DECL_CONTEXT (decl) == current_class_type
6ba89f8e
MM
4737 && TYPE_BEING_DEFINED (current_class_type)
4738 && (DECL_INITIAL (decl) || init))
3febd123 4739 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6ba89f8e 4740
68642fb6 4741 if (TREE_CODE (decl) == VAR_DECL
9a68c51f
JM
4742 && DECL_CONTEXT (decl)
4743 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
4744 && DECL_CONTEXT (decl) != current_namespace
4745 && init)
4746 {
a1c65f9f 4747 /* Leave the namespace of the object. */
9a68c51f
JM
4748 pop_decl_namespace ();
4749 }
4750
c82dbd95 4751 type = TREE_TYPE (decl);
8d08fdba 4752
f376e137 4753 if (type == error_mark_node)
df7f7b9c 4754 goto finish_end0;
5362b086 4755
a7a7710d
NS
4756 if (TYPE_HAS_MUTABLE_P (type))
4757 TREE_READONLY (decl) = 0;
24bef158 4758
5156628f 4759 if (processing_template_decl)
5566b478 4760 {
08ac397c 4761 /* Add this declaration to the statement-tree. */
170b020f 4762 if (at_function_scope_p ())
08ac397c
JM
4763 add_decl_stmt (decl);
4764
5566b478 4765 if (init && DECL_INITIAL (decl))
2a1e9fdd 4766 DECL_INITIAL (decl) = init;
5566b478
MS
4767 goto finish_end0;
4768 }
3e41d13b 4769
27778b73
MM
4770 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
4771 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
4772
8d08fdba
MS
4773 /* Take care of TYPE_DECLs up front. */
4774 if (TREE_CODE (decl) == TYPE_DECL)
4775 {
a0a33927
MS
4776 if (type != error_mark_node
4777 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
8d08fdba
MS
4778 {
4779 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
33bd39a2 4780 warning ("shadowing previous type declaration of `%#D'", decl);
4b0d3cbe 4781 set_identifier_type_value (DECL_NAME (decl), decl);
8d08fdba 4782 }
cffa8729
MS
4783
4784 /* If we have installed this as the canonical typedef for this
4785 type, and that type has not been defined yet, delay emitting
956d6950 4786 the debug information for it, as we will emit it later. */
d2e5ee5c 4787 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
d0f062fb 4788 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
cffa8729
MS
4789 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
4790
3e411c3f 4791 rest_of_decl_compilation (decl, NULL,
5566b478 4792 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
8d08fdba
MS
4793 goto finish_end;
4794 }
3e41d13b 4795
8d08fdba 4796 if (TREE_CODE (decl) != FUNCTION_DECL)
3e41d13b 4797 ttype = target_type (type);
8d08fdba
MS
4798
4799 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
e455bc27
MM
4800 && (TYPE_NEEDS_CONSTRUCTING (type)
4801 || TREE_CODE (type) == REFERENCE_TYPE))
8d08fdba 4802 {
8d08fdba
MS
4803 /* Currently, GNU C++ puts constants in text space, making them
4804 impossible to initialize. In the future, one would hope for
4805 an operating system which understood the difference between
4806 initialization and the running of a program. */
4807 was_readonly = 1;
4808 TREE_READONLY (decl) = 0;
4809 }
4810
437081d7 4811 if (TREE_CODE (decl) == VAR_DECL)
17bbb839
MM
4812 {
4813 /* Only PODs can have thread-local storage. Other types may require
4814 various kinds of non-trivial initialization. */
4815 if (DECL_THREAD_LOCAL (decl) && !pod_type_p (TREE_TYPE (decl)))
4816 error ("`%D' cannot be thread-local because it has non-POD type `%T'",
4817 decl, TREE_TYPE (decl));
4818 /* Convert the initializer to the type of DECL, if we have not
4819 already initialized DECL. */
4820 if (!DECL_INITIALIZED_P (decl)
4821 /* If !DECL_EXTERNAL then DECL is being defined. In the
8e3df2de 4822 case of a static data member initialized inside the
17bbb839
MM
4823 class-specifier, there can be an initializer even if DECL
4824 is *not* defined. */
4825 && (!DECL_EXTERNAL (decl) || init))
4826 {
7e99327d 4827 init = check_initializer (decl, init, flags, &cleanup);
b4c20e52
MM
4828 /* Thread-local storage cannot be dynamically initialized. */
4829 if (DECL_THREAD_LOCAL (decl) && init)
4830 {
4831 error ("`%D' is thread-local and so cannot be dynamically "
4832 "initialized", decl);
4833 init = NULL_TREE;
4834 }
17bbb839
MM
4835 /* Handle:
4836
4837 [dcl.init]
4838
4839 The memory occupied by any object of static storage
4840 duration is zero-initialized at program startup before
4841 any other initialization takes place.
4842
4843 We cannot create an appropriate initializer until after
4844 the type of DECL is finalized. If DECL_INITIAL is set,
4845 then the DECL is statically initialized, and any
4846 necessary zero-initialization has already been performed. */
4847 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
4848 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
1cb8292f 4849 /*nelts=*/NULL_TREE,
17bbb839
MM
4850 /*static_storage_p=*/true);
4851 /* Remember that the initialization for this variable has
4852 taken place. */
4853 DECL_INITIALIZED_P (decl) = 1;
4854 }
d881ff25
MM
4855 /* If the variable has an array type, lay out the type, even if
4856 there is no initializer. It is valid to index through the
4857 array, and we must get TYPE_ALIGN set correctly on the array
4858 type. */
4859 else if (TREE_CODE (type) == ARRAY_TYPE)
4860 layout_type (type);
17bbb839 4861 }
3e41d13b 4862
57cf57fb
JM
4863 /* Add this declaration to the statement-tree. This needs to happen
4864 after the call to check_initializer so that the DECL_STMT for a
4865 reference temp is added before the DECL_STMT for the reference itself. */
170b020f 4866 if (at_function_scope_p ())
08ac397c
JM
4867 add_decl_stmt (decl);
4868
8d08fdba 4869 if (TREE_CODE (decl) == VAR_DECL)
57b52417 4870 layout_var_decl (decl);
8d08fdba
MS
4871
4872 /* Output the assembler code and/or RTL code for variables and functions,
4873 unless the type is an undefined structure or union.
4874 If not, it will get done when the type is completed. */
170b020f 4875 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
8d08fdba 4876 {
27778b73
MM
4877 if (TREE_CODE (decl) == VAR_DECL)
4878 maybe_commonize_var (decl);
8d08fdba 4879
27778b73 4880 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8d08fdba 4881
68642fb6 4882 if (TREE_CODE (type) == FUNCTION_TYPE
27778b73 4883 || TREE_CODE (type) == METHOD_TYPE)
68642fb6 4884 abstract_virtuals_error (decl,
27778b73 4885 strip_array_types (TREE_TYPE (type)));
cfb91b67
GB
4886 else if (POINTER_TYPE_P (type) || TREE_CODE (type) == ARRAY_TYPE)
4887 {
4888 /* If it's either a pointer or an array type, strip through all
4889 of them but the last one. If the last is an array type, issue
4890 an error if the element type is abstract. */
4891 while (POINTER_TYPE_P (TREE_TYPE (type))
4892 || TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE)
4893 type = TREE_TYPE (type);
4894 if (TREE_CODE (type) == ARRAY_TYPE)
4895 abstract_virtuals_error (decl, TREE_TYPE (type));
4896 }
68642fb6 4897 else
cfb91b67 4898 abstract_virtuals_error (decl, type);
8d08fdba 4899
8e3df2de
MM
4900 if (TREE_CODE (decl) == FUNCTION_DECL
4901 || TREE_TYPE (decl) == error_mark_node)
4902 /* No initialization required. */
faae18ab 4903 ;
67d743fe
MS
4904 else if (DECL_EXTERNAL (decl)
4905 && ! (DECL_LANG_SPECIFIC (decl)
4906 && DECL_NOT_REALLY_EXTERN (decl)))
5566b478
MS
4907 {
4908 if (init)
4909 DECL_INITIAL (decl) = init;
4910 }
8e3df2de 4911 else
8d08fdba 4912 {
8e3df2de
MM
4913 /* A variable definition. */
4914 if (DECL_FUNCTION_SCOPE_P (decl))
24bef158 4915 {
8e3df2de 4916 /* This is a local declaration. */
a7e8c268 4917 maybe_inject_for_scope_var (decl);
8e3df2de
MM
4918 /* Initialize the local variable. */
4919 if (processing_template_decl)
4920 {
4921 if (init || DECL_INITIAL (decl) == error_mark_node)
4922 DECL_INITIAL (decl) = init;
4923 }
4924 else if (!TREE_STATIC (decl))
4925 initialize_local_var (decl, init);
24bef158 4926 }
8e3df2de
MM
4927
4928 if (TREE_STATIC (decl))
9ed9e79a
MM
4929 expand_static_init (decl, init);
4930 }
8d08fdba
MS
4931 finish_end0:
4932
4933 /* Undo call to `pushclass' that was done in `start_decl'
4934 due to initialization of qualified member variable.
4935 I.e., Foo::x = 10; */
4936 {
4f1c5b7d 4937 tree context = CP_DECL_CONTEXT (decl);
8d08fdba 4938 if (context
2f939d94 4939 && TYPE_P (context)
8d08fdba
MS
4940 && (TREE_CODE (decl) == VAR_DECL
4941 /* We also have a pushclass done that we need to undo here
4942 if we're at top level and declare a method. */
5566b478
MS
4943 || TREE_CODE (decl) == FUNCTION_DECL)
4944 /* If size hasn't been set, we're still defining it,
4945 and therefore inside the class body; don't pop
4946 the binding level.. */
d0f062fb 4947 && COMPLETE_TYPE_P (context)
5566b478 4948 && context == current_class_type)
6b400b21 4949 pop_nested_class ();
8d08fdba
MS
4950 }
4951 }
4952
7e99327d
MM
4953 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
4954 reference, insert it in the statement-tree now. */
4955 if (cleanup)
4956 add_stmt (cleanup);
4957
8d08fdba
MS
4958 finish_end:
4959
8d08fdba
MS
4960 if (was_readonly)
4961 TREE_READONLY (decl) = 1;
d1bd0ded
GK
4962
4963 /* If this was marked 'used', be sure it will be output. */
4964 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
4965 mark_referenced (DECL_ASSEMBLER_NAME (decl));
8d08fdba
MS
4966}
4967
f4f206f4 4968/* This is here for a midend callback from c-common.c. */
e92cc029 4969
82580166 4970void
11f6b451 4971finish_decl (tree decl, tree init, tree asmspec_tree)
82580166 4972{
cd9f6678 4973 cp_finish_decl (decl, init, asmspec_tree, 0);
82580166
MS
4974}
4975
db4283a0
MM
4976/* Returns a declaration for a VAR_DECL as if:
4977
4978 extern "C" TYPE NAME;
4979
4980 had been seen. Used to create compiler-generated global
4981 variables. */
4982
4983tree
11f6b451 4984declare_global_var (tree name, tree type)
db4283a0
MM
4985{
4986 tree decl;
4987
4988 push_to_top_level ();
4989 decl = build_decl (VAR_DECL, name, type);
4990 TREE_PUBLIC (decl) = 1;
4991 DECL_EXTERNAL (decl) = 1;
4992 DECL_ARTIFICIAL (decl) = 1;
4993 pushdecl (decl);
4994 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
4995 pop_from_top_level ();
4996
4997 return decl;
4998}
4999
5000/* Returns a pointer to the `atexit' function. Note that if
838dfd8a 5001 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
db4283a0
MM
5002 `__cxa_atexit' function specified in the IA64 C++ ABI. */
5003
5004static tree
11f6b451 5005get_atexit_node (void)
db4283a0
MM
5006{
5007 tree atexit_fndecl;
5008 tree arg_types;
5009 tree fn_type;
5010 tree fn_ptr_type;
5011 const char *name;
5012
5013 if (atexit_node)
5014 return atexit_node;
5015
5016 if (flag_use_cxa_atexit)
5017 {
5018 /* The declaration for `__cxa_atexit' is:
5019
5020 int __cxa_atexit (void (*)(void *), void *, void *)
5021
5022 We build up the argument types and then then function type
5023 itself. */
68642fb6 5024
db4283a0
MM
5025 /* First, build the pointer-to-function type for the first
5026 argument. */
5027 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5028 fn_type = build_function_type (void_type_node, arg_types);
5029 fn_ptr_type = build_pointer_type (fn_type);
5030 /* Then, build the rest of the argument types. */
5031 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5032 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5033 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5034 /* And the final __cxa_atexit type. */
5035 fn_type = build_function_type (integer_type_node, arg_types);
5036 fn_ptr_type = build_pointer_type (fn_type);
5037 name = "__cxa_atexit";
5038 }
5039 else
5040 {
5041 /* The declaration for `atexit' is:
68642fb6 5042
db4283a0
MM
5043 int atexit (void (*)());
5044
5045 We build up the argument types and then then function type
5046 itself. */
5047 fn_type = build_function_type (void_type_node, void_list_node);
5048 fn_ptr_type = build_pointer_type (fn_type);
5049 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5050 /* Build the final atexit type. */
5051 fn_type = build_function_type (integer_type_node, arg_types);
5052 name = "atexit";
5053 }
5054
5055 /* Now, build the function declaration. */
5056 push_lang_context (lang_name_c);
0c11ada6 5057 atexit_fndecl = build_library_fn_ptr (name, fn_type);
db4283a0
MM
5058 mark_used (atexit_fndecl);
5059 pop_lang_context ();
0a72704b 5060 atexit_node = decay_conversion (atexit_fndecl);
db4283a0
MM
5061
5062 return atexit_node;
5063}
5064
5065/* Returns the __dso_handle VAR_DECL. */
5066
5067static tree
11f6b451 5068get_dso_handle_node (void)
db4283a0
MM
5069{
5070 if (dso_handle_node)
5071 return dso_handle_node;
5072
5073 /* Declare the variable. */
5074 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5075 ptr_type_node);
5076
5077 return dso_handle_node;
5078}
5079
5080/* Begin a new function with internal linkage whose job will be simply
5081 to destroy some particular variable. */
5082
d192828a
GK
5083static GTY(()) int start_cleanup_cnt;
5084
db4283a0 5085static tree
11f6b451 5086start_cleanup_fn (void)
db4283a0 5087{
23ccd1f3 5088 int old_interface_only = interface_only;
db4283a0
MM
5089 int old_interface_unknown = interface_unknown;
5090 char name[32];
5091 tree parmtypes;
5092 tree fntype;
5093 tree fndecl;
5094
5095 push_to_top_level ();
5096
5097 /* No need to mangle this. */
5098 push_lang_context (lang_name_c);
5099
23ccd1f3 5100 interface_only = 0;
db4283a0
MM
5101 interface_unknown = 1;
5102
5103 /* Build the parameter-types. */
5104 parmtypes = void_list_node;
5105 /* Functions passed to __cxa_atexit take an additional parameter.
5106 We'll just ignore it. After we implement the new calling
5107 convention for destructors, we can eliminate the use of
5108 additional cleanup functions entirely in the -fnew-abi case. */
5109 if (flag_use_cxa_atexit)
5110 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
5111 /* Build the function type itself. */
5112 fntype = build_function_type (void_type_node, parmtypes);
5113 /* Build the name of the function. */
d192828a 5114 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
db4283a0
MM
5115 /* Build the function declaration. */
5116 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5117 /* It's a function with internal linkage, generated by the
5118 compiler. */
5119 TREE_PUBLIC (fndecl) = 0;
5120 DECL_ARTIFICIAL (fndecl) = 1;
5a728aca
MM
5121 /* Make the function `inline' so that it is only emitted if it is
5122 actually needed. It is unlikely that it will be inlined, since
aba649ba 5123 it is only called via a function pointer, but we avoid unnecessary
5a728aca
MM
5124 emissions this way. */
5125 DECL_INLINE (fndecl) = 1;
d4d1ebc1
JH
5126 DECL_DECLARED_INLINE_P (fndecl) = 1;
5127 DECL_INTERFACE_KNOWN (fndecl) = 1;
db4283a0
MM
5128 /* Build the parameter. */
5129 if (flag_use_cxa_atexit)
5130 {
5131 tree parmdecl;
5132
8e51619a 5133 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
db4283a0 5134 DECL_CONTEXT (parmdecl) = fndecl;
db4283a0
MM
5135 TREE_USED (parmdecl) = 1;
5136 DECL_ARGUMENTS (fndecl) = parmdecl;
5137 }
5138
09ed39ad 5139 pushdecl (fndecl);
db4283a0 5140 start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
db4283a0
MM
5141
5142 interface_unknown = old_interface_unknown;
23ccd1f3 5143 interface_only = old_interface_only;
db4283a0
MM
5144
5145 pop_lang_context ();
5146
5147 return current_function_decl;
5148}
5149
5150/* Finish the cleanup function begun by start_cleanup_fn. */
5151
5152static void
11f6b451 5153end_cleanup_fn (void)
db4283a0 5154{
8cd2462c 5155 expand_or_defer_fn (finish_function (0));
db4283a0
MM
5156
5157 pop_from_top_level ();
5158}
5159
bf419747
MM
5160/* Generate code to handle the destruction of DECL, an object with
5161 static storage duration. */
f0105ed3 5162
bf419747 5163void
11f6b451 5164register_dtor_fn (tree decl)
f0105ed3 5165{
db4283a0 5166 tree cleanup;
f0105ed3 5167 tree compound_stmt;
db4283a0
MM
5168 tree args;
5169 tree fcall;
f0105ed3 5170
834c6dff 5171 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
bf419747
MM
5172 return;
5173
f0105ed3
MM
5174 /* Call build_cleanup before we enter the anonymous function so that
5175 any access checks will be done relative to the current scope,
5176 rather than the scope of the anonymous function. */
5177 build_cleanup (decl);
5178
5179 /* Now start the function. */
db4283a0 5180 cleanup = start_cleanup_fn ();
f0105ed3
MM
5181
5182 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
5183 to the original function, rather than the anonymous one. That
5184 will make the back-end think that nested functions are in use,
5185 which causes confusion. */
78757caa
KL
5186
5187 push_deferring_access_checks (dk_no_check);
f0105ed3 5188 fcall = build_cleanup (decl);
78757caa 5189 pop_deferring_access_checks ();
f0105ed3
MM
5190
5191 /* Create the body of the anonymous function. */
7a3397c7 5192 compound_stmt = begin_compound_stmt (/*has_no_scope=*/false);
f0105ed3 5193 finish_expr_stmt (fcall);
7a3397c7 5194 finish_compound_stmt (compound_stmt);
db4283a0 5195 end_cleanup_fn ();
f0105ed3
MM
5196
5197 /* Call atexit with the cleanup function. */
dffd7eb6 5198 cxx_mark_addressable (cleanup);
bb4f6e6b 5199 mark_used (cleanup);
f0105ed3 5200 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
db4283a0
MM
5201 if (flag_use_cxa_atexit)
5202 {
0f268005
MM
5203 args = tree_cons (NULL_TREE,
5204 build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
5205 NULL_TREE);
db4283a0
MM
5206 args = tree_cons (NULL_TREE, null_pointer_node, args);
5207 args = tree_cons (NULL_TREE, cleanup, args);
5208 }
5209 else
5210 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5211 finish_expr_stmt (build_function_call (get_atexit_node (), args));
f0105ed3
MM
5212}
5213
8e3df2de
MM
5214/* DECL is a VAR_DECL with static storage duration. INIT, if present,
5215 is its initializer. Generate code to handle the construction
5216 and destruction of DECL. */
5217
5218static void
11f6b451 5219expand_static_init (tree decl, tree init)
8d08fdba 5220{
8e3df2de
MM
5221 my_friendly_assert (TREE_CODE (decl) == VAR_DECL, 20021010);
5222 my_friendly_assert (TREE_STATIC (decl), 20021010);
5223
5224 /* Some variables require no initialization. */
5225 if (!init
5226 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
5227 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5228 return;
5229
4b0d3cbe 5230 if (! toplevel_bindings_p ())
8d08fdba
MS
5231 {
5232 /* Emit code to perform this initialization but once. */
b7b8bcd2 5233 tree if_stmt;
f0105ed3 5234 tree then_clause;
f1dedc31 5235 tree assignment;
c395453c
MM
5236 tree guard;
5237 tree guard_init;
8d08fdba 5238
2036a15c
MM
5239 /* Emit code to perform this initialization but once. This code
5240 looks like:
5241
c395453c
MM
5242 static int guard = 0;
5243 if (!guard) {
2036a15c 5244 // Do initialization.
c395453c 5245 guard = 1;
2036a15c
MM
5246 // Register variable for destruction at end of program.
5247 }
5248
5249 Note that the `temp' variable is only set to 1 *after* the
5250 initialization is complete. This ensures that an exception,
5251 thrown during the construction, will cause the variable to
5252 reinitialized when we pass through this code again, as per:
68642fb6 5253
2036a15c
MM
5254 [stmt.dcl]
5255
5256 If the initialization exits by throwing an exception, the
5257 initialization is not complete, so it will be tried again
5258 the next time control enters the declaration.
5259
5260 In theory, this process should be thread-safe, too; multiple
5261 threads should not be able to initialize the variable more
5262 than once. We don't yet attempt to ensure thread-safety. */
c395453c
MM
5263
5264 /* Create the guard variable. */
5265 guard = get_guard (decl);
2036a15c
MM
5266
5267 /* Begin the conditional initialization. */
b7b8bcd2 5268 if_stmt = begin_if_stmt ();
c395453c 5269 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
7a3397c7 5270 then_clause = begin_compound_stmt (/*has_no_scope=*/false);
72b7eeff 5271
2036a15c 5272 /* Do the initialization itself. */
8e3df2de 5273 assignment = init ? init : NULL_TREE;
f1dedc31
MM
5274
5275 /* Once the assignment is complete, set TEMP to 1. Since the
5276 construction of the static object is complete at this point,
5277 we want to make sure TEMP is set to 1 even if a temporary
5278 constructed during the initialization throws an exception
5279 when it is destroyed. So, we combine the initialization and
5280 the assignment to TEMP into a single expression, ensuring
5281 that when we call finish_expr_stmt the cleanups will not be
5282 run until after TEMP is set to 1. */
c395453c 5283 guard_init = set_guard (guard);
f1dedc31 5284 if (assignment)
c7b62f14 5285 assignment = build_compound_expr (assignment, guard_init);
f1dedc31 5286 else
c395453c 5287 assignment = guard_init;
f1dedc31 5288 finish_expr_stmt (assignment);
72b7eeff 5289
2036a15c
MM
5290 /* Use atexit to register a function for destroying this static
5291 variable. */
bf419747 5292 register_dtor_fn (decl);
72b7eeff 5293
7a3397c7 5294 finish_compound_stmt (then_clause);
b7b8bcd2
MM
5295 finish_then_clause (if_stmt);
5296 finish_if_stmt ();
8d08fdba
MS
5297 }
5298 else
bbd15aac 5299 static_aggregates = tree_cons (init, decl, static_aggregates);
8d08fdba 5300}
3c5c0849
MM
5301
5302/* Finish the declaration of a catch-parameter. */
5303
b35d4555 5304tree
11f6b451 5305start_handler_parms (tree declspecs, tree declarator)
3c5c0849
MM
5306{
5307 tree decl;
5308 if (declspecs)
5309 {
5310 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
91d231cb 5311 1, NULL);
3c5c0849
MM
5312 if (decl == NULL_TREE)
5313 error ("invalid catch parameter");
5314 }
5315 else
5316 decl = NULL_TREE;
b35d4555
MM
5317
5318 return decl;
3c5c0849
MM
5319}
5320
8d08fdba
MS
5321\f
5322/* Make TYPE a complete type based on INITIAL_VALUE.
5323 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6ab5c740 5324 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
8d08fdba
MS
5325
5326int
11f6b451 5327complete_array_type (tree type, tree initial_value, int do_default)
8d08fdba 5328{
926ce8bd 5329 tree maxindex = NULL_TREE;
8d08fdba 5330 int value = 0;
68642fb6 5331
8d08fdba
MS
5332 if (initial_value)
5333 {
7b019c19
MM
5334 /* An array of character type can be initialized from a
5335 brace-enclosed string constant. */
5336 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
5337 && TREE_CODE (initial_value) == CONSTRUCTOR
5338 && CONSTRUCTOR_ELTS (initial_value)
5339 && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value)))
5340 == STRING_CST)
5341 && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value)) == NULL_TREE)
5342 initial_value = TREE_VALUE (CONSTRUCTOR_ELTS (initial_value));
5343
5344 /* Note MAXINDEX is really the maximum index, one less than the
5345 size. */
8d08fdba 5346 if (TREE_CODE (initial_value) == STRING_CST)
e1cd6e56
MS
5347 {
5348 int eltsize
5349 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
5350 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
5351 / eltsize) - 1, 0);
5352 }
8d08fdba
MS
5353 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
5354 {
e1cd6e56 5355 tree elts = CONSTRUCTOR_ELTS (initial_value);
fed3cef0
RK
5356
5357 maxindex = ssize_int (-1);
e1cd6e56
MS
5358 for (; elts; elts = TREE_CHAIN (elts))
5359 {
5360 if (TREE_PURPOSE (elts))
5361 maxindex = TREE_PURPOSE (elts);
5362 else
fed3cef0 5363 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
e1cd6e56
MS
5364 }
5365 maxindex = copy_node (maxindex);
8d08fdba
MS
5366 }
5367 else
5368 {
5369 /* Make an error message unless that happened already. */
5370 if (initial_value != error_mark_node)
5371 value = 1;
0db982be
ML
5372 else
5373 initial_value = NULL_TREE;
8d08fdba
MS
5374
5375 /* Prevent further error messages. */
5376 maxindex = build_int_2 (0, 0);
5377 }
5378 }
5379
5380 if (!maxindex)
5381 {
5382 if (do_default)
5383 maxindex = build_int_2 (0, 0);
5384 value = 2;
5385 }
5386
5387 if (maxindex)
5388 {
51c184be 5389 tree itype;
6ab5c740
NS
5390 tree domain;
5391
5392 domain = build_index_type (maxindex);
5393 TYPE_DOMAIN (type) = domain;
51c184be 5394
dff6b454 5395 if (! TREE_TYPE (maxindex))
6ab5c740 5396 TREE_TYPE (maxindex) = domain;
51c184be
MS
5397 if (initial_value)
5398 itype = TREE_TYPE (initial_value);
5399 else
5400 itype = NULL;
5401 if (itype && !TYPE_DOMAIN (itype))
6ab5c740 5402 TYPE_DOMAIN (itype) = domain;
dff6b454
RK
5403 /* The type of the main variant should never be used for arrays
5404 of different sizes. It should only ever be completed with the
5405 size of the array. */
5406 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
6ab5c740 5407 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8d08fdba
MS
5408 }
5409
5410 /* Lay out the type now that we can get the real answer. */
5411
5412 layout_type (type);
5413
5414 return value;
5415}
5416\f
5417/* Return zero if something is declared to be a member of type
5418 CTYPE when in the context of CUR_TYPE. STRING is the error
5419 message to print in that case. Otherwise, quietly return 1. */
e92cc029 5420
8d08fdba 5421static int
11f6b451 5422member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8d08fdba
MS
5423{
5424 if (ctype && ctype != cur_type)
5425 {
4dacf5bd 5426 if (flags == DTOR_FLAG)
33bd39a2 5427 error ("destructor for alien class `%T' cannot be a member",
2ae7bada 5428 ctype);
4dacf5bd 5429 else
33bd39a2 5430 error ("constructor for alien class `%T' cannot be a member",
2ae7bada 5431 ctype);
8d08fdba
MS
5432 return 0;
5433 }
5434 return 1;
5435}
5436\f
5437/* Subroutine of `grokdeclarator'. */
5438
5439/* Generate errors possibly applicable for a given set of specifiers.
5440 This is for ARM $7.1.2. */
e92cc029 5441
8d08fdba 5442static void
11f6b451
NN
5443bad_specifiers (tree object,
5444 const char* type,
5445 int virtualp,
5446 int quals,
45225759 5447 int inlinep,
11f6b451 5448 int friendp,
45225759 5449 int raises)
8d08fdba
MS
5450{
5451 if (virtualp)
33bd39a2 5452 error ("`%D' declared as a `virtual' %s", object, type);
8d08fdba 5453 if (inlinep)
33bd39a2 5454 error ("`%D' declared as an `inline' %s", object, type);
8d08fdba 5455 if (quals)
33bd39a2 5456 error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
a28e3c7f 5457 object, type);
8d08fdba 5458 if (friendp)
f8e55f34 5459 cp_error_at ("`%D' declared as a friend", object);
e1be26f4
RS
5460 if (raises
5461 && (TREE_CODE (object) == TYPE_DECL
5462 || (!TYPE_PTRFN_P (TREE_TYPE (object))
742a37d5 5463 && !TYPE_REFFN_P (TREE_TYPE (object))
e1be26f4 5464 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
f8e55f34 5465 cp_error_at ("`%D' declared with an exception specification", object);
8d08fdba
MS
5466}
5467
5468/* CTYPE is class type, or null if non-class.
5469 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5470 or METHOD_TYPE.
5471 DECLARATOR is the function's name.
5472 VIRTUALP is truthvalue of whether the function is virtual or not.
5473 FLAGS are to be passed through to `grokclassfn'.
5474 QUALS are qualifiers indicating whether the function is `const'
5475 or `volatile'.
5476 RAISES is a list of exceptions that this function can raise.
5477 CHECK is 1 if we must find this method in CTYPE, 0 if we should
68642fb6 5478 not look, and -1 if we should not call `grokclassfn' at all.
3ddfb0e6 5479
20496fa2 5480 Returns `NULL_TREE' if something goes wrong, after issuing
3ddfb0e6 5481 applicable error messages. */
e92cc029 5482
8d08fdba 5483static tree
11f6b451
NN
5484grokfndecl (tree ctype,
5485 tree type,
5486 tree declarator,
5487 tree orig_declarator,
5488 int virtualp,
5489 enum overload_flags flags,
5490 tree quals,
5491 tree raises,
5492 int check,
5493 int friendp,
5494 int publicp,
5495 int inlinep,
5496 int funcdef_flag,
5497 int template_count,
5498 tree in_namespace)
8d08fdba 5499{
1951a1b6 5500 tree decl;
8d08fdba 5501 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
856216bb 5502 int has_default_arg = 0;
42976354 5503 tree t;
8d08fdba 5504
8d08fdba 5505 if (raises)
271e6f02 5506 type = build_exception_variant (type, raises);
c11b6f21 5507
8d08fdba 5508 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
a1c65f9f 5509 /* Propagate volatile out from type to decl. */
8d08fdba 5510 if (TYPE_VOLATILE (type))
893de33c 5511 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba 5512
79c4d4b7 5513 /* If this decl has namespace scope, set that up. */
2c73f9f5 5514 if (in_namespace)
b262d64c 5515 set_decl_namespace (decl, in_namespace, friendp);
adae082f 5516 else if (!ctype)
79c4d4b7 5517 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 5518
0f8766b8
JM
5519 /* `main' and builtins have implicit 'C' linkage. */
5520 if ((MAIN_NAME_P (declarator)
5521 || (IDENTIFIER_LENGTH (declarator) > 10
5522 && IDENTIFIER_POINTER (declarator)[0] == '_'
5523 && IDENTIFIER_POINTER (declarator)[1] == '_'
5524 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
5525 && current_lang_name == lang_name_cplusplus
94706a5c 5526 && ctype == NULL_TREE
79c4d4b7
JM
5527 /* NULL_TREE means global namespace. */
5528 && DECL_CONTEXT (decl) == NULL_TREE)
5d2ed28c 5529 SET_DECL_LANGUAGE (decl, lang_c);
0f8766b8 5530
8d08fdba
MS
5531 /* Should probably propagate const out from type to decl I bet (mrs). */
5532 if (staticp)
5533 {
5534 DECL_STATIC_FUNCTION_P (decl) = 1;
5535 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
5536 }
5537
e76a2646 5538 if (ctype)
4f1c5b7d 5539 DECL_CONTEXT (decl) = ctype;
e76a2646 5540
0f8766b8 5541 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
faae18ab 5542 {
848b92e1 5543 if (processing_template_decl)
cb9a3ff8 5544 error ("cannot declare `::main' to be a template");
faae18ab 5545 if (inlinep)
cb9a3ff8 5546 error ("cannot declare `::main' to be inline");
f22967f3 5547 if (!publicp)
cb9a3ff8 5548 error ("cannot declare `::main' to be static");
f22967f3
MM
5549 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
5550 integer_type_node))
5551 error ("`main' must return `int'");
faae18ab
MS
5552 inlinep = 0;
5553 publicp = 1;
5554 }
50a6dbd7 5555
59e76fc6
JM
5556 /* Members of anonymous types and local classes have no linkage; make
5557 them internal. */
1951a1b6
JM
5558 /* FIXME what if it gets a name from typedef? */
5559 if (ctype && (TYPE_ANONYMOUS_P (ctype)
4f1c5b7d 5560 || decl_function_context (TYPE_MAIN_DECL (ctype))))
50a6dbd7
JM
5561 publicp = 0;
5562
5563 if (publicp)
5564 {
5565 /* [basic.link]: A name with no linkage (notably, the name of a class
5566 or enumeration declared in a local scope) shall not be used to
5567 declare an entity with linkage.
5568
50b97e0f 5569 Only check this for public decls for now. See core 319, 389. */
50a6dbd7
JM
5570 t = no_linkage_check (TREE_TYPE (decl));
5571 if (t)
5572 {
1951a1b6 5573 if (TYPE_ANONYMOUS_P (t))
7f7c930e 5574 {
eb68cb58 5575 if (DECL_EXTERN_C_P (decl))
7f7c930e
JM
5576 /* Allow this; it's pretty common in C. */;
5577 else
1951a1b6 5578 {
33bd39a2 5579 pedwarn ("non-local function `%#D' uses anonymous type",
1951a1b6
JM
5580 decl);
5581 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
5582 cp_pedwarn_at ("\
5583`%#D' does not refer to the unqualified type, so it is not used for linkage",
5584 TYPE_NAME (t));
5585 }
7f7c930e 5586 }
50a6dbd7 5587 else
33bd39a2 5588 pedwarn ("non-local function `%#D' uses local type `%T'",
cce2be43 5589 decl, t);
50a6dbd7
JM
5590 }
5591 }
5592
893de33c 5593 TREE_PUBLIC (decl) = publicp;
faae18ab 5594 if (! publicp)
893de33c
JM
5595 {
5596 DECL_INTERFACE_KNOWN (decl) = 1;
5597 DECL_NOT_REALLY_EXTERN (decl) = 1;
5598 }
faae18ab 5599
acc72c37 5600 /* If the declaration was declared inline, mark it as such. */
faae18ab 5601 if (inlinep)
acc72c37
MM
5602 DECL_DECLARED_INLINE_P (decl) = 1;
5603 /* We inline functions that are explicitly declared inline, or, when
5604 the user explicitly asks us to, all functions. */
b3c3af2f
SB
5605 if (DECL_DECLARED_INLINE_P (decl)
5606 || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
acc72c37 5607 DECL_INLINE (decl) = 1;
8d08fdba
MS
5608
5609 DECL_EXTERNAL (decl) = 1;
5610 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
5611 {
33bd39a2 5612 error ("%smember function `%D' cannot have `%T' method qualifier",
8d08fdba
MS
5613 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
5614 quals = NULL_TREE;
5615 }
5616
596ea4e5 5617 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
4b0d3cbe 5618 grok_op_properties (decl, friendp, /*complain=*/true);
8d08fdba 5619
4f1c5b7d 5620 if (ctype && decl_function_context (decl))
893de33c 5621 DECL_NO_STATIC_CHAIN (decl) = 1;
e76a2646 5622
42976354
BK
5623 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
5624 if (TREE_PURPOSE (t)
5625 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
5626 {
856216bb 5627 has_default_arg = 1;
42976354
BK
5628 break;
5629 }
5630
f9d94ea4
JM
5631 if (friendp
5632 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
5633 {
5634 if (funcdef_flag)
33bd39a2 5635 error
8251199e 5636 ("defining explicit specialization `%D' in friend declaration",
f9d94ea4
JM
5637 orig_declarator);
5638 else
5639 {
76e57b45
NS
5640 tree fns = TREE_OPERAND (orig_declarator, 0);
5641 tree args = TREE_OPERAND (orig_declarator, 1);
d363e7bf 5642
7e2421f7
MM
5643 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5644 {
5645 /* Something like `template <class T> friend void f<T>()'. */
33bd39a2 5646 error ("invalid use of template-id `%D' in declaration of primary template",
7e2421f7 5647 orig_declarator);
20496fa2 5648 return NULL_TREE;
7e2421f7
MM
5649 }
5650
856216bb 5651
f9d94ea4
JM
5652 /* A friend declaration of the form friend void f<>(). Record
5653 the information in the TEMPLATE_ID_EXPR. */
5654 SET_DECL_IMPLICIT_INSTANTIATION (decl);
76e57b45
NS
5655
5656 if (TREE_CODE (fns) == COMPONENT_REF)
5657 {
5658 /* Due to bison parser ickiness, we will have already looked
5659 up an operator_name or PFUNCNAME within the current class
5660 (see template_id in parse.y). If the current class contains
a1c65f9f 5661 such a name, we'll get a COMPONENT_REF here. Undo that. */
d363e7bf 5662
76e57b45
NS
5663 my_friendly_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
5664 == current_class_type, 20001120);
5665 fns = TREE_OPERAND (fns, 1);
5666 }
5667 my_friendly_assert (TREE_CODE (fns) == IDENTIFIER_NODE
76e57b45
NS
5668 || TREE_CODE (fns) == OVERLOAD, 20001120);
5669 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
856216bb
MM
5670
5671 if (has_default_arg)
5672 {
33bd39a2 5673 error ("default arguments are not allowed in declaration of friend template specialization `%D'",
856216bb
MM
5674 decl);
5675 return NULL_TREE;
5676 }
5677
5678 if (inlinep)
5679 {
33bd39a2 5680 error ("`inline' is not allowed in declaration of friend template specialization `%D'",
856216bb
MM
5681 decl);
5682 return NULL_TREE;
5683 }
f9d94ea4 5684 }
f84b4be9 5685 }
386b8a85 5686
1eb0072d
JM
5687 if (funcdef_flag)
5688 /* Make the init_value nonzero so pushdecl knows this is not
5689 tentative. error_mark_node is replaced later with the BLOCK. */
5690 DECL_INITIAL (decl) = error_mark_node;
5691
93ca4ba7 5692 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
1660cb3a
JM
5693 TREE_NOTHROW (decl) = 1;
5694
75650646 5695 /* Caller will do the rest of this. */
8d08fdba
MS
5696 if (check < 0)
5697 return decl;
5698
a723baf1 5699 if (flags == NO_SPECIAL && ctype && constructor_name_p (declarator, ctype))
74b846e0
MM
5700 DECL_CONSTRUCTOR_P (decl) = 1;
5701
5702 /* Function gets the ugly name, field gets the nice one. This call
5703 may change the type of the function (because of default
5704 parameters)! */
5705 if (ctype != NULL_TREE)
5706 grokclassfn (ctype, decl, flags, quals);
5707
5708 decl = check_explicit_specialization (orig_declarator, decl,
5709 template_count,
5710 2 * (funcdef_flag != 0) +
5711 4 * (friendp != 0));
5712 if (decl == error_mark_node)
5713 return NULL_TREE;
98c1c668 5714
74b846e0
MM
5715 if (ctype != NULL_TREE
5716 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
5717 && check)
8d08fdba 5718 {
74b846e0 5719 tree old_decl;
8d08fdba 5720
d43f603d
KL
5721 old_decl = check_classfn (ctype, decl,
5722 processing_template_decl
5723 > template_class_depth (ctype));
8d08fdba 5724
74b846e0
MM
5725 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
5726 /* Because grokfndecl is always supposed to return a
5727 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
5728 here. We depend on our callers to figure out that its
5729 really a template that's being returned. */
5730 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6c30752f 5731
74b846e0
MM
5732 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
5733 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
5566b478 5734 {
74b846e0
MM
5735 /* Remove the `this' parm added by grokclassfn.
5736 XXX Isn't this done in start_function, too? */
3afb32a4 5737 revert_static_member_fn (decl);
74b846e0 5738 last_function_parms = TREE_CHAIN (last_function_parms);
5566b478 5739 }
74b846e0 5740 if (old_decl && DECL_ARTIFICIAL (old_decl))
33bd39a2 5741 error ("definition of implicitly-declared `%D'", old_decl);
8d08fdba 5742
74b846e0 5743 if (old_decl)
8d08fdba 5744 {
79ae853c 5745 tree ok;
316a2456 5746
74b846e0
MM
5747 /* Since we've smashed OLD_DECL to its
5748 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
5749 if (TREE_CODE (decl) == TEMPLATE_DECL)
5750 decl = DECL_TEMPLATE_RESULT (decl);
5751
5752 /* Attempt to merge the declarations. This can fail, in
0e339752 5753 the case of some invalid specialization declarations. */
14d22dd6 5754 push_scope (ctype);
316a2456 5755 ok = duplicate_decls (decl, old_decl);
14d22dd6 5756 pop_scope (ctype);
316a2456
MM
5757 if (!ok)
5758 {
5759 error ("no `%#D' member function declared in class `%T'",
5760 decl, ctype);
5761 return NULL_TREE;
5762 }
74b846e0 5763 return old_decl;
8d08fdba
MS
5764 }
5765 }
74b846e0
MM
5766
5767 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
5768 return NULL_TREE;
5769
5770 if (ctype == NULL_TREE || check)
5771 return decl;
5772
5773 if (virtualp)
cbb40945 5774 DECL_VIRTUAL_P (decl) = 1;
74b846e0 5775
8d08fdba
MS
5776 return decl;
5777}
5778
9e259dd1
MM
5779/* Create a VAR_DECL named NAME with the indicated TYPE.
5780
5781 If SCOPE is non-NULL, it is the class type or namespace containing
5782 the variable. If SCOPE is NULL, the variable should is created in
5783 the innermost enclosings scope. */
5784
8d08fdba 5785static tree
11f6b451
NN
5786grokvardecl (tree type,
5787 tree name,
5788 RID_BIT_TYPE * specbits_in,
5789 int initialized,
5790 int constp,
5791 tree scope)
8d08fdba
MS
5792{
5793 tree decl;
f7da6097
MS
5794 RID_BIT_TYPE specbits;
5795
9e259dd1
MM
5796 my_friendly_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE,
5797 20020808);
5798
f7da6097 5799 specbits = *specbits_in;
8d08fdba 5800
9e259dd1
MM
5801 /* Compute the scope in which to place the variable. */
5802 if (!scope)
8d08fdba 5803 {
9e259dd1
MM
5804 /* An explicit "extern" specifier indicates a namespace-scope
5805 variable. */
5806 if (RIDBIT_SETP (RID_EXTERN, specbits))
5807 scope = current_namespace;
5808 else if (!at_function_scope_p ())
5809 {
5810 scope = current_scope ();
5811 if (!scope)
5812 scope = current_namespace;
5813 }
5814 }
5815
5816 if (scope
5817 && (/* If the variable is a namespace-scope variable declared in a
5818 template, we need DECL_LANG_SPECIFIC. */
5819 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
5820 /* Similarly for namespace-scope variables with language linkage
5821 other than C++. */
5822 || (TREE_CODE (scope) == NAMESPACE_DECL
5823 && current_lang_name != lang_name_cplusplus)
5824 /* Similarly for static data members. */
5825 || TYPE_P (scope)))
5826 decl = build_lang_decl (VAR_DECL, name, type);
8d08fdba 5827 else
9e259dd1 5828 decl = build_decl (VAR_DECL, name, type);
79c4d4b7 5829
9e259dd1
MM
5830 if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
5831 set_decl_namespace (decl, scope, 0);
5832 else
5833 DECL_CONTEXT (decl) = scope;
6060a796 5834
9e259dd1
MM
5835 if (name && scope && current_lang_name != lang_name_c)
5836 /* We can't mangle lazily here because we don't have any
5837 way to recover whether or not a variable was `extern
5838 "C"' later. */
5839 mangle_decl (decl);
2c73f9f5 5840
8d08fdba
MS
5841 if (RIDBIT_SETP (RID_EXTERN, specbits))
5842 {
5843 DECL_THIS_EXTERN (decl) = 1;
5844 DECL_EXTERNAL (decl) = !initialized;
5845 }
5846
5847 /* In class context, static means one per class,
5848 public access, and static storage. */
2b9dc906 5849 if (DECL_CLASS_SCOPE_P (decl))
8d08fdba
MS
5850 {
5851 TREE_PUBLIC (decl) = 1;
5852 TREE_STATIC (decl) = 1;
5b605f68 5853 DECL_EXTERNAL (decl) = 0;
8d08fdba
MS
5854 }
5855 /* At top level, either `static' or no s.c. makes a definition
5856 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 5857 else if (toplevel_bindings_p ())
8d08fdba 5858 {
a9aedbc2 5859 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
9fffd093 5860 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
5861 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
5862 }
5863 /* Not at top level, only `static' makes a static definition. */
5864 else
5865 {
5866 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
5867 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
5868 }
50a6dbd7 5869
7a1f3f5f
RH
5870 if (RIDBIT_SETP (RID_THREAD, specbits))
5871 {
5872 if (targetm.have_tls)
5873 DECL_THREAD_LOCAL (decl) = 1;
5874 else
5875 /* A mere warning is sure to result in improper semantics
5876 at runtime. Don't bother to allow this to compile. */
5877 error ("thread-local storage not supported for this target");
5878 }
5879
50a6dbd7
JM
5880 if (TREE_PUBLIC (decl))
5881 {
5882 /* [basic.link]: A name with no linkage (notably, the name of a class
5883 or enumeration declared in a local scope) shall not be used to
5884 declare an entity with linkage.
5885
5886 Only check this for public decls for now. */
5887 tree t = no_linkage_check (TREE_TYPE (decl));
5888 if (t)
5889 {
1951a1b6 5890 if (TYPE_ANONYMOUS_P (t))
50a6dbd7
JM
5891 /* Ignore for now; `enum { foo } e' is pretty common. */;
5892 else
33bd39a2 5893 pedwarn ("non-local variable `%#D' uses local type `%T'",
50a6dbd7
JM
5894 decl, t);
5895 }
5896 }
5897
8d08fdba
MS
5898 return decl;
5899}
5900
d8f8dca1
MM
5901/* Create and return a canonical pointer to member function type, for
5902 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8d08fdba
MS
5903
5904tree
11f6b451 5905build_ptrmemfunc_type (tree type)
8d08fdba 5906{
4977bab6 5907 tree field, fields;
8d08fdba 5908 tree t;
46cbda4a 5909 tree unqualified_variant = NULL_TREE;
8d08fdba 5910
d48ebde1
NS
5911 if (type == error_mark_node)
5912 return type;
d363e7bf 5913
8d08fdba
MS
5914 /* If a canonical type already exists for this type, use it. We use
5915 this method instead of type_hash_canon, because it only does a
5916 simple equality check on the list of field members. */
5917
5918 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
5919 return t;
5920
46cbda4a
MM
5921 /* Make sure that we always have the unqualified pointer-to-member
5922 type first. */
89d684bb 5923 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
68642fb6 5924 unqualified_variant
46cbda4a
MM
5925 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
5926
33848bb0 5927 t = make_aggr_type (RECORD_TYPE);
2c73f9f5 5928 /* Let the front-end know this is a pointer to member function... */
db5ae43f 5929 TYPE_PTRMEMFUNC_FLAG (t) = 1;
2c73f9f5 5930 /* ... and not really an aggregate. */
7ddedda4 5931 SET_IS_AGGR_TYPE (t, 0);
8d08fdba 5932
4977bab6
ZW
5933 field = build_decl (FIELD_DECL, pfn_identifier, type);
5934 fields = field;
5935
5936 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
5937 TREE_CHAIN (field) = fields;
5938 fields = field;
5939
5940 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8d08fdba 5941
8d08fdba
MS
5942 /* Zap out the name so that the back-end will give us the debugging
5943 information for this anonymous RECORD_TYPE. */
5944 TYPE_NAME (t) = NULL_TREE;
5945
46cbda4a
MM
5946 /* If this is not the unqualified form of this pointer-to-member
5947 type, set the TYPE_MAIN_VARIANT for this type to be the
5948 unqualified type. Since they are actually RECORD_TYPEs that are
5949 not variants of each other, we must do this manually. */
89d684bb 5950 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
46cbda4a 5951 {
89d684bb 5952 t = build_qualified_type (t, cp_type_quals (type));
46cbda4a
MM
5953 TYPE_MAIN_VARIANT (t) = unqualified_variant;
5954 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
5955 TYPE_NEXT_VARIANT (unqualified_variant) = t;
5956 }
5957
5958 /* Cache this pointer-to-member type so that we can find it again
5959 later. */
8d08fdba
MS
5960 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
5961
8d08fdba
MS
5962 return t;
5963}
5964
9e259dd1
MM
5965/* Create and return a pointer to data member type. */
5966
5967tree
5968build_ptrmem_type (tree class_type, tree member_type)
5969{
a5ac359a
MM
5970 if (TREE_CODE (member_type) == METHOD_TYPE)
5971 {
5972 tree arg_types;
5973
5974 arg_types = TYPE_ARG_TYPES (member_type);
5975 class_type = (cp_build_qualified_type
5976 (class_type,
5977 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
5978 member_type
43dc123f
MM
5979 = build_method_type_directly (class_type,
5980 TREE_TYPE (member_type),
5981 TREE_CHAIN (arg_types));
a5ac359a
MM
5982 return build_ptrmemfunc_type (build_pointer_type (member_type));
5983 }
5984 else
5985 {
5986 my_friendly_assert (TREE_CODE (member_type) != FUNCTION_TYPE,
5987 20030716);
5988 return build_offset_type (class_type, member_type);
5989 }
9e259dd1
MM
5990}
5991
b17e2870
JM
5992/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
5993 Check to see that the definition is valid. Issue appropriate error
5994 messages. Return 1 if the definition is particularly bad, or 0
5995 otherwise. */
5996
5997int
11f6b451 5998check_static_variable_definition (tree decl, tree type)
b17e2870
JM
5999{
6000 /* Motion 10 at San Diego: If a static const integral data member is
6001 initialized with an integral constant expression, the initializer
6002 may appear either in the declaration (within the class), or in
6003 the definition, but not both. If it appears in the class, the
6004 member is a member constant. The file-scope definition is always
6005 required. */
dcba9b0f 6006 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
b17e2870 6007 {
33bd39a2 6008 error ("invalid in-class initialization of static data member of non-integral type `%T'",
dcba9b0f 6009 type);
b17e2870
JM
6010 /* If we just return the declaration, crashes will sometimes
6011 occur. We therefore return void_type_node, as if this was a
6012 friend declaration, to cause callers to completely ignore
6013 this declaration. */
6014 return 1;
6015 }
6016 else if (!CP_TYPE_CONST_P (type))
33bd39a2 6017 error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
b17e2870
JM
6018 decl);
6019 else if (pedantic && !INTEGRAL_TYPE_P (type))
33bd39a2 6020 pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
b17e2870
JM
6021
6022 return 0;
6023}
6024
2848ad0f
MM
6025/* Given the SIZE (i.e., number of elements) in an array, compute an
6026 appropriate index type for the array. If non-NULL, NAME is the
6027 name of the thing being declared. */
6028
c95cd22e 6029tree
11f6b451 6030compute_array_index_type (tree name, tree size)
2848ad0f 6031{
d63b5e9f 6032 tree type = TREE_TYPE (size);
2848ad0f
MM
6033 tree itype;
6034
d63b5e9f
NS
6035 /* The array bound must be an integer type. */
6036 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
2848ad0f 6037 {
d63b5e9f
NS
6038 if (name)
6039 error ("size of array `%D' has non-integral type `%T'", name, type);
6040 else
6041 error ("size of array has non-integral type `%T'", type);
6042 size = integer_one_node;
6043 type = TREE_TYPE (size);
2848ad0f
MM
6044 }
6045
d63b5e9f
NS
6046 if (abi_version_at_least (2)
6047 /* We should only handle value dependent expressions specially. */
6048 ? value_dependent_expression_p (size)
6049 /* But for abi-1, we handled all instances in templates. This
6050 effects the manglings produced. */
6051 : processing_template_decl)
6052 return build_index_type (build_min (MINUS_EXPR, sizetype,
6053 size, integer_one_node));
6054
a1c65f9f 6055 /* The size might be the result of a cast. */
80f5bb34
MM
6056 STRIP_TYPE_NOPS (size);
6057
6058 /* It might be a const variable or enumeration constant. */
6059 size = decl_constant_value (size);
6060
2848ad0f 6061 /* Normally, the array-bound will be a constant. */
2bb5d995 6062 if (TREE_CODE (size) == INTEGER_CST)
2848ad0f
MM
6063 {
6064 /* Check to see if the array bound overflowed. Make that an
6065 error, no matter how generous we're being. */
6066 int old_flag_pedantic_errors = flag_pedantic_errors;
6067 int old_pedantic = pedantic;
6068 pedantic = flag_pedantic_errors = 1;
6069 constant_expression_warning (size);
6070 pedantic = old_pedantic;
6071 flag_pedantic_errors = old_flag_pedantic_errors;
6072
6073 /* An array must have a positive number of elements. */
6074 if (INT_CST_LT (size, integer_zero_node))
6075 {
d67cdbc3 6076 if (name)
33bd39a2 6077 error ("size of array `%D' is negative", name);
d67cdbc3 6078 else
33bd39a2 6079 error ("size of array is negative");
2848ad0f
MM
6080 size = integer_one_node;
6081 }
6082 /* Except that an extension we allow zero-sized arrays. We
68642fb6 6083 always allow them in system headers because glibc uses
2848ad0f
MM
6084 them. */
6085 else if (integer_zerop (size) && pedantic && !in_system_header)
d67cdbc3
JM
6086 {
6087 if (name)
33bd39a2 6088 pedwarn ("ISO C++ forbids zero-size array `%D'", name);
d67cdbc3 6089 else
33bd39a2 6090 pedwarn ("ISO C++ forbids zero-size array");
d67cdbc3 6091 }
2848ad0f 6092 }
2bb5d995
JM
6093 else if (TREE_CONSTANT (size))
6094 {
6095 /* `(int) &fn' is not a valid array bound. */
6096 if (name)
33bd39a2 6097 error ("size of array `%D' is not an integral constant-expression",
2bb5d995
JM
6098 name);
6099 else
33bd39a2 6100 error ("size of array is not an integral constant-expression");
2bb5d995 6101 }
d63b5e9f
NS
6102 else if (pedantic)
6103 {
6104 if (name)
6105 pedwarn ("ISO C++ forbids variable-size array `%D'", name);
6106 else
6107 pedwarn ("ISO C++ forbids variable-size array");
6108 }
2848ad0f 6109
d63b5e9f
NS
6110 if (processing_template_decl && !TREE_CONSTANT (size))
6111 /* A variable sized array. */
6112 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
6113 else
2848ad0f 6114 {
d63b5e9f
NS
6115 /* Compute the index of the largest element in the array. It is
6116 one less than the number of elements in the array. */
6117 itype
6118 = fold (cp_build_binary_op (MINUS_EXPR,
6119 cp_convert (ssizetype, size),
6120 cp_convert (ssizetype, integer_one_node)));
6121 if (!TREE_CONSTANT (itype))
f4f206f4 6122 /* A variable sized array. */
d63b5e9f
NS
6123 itype = variable_size (itype);
6124 /* Make sure that there was no overflow when creating to a signed
6125 index type. (For example, on a 32-bit machine, an array with
6126 size 2^32 - 1 is too big.) */
6127 else if (TREE_OVERFLOW (itype))
2848ad0f 6128 {
d63b5e9f
NS
6129 error ("overflow in array dimension");
6130 TREE_OVERFLOW (itype) = 0;
2848ad0f 6131 }
2848ad0f 6132 }
68642fb6 6133
2848ad0f
MM
6134 /* Create and return the appropriate index type. */
6135 return build_index_type (itype);
6136}
6137
a723baf1
MM
6138/* Returns the scope (if any) in which the entity declared by
6139 DECLARATOR will be located. If the entity was declared with an
6140 unqualified name, NULL_TREE is returned. */
6141
6142tree
11f6b451 6143get_scope_of_declarator (tree declarator)
a723baf1
MM
6144{
6145 if (!declarator)
6146 return NULL_TREE;
6147
6148 switch (TREE_CODE (declarator))
6149 {
6150 case CALL_EXPR:
6151 case ARRAY_REF:
6152 case INDIRECT_REF:
6153 case ADDR_EXPR:
6154 /* For any of these, the main declarator is the first operand. */
6155 return get_scope_of_declarator (TREE_OPERAND
6156 (declarator, 0));
6157
6158 case SCOPE_REF:
6159 /* For a pointer-to-member, continue descending. */
6160 if (TREE_CODE (TREE_OPERAND (declarator, 1))
6161 == INDIRECT_REF)
6162 return get_scope_of_declarator (TREE_OPERAND
6163 (declarator, 1));
6164 /* Otherwise, if the declarator-id is a SCOPE_REF, the scope in
6165 which the declaration occurs is the first operand. */
6166 return TREE_OPERAND (declarator, 0);
6167
6168 case TREE_LIST:
6169 /* Attributes to be applied. The declarator is TREE_VALUE. */
6170 return get_scope_of_declarator (TREE_VALUE (declarator));
6171
6172 default:
6173 /* Otherwise, we have a declarator-id which is not a qualified
6174 name; the entity will be declared in the current scope. */
6175 return NULL_TREE;
6176 }
6177}
6178
2848ad0f
MM
6179/* Returns an ARRAY_TYPE for an array with SIZE elements of the
6180 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
6181 with this type. */
6182
6183static tree
11f6b451 6184create_array_type_for_decl (tree name, tree type, tree size)
2848ad0f
MM
6185{
6186 tree itype = NULL_TREE;
6187 const char* error_msg;
6188
6189 /* If things have already gone awry, bail now. */
6190 if (type == error_mark_node || size == error_mark_node)
6191 return error_mark_node;
6192
6193 /* Assume that everything will go OK. */
6194 error_msg = NULL;
6195
6196 /* There are some types which cannot be array elements. */
6197 switch (TREE_CODE (type))
6198 {
6199 case VOID_TYPE:
6200 error_msg = "array of void";
6201 break;
6202
6203 case FUNCTION_TYPE:
6204 error_msg = "array of functions";
6205 break;
6206
6207 case REFERENCE_TYPE:
6208 error_msg = "array of references";
6209 break;
6210
2848ad0f
MM
6211 case METHOD_TYPE:
6212 error_msg = "array of function members";
6213 break;
6214
6215 default:
6216 break;
6217 }
6218
6219 /* If something went wrong, issue an error-message and return. */
6220 if (error_msg)
6221 {
6222 if (name)
33bd39a2 6223 error ("declaration of `%D' as %s", name, error_msg);
2848ad0f 6224 else
33bd39a2 6225 error ("creating %s", error_msg);
2848ad0f
MM
6226
6227 return error_mark_node;
6228 }
6229
6230 /* [dcl.array]
68642fb6 6231
2848ad0f
MM
6232 The constant expressions that specify the bounds of the arrays
6233 can be omitted only for the first member of the sequence. */
6234 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
6235 {
b3faacfd 6236 if (name)
33bd39a2 6237 error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
b3faacfd
KL
6238 name);
6239 else
33bd39a2 6240 error ("multidimensional array must have bounds for all dimensions except the first");
2848ad0f
MM
6241
6242 return error_mark_node;
6243 }
6244
6245 /* Figure out the index type for the array. */
6246 if (size)
6247 itype = compute_array_index_type (name, size);
6248
6249 return build_cplus_array_type (type, itype);
6250}
6251
3dbc07b6
MM
6252/* Check that it's OK to declare a function with the indicated TYPE.
6253 SFK indicates the kind of special function (if any) that this
1f84ec23 6254 function is. OPTYPE is the type given in a conversion operator
3dbc07b6
MM
6255 declaration. Returns the actual return type of the function; that
6256 may be different than TYPE if an error occurs, or for certain
6257 special functions. */
6258
6259static tree
11f6b451
NN
6260check_special_function_return_type (special_function_kind sfk,
6261 tree type,
6262 tree optype)
3dbc07b6
MM
6263{
6264 switch (sfk)
6265 {
6266 case sfk_constructor:
6267 if (type)
33bd39a2 6268 error ("return type specification for constructor invalid");
5362b086 6269
1f84ec23 6270 type = void_type_node;
3dbc07b6
MM
6271 break;
6272
6273 case sfk_destructor:
6274 if (type)
33bd39a2 6275 error ("return type specification for destructor invalid");
3dbc07b6
MM
6276 type = void_type_node;
6277 break;
6278
6279 case sfk_conversion:
6280 if (type && !same_type_p (type, optype))
33bd39a2 6281 error ("operator `%T' declared to return `%T'", optype, type);
3dbc07b6 6282 else if (type)
33bd39a2 6283 pedwarn ("return type specified for `operator %T'", optype);
3dbc07b6
MM
6284 type = optype;
6285 break;
6286
6287 default:
a98facb0 6288 abort ();
3dbc07b6
MM
6289 break;
6290 }
6291
6292 return type;
6293}
6294
a723baf1
MM
6295/* Given declspecs and a declarator (abstract or otherwise), determine
6296 the name and type of the object declared and construct a DECL node
6297 for it.
8d08fdba
MS
6298
6299 DECLSPECS is a chain of tree_list nodes whose value fields
6300 are the storage classes and type specifiers.
6301
6302 DECL_CONTEXT says which syntactic context this declaration is in:
6303 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6304 FUNCDEF for a function definition. Like NORMAL but a few different
6305 error messages in each case. Return value may be zero meaning
6306 this definition is too screwy to try to parse.
6307 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
6308 handle member functions (which have FIELD context).
6309 Return value may be zero meaning this definition is too screwy to
6310 try to parse.
6311 PARM for a parameter declaration (either within a function prototype
6312 or before a function body). Make a PARM_DECL, or return void_type_node.
db5ae43f 6313 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
6314 TYPENAME if for a typename (in a cast or sizeof).
6315 Don't make a DECL node; just return the ..._TYPE node.
6316 FIELD for a struct or union field; make a FIELD_DECL.
6317 BITFIELD for a field with specified width.
6318 INITIALIZED is 1 if the decl has an initializer.
6319
91d231cb
JM
6320 ATTRLIST is a pointer to the list of attributes, which may be NULL
6321 if there are none; *ATTRLIST may be modified if attributes from inside
6322 the declarator should be applied to the declaration.
b17e2870 6323
a723baf1
MM
6324 When this function is called, scoping variables (such as
6325 CURRENT_CLASS_TYPE) should reflect the scope in which the
6326 declaration occurs, not the scope in which the new declaration will
6327 be placed. For example, on:
8d08fdba 6328
a723baf1 6329 void S::f() { ... }
8d08fdba 6330
a723baf1
MM
6331 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6332 should not be `S'. */
8d08fdba 6333
8d08fdba 6334tree
11f6b451
NN
6335grokdeclarator (tree declarator,
6336 tree declspecs,
6337 enum decl_context decl_context,
6338 int initialized,
6339 tree* attrlist)
8d08fdba
MS
6340{
6341 RID_BIT_TYPE specbits;
6342 int nclasses = 0;
6343 tree spec;
6344 tree type = NULL_TREE;
6345 int longlong = 0;
91063b51 6346 int type_quals;
db5ae43f 6347 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
6348 int explicit_int = 0;
6349 int explicit_char = 0;
37c46b43 6350 int defaulted_int = 0;
270d8c65 6351 int extern_langp = 0;
d5614afb 6352 tree dependant_name = NULL_TREE;
270d8c65 6353
8d08fdba 6354 tree typedef_decl = NULL_TREE;
9c0758dd 6355 const char *name;
8d08fdba
MS
6356 tree typedef_type = NULL_TREE;
6357 int funcdef_flag = 0;
6358 enum tree_code innermost_code = ERROR_MARK;
6359 int bitfield = 0;
6125f3be
DE
6360#if 0
6361 /* See the code below that used this. */
91d231cb 6362 tree decl_attr = NULL_TREE;
6125f3be 6363#endif
8d08fdba
MS
6364
6365 /* Keep track of what sort of function is being processed
6366 so that we can warn about default return values, or explicit
6367 return values which do not match prescribed defaults. */
3dbc07b6 6368 special_function_kind sfk = sfk_none;
8d08fdba
MS
6369
6370 tree dname = NULL_TREE;
6371 tree ctype = current_class_type;
6372 tree ctor_return_type = NULL_TREE;
6373 enum overload_flags flags = NO_SPECIAL;
8d08fdba 6374 tree quals = NULL_TREE;
c11b6f21 6375 tree raises = NULL_TREE;
386b8a85 6376 int template_count = 0;
2c73f9f5 6377 tree in_namespace = NULL_TREE;
91d231cb 6378 tree returned_attrs = NULL_TREE;
a723baf1 6379 tree scope = NULL_TREE;
8d08fdba
MS
6380
6381 RIDBIT_RESET_ALL (specbits);
6382 if (decl_context == FUNCDEF)
6383 funcdef_flag = 1, decl_context = NORMAL;
6384 else if (decl_context == MEMFUNCDEF)
6385 funcdef_flag = -1, decl_context = FIELD;
6386 else if (decl_context == BITFIELD)
6387 bitfield = 1, decl_context = FIELD;
6388
8d08fdba
MS
6389 /* Look inside a declarator for the name being declared
6390 and get it as a string, for an error message. */
6391 {
be99da77 6392 tree *next = &declarator;
926ce8bd 6393 tree decl;
8d08fdba
MS
6394 name = NULL;
6395
be99da77
MS
6396 while (next && *next)
6397 {
6398 decl = *next;
6399 switch (TREE_CODE (decl))
8d08fdba 6400 {
52fbc847
JM
6401 case TREE_LIST:
6402 /* For attributes. */
6403 next = &TREE_VALUE (decl);
6404 break;
6405
be99da77
MS
6406 case COND_EXPR:
6407 ctype = NULL_TREE;
6408 next = &TREE_OPERAND (decl, 0);
6409 break;
8d08fdba 6410
2c73f9f5 6411 case BIT_NOT_EXPR: /* For C++ destructors! */
8d08fdba 6412 {
be99da77
MS
6413 tree name = TREE_OPERAND (decl, 0);
6414 tree rename = NULL_TREE;
6415
6416 my_friendly_assert (flags == NO_SPECIAL, 152);
6417 flags = DTOR_FLAG;
3dbc07b6 6418 sfk = sfk_destructor;
a723baf1 6419 if (TYPE_P (name))
5566b478 6420 TREE_OPERAND (decl, 0) = name = constructor_name (name);
be99da77
MS
6421 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
6422 if (ctype == NULL_TREE)
6423 {
6424 if (current_class_type == NULL_TREE)
6425 {
8251199e 6426 error ("destructors must be member functions");
be99da77
MS
6427 flags = NO_SPECIAL;
6428 }
6429 else
6430 {
a723baf1 6431 tree t = constructor_name (current_class_type);
be99da77
MS
6432 if (t != name)
6433 rename = t;
6434 }
6435 }
8d08fdba 6436 else
be99da77
MS
6437 {
6438 tree t = constructor_name (ctype);
6439 if (t != name)
6440 rename = t;
6441 }
51c184be 6442
be99da77 6443 if (rename)
39211cd5 6444 {
33bd39a2 6445 error ("destructor `%T' must match class name `%T'",
5566b478 6446 name, rename);
be99da77 6447 TREE_OPERAND (decl, 0) = rename;
39211cd5 6448 }
be99da77 6449 next = &name;
51c184be 6450 }
be99da77 6451 break;
8d08fdba 6452
be99da77 6453 case ADDR_EXPR: /* C++ reference declaration */
a1c65f9f 6454 /* Fall through. */
be99da77
MS
6455 case ARRAY_REF:
6456 case INDIRECT_REF:
6457 ctype = NULL_TREE;
6458 innermost_code = TREE_CODE (decl);
6459 next = &TREE_OPERAND (decl, 0);
6460 break;
8d08fdba 6461
be99da77 6462 case CALL_EXPR:
be99da77
MS
6463 innermost_code = TREE_CODE (decl);
6464 if (decl_context == FIELD && ctype == NULL_TREE)
6465 ctype = current_class_type;
45537677 6466 if (ctype
c11b6f21 6467 && TREE_OPERAND (decl, 0)
45537677 6468 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
8ba658ee
MM
6469 && constructor_name_p (DECL_NAME (TREE_OPERAND (decl, 0)),
6470 ctype)))
be99da77
MS
6471 TREE_OPERAND (decl, 0) = constructor_name (ctype);
6472 next = &TREE_OPERAND (decl, 0);
6473 decl = *next;
6474 if (ctype != NULL_TREE
6475 && decl != NULL_TREE && flags != DTOR_FLAG
a723baf1 6476 && constructor_name_p (decl, ctype))
8d08fdba 6477 {
3dbc07b6 6478 sfk = sfk_constructor;
be99da77 6479 ctor_return_type = ctype;
8d08fdba 6480 }
be99da77
MS
6481 ctype = NULL_TREE;
6482 break;
68642fb6 6483
386b8a85
JM
6484 case TEMPLATE_ID_EXPR:
6485 {
6486 tree fns = TREE_OPERAND (decl, 0);
6487
8f032717
MM
6488 dname = fns;
6489 if (TREE_CODE (dname) == COMPONENT_REF)
6490 dname = TREE_OPERAND (dname, 1);
6491 if (TREE_CODE (dname) != IDENTIFIER_NODE)
6492 {
6493 my_friendly_assert (is_overloaded_fn (dname),
6494 19990331);
6495 dname = DECL_NAME (get_first_fn (dname));
6496 }
386b8a85 6497 }
a1c65f9f 6498 /* Fall through. */
be99da77
MS
6499
6500 case IDENTIFIER_NODE:
386b8a85
JM
6501 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6502 dname = decl;
6503
be99da77
MS
6504 next = 0;
6505
0e5921e8 6506 if (C_IS_RESERVED_WORD (dname))
8d08fdba 6507 {
33bd39a2 6508 error ("declarator-id missing; using reserved word `%D'",
be99da77
MS
6509 dname);
6510 name = IDENTIFIER_POINTER (dname);
8d08fdba 6511 }
596ea4e5 6512 else if (!IDENTIFIER_TYPENAME_P (dname))
be99da77 6513 name = IDENTIFIER_POINTER (dname);
8d08fdba
MS
6514 else
6515 {
596ea4e5
AS
6516 my_friendly_assert (flags == NO_SPECIAL, 154);
6517 flags = TYPENAME_FLAG;
6518 ctor_return_type = TREE_TYPE (dname);
6519 sfk = sfk_conversion;
c003e212 6520 if (is_typename_at_global_scope (dname))
596ea4e5
AS
6521 name = IDENTIFIER_POINTER (dname);
6522 else
6523 name = "<invalid operator>";
8d08fdba 6524 }
be99da77 6525 break;
8d08fdba 6526
be99da77
MS
6527 /* C++ extension */
6528 case SCOPE_REF:
6529 {
6530 /* Perform error checking, and decide on a ctype. */
6531 tree cname = TREE_OPERAND (decl, 0);
6532 if (cname == NULL_TREE)
6533 ctype = NULL_TREE;
2c73f9f5
ML
6534 else if (TREE_CODE (cname) == NAMESPACE_DECL)
6535 {
6536 ctype = NULL_TREE;
6537 in_namespace = TREE_OPERAND (decl, 0);
2c73f9f5 6538 }
be99da77 6539 else if (! is_aggr_type (cname, 1))
a723baf1 6540 ctype = NULL_TREE;
be99da77
MS
6541 /* Must test TREE_OPERAND (decl, 1), in case user gives
6542 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
6543 else if (TREE_OPERAND (decl, 1)
6544 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
6545 ctype = cname;
73b0fce8 6546 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
a1281f45 6547 || TREE_CODE (cname) == BOUND_TEMPLATE_TEMPLATE_PARM)
5566b478 6548 {
d5614afb
NS
6549 /* This might be declaring a member of a template
6550 parm to be a friend. */
6551 ctype = cname;
6552 dependant_name = TREE_OPERAND (decl, 1);
5566b478 6553 }
be99da77
MS
6554 else if (ctype == NULL_TREE)
6555 ctype = cname;
6556 else if (TREE_COMPLEXITY (decl) == current_class_depth)
a723baf1 6557 ;
be99da77
MS
6558 else
6559 {
6560 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
6561 {
33bd39a2 6562 error ("type `%T' is not derived from type `%T'",
be99da77 6563 cname, ctype);
a723baf1 6564 ctype = NULL_TREE;
be99da77
MS
6565 }
6566 else
6567 ctype = cname;
6568 }
6569
a723baf1
MM
6570 /* It is valid to write:
6571
6572 class C { void f(); };
6573 typedef C D;
6574 void D::f();
6575
6576 The standard is not clear about whether `typedef const C D' is
6577 legal; as of 2002-09-15 the committee is considering
6578 that question. EDG 3.0 allows that syntax.
6579 Therefore, we do as well. */
6580 if (ctype)
6581 ctype = TYPE_MAIN_VARIANT (ctype);
6582 /* Update the declarator so that when we process it
6583 again the correct type is present. */
6584 TREE_OPERAND (decl, 0) = ctype;
6585
c91a56d2 6586 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
8ba658ee
MM
6587 && constructor_name_p (DECL_NAME (TREE_OPERAND (decl, 1)),
6588 ctype))
be99da77
MS
6589 TREE_OPERAND (decl, 1) = constructor_name (ctype);
6590 next = &TREE_OPERAND (decl, 1);
6591 decl = *next;
6592 if (ctype)
6593 {
633221db
NS
6594 tree name = decl;
6595
6596 if (TREE_CODE (name) == BIT_NOT_EXPR)
6597 name = TREE_OPERAND (name, 0);
6598
6599 if (!constructor_name_p (decl, ctype))
6600 ;
6601 else if (decl == name)
be99da77 6602 {
3dbc07b6 6603 sfk = sfk_constructor;
be99da77
MS
6604 ctor_return_type = ctype;
6605 }
633221db 6606 else
be99da77 6607 {
3dbc07b6 6608 sfk = sfk_destructor;
be99da77
MS
6609 ctor_return_type = ctype;
6610 flags = DTOR_FLAG;
6611 TREE_OPERAND (decl, 0) = constructor_name (ctype);
6612 next = &TREE_OPERAND (decl, 0);
6613 }
6614 }
6615 }
6616 break;
6617
6618 case ERROR_MARK:
6619 next = 0;
6620 break;
6621
45537677
MS
6622 case TYPE_DECL:
6623 /* Parse error puts this typespec where
6624 a declarator should go. */
33bd39a2 6625 error ("`%T' specified as declarator-id", DECL_NAME (decl));
45537677 6626 if (TREE_TYPE (decl) == current_class_type)
33bd39a2 6627 error (" perhaps you want `%T' for a constructor",
45537677
MS
6628 current_class_name);
6629 dname = DECL_NAME (decl);
6630 name = IDENTIFIER_POINTER (dname);
6631
e92cc029 6632 /* Avoid giving two errors for this. */
45537677
MS
6633 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
6634
58010b57 6635 declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
45537677
MS
6636 *next = dname;
6637 next = 0;
6638 break;
6639
50ad9642
MM
6640 case BASELINK:
6641 next = &BASELINK_FUNCTIONS (decl);
6642 break;
2ee366b5
GDR
6643
6644 case TEMPLATE_DECL:
6645 /* Sometimes, we see a template-name used as part of a
6646 decl-specifier like in
6647 std::allocator alloc;
6648 Handle that gracefully. */
6649 error ("invalid use of template-name '%E' in a declarator", decl);
6650 return error_mark_node;
6651 break;
50ad9642 6652
be99da77 6653 default:
dd29188b 6654 my_friendly_assert (0, 20020917);
8d08fdba 6655 }
be99da77 6656 }
8d08fdba
MS
6657 }
6658
6659 /* A function definition's declarator must have the form of
6660 a function declarator. */
6661
6662 if (funcdef_flag && innermost_code != CALL_EXPR)
6663 return 0;
6664
e1cd6e56
MS
6665 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
6666 && innermost_code != CALL_EXPR
6667 && ! (ctype && declspecs == NULL_TREE))
6668 {
33bd39a2 6669 error ("declaration of `%D' as non-function", dname);
e1cd6e56
MS
6670 return void_type_node;
6671 }
6672
8d08fdba
MS
6673 /* Anything declared one level down from the top level
6674 must be one of the parameters of a function
6675 (because the body is at least two levels down). */
6676
6677 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
6678 by not allowing C++ class definitions to specify their parameters
6679 with xdecls (must be spec.d in the parmlist).
6680
6681 Since we now wait to push a class scope until we are sure that
6682 we are in a legitimate method context, we must set oldcname
a9aedbc2
MS
6683 explicitly (since current_class_name is not yet alive).
6684
6685 We also want to avoid calling this a PARM if it is in a namespace. */
8d08fdba 6686
9188c363 6687 if (decl_context == NORMAL && !toplevel_bindings_p ())
a9aedbc2 6688 {
e2500fed 6689 struct cp_binding_level *b = current_binding_level;
ff955512 6690 current_binding_level = b->level_chain;
a9aedbc2
MS
6691 if (current_binding_level != 0 && toplevel_bindings_p ())
6692 decl_context = PARM;
ff955512 6693 current_binding_level = b;
a9aedbc2 6694 }
8d08fdba 6695
34fc957d
NS
6696 if (name == NULL)
6697 name = decl_context == PARM ? "parameter" : "type name";
68642fb6 6698
8d08fdba
MS
6699 /* Look through the decl specs and record which ones appear.
6700 Some typespecs are defined as built-in typenames.
6701 Others, the ones that are modifiers of other types,
6702 are represented by bits in SPECBITS: set the bits for
6703 the modifiers that appear. Storage class keywords are also in SPECBITS.
6704
6705 If there is a typedef name or a type, store the type in TYPE.
6706 This includes builtin typedefs such as `int'.
6707
6708 Set EXPLICIT_INT if the type is `int' or `char' and did not
6709 come from a user typedef.
6710
6711 Set LONGLONG if `long' is mentioned twice.
6712
6713 For C++, constructors and destructors have their own fast treatment. */
6714
6715 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
6716 {
926ce8bd
KH
6717 int i;
6718 tree id;
8d08fdba
MS
6719
6720 /* Certain parse errors slip through. For example,
6721 `int class;' is not caught by the parser. Try
6722 weakly to recover here. */
6723 if (TREE_CODE (spec) != TREE_LIST)
6724 return 0;
6725
6726 id = TREE_VALUE (spec);
6727
e23bd218
IR
6728 /* If the entire declaration is itself tagged as deprecated then
6729 suppress reports of deprecated items. */
6730 if (!adding_implicit_members && id && TREE_DEPRECATED (id))
6731 {
6732 if (deprecated_state != DEPRECATED_SUPPRESS)
6733 warn_deprecated_use (id);
6734 }
6735
8d08fdba
MS
6736 if (TREE_CODE (id) == IDENTIFIER_NODE)
6737 {
a3203465
MS
6738 if (id == ridpointers[(int) RID_INT]
6739 || id == ridpointers[(int) RID_CHAR]
6740 || id == ridpointers[(int) RID_BOOL]
6741 || id == ridpointers[(int) RID_WCHAR])
8d08fdba
MS
6742 {
6743 if (type)
8ccc31eb
MS
6744 {
6745 if (id == ridpointers[(int) RID_BOOL])
8251199e 6746 error ("`bool' is now a keyword");
8ccc31eb 6747 else
33bd39a2 6748 error ("extraneous `%T' ignored", id);
8ccc31eb 6749 }
8d08fdba
MS
6750 else
6751 {
a3203465
MS
6752 if (id == ridpointers[(int) RID_INT])
6753 explicit_int = 1;
6754 else if (id == ridpointers[(int) RID_CHAR])
6755 explicit_char = 1;
8d08fdba
MS
6756 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
6757 }
6758 goto found;
6759 }
e92cc029 6760 /* C++ aggregate types. */
8d08fdba
MS
6761 if (IDENTIFIER_HAS_TYPE_VALUE (id))
6762 {
6763 if (type)
33bd39a2 6764 error ("multiple declarations `%T' and `%T'", type, id);
8d08fdba
MS
6765 else
6766 type = IDENTIFIER_TYPE_VALUE (id);
6767 goto found;
6768 }
6769
f376e137 6770 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
8d08fdba
MS
6771 {
6772 if (ridpointers[i] == id)
6773 {
6774 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
6775 {
795add94 6776 if (pedantic && ! in_system_header && warn_long_long)
cb9a3ff8 6777 pedwarn ("ISO C++ does not support `long long'");
9a3b49ac 6778 if (longlong)
8251199e 6779 error ("`long long long' is too long for GCC");
8d08fdba
MS
6780 else
6781 longlong = 1;
6782 }
6783 else if (RIDBIT_SETP (i, specbits))
8251199e 6784 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
7a1f3f5f 6785
946d5e45
MM
6786 /* Diagnose "__thread extern" or "__thread static". */
6787 if (RIDBIT_SETP (RID_THREAD, specbits))
7a1f3f5f 6788 {
946d5e45 6789 if (i == (int)RID_EXTERN)
7a1f3f5f 6790 error ("`__thread' before `extern'");
946d5e45 6791 else if (i == (int)RID_STATIC)
7a1f3f5f
RH
6792 error ("`__thread' before `static'");
6793 }
6794
270d8c65
NS
6795 if (i == (int)RID_EXTERN
6796 && TREE_PURPOSE (spec) == error_mark_node)
6797 /* This extern was part of a language linkage. */
6798 extern_langp = 1;
7a1f3f5f 6799
8d08fdba
MS
6800 RIDBIT_SET (i, specbits);
6801 goto found;
6802 }
6803 }
6804 }
1899c3a4 6805 else if (TREE_CODE (id) == TYPE_DECL)
45537677
MS
6806 {
6807 if (type)
33bd39a2 6808 error ("multiple declarations `%T' and `%T'", type,
45537677
MS
6809 TREE_TYPE (id));
6810 else
5566b478
MS
6811 {
6812 type = TREE_TYPE (id);
6813 TREE_VALUE (spec) = type;
8d6e459d 6814 typedef_decl = id;
5566b478 6815 }
45537677
MS
6816 goto found;
6817 }
8d08fdba 6818 if (type)
8251199e 6819 error ("two or more data types in declaration of `%s'", name);
8d08fdba
MS
6820 else if (TREE_CODE (id) == IDENTIFIER_NODE)
6821 {
926ce8bd 6822 tree t = lookup_name (id, 1);
8d08fdba 6823 if (!t || TREE_CODE (t) != TYPE_DECL)
8251199e 6824 error ("`%s' fails to be a typedef or built in type",
8d08fdba
MS
6825 IDENTIFIER_POINTER (id));
6826 else
6827 {
6828 type = TREE_TYPE (t);
6829 typedef_decl = t;
6830 }
6831 }
bd6dd845 6832 else if (id != error_mark_node)
8d08fdba
MS
6833 /* Can't change CLASS nodes into RECORD nodes here! */
6834 type = id;
6835
6836 found: ;
6837 }
6838
8d6e459d
NS
6839#if 0
6840 /* See the code below that used this. */
6841 if (typedef_decl)
6842 decl_attr = DECL_ATTRIBUTES (typedef_decl);
6843#endif
8d08fdba
MS
6844 typedef_type = type;
6845
37c46b43 6846 /* No type at all: default to `int', and set DEFAULTED_INT
6eabb241 6847 because it was not a user-defined typedef. */
8d08fdba 6848
a3203465
MS
6849 if (type == NULL_TREE
6850 && (RIDBIT_SETP (RID_SIGNED, specbits)
6851 || RIDBIT_SETP (RID_UNSIGNED, specbits)
6852 || RIDBIT_SETP (RID_LONG, specbits)
6853 || RIDBIT_SETP (RID_SHORT, specbits)))
6854 {
6855 /* These imply 'int'. */
6856 type = integer_type_node;
37c46b43 6857 defaulted_int = 1;
a3203465
MS
6858 }
6859
3dbc07b6
MM
6860 if (sfk != sfk_none)
6861 type = check_special_function_return_type (sfk, type,
3dbc07b6
MM
6862 ctor_return_type);
6863 else if (type == NULL_TREE)
8d08fdba 6864 {
3dbc07b6
MM
6865 int is_main;
6866
8d08fdba 6867 explicit_int = -1;
3dbc07b6 6868
0fd0b7ee
JM
6869 /* We handle `main' specially here, because 'main () { }' is so
6870 common. With no options, it is allowed. With -Wreturn-type,
6871 it is a warning. It is only an error with -pedantic-errors. */
3dbc07b6 6872 is_main = (funcdef_flag
7437519c 6873 && dname && MAIN_NAME_P (dname)
3dbc07b6
MM
6874 && ctype == NULL_TREE
6875 && in_namespace == NULL_TREE
6876 && current_namespace == global_namespace);
6877
6878 if (in_system_header || flag_ms_extensions)
6879 /* Allow it, sigh. */;
6880 else if (pedantic || ! is_main)
33bd39a2 6881 pedwarn ("ISO C++ forbids declaration of `%s' with no type",
3dbc07b6
MM
6882 name);
6883 else if (warn_return_type)
33bd39a2 6884 warning ("ISO C++ forbids declaration of `%s' with no type",
3dbc07b6 6885 name);
41eff652 6886
3dbc07b6 6887 type = integer_type_node;
51c184be 6888 }
ad1a6d45 6889
8d08fdba
MS
6890 ctype = NULL_TREE;
6891
6892 /* Now process the modifiers that were specified
6893 and check for invalid combinations. */
6894
6895 /* Long double is a special combination. */
6896
6897 if (RIDBIT_SETP (RID_LONG, specbits)
6898 && TYPE_MAIN_VARIANT (type) == double_type_node)
6899 {
6900 RIDBIT_RESET (RID_LONG, specbits);
68642fb6 6901 type = build_qualified_type (long_double_type_node,
89d684bb 6902 cp_type_quals (type));
8d08fdba
MS
6903 }
6904
6905 /* Check all other uses of type modifiers. */
6906
6907 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
6908 || RIDBIT_SETP (RID_SIGNED, specbits)
6909 || RIDBIT_SETP (RID_LONG, specbits)
6910 || RIDBIT_SETP (RID_SHORT, specbits))
6911 {
6912 int ok = 0;
6913
6914 if (TREE_CODE (type) == REAL_TYPE)
8251199e 6915 error ("short, signed or unsigned invalid for `%s'", name);
b7484fbe 6916 else if (TREE_CODE (type) != INTEGER_TYPE)
8251199e 6917 error ("long, short, signed or unsigned invalid for `%s'", name);
8d08fdba
MS
6918 else if (RIDBIT_SETP (RID_LONG, specbits)
6919 && RIDBIT_SETP (RID_SHORT, specbits))
8251199e 6920 error ("long and short specified together for `%s'", name);
8d08fdba
MS
6921 else if ((RIDBIT_SETP (RID_LONG, specbits)
6922 || RIDBIT_SETP (RID_SHORT, specbits))
6923 && explicit_char)
8251199e 6924 error ("long or short specified with char for `%s'", name);
8d08fdba
MS
6925 else if ((RIDBIT_SETP (RID_LONG, specbits)
6926 || RIDBIT_SETP (RID_SHORT, specbits))
6927 && TREE_CODE (type) == REAL_TYPE)
8251199e 6928 error ("long or short specified with floating type for `%s'", name);
8d08fdba
MS
6929 else if (RIDBIT_SETP (RID_SIGNED, specbits)
6930 && RIDBIT_SETP (RID_UNSIGNED, specbits))
8251199e 6931 error ("signed and unsigned given together for `%s'", name);
8d08fdba
MS
6932 else
6933 {
6934 ok = 1;
37c46b43 6935 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8d08fdba 6936 {
8251199e 6937 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
8d08fdba
MS
6938 name);
6939 if (flag_pedantic_errors)
6940 ok = 0;
6941 }
6942 }
6943
6944 /* Discard the type modifiers if they are invalid. */
6945 if (! ok)
6946 {
6947 RIDBIT_RESET (RID_UNSIGNED, specbits);
6948 RIDBIT_RESET (RID_SIGNED, specbits);
6949 RIDBIT_RESET (RID_LONG, specbits);
6950 RIDBIT_RESET (RID_SHORT, specbits);
6951 longlong = 0;
6952 }
6953 }
6954
37c46b43
MS
6955 if (RIDBIT_SETP (RID_COMPLEX, specbits)
6956 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
6957 {
8251199e 6958 error ("complex invalid for `%s'", name);
37c46b43
MS
6959 RIDBIT_RESET (RID_COMPLEX, specbits);
6960 }
6961
8d08fdba
MS
6962 /* Decide whether an integer type is signed or not.
6963 Optionally treat bitfields as signed by default. */
6964 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
b89c5a7b
MM
6965 /* [class.bit]
6966
6967 It is implementation-defined whether a plain (neither
6968 explicitly signed or unsigned) char, short, int, or long
6969 bit-field is signed or unsigned.
68642fb6 6970
b89c5a7b
MM
6971 Naturally, we extend this to long long as well. Note that
6972 this does not include wchar_t. */
6973 || (bitfield && !flag_signed_bitfields
6974 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
6975 /* A typedef for plain `int' without `signed' can be
6976 controlled just like plain `int', but a typedef for
6977 `signed int' cannot be so controlled. */
68642fb6 6978 && !(typedef_decl
29bbeb1c 6979 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
b89c5a7b
MM
6980 && (TREE_CODE (type) == INTEGER_TYPE
6981 || TREE_CODE (type) == CHAR_TYPE)
29bbeb1c 6982 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8d08fdba
MS
6983 {
6984 if (longlong)
6985 type = long_long_unsigned_type_node;
6986 else if (RIDBIT_SETP (RID_LONG, specbits))
6987 type = long_unsigned_type_node;
6988 else if (RIDBIT_SETP (RID_SHORT, specbits))
6989 type = short_unsigned_type_node;
6990 else if (type == char_type_node)
6991 type = unsigned_char_type_node;
6992 else if (typedef_decl)
ceef8ce4 6993 type = c_common_unsigned_type (type);
8d08fdba
MS
6994 else
6995 type = unsigned_type_node;
6996 }
6997 else if (RIDBIT_SETP (RID_SIGNED, specbits)
6998 && type == char_type_node)
6999 type = signed_char_type_node;
7000 else if (longlong)
7001 type = long_long_integer_type_node;
7002 else if (RIDBIT_SETP (RID_LONG, specbits))
7003 type = long_integer_type_node;
7004 else if (RIDBIT_SETP (RID_SHORT, specbits))
7005 type = short_integer_type_node;
7006
37c46b43
MS
7007 if (RIDBIT_SETP (RID_COMPLEX, specbits))
7008 {
7009 /* If we just have "complex", it is equivalent to
7010 "complex double", but if any modifiers at all are specified it is
7011 the complex form of TYPE. E.g, "complex short" is
7012 "complex short int". */
7013
7014 if (defaulted_int && ! longlong
7015 && ! (RIDBIT_SETP (RID_LONG, specbits)
7016 || RIDBIT_SETP (RID_SHORT, specbits)
7017 || RIDBIT_SETP (RID_SIGNED, specbits)
7018 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
7019 type = complex_double_type_node;
7020 else if (type == integer_type_node)
7021 type = complex_integer_type_node;
7022 else if (type == float_type_node)
7023 type = complex_float_type_node;
7024 else if (type == double_type_node)
7025 type = complex_double_type_node;
7026 else if (type == long_double_type_node)
7027 type = complex_long_double_type_node;
7028 else
7029 type = build_complex_type (type);
7030 }
7031
4f2b0fb2
NS
7032 type_quals = TYPE_UNQUALIFIED;
7033 if (RIDBIT_SETP (RID_CONST, specbits))
7034 type_quals |= TYPE_QUAL_CONST;
7035 if (RIDBIT_SETP (RID_VOLATILE, specbits))
7036 type_quals |= TYPE_QUAL_VOLATILE;
7037 if (RIDBIT_SETP (RID_RESTRICT, specbits))
7038 type_quals |= TYPE_QUAL_RESTRICT;
7039 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
33bd39a2 7040 error ("qualifiers are not allowed on declaration of `operator %T'",
3ac3d9ea
MM
7041 ctor_return_type);
7042
4f2b0fb2
NS
7043 type_quals |= cp_type_quals (type);
7044 type = cp_build_qualified_type_real
7045 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
7046 ? tf_ignore_bad_quals : 0) | tf_error | tf_warning));
7047 /* We might have ignored or rejected some of the qualifiers. */
7048 type_quals = cp_type_quals (type);
7049
8d08fdba
MS
7050 staticp = 0;
7051 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
8d08fdba 7052 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
db5ae43f
MS
7053 RIDBIT_RESET (RID_VIRTUAL, specbits);
7054 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
7055 RIDBIT_RESET (RID_EXPLICIT, specbits);
8d08fdba 7056
8d08fdba
MS
7057 if (RIDBIT_SETP (RID_STATIC, specbits))
7058 staticp = 1 + (decl_context == FIELD);
7059
7060 if (virtualp && staticp == 2)
7061 {
33bd39a2 7062 error ("member `%D' cannot be declared both virtual and static",
8d08fdba
MS
7063 dname);
7064 staticp = 0;
7065 }
7066 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
8d08fdba
MS
7067 RIDBIT_RESET (RID_FRIEND, specbits);
7068
d5614afb
NS
7069 if (dependant_name && !friendp)
7070 {
7071 error ("`%T::%D' is not a valid declarator", ctype, dependant_name);
7072 return void_type_node;
7073 }
7074
8d08fdba
MS
7075 /* Warn if two storage classes are given. Default to `auto'. */
7076
7077 if (RIDBIT_ANY_SET (specbits))
7078 {
7079 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
270d8c65 7080 if (RIDBIT_SETP (RID_EXTERN, specbits) && !extern_langp) nclasses++;
7a1f3f5f 7081 if (RIDBIT_SETP (RID_THREAD, specbits)) nclasses++;
8d08fdba 7082 if (decl_context == PARM && nclasses > 0)
8251199e 7083 error ("storage class specifiers invalid in parameter declarations");
8d08fdba
MS
7084 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
7085 {
7086 if (decl_context == PARM)
8251199e 7087 error ("typedef declaration invalid in parameter declaration");
8d08fdba
MS
7088 nclasses++;
7089 }
7090 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
7091 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
270d8c65
NS
7092 if (!nclasses && !friendp && extern_langp)
7093 nclasses++;
8d08fdba
MS
7094 }
7095
7096 /* Give error if `virtual' is used outside of class declaration. */
b7484fbe
MS
7097 if (virtualp
7098 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba 7099 {
8251199e 7100 error ("virtual outside class declaration");
8d08fdba
MS
7101 virtualp = 0;
7102 }
8d08fdba
MS
7103
7104 /* Static anonymous unions are dealt with here. */
7105 if (staticp && decl_context == TYPENAME
7106 && TREE_CODE (declspecs) == TREE_LIST
6bdb8141 7107 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
8d08fdba
MS
7108 decl_context = FIELD;
7109
8d08fdba
MS
7110 /* Warn about storage classes that are invalid for certain
7111 kinds of declarations (parameters, typenames, etc.). */
7112
7a1f3f5f
RH
7113 /* "static __thread" and "extern __thread" are allowed. */
7114 if (nclasses == 2
7115 && RIDBIT_SETP (RID_THREAD, specbits)
7116 && (RIDBIT_SETP (RID_EXTERN, specbits)
7117 || RIDBIT_SETP (RID_STATIC, specbits)))
7118 nclasses = 1;
7119
8d08fdba 7120 if (nclasses > 1)
8251199e 7121 error ("multiple storage classes in declaration of `%s'", name);
8d08fdba
MS
7122 else if (decl_context != NORMAL && nclasses > 0)
7123 {
db5ae43f 7124 if ((decl_context == PARM || decl_context == CATCHPARM)
8d08fdba
MS
7125 && (RIDBIT_SETP (RID_REGISTER, specbits)
7126 || RIDBIT_SETP (RID_AUTO, specbits)))
7127 ;
fc378698
MS
7128 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
7129 ;
8d08fdba 7130 else if (decl_context == FIELD
f4f206f4 7131 /* C++ allows static class elements. */
d363e7bf
AJ
7132 && RIDBIT_SETP (RID_STATIC, specbits))
7133 /* C++ also allows inlines and signed and unsigned elements,
7134 but in those cases we don't come in here. */
8d08fdba
MS
7135 ;
7136 else
7137 {
7138 if (decl_context == FIELD)
7139 {
b7484fbe 7140 tree tmp = NULL_TREE;
926ce8bd 7141 int op = 0;
b7484fbe
MS
7142
7143 if (declarator)
7144 {
68642fb6 7145 /* Avoid trying to get an operand off an identifier node. */
9e9ff709
MS
7146 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
7147 tmp = declarator;
7148 else
7149 tmp = TREE_OPERAND (declarator, 0);
b7484fbe 7150 op = IDENTIFIER_OPNAME_P (tmp);
596ea4e5
AS
7151 if (IDENTIFIER_TYPENAME_P (tmp))
7152 {
c003e212 7153 if (is_typename_at_global_scope (tmp))
596ea4e5
AS
7154 name = IDENTIFIER_POINTER (tmp);
7155 else
7156 name = "<invalid operator>";
7157 }
b7484fbe 7158 }
8251199e 7159 error ("storage class specified for %s `%s'",
6eabb241 7160 op ? "member operator" : "field",
596ea4e5 7161 name);
8d08fdba
MS
7162 }
7163 else
b9d12519
KG
7164 {
7165 if (decl_context == PARM || decl_context == CATCHPARM)
7166 error ("storage class specified for parameter `%s'", name);
7167 else
7168 error ("storage class specified for typename");
7169 }
8d08fdba
MS
7170 RIDBIT_RESET (RID_REGISTER, specbits);
7171 RIDBIT_RESET (RID_AUTO, specbits);
7172 RIDBIT_RESET (RID_EXTERN, specbits);
7a1f3f5f 7173 RIDBIT_RESET (RID_THREAD, specbits);
8d08fdba
MS
7174 }
7175 }
7176 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
7177 {
a9aedbc2 7178 if (toplevel_bindings_p ())
8d08fdba 7179 {
59be0cdd 7180 /* It's common practice (and completely valid) to have a const
8d08fdba 7181 be initialized and declared extern. */
950ad3c3 7182 if (!(type_quals & TYPE_QUAL_CONST))
8251199e 7183 warning ("`%s' initialized and declared `extern'", name);
8d08fdba
MS
7184 }
7185 else
8251199e 7186 error ("`%s' has both `extern' and initializer", name);
8d08fdba
MS
7187 }
7188 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
a9aedbc2 7189 && ! toplevel_bindings_p ())
8251199e 7190 error ("nested function `%s' declared `extern'", name);
a9aedbc2 7191 else if (toplevel_bindings_p ())
8d08fdba
MS
7192 {
7193 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 7194 error ("top-level declaration of `%s' specifies `auto'", name);
8d08fdba 7195 }
7a1f3f5f
RH
7196 else if (RIDBIT_SETP (RID_THREAD, specbits)
7197 && !RIDBIT_SETP (RID_EXTERN, specbits)
7198 && !RIDBIT_SETP (RID_STATIC, specbits))
7199 {
7200 error ("function-scope `%s' implicitly auto and declared `__thread'",
7201 name);
7202 RIDBIT_RESET (RID_THREAD, specbits);
7203 }
8d08fdba 7204
909e536a 7205 if (nclasses > 0 && friendp)
8251199e 7206 error ("storage class specifiers invalid in friend function declarations");
909e536a 7207
a723baf1
MM
7208 scope = get_scope_of_declarator (declarator);
7209
8d08fdba
MS
7210 /* Now figure out the structure of the declarator proper.
7211 Descend through it, creating more complex types, until we reach
9e259dd1 7212 the declared identifier (or NULL_TREE, in an abstract declarator). */
8d08fdba 7213
386b8a85
JM
7214 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
7215 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
8d08fdba
MS
7216 {
7217 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
7218 an INDIRECT_REF (for *...),
7219 a CALL_EXPR (for ...(...)),
7220 an identifier (for the name being declared)
7221 or a null pointer (for the place in an absolute declarator
7222 where the name was omitted).
7223 For the last two cases, we have just exited the loop.
7224
7225 For C++ it could also be
7226 a SCOPE_REF (for class :: ...). In this case, we have converted
7227 sensible names to types, and those are the values we use to
7228 qualify the member name.
7229 an ADDR_EXPR (for &...),
7230 a BIT_NOT_EXPR (for destructors)
8d08fdba
MS
7231
7232 At this point, TYPE is the type of elements of an array,
7233 or for a function to return, or for a pointer to point to.
7234 After this sequence of ifs, TYPE is the type of the
7235 array or function or pointer, and DECLARATOR has had its
7236 outermost layer removed. */
7237
bd6dd845 7238 if (type == error_mark_node)
8d08fdba 7239 {
88d5a16e
R
7240 if (declarator == error_mark_node)
7241 return error_mark_node;
7242 else if (TREE_CODE (declarator) == SCOPE_REF)
8d08fdba
MS
7243 declarator = TREE_OPERAND (declarator, 1);
7244 else
7245 declarator = TREE_OPERAND (declarator, 0);
7246 continue;
7247 }
7248 if (quals != NULL_TREE
7249 && (declarator == NULL_TREE
7250 || TREE_CODE (declarator) != SCOPE_REF))
7251 {
7252 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
7253 ctype = TYPE_METHOD_BASETYPE (type);
7254 if (ctype != NULL_TREE)
7255 {
8d08fdba 7256 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
535233a8 7257 grok_method_quals (ctype, dummy, quals);
8d08fdba
MS
7258 type = TREE_TYPE (dummy);
7259 quals = NULL_TREE;
7260 }
7261 }
1eab9b56 7262
8d08fdba
MS
7263 switch (TREE_CODE (declarator))
7264 {
52fbc847
JM
7265 case TREE_LIST:
7266 {
7267 /* We encode a declarator with embedded attributes using
91d231cb
JM
7268 a TREE_LIST. */
7269 tree attrs = TREE_PURPOSE (declarator);
7270 tree inner_decl;
c9574c9f
R
7271 int attr_flags;
7272
52fbc847 7273 declarator = TREE_VALUE (declarator);
91d231cb
JM
7274 inner_decl = declarator;
7275 while (inner_decl != NULL_TREE
7276 && TREE_CODE (inner_decl) == TREE_LIST)
7277 inner_decl = TREE_VALUE (inner_decl);
c9574c9f 7278 attr_flags = 0;
91d231cb
JM
7279 if (inner_decl == NULL_TREE
7280 || TREE_CODE (inner_decl) == IDENTIFIER_NODE)
7281 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
7282 if (TREE_CODE (inner_decl) == CALL_EXPR)
7283 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
7284 if (TREE_CODE (inner_decl) == ARRAY_REF)
7285 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
7286 returned_attrs = decl_attributes (&type,
7287 chainon (returned_attrs, attrs),
7288 attr_flags);
52fbc847
JM
7289 }
7290 break;
7291
8d08fdba
MS
7292 case ARRAY_REF:
7293 {
01bf0f3e 7294 tree size = TREE_OPERAND (declarator, 1);
817aed6f 7295 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 7296
2848ad0f 7297 type = create_array_type_for_decl (dname, type, size);
c1b177ec 7298
8d08fdba
MS
7299 ctype = NULL_TREE;
7300 }
7301 break;
7302
7303 case CALL_EXPR:
7304 {
7305 tree arg_types;
f376e137 7306 int funcdecl_p;
43f887f9 7307 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
f376e137 7308 tree inner_decl = TREE_OPERAND (declarator, 0);
8d08fdba
MS
7309
7310 /* Declaring a function type.
7311 Make sure we have a valid type for the function to return. */
8d08fdba 7312
91063b51 7313 /* We now know that the TYPE_QUALS don't apply to the
14ae7e7d 7314 decl, but to its return type. */
91063b51 7315 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
7316
7317 /* Warn about some types functions can't return. */
7318
7319 if (TREE_CODE (type) == FUNCTION_TYPE)
7320 {
8251199e 7321 error ("`%s' declared as function returning a function", name);
8d08fdba
MS
7322 type = integer_type_node;
7323 }
7324 if (TREE_CODE (type) == ARRAY_TYPE)
7325 {
8251199e 7326 error ("`%s' declared as function returning an array", name);
8d08fdba
MS
7327 type = integer_type_node;
7328 }
7329
f376e137
MS
7330 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
7331 inner_decl = TREE_OPERAND (inner_decl, 1);
7332
68642fb6 7333 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
386b8a85
JM
7334 inner_decl = dname;
7335
b7484fbe 7336 /* Pick up type qualifiers which should be applied to `this'. */
43f887f9 7337 quals = CALL_DECLARATOR_QUALS (declarator);
b7484fbe 7338
c11b6f21 7339 /* Pick up the exception specifications. */
43f887f9 7340 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
c11b6f21 7341
f376e137
MS
7342 /* Say it's a definition only for the CALL_EXPR
7343 closest to the identifier. */
beb53fb8 7344 funcdecl_p
68642fb6 7345 = inner_decl
386b8a85 7346 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
68642fb6 7347 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
386b8a85 7348 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
68642fb6 7349
8d08fdba
MS
7350 if (ctype == NULL_TREE
7351 && decl_context == FIELD
f376e137 7352 && funcdecl_p
8d08fdba
MS
7353 && (friendp == 0 || dname == current_class_name))
7354 ctype = current_class_type;
7355
3dbc07b6 7356 if (ctype && sfk == sfk_conversion)
8d08fdba 7357 TYPE_HAS_CONVERSION (ctype) = 1;
a723baf1 7358 if (ctype && constructor_name_p (dname, ctype))
8d08fdba
MS
7359 {
7360 /* We are within a class's scope. If our declarator name
7361 is the same as the class name, and we are defining
7362 a function, then it is a constructor/destructor, and
7363 therefore returns a void type. */
7364
7365 if (flags == DTOR_FLAG)
7366 {
cab1f180
ML
7367 /* ISO C++ 12.4/2. A destructor may not be
7368 declared const or volatile. A destructor may
7369 not be static. */
8d08fdba 7370 if (staticp == 2)
8251199e 7371 error ("destructor cannot be static member function");
b7484fbe 7372 if (quals)
8d08fdba 7373 {
33bd39a2 7374 error ("destructors may not be `%s'",
4f70a846
MM
7375 IDENTIFIER_POINTER (TREE_VALUE (quals)));
7376 quals = NULL_TREE;
8d08fdba
MS
7377 }
7378 if (decl_context == FIELD)
7379 {
4dacf5bd
KG
7380 if (! member_function_or_else (ctype,
7381 current_class_type,
7382 flags))
8d08fdba
MS
7383 return void_type_node;
7384 }
7385 }
2c73f9f5 7386 else /* It's a constructor. */
8d08fdba 7387 {
db5ae43f
MS
7388 if (explicitp == 1)
7389 explicitp = 2;
cab1f180
ML
7390 /* ISO C++ 12.1. A constructor may not be
7391 declared const or volatile. A constructor may
7392 not be virtual. A constructor may not be
7393 static. */
8d08fdba 7394 if (staticp == 2)
8251199e 7395 error ("constructor cannot be static member function");
8d08fdba
MS
7396 if (virtualp)
7397 {
8251199e 7398 pedwarn ("constructors cannot be declared virtual");
8d08fdba
MS
7399 virtualp = 0;
7400 }
b7484fbe 7401 if (quals)
8d08fdba 7402 {
33bd39a2 7403 error ("constructors may not be `%s'",
4f70a846
MM
7404 IDENTIFIER_POINTER (TREE_VALUE (quals)));
7405 quals = NULL_TREE;
d363e7bf 7406 }
8d08fdba 7407 {
51c184be 7408 RID_BIT_TYPE tmp_bits;
4e135bdd 7409 memcpy (&tmp_bits, &specbits, sizeof (RID_BIT_TYPE));
51c184be
MS
7410 RIDBIT_RESET (RID_INLINE, tmp_bits);
7411 RIDBIT_RESET (RID_STATIC, tmp_bits);
7412 if (RIDBIT_ANY_SET (tmp_bits))
8251199e 7413 error ("return value type specifier for constructor ignored");
8d08fdba 7414 }
6eabb241 7415 if (decl_context == FIELD)
8d08fdba 7416 {
4dacf5bd
KG
7417 if (! member_function_or_else (ctype,
7418 current_class_type,
7419 flags))
8d08fdba
MS
7420 return void_type_node;
7421 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
3dbc07b6 7422 if (sfk != sfk_constructor)
8d08fdba
MS
7423 return NULL_TREE;
7424 }
7425 }
7426 if (decl_context == FIELD)
7427 staticp = 0;
7428 }
b7484fbe 7429 else if (friendp)
8d08fdba 7430 {
b7484fbe 7431 if (initialized)
8251199e 7432 error ("can't initialize friend function `%s'", name);
b7484fbe
MS
7433 if (virtualp)
7434 {
7435 /* Cannot be both friend and virtual. */
8251199e 7436 error ("virtual functions cannot be friends");
b7484fbe
MS
7437 RIDBIT_RESET (RID_FRIEND, specbits);
7438 friendp = 0;
7439 }
28cbf42c 7440 if (decl_context == NORMAL)
8251199e 7441 error ("friend declaration not in class definition");
28cbf42c 7442 if (current_function_decl && funcdef_flag)
33bd39a2 7443 error ("can't define friend function `%s' in a local class definition",
28cbf42c 7444 name);
8d08fdba
MS
7445 }
7446
8d08fdba
MS
7447 /* Construct the function type and go to the next
7448 inner layer of declarator. */
7449
f376e137 7450 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 7451
5cce22b6 7452 arg_types = grokparms (inner_parms);
8d08fdba 7453
4f70a846 7454 if (declarator && flags == DTOR_FLAG)
8d08fdba 7455 {
4f70a846
MM
7456 /* A destructor declared in the body of a class will
7457 be represented as a BIT_NOT_EXPR. But, we just
7458 want the underlying IDENTIFIER. */
8d08fdba 7459 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
4f70a846 7460 declarator = TREE_OPERAND (declarator, 0);
68642fb6 7461
8b27e9ef 7462 if (arg_types != void_list_node)
8d08fdba 7463 {
33bd39a2 7464 error ("destructors may not have parameters");
4f70a846
MM
7465 arg_types = void_list_node;
7466 last_function_parms = NULL_TREE;
8d08fdba
MS
7467 }
7468 }
7469
d22c8596 7470 /* ANSI says that `const int foo ();'
8d08fdba 7471 does not make the function foo const. */
d22c8596 7472 type = build_function_type (type, arg_types);
8d08fdba
MS
7473 }
7474 break;
7475
7476 case ADDR_EXPR:
7477 case INDIRECT_REF:
7478 /* Filter out pointers-to-references and references-to-references.
7479 We can get these if a TYPE_DECL is used. */
7480
7481 if (TREE_CODE (type) == REFERENCE_TYPE)
7482 {
dd29188b
NS
7483 error (TREE_CODE (declarator) == ADDR_EXPR
7484 ? "cannot declare reference to `%#T'"
7485 : "cannot declare pointer to `%#T'", type);
a5894242
MS
7486 type = TREE_TYPE (type);
7487 }
dd29188b
NS
7488 else if (VOID_TYPE_P (type)
7489 && (ctype || TREE_CODE (declarator) == ADDR_EXPR))
7490 error (ctype ? "cannot declare pointer to `%#T' member"
7491 : "cannot declare reference to `%#T'", type);
a5894242 7492
61a127b3
MM
7493 /* Merge any constancy or volatility into the target type
7494 for the pointer. */
7495
91063b51
MM
7496 /* We now know that the TYPE_QUALS don't apply to the decl,
7497 but to the target of the pointer. */
7498 type_quals = TYPE_UNQUALIFIED;
8d08fdba 7499
6eabb241 7500 if (TREE_CODE (declarator) == ADDR_EXPR)
8d08fdba 7501 {
dd29188b 7502 if (!VOID_TYPE_P (type))
69851283 7503 type = build_reference_type (type);
8d08fdba
MS
7504 }
7505 else if (TREE_CODE (type) == METHOD_TYPE)
d8f8dca1 7506 type = build_ptrmemfunc_type (build_pointer_type (type));
9e259dd1
MM
7507 else if (ctype)
7508 type = build_ptrmem_type (ctype, type);
8d08fdba
MS
7509 else
7510 type = build_pointer_type (type);
7511
7512 /* Process a list of type modifier keywords (such as
7513 const or volatile) that were given inside the `*' or `&'. */
7514
7515 if (TREE_TYPE (declarator))
7516 {
926ce8bd 7517 tree typemodlist;
8d08fdba 7518 int erred = 0;
4f2b0fb2
NS
7519 int constp = 0;
7520 int volatilep = 0;
7521 int restrictp = 0;
7522
8d08fdba
MS
7523 for (typemodlist = TREE_TYPE (declarator); typemodlist;
7524 typemodlist = TREE_CHAIN (typemodlist))
7525 {
91063b51
MM
7526 tree qualifier = TREE_VALUE (typemodlist);
7527
7528 if (qualifier == ridpointers[(int) RID_CONST])
4f2b0fb2
NS
7529 {
7530 constp++;
7531 type_quals |= TYPE_QUAL_CONST;
7532 }
91063b51 7533 else if (qualifier == ridpointers[(int) RID_VOLATILE])
4f2b0fb2
NS
7534 {
7535 volatilep++;
7536 type_quals |= TYPE_QUAL_VOLATILE;
7537 }
91063b51 7538 else if (qualifier == ridpointers[(int) RID_RESTRICT])
4f2b0fb2
NS
7539 {
7540 restrictp++;
7541 type_quals |= TYPE_QUAL_RESTRICT;
7542 }
8d08fdba
MS
7543 else if (!erred)
7544 {
7545 erred = 1;
91063b51 7546 error ("invalid type modifier within pointer declarator");
8d08fdba
MS
7547 }
7548 }
7549 if (constp > 1)
8251199e 7550 pedwarn ("duplicate `const'");
8d08fdba 7551 if (volatilep > 1)
8251199e 7552 pedwarn ("duplicate `volatile'");
91063b51
MM
7553 if (restrictp > 1)
7554 pedwarn ("duplicate `restrict'");
91063b51 7555 type = cp_build_qualified_type (type, type_quals);
4f2b0fb2 7556 type_quals = cp_type_quals (type);
8d08fdba
MS
7557 }
7558 declarator = TREE_OPERAND (declarator, 0);
7559 ctype = NULL_TREE;
7560 break;
7561
7562 case SCOPE_REF:
7563 {
7564 /* We have converted type names to NULL_TREE if the
7565 name was bogus, or to a _TYPE node, if not.
7566
7567 The variable CTYPE holds the type we will ultimately
7568 resolve to. The code here just needs to build
7569 up appropriate member types. */
7570 tree sname = TREE_OPERAND (declarator, 1);
386b8a85
JM
7571 tree t;
7572
8d08fdba
MS
7573 /* Destructors can have their visibilities changed as well. */
7574 if (TREE_CODE (sname) == BIT_NOT_EXPR)
7575 sname = TREE_OPERAND (sname, 0);
7576
8d08fdba
MS
7577 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
7578 {
7579 /* We had a reference to a global decl, or
7580 perhaps we were given a non-aggregate typedef,
7581 in which case we cleared this out, and should just
7582 keep going as though it wasn't there. */
7583 declarator = sname;
7584 continue;
7585 }
7586 ctype = TREE_OPERAND (declarator, 0);
7587
386b8a85 7588 t = ctype;
68642fb6 7589 while (t != NULL_TREE && CLASS_TYPE_P (t))
386b8a85 7590 {
5362b086 7591 /* You're supposed to have one `template <...>'
da8a7456
MM
7592 for every template class, but you don't need one
7593 for a full specialization. For example:
7594
7595 template <class T> struct S{};
7596 template <> struct S<int> { void f(); };
7597 void S<int>::f () {}
7598
7599 is correct; there shouldn't be a `template <>' for
7600 the definition of `S<int>::f'. */
7601 if (CLASSTYPE_TEMPLATE_INFO (t)
7602 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
92ecdfb7
NS
7603 || uses_template_parms (CLASSTYPE_TI_ARGS (t)))
7604 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
386b8a85 7605 template_count += 1;
da8a7456 7606
386b8a85 7607 t = TYPE_MAIN_DECL (t);
92ecdfb7 7608 t = DECL_CONTEXT (t);
386b8a85
JM
7609 }
7610
8d08fdba
MS
7611 if (sname == NULL_TREE)
7612 goto done_scoping;
7613
7614 if (TREE_CODE (sname) == IDENTIFIER_NODE)
7615 {
7616 /* This is the `standard' use of the scoping operator:
7617 basetype :: member . */
7618
db5ae43f 7619 if (ctype == current_class_type)
28cbf42c
MS
7620 {
7621 /* class A {
7622 void A::f ();
7623 };
7624
7625 Is this ill-formed? */
7626
7627 if (pedantic)
33bd39a2 7628 pedwarn ("extra qualification `%T::' on member `%s' ignored",
28cbf42c
MS
7629 ctype, name);
7630 }
db5ae43f 7631 else if (TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba 7632 {
eeb75383 7633 if (current_class_type == NULL_TREE || friendp)
43dc123f
MM
7634 type
7635 = build_method_type_directly (ctype,
7636 TREE_TYPE (type),
14ae7e7d 7637 TYPE_ARG_TYPES (type));
8d08fdba
MS
7638 else
7639 {
33bd39a2 7640 error ("cannot declare member function `%T::%s' within `%T'",
a3203465 7641 ctype, name, current_class_type);
a723baf1 7642 return error_mark_node;
8d08fdba
MS
7643 }
7644 }
5566b478 7645 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
d0f062fb 7646 || COMPLETE_TYPE_P (complete_type (ctype)))
8d08fdba 7647 {
2c73f9f5 7648 /* Have to move this code elsewhere in this function.
db5ae43f
MS
7649 this code is used for i.e., typedef int A::M; M *pm;
7650
7651 It is? How? jason 10/2/94 */
8d08fdba 7652
8d08fdba
MS
7653 if (current_class_type)
7654 {
33bd39a2 7655 error ("cannot declare member `%T::%s' within `%T'",
db5ae43f
MS
7656 ctype, name, current_class_type);
7657 return void_type_node;
8d08fdba 7658 }
8d08fdba 7659 }
8d08fdba 7660 else
eeb75383 7661 {
7a228918 7662 cxx_incomplete_type_error (NULL_TREE, ctype);
eeb75383 7663 return error_mark_node;
d363e7bf 7664 }
8d08fdba
MS
7665
7666 declarator = sname;
7667 }
8d08fdba 7668 else if (TREE_CODE (sname) == SCOPE_REF)
a98facb0 7669 abort ();
8d08fdba
MS
7670 else
7671 {
7672 done_scoping:
7673 declarator = TREE_OPERAND (declarator, 1);
7674 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
7675 /* In this case, we will deal with it later. */
7676 ;
9e259dd1 7677 else if (TREE_CODE (type) == FUNCTION_TYPE)
43dc123f
MM
7678 type = build_method_type_directly (ctype,
7679 TREE_TYPE (type),
7680 TYPE_ARG_TYPES (type));
8d08fdba
MS
7681 }
7682 }
7683 break;
7684
7685 case BIT_NOT_EXPR:
7686 declarator = TREE_OPERAND (declarator, 0);
7687 break;
7688
50ad9642
MM
7689 case BASELINK:
7690 declarator = BASELINK_FUNCTIONS (declarator);
7691 break;
7692
8d08fdba
MS
7693 case RECORD_TYPE:
7694 case UNION_TYPE:
7695 case ENUMERAL_TYPE:
7696 declarator = NULL_TREE;
7697 break;
7698
7699 case ERROR_MARK:
7700 declarator = NULL_TREE;
7701 break;
7702
7703 default:
a98facb0 7704 abort ();
8d08fdba
MS
7705 }
7706 }
7707
91d231cb 7708 if (returned_attrs)
1eab9b56 7709 {
91d231cb
JM
7710 if (attrlist)
7711 *attrlist = chainon (returned_attrs, *attrlist);
1eab9b56 7712 else
91d231cb 7713 attrlist = &returned_attrs;
1eab9b56
JM
7714 }
7715
419c6212
JM
7716 /* Now TYPE has the actual type. */
7717
55b3d665
JM
7718 /* Did array size calculations overflow? */
7719
7720 if (TREE_CODE (type) == ARRAY_TYPE
7721 && COMPLETE_TYPE_P (type)
7722 && TREE_OVERFLOW (TYPE_SIZE (type)))
7723 {
7724 error ("size of array `%s' is too large", name);
aba649ba 7725 /* If we proceed with the array type as it is, we'll eventually
55b3d665
JM
7726 crash in tree_low_cst(). */
7727 type = error_mark_node;
7728 }
7729
2fff6d71 7730 if ((decl_context == FIELD || decl_context == PARM)
dac45b5c
MM
7731 && !processing_template_decl
7732 && variably_modified_type_p (type))
7733 {
2fff6d71
MM
7734 if (decl_context == FIELD)
7735 error ("data member may not have variably modified type `%T'", type);
7736 else
7737 error ("parameter may not have variably modified type `%T'", type);
dac45b5c
MM
7738 type = error_mark_node;
7739 }
7740
34fc957d 7741 if (explicitp == 1 || (explicitp && friendp))
db5ae43f 7742 {
34fc957d
NS
7743 /* [dcl.fct.spec] The explicit specifier shall only be used in
7744 declarations of constructors within a class definition. */
7745 error ("only declarations of constructors can be `explicit'");
db5ae43f
MS
7746 explicitp = 0;
7747 }
7748
f30432d7
MS
7749 if (RIDBIT_SETP (RID_MUTABLE, specbits))
7750 {
4223f82f 7751 if (decl_context != FIELD || friendp)
34fc957d
NS
7752 {
7753 error ("non-member `%s' cannot be declared `mutable'", name);
7754 RIDBIT_RESET (RID_MUTABLE, specbits);
7755 }
7756 else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
f30432d7 7757 {
34fc957d 7758 error ("non-object member `%s' cannot be declared `mutable'", name);
f30432d7
MS
7759 RIDBIT_RESET (RID_MUTABLE, specbits);
7760 }
34fc957d
NS
7761 else if (TREE_CODE (type) == FUNCTION_TYPE
7762 || TREE_CODE (type) == METHOD_TYPE)
7763 {
7764 error ("function `%s' cannot be declared `mutable'", name);
7765 RIDBIT_RESET (RID_MUTABLE, specbits);
7766 }
f30432d7
MS
7767 else if (staticp)
7768 {
8251199e 7769 error ("static `%s' cannot be declared `mutable'", name);
f30432d7
MS
7770 RIDBIT_RESET (RID_MUTABLE, specbits);
7771 }
34fc957d
NS
7772 else if (type_quals & TYPE_QUAL_CONST)
7773 {
7774 error ("const `%s' cannot be declared `mutable'", name);
4f2b0fb2 7775 RIDBIT_RESET (RID_MUTABLE, specbits);
34fc957d 7776 }
f30432d7
MS
7777 }
7778
efe38fab
JM
7779 if (declarator == NULL_TREE
7780 || TREE_CODE (declarator) == IDENTIFIER_NODE
7781 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
7782 && (TREE_CODE (type) == FUNCTION_TYPE
7783 || TREE_CODE (type) == METHOD_TYPE)))
7784 /* OK */;
7785 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
7786 {
33bd39a2 7787 error ("template-id `%D' used as a declarator", declarator);
efe38fab
JM
7788 declarator = dname;
7789 }
7790 else
419c6212 7791 /* Unexpected declarator format. */
a98facb0 7792 abort ();
efe38fab 7793
419c6212
JM
7794 /* If this is declaring a typedef name, return a TYPE_DECL. */
7795
fc378698 7796 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
8d08fdba
MS
7797 {
7798 tree decl;
7799
7800 /* Note that the grammar rejects storage classes
7801 in typenames, fields or parameters. */
eff71ab0
PB
7802 if (current_lang_name == lang_name_java)
7803 TYPE_FOR_JAVA (type) = 1;
8d08fdba 7804
d2e5ee5c
MS
7805 if (decl_context == FIELD)
7806 {
a723baf1 7807 if (constructor_name_p (declarator, current_class_type))
33bd39a2 7808 pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
d2e5ee5c
MS
7809 declarator);
7810 decl = build_lang_decl (TYPE_DECL, declarator, type);
d2e5ee5c
MS
7811 }
7812 else
6bda7a5e
NS
7813 {
7814 decl = build_decl (TYPE_DECL, declarator, type);
a723baf1 7815 if (in_namespace || ctype)
ddd2d57e 7816 error ("%Jtypedef name may not be a nested-name-specifier", decl);
6bda7a5e
NS
7817 if (!current_function_decl)
7818 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7819 }
7820
9188c363
MM
7821 /* If the user declares "typedef struct {...} foo" then the
7822 struct will have an anonymous name. Fill that name in now.
7823 Nothing can refer to it, so nothing needs know about the name
7824 change. */
8d08fdba 7825 if (type != error_mark_node
2bdb0643 7826 && declarator
8d08fdba
MS
7827 && TYPE_NAME (type)
7828 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1951a1b6 7829 && TYPE_ANONYMOUS_P (type)
ac905924
JM
7830 /* Don't do this if there are attributes. */
7831 && (!attrlist || !*attrlist)
89d684bb 7832 && cp_type_quals (type) == TYPE_UNQUALIFIED)
8d08fdba 7833 {
dcd08efc
JM
7834 tree oldname = TYPE_NAME (type);
7835 tree t;
7836
2c73f9f5 7837 /* Replace the anonymous name with the real name everywhere. */
8d08fdba 7838 lookup_tag_reverse (type, declarator);
dcd08efc
JM
7839 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
7840 if (TYPE_NAME (t) == oldname)
7841 TYPE_NAME (t) = decl;
8d08fdba
MS
7842
7843 if (TYPE_LANG_SPECIFIC (type))
7844 TYPE_WAS_ANONYMOUS (type) = 1;
7845
33964bf4
MM
7846 /* If this is a typedef within a template class, the nested
7847 type is a (non-primary) template. The name for the
7848 template needs updating as well. */
7849 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
68642fb6 7850 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
33964bf4
MM
7851 = TYPE_IDENTIFIER (type);
7852
50a6dbd7
JM
7853 /* FIXME remangle member functions; member functions of a
7854 type with external linkage have external linkage. */
fc378698 7855 }
fc378698 7856
a723baf1 7857 if (quals)
8d08fdba
MS
7858 {
7859 if (ctype == NULL_TREE)
7860 {
7861 if (TREE_CODE (type) != METHOD_TYPE)
ddd2d57e
RH
7862 error ("%Jinvalid type qualifier for non-member function type",
7863 decl);
8d08fdba
MS
7864 else
7865 ctype = TYPE_METHOD_BASETYPE (type);
7866 }
7867 if (ctype != NULL_TREE)
7868 grok_method_quals (ctype, decl, quals);
7869 }
7870
7871 if (RIDBIT_SETP (RID_SIGNED, specbits)
7872 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
7873 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
7874
c91a56d2
MS
7875 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
7876 inlinep, friendp, raises != NULL_TREE);
7877
8d08fdba
MS
7878 return decl;
7879 }
7880
7881 /* Detect the case of an array type of unspecified size
7882 which came, as such, direct from a typedef name.
8d6e459d
NS
7883 We must copy the type, so that the array's domain can be
7884 individually set by the object's initializer. */
8d08fdba 7885
8d6e459d
NS
7886 if (type && typedef_type
7887 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
55b3d665 7888 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8d6e459d 7889 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
8d08fdba 7890
969fd501
NS
7891 /* Detect where we're using a typedef of function type to declare a
7892 function. last_function_parms will not be set, so we must create
7893 it now. */
7894
7895 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
7896 {
7897 tree decls = NULL_TREE;
7898 tree args;
7899
7900 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
7901 {
8e51619a 7902 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
969fd501
NS
7903
7904 TREE_CHAIN (decl) = decls;
7905 decls = decl;
7906 }
7907
7908 last_function_parms = nreverse (decls);
7909 }
7910
8d08fdba
MS
7911 /* If this is a type name (such as, in a cast or sizeof),
7912 compute the type and return it now. */
7913
7914 if (decl_context == TYPENAME)
7915 {
7916 /* Note that the grammar rejects storage classes
7917 in typenames, fields or parameters. */
91063b51 7918 if (type_quals != TYPE_UNQUALIFIED)
6eabb241 7919 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
7920
7921 /* Special case: "friend class foo" looks like a TYPENAME context. */
7922 if (friendp)
7923 {
91063b51 7924 if (type_quals != TYPE_UNQUALIFIED)
b7484fbe 7925 {
33bd39a2 7926 error ("type qualifiers specified for friend class declaration");
91063b51 7927 type_quals = TYPE_UNQUALIFIED;
b7484fbe
MS
7928 }
7929 if (inlinep)
7930 {
33bd39a2 7931 error ("`inline' specified for friend class declaration");
b7484fbe
MS
7932 inlinep = 0;
7933 }
f2ae0c45 7934
218e0eb6 7935 if (!current_aggr)
4b054b80 7936 {
218e0eb6 7937 /* Don't allow friend declaration without a class-key. */
4b054b80 7938 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
218e0eb6 7939 pedwarn ("template parameters cannot be friends");
f2ae0c45 7940 else if (TREE_CODE (type) == TYPENAME_TYPE)
218e0eb6
KL
7941 pedwarn ("friend declaration requires class-key, "
7942 "i.e. `friend class %T::%D'",
7943 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
4b054b80 7944 else
218e0eb6
KL
7945 pedwarn ("friend declaration requires class-key, "
7946 "i.e. `friend %#T'",
7947 type);
4b054b80 7948 }
b7484fbe
MS
7949
7950 /* Only try to do this stuff if we didn't already give up. */
7951 if (type != integer_type_node)
7952 {
7953 /* A friendly class? */
7954 if (current_class_type)
19db77ce
KL
7955 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
7956 /*complain=*/true);
b7484fbe 7957 else
33bd39a2 7958 error ("trying to make class `%T' a friend of global scope",
2ae7bada 7959 type);
d363e7bf 7960
b7484fbe
MS
7961 type = void_type_node;
7962 }
8d08fdba
MS
7963 }
7964 else if (quals)
7965 {
8d08fdba
MS
7966 if (ctype == NULL_TREE)
7967 {
41cbc04c 7968 if (TREE_CODE (type) != METHOD_TYPE)
33bd39a2 7969 error ("invalid qualifiers on non-member function type");
41cbc04c
NS
7970 else
7971 ctype = TYPE_METHOD_BASETYPE (type);
7972 }
7973 if (ctype)
7974 {
7975 tree dummy = build_decl (TYPE_DECL, declarator, type);
7976 grok_method_quals (ctype, dummy, quals);
7977 type = TREE_TYPE (dummy);
8d08fdba 7978 }
8d08fdba
MS
7979 }
7980
7981 return type;
7982 }
7983 else if (declarator == NULL_TREE && decl_context != PARM
db5ae43f 7984 && decl_context != CATCHPARM
8d08fdba
MS
7985 && TREE_CODE (type) != UNION_TYPE
7986 && ! bitfield)
7987 {
33bd39a2 7988 error ("abstract declarator `%T' used as declaration", type);
8d08fdba
MS
7989 declarator = make_anon_name ();
7990 }
7991
7992 /* `void' at top level (not within pointer)
7993 is allowed only in typedefs or type names.
7994 We don't complain about parms either, but that is because
7995 a better error message can be made later. */
7996
a1774733 7997 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
8d08fdba 7998 {
b7484fbe 7999 if (! declarator)
8251199e 8000 error ("unnamed variable or field declared void");
b7484fbe 8001 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
8d08fdba
MS
8002 {
8003 if (IDENTIFIER_OPNAME_P (declarator))
a98facb0 8004 abort ();
8d08fdba 8005 else
8251199e 8006 error ("variable or field `%s' declared void", name);
8d08fdba
MS
8007 }
8008 else
8251199e 8009 error ("variable or field declared void");
8d08fdba
MS
8010 type = integer_type_node;
8011 }
8012
8013 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
8014 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
8015
14ae7e7d
JM
8016 if (decl_context == PARM || decl_context == CATCHPARM)
8017 {
8018 if (ctype || in_namespace)
8019 error ("cannot use `::' in parameter declaration");
8020
8021 /* A parameter declared as an array of T is really a pointer to T.
8022 One declared as a function is really a pointer to a function.
8023 One declared as a member is really a pointer to member. */
8024
8025 if (TREE_CODE (type) == ARRAY_TYPE)
8026 {
8027 /* Transfer const-ness of array into that of type pointed to. */
8028 type = build_pointer_type (TREE_TYPE (type));
91063b51 8029 type_quals = TYPE_UNQUALIFIED;
14ae7e7d
JM
8030 }
8031 else if (TREE_CODE (type) == FUNCTION_TYPE)
8032 type = build_pointer_type (type);
14ae7e7d 8033 }
68642fb6 8034
8d08fdba 8035 {
926ce8bd 8036 tree decl;
8d08fdba
MS
8037
8038 if (decl_context == PARM)
8039 {
8e51619a 8040 decl = cp_build_parm_decl (declarator, type);
8d08fdba
MS
8041
8042 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
8043 inlinep, friendp, raises != NULL_TREE);
8d08fdba
MS
8044 }
8045 else if (decl_context == FIELD)
8046 {
01bf0f3e
JM
8047 /* The C99 flexible array extension. */
8048 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8049 && TYPE_DOMAIN (type) == NULL_TREE)
8050 {
8051 tree itype = compute_array_index_type (dname, integer_zero_node);
8052 type = build_cplus_array_type (TREE_TYPE (type), itype);
8053 }
8054
8d08fdba
MS
8055 if (type == error_mark_node)
8056 {
8057 /* Happens when declaring arrays of sizes which
8058 are error_mark_node, for example. */
8059 decl = NULL_TREE;
8060 }
997a088c 8061 else if (in_namespace && !friendp)
05008fb9
MM
8062 {
8063 /* Something like struct S { int N::j; }; */
33bd39a2 8064 error ("invalid use of `::'");
05008fb9
MM
8065 decl = NULL_TREE;
8066 }
8d08fdba
MS
8067 else if (TREE_CODE (type) == FUNCTION_TYPE)
8068 {
8069 int publicp = 0;
e1467ff2 8070 tree function_context;
8d08fdba 8071
72b7eeff
MS
8072 /* We catch the others as conflicts with the builtin
8073 typedefs. */
8074 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
8075 {
33bd39a2 8076 error ("function `%D' cannot be declared friend",
72b7eeff
MS
8077 declarator);
8078 friendp = 0;
8079 }
8080
8d08fdba
MS
8081 if (friendp == 0)
8082 {
8083 if (ctype == NULL_TREE)
8084 ctype = current_class_type;
8085
8086 if (ctype == NULL_TREE)
8087 {
33bd39a2 8088 error ("can't make `%D' into a method -- not in a class",
8d08fdba
MS
8089 declarator);
8090 return void_type_node;
8091 }
8092
8093 /* ``A union may [ ... ] not [ have ] virtual functions.''
8094 ARM 9.5 */
8095 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
8096 {
33bd39a2 8097 error ("function `%D' declared virtual inside a union",
8d08fdba
MS
8098 declarator);
8099 return void_type_node;
8100 }
8101
596ea4e5
AS
8102 if (declarator == ansi_opname (NEW_EXPR)
8103 || declarator == ansi_opname (VEC_NEW_EXPR)
8104 || declarator == ansi_opname (DELETE_EXPR)
8105 || declarator == ansi_opname (VEC_DELETE_EXPR))
8d08fdba
MS
8106 {
8107 if (virtualp)
8108 {
33bd39a2 8109 error ("`%D' cannot be declared virtual, since it is always static",
8d08fdba
MS
8110 declarator);
8111 virtualp = 0;
8112 }
8113 }
8114 else if (staticp < 2)
43dc123f
MM
8115 type = build_method_type_directly (ctype,
8116 TREE_TYPE (type),
8117 TYPE_ARG_TYPES (type));
8d08fdba
MS
8118 }
8119
8120 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
68642fb6 8121 function_context = (ctype != NULL_TREE) ?
4f1c5b7d 8122 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
e1467ff2
MM
8123 publicp = (! friendp || ! staticp)
8124 && function_context == NULL_TREE;
68642fb6 8125 decl = grokfndecl (ctype, type,
386b8a85
JM
8126 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
8127 ? declarator : dname,
8128 declarator,
7a8f9fa9 8129 virtualp, flags, quals, raises,
386b8a85 8130 friendp ? -1 : 0, friendp, publicp, inlinep,
2c73f9f5 8131 funcdef_flag, template_count, in_namespace);
20496fa2 8132 if (decl == NULL_TREE)
3ddfb0e6 8133 return decl;
6125f3be
DE
8134#if 0
8135 /* This clobbers the attrs stored in `decl' from `attrlist'. */
91d231cb
JM
8136 /* The decl and setting of decl_attr is also turned off. */
8137 decl = build_decl_attribute_variant (decl, decl_attr);
6125f3be 8138#endif
f0e01782 8139
cc804e51
MM
8140 /* [class.conv.ctor]
8141
8142 A constructor declared without the function-specifier
8143 explicit that can be called with a single parameter
8144 specifies a conversion from the type of its first
8145 parameter to the type of its class. Such a constructor
8146 is called a converting constructor. */
db5ae43f
MS
8147 if (explicitp == 2)
8148 DECL_NONCONVERTING_P (decl) = 1;
cc804e51
MM
8149 else if (DECL_CONSTRUCTOR_P (decl))
8150 {
8151 /* The constructor can be called with exactly one
8152 parameter if there is at least one parameter, and
8153 any subsequent parameters have default arguments.
e0fff4b3
JM
8154 Ignore any compiler-added parms. */
8155 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
cc804e51
MM
8156
8157 if (arg_types == void_list_node
68642fb6
UD
8158 || (arg_types
8159 && TREE_CHAIN (arg_types)
cc804e51
MM
8160 && TREE_CHAIN (arg_types) != void_list_node
8161 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
8162 DECL_NONCONVERTING_P (decl) = 1;
8163 }
8d08fdba
MS
8164 }
8165 else if (TREE_CODE (type) == METHOD_TYPE)
8166 {
faae18ab
MS
8167 /* We only get here for friend declarations of
8168 members of other classes. */
8d08fdba
MS
8169 /* All method decls are public, so tell grokfndecl to set
8170 TREE_PUBLIC, also. */
866eb556
KL
8171 decl = grokfndecl (ctype, type,
8172 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
8173 ? declarator : dname,
8174 declarator,
7a8f9fa9 8175 virtualp, flags, quals, raises,
386b8a85 8176 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
2c73f9f5 8177 template_count, in_namespace);
f0e01782
MS
8178 if (decl == NULL_TREE)
8179 return NULL_TREE;
8d08fdba 8180 }
5566b478 8181 else if (!staticp && ! processing_template_decl
d0f062fb 8182 && !COMPLETE_TYPE_P (complete_type (type))
8d08fdba
MS
8183 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
8184 {
b7484fbe 8185 if (declarator)
33bd39a2 8186 error ("field `%D' has incomplete type", declarator);
b7484fbe 8187 else
33bd39a2 8188 error ("name `%T' has incomplete type", type);
8d08fdba
MS
8189
8190 /* If we're instantiating a template, tell them which
8191 instantiation made the field's type be incomplete. */
8192 if (current_class_type
8193 && TYPE_NAME (current_class_type)
d2e5ee5c 8194 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8d08fdba
MS
8195 && declspecs && TREE_VALUE (declspecs)
8196 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
33bd39a2 8197 error (" in instantiation of template `%T'",
db5ae43f
MS
8198 current_class_type);
8199
8d08fdba
MS
8200 type = error_mark_node;
8201 decl = NULL_TREE;
8202 }
8203 else
8204 {
8205 if (friendp)
8206 {
cb9a3ff8 8207 error ("`%s' is neither function nor member function; cannot be declared friend",
8d08fdba
MS
8208 IDENTIFIER_POINTER (declarator));
8209 friendp = 0;
8210 }
8211 decl = NULL_TREE;
8212 }
8213
8214 if (friendp)
8215 {
8216 /* Friends are treated specially. */
8217 if (ctype == current_class_type)
8251199e 8218 warning ("member functions are implicitly friends of their class");
8db1028e
NS
8219 else if (decl && DECL_NAME (decl))
8220 {
8221 if (template_class_depth (current_class_type) == 0)
8222 {
8223 decl = check_explicit_specialization
8224 (declarator, decl, template_count,
8225 2 * (funcdef_flag != 0) + 4);
8226 if (decl == error_mark_node)
8227 return error_mark_node;
8228 }
8229
8230 decl = do_friend (ctype, declarator, decl,
8231 last_function_parms, *attrlist,
8232 flags, quals, funcdef_flag);
8233 return decl;
8234 }
8235 else
8236 return void_type_node;
8d08fdba
MS
8237 }
8238
f4f206f4 8239 /* Structure field. It may not be a function, except for C++. */
8d08fdba
MS
8240
8241 if (decl == NULL_TREE)
8242 {
8d08fdba
MS
8243 if (initialized)
8244 {
3ac3d9ea
MM
8245 if (!staticp)
8246 {
8247 /* An attempt is being made to initialize a non-static
8248 member. But, from [class.mem]:
68642fb6 8249
3ac3d9ea
MM
8250 4 A member-declarator can contain a
8251 constant-initializer only if it declares a static
8252 member (_class.static_) of integral or enumeration
68642fb6 8253 type, see _class.static.data_.
3ac3d9ea
MM
8254
8255 This used to be relatively common practice, but
8256 the rest of the compiler does not correctly
8257 handle the initialization unless the member is
8258 static so we make it static below. */
33bd39a2 8259 pedwarn ("ISO C++ forbids initialization of member `%D'",
3ac3d9ea 8260 declarator);
33bd39a2 8261 pedwarn ("making `%D' static", declarator);
3ac3d9ea
MM
8262 staticp = 1;
8263 }
8264
6ba89f8e
MM
8265 if (uses_template_parms (type))
8266 /* We'll check at instantiation time. */
8267 ;
8268 else if (check_static_variable_definition (declarator,
8269 type))
8270 /* If we just return the declaration, crashes
8271 will sometimes occur. We therefore return
72a93143
JM
8272 void_type_node, as if this was a friend
8273 declaration, to cause callers to completely
8274 ignore this declaration. */
6ba89f8e 8275 return void_type_node;
8d08fdba
MS
8276 }
8277
3ac3d9ea 8278 if (staticp)
8d08fdba 8279 {
c717c5af
MM
8280 /* [class.mem] forbids static data members with the
8281 same name as the enclosing class. Non-static data
8282 members are checked in check_field_decls. */
8283 if (constructor_name_p (declarator, current_class_type))
8284 pedwarn ("ISO C++ forbids static data member `%D' with same name as enclosing class",
8285 declarator);
8286
f18a14bc
MM
8287 /* C++ allows static class members. All other work
8288 for this is done by grokfield. */
4ce3d537 8289 decl = build_lang_decl (VAR_DECL, declarator, type);
5b605f68
MS
8290 TREE_STATIC (decl) = 1;
8291 /* In class context, 'static' means public access. */
3ac3d9ea 8292 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
8d08fdba
MS
8293 }
8294 else
8295 {
721c3b42 8296 decl = build_decl (FIELD_DECL, declarator, type);
2bf105ab 8297 DECL_NONADDRESSABLE_P (decl) = bitfield;
8d08fdba
MS
8298 if (RIDBIT_SETP (RID_MUTABLE, specbits))
8299 {
8300 DECL_MUTABLE_P (decl) = 1;
8301 RIDBIT_RESET (RID_MUTABLE, specbits);
8302 }
8303 }
8304
8305 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
8306 inlinep, friendp, raises != NULL_TREE);
8307 }
8308 }
fd9aef9d
NS
8309 else if (TREE_CODE (type) == FUNCTION_TYPE
8310 || TREE_CODE (type) == METHOD_TYPE)
8d08fdba 8311 {
386b8a85 8312 tree original_name;
8d08fdba
MS
8313 int publicp = 0;
8314
8315 if (! declarator)
8316 return NULL_TREE;
8317
386b8a85
JM
8318 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
8319 original_name = dname;
8320 else
8321 original_name = declarator;
8322
8926095f 8323 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 8324 error ("storage class `auto' invalid for function `%s'", name);
8926095f 8325 else if (RIDBIT_SETP (RID_REGISTER, specbits))
8251199e 8326 error ("storage class `register' invalid for function `%s'", name);
7a1f3f5f
RH
8327 else if (RIDBIT_SETP (RID_THREAD, specbits))
8328 error ("storage class `__thread' invalid for function `%s'", name);
8d08fdba
MS
8329
8330 /* Function declaration not at top level.
8331 Storage classes other than `extern' are not allowed
8332 and `extern' makes no difference. */
a9aedbc2 8333 if (! toplevel_bindings_p ()
8926095f
MS
8334 && (RIDBIT_SETP (RID_STATIC, specbits)
8335 || RIDBIT_SETP (RID_INLINE, specbits))
8d08fdba 8336 && pedantic)
8926095f
MS
8337 {
8338 if (RIDBIT_SETP (RID_STATIC, specbits))
8251199e 8339 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
8926095f 8340 else
8251199e 8341 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
8926095f 8342 }
68642fb6 8343
8d08fdba
MS
8344 if (ctype == NULL_TREE)
8345 {
8346 if (virtualp)
8347 {
8251199e 8348 error ("virtual non-class function `%s'", name);
8d08fdba
MS
8349 virtualp = 0;
8350 }
8d08fdba
MS
8351 }
8352 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
43dc123f
MM
8353 type = build_method_type_directly (ctype,
8354 TREE_TYPE (type),
8355 TYPE_ARG_TYPES (type));
8d08fdba 8356
eb66be0e 8357 /* Record presence of `static'. */
faae18ab 8358 publicp = (ctype != NULL_TREE
a9aedbc2 8359 || RIDBIT_SETP (RID_EXTERN, specbits)
eb66be0e 8360 || !RIDBIT_SETP (RID_STATIC, specbits));
8d08fdba 8361
386b8a85 8362 decl = grokfndecl (ctype, type, original_name, declarator,
7a8f9fa9 8363 virtualp, flags, quals, raises,
75650646 8364 1, friendp,
68642fb6 8365 publicp, inlinep, funcdef_flag,
2c73f9f5 8366 template_count, in_namespace);
f0e01782
MS
8367 if (decl == NULL_TREE)
8368 return NULL_TREE;
8d08fdba 8369
8d08fdba
MS
8370 if (staticp == 1)
8371 {
0e339752 8372 int invalid_static = 0;
8d08fdba
MS
8373
8374 /* Don't allow a static member function in a class, and forbid
8375 declaring main to be static. */
8376 if (TREE_CODE (type) == METHOD_TYPE)
8377 {
33bd39a2 8378 pedwarn ("cannot declare member function `%D' to have static linkage", decl);
0e339752 8379 invalid_static = 1;
8d08fdba 8380 }
8d08fdba
MS
8381 else if (current_function_decl)
8382 {
8383 /* FIXME need arm citation */
8251199e 8384 error ("cannot declare static function inside another function");
0e339752 8385 invalid_static = 1;
8d08fdba
MS
8386 }
8387
0e339752 8388 if (invalid_static)
8d08fdba
MS
8389 {
8390 staticp = 0;
8391 RIDBIT_RESET (RID_STATIC, specbits);
8392 }
8393 }
8d08fdba
MS
8394 }
8395 else
8396 {
8397 /* It's a variable. */
8398
8399 /* An uninitialized decl with `extern' is a reference. */
68642fb6
UD
8400 decl = grokvardecl (type, declarator, &specbits,
8401 initialized,
8402 (type_quals & TYPE_QUAL_CONST) != 0,
9e259dd1 8403 ctype ? ctype : in_namespace);
8d08fdba
MS
8404 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
8405 inlinep, friendp, raises != NULL_TREE);
8406
8407 if (ctype)
8408 {
f0e01782 8409 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
8410 if (staticp == 1)
8411 {
33bd39a2 8412 pedwarn ("`static' may not be used when defining (as opposed to declaring) a static data member");
8d08fdba
MS
8413 staticp = 0;
8414 RIDBIT_RESET (RID_STATIC, specbits);
8415 }
b7484fbe
MS
8416 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
8417 {
33bd39a2 8418 error ("static member `%D' declared `register'", decl);
b7484fbe
MS
8419 RIDBIT_RESET (RID_REGISTER, specbits);
8420 }
f30432d7 8421 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
8d08fdba 8422 {
33bd39a2 8423 pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
f30432d7 8424 decl);
8d08fdba
MS
8425 RIDBIT_RESET (RID_EXTERN, specbits);
8426 }
8427 }
8428 }
8429
34fc957d 8430 my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
8d08fdba
MS
8431
8432 /* Record `register' declaration for warnings on &
8433 and in case doing stupid register allocation. */
8434
8435 if (RIDBIT_SETP (RID_REGISTER, specbits))
8436 DECL_REGISTER (decl) = 1;
8437
8926095f
MS
8438 if (RIDBIT_SETP (RID_EXTERN, specbits))
8439 DECL_THIS_EXTERN (decl) = 1;
8440
faae18ab
MS
8441 if (RIDBIT_SETP (RID_STATIC, specbits))
8442 DECL_THIS_STATIC (decl) = 1;
8443
adecb3f4
MM
8444 /* Record constancy and volatility. There's no need to do this
8445 when processing a template; we'll do this for the instantiated
8446 declaration based on the type of DECL. */
8447 if (!processing_template_decl)
8448 c_apply_type_quals_to_decl (type_quals, decl);
8d08fdba
MS
8449
8450 return decl;
8451 }
8452}
8453\f
f181d4ae
MM
8454/* Subroutine of start_function. Ensure that each of the parameter
8455 types (as listed in PARMS) is complete, as is required for a
8456 function definition. */
e92cc029 8457
8d08fdba 8458static void
11f6b451 8459require_complete_types_for_parms (tree parms)
8d08fdba 8460{
07c88314 8461 for (; parms; parms = TREE_CHAIN (parms))
8d08fdba 8462 {
5cce22b6 8463 if (VOID_TYPE_P (TREE_TYPE (parms)))
f4f206f4 8464 /* grokparms will have already issued an error. */
5cce22b6
NS
8465 TREE_TYPE (parms) = error_mark_node;
8466 else if (complete_type_or_else (TREE_TYPE (parms), parms))
753225c1
JM
8467 {
8468 layout_decl (parms, 0);
8469 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8470 }
5cce22b6
NS
8471 else
8472 TREE_TYPE (parms) = error_mark_node;
8d08fdba
MS
8473 }
8474}
8475
838dfd8a 8476/* Returns nonzero if T is a local variable. */
297e73d8 8477
46e8c075 8478int
11f6b451 8479local_variable_p (tree t)
297e73d8 8480{
68642fb6 8481 if ((TREE_CODE (t) == VAR_DECL
297e73d8
MM
8482 /* A VAR_DECL with a context that is a _TYPE is a static data
8483 member. */
8484 && !TYPE_P (CP_DECL_CONTEXT (t))
8485 /* Any other non-local variable must be at namespace scope. */
46e8c075 8486 && !DECL_NAMESPACE_SCOPE_P (t))
297e73d8 8487 || (TREE_CODE (t) == PARM_DECL))
46e8c075 8488 return 1;
297e73d8 8489
46e8c075
MM
8490 return 0;
8491}
8492
838dfd8a 8493/* Returns nonzero if T is an automatic local variable or a label.
46e8c075
MM
8494 (These are the declarations that need to be remapped when the code
8495 containing them is duplicated.) */
8496
8497int
11f6b451 8498nonstatic_local_decl_p (tree t)
46e8c075
MM
8499{
8500 return ((local_variable_p (t) && !TREE_STATIC (t))
8501 || TREE_CODE (t) == LABEL_DECL
8502 || TREE_CODE (t) == RESULT_DECL);
8503}
8504
8505/* Like local_variable_p, but suitable for use as a tree-walking
8506 function. */
8507
8508static tree
11f6b451
NN
8509local_variable_p_walkfn (tree* tp,
8510 int* walk_subtrees ATTRIBUTE_UNUSED ,
8511 void* data ATTRIBUTE_UNUSED )
46e8c075 8512{
68642fb6 8513 return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
46e8c075 8514 ? *tp : NULL_TREE);
297e73d8
MM
8515}
8516
8517/* Check that ARG, which is a default-argument expression for a
0e339752 8518 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
297e73d8
MM
8519 something goes wrong. DECL may also be a _TYPE node, rather than a
8520 DECL, if there is no DECL available. */
8521
8522tree
11f6b451 8523check_default_argument (tree decl, tree arg)
297e73d8
MM
8524{
8525 tree var;
8526 tree decl_type;
8527
8528 if (TREE_CODE (arg) == DEFAULT_ARG)
8529 /* We get a DEFAULT_ARG when looking at an in-class declaration
8530 with a default argument. Ignore the argument for now; we'll
8531 deal with it after the class is complete. */
8532 return arg;
8533
8534 if (processing_template_decl || uses_template_parms (arg))
8535 /* We don't do anything checking until instantiation-time. Note
8536 that there may be uninstantiated arguments even for an
8537 instantiated function, since default arguments are not
8538 instantiated until they are needed. */
8539 return arg;
8540
8541 if (TYPE_P (decl))
8542 {
8543 decl_type = decl;
8544 decl = NULL_TREE;
8545 }
8546 else
8547 decl_type = TREE_TYPE (decl);
8548
68642fb6 8549 if (arg == error_mark_node
297e73d8
MM
8550 || decl == error_mark_node
8551 || TREE_TYPE (arg) == error_mark_node
8552 || decl_type == error_mark_node)
8553 /* Something already went wrong. There's no need to check
8554 further. */
8555 return error_mark_node;
8556
8557 /* [dcl.fct.default]
68642fb6 8558
297e73d8
MM
8559 A default argument expression is implicitly converted to the
8560 parameter type. */
8561 if (!TREE_TYPE (arg)
8562 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
8563 {
8564 if (decl)
33bd39a2 8565 error ("default argument for `%#D' has type `%T'",
297e73d8
MM
8566 decl, TREE_TYPE (arg));
8567 else
33bd39a2 8568 error ("default argument for parameter of type `%T' has type `%T'",
297e73d8
MM
8569 decl_type, TREE_TYPE (arg));
8570
8571 return error_mark_node;
8572 }
8573
8574 /* [dcl.fct.default]
8575
8576 Local variables shall not be used in default argument
68642fb6 8577 expressions.
297e73d8
MM
8578
8579 The keyword `this' shall not be used in a default argument of a
8580 member function. */
5362b086 8581 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
ee94fce6 8582 NULL);
297e73d8
MM
8583 if (var)
8584 {
33bd39a2 8585 error ("default argument `%E' uses local variable `%D'",
297e73d8
MM
8586 arg, var);
8587 return error_mark_node;
8588 }
8589
8590 /* All is well. */
8591 return arg;
8592}
8593
8d08fdba
MS
8594/* Decode the list of parameter types for a function type.
8595 Given the list of things declared inside the parens,
8596 return a list of types.
8597
5cce22b6
NS
8598 We determine whether ellipsis parms are used by PARMLIST_ELLIPSIS_P
8599 flag. If unset, we append void_list_node. A parmlist declared
8600 as `(void)' is accepted as the empty parmlist.
8601
8602 Also set last_function_parms to the chain of PARM_DECLs. */
8d08fdba
MS
8603
8604static tree
11f6b451 8605grokparms (tree first_parm)
8d08fdba
MS
8606{
8607 tree result = NULL_TREE;
8608 tree decls = NULL_TREE;
5cce22b6
NS
8609 int ellipsis = !first_parm || PARMLIST_ELLIPSIS_P (first_parm);
8610 tree parm, chain;
8611 int any_error = 0;
8d08fdba 8612
5cce22b6
NS
8613 my_friendly_assert (!first_parm || TREE_PARMLIST (first_parm), 20001115);
8614
8615 for (parm = first_parm; parm != NULL_TREE; parm = chain)
8d08fdba 8616 {
0657c69c 8617 tree type = NULL_TREE;
98884b26 8618 tree decl = TREE_VALUE (parm);
5cce22b6 8619 tree init = TREE_PURPOSE (parm);
98884b26 8620 tree specs, attrs;
8d08fdba 8621
5cce22b6
NS
8622 chain = TREE_CHAIN (parm);
8623 /* @@ weak defense against parse errors. */
8624 if (TREE_CODE (decl) != VOID_TYPE
8625 && TREE_CODE (decl) != TREE_LIST)
8d08fdba 8626 {
5cce22b6
NS
8627 /* Give various messages as the need arises. */
8628 if (TREE_CODE (decl) == STRING_CST)
33bd39a2 8629 error ("invalid string constant `%E'", decl);
5cce22b6
NS
8630 else if (TREE_CODE (decl) == INTEGER_CST)
8631 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
8632 continue;
8633 }
8d08fdba 8634
5cce22b6
NS
8635 if (parm == void_list_node)
8636 break;
8d08fdba 8637
98884b26
JM
8638 split_specs_attrs (TREE_PURPOSE (decl), &specs, &attrs);
8639 decl = grokdeclarator (TREE_VALUE (decl), specs,
8640 PARM, init != NULL_TREE, &attrs);
5cce22b6
NS
8641 if (! decl || TREE_TYPE (decl) == error_mark_node)
8642 continue;
d363e7bf 8643
98884b26
JM
8644 if (attrs)
8645 cplus_decl_attributes (&decl, attrs, 0);
8646
5cce22b6
NS
8647 type = TREE_TYPE (decl);
8648 if (VOID_TYPE_P (type))
8649 {
8650 if (same_type_p (type, void_type_node)
8651 && !DECL_NAME (decl) && !result && !chain && !ellipsis)
8652 /* this is a parmlist of `(void)', which is ok. */
8653 break;
7a228918 8654 cxx_incomplete_type_error (decl, type);
0657c69c
MM
8655 /* It's not a good idea to actually create parameters of
8656 type `void'; other parts of the compiler assume that a
8657 void type terminates the parameter list. */
04f3dc2b 8658 type = error_mark_node;
0657c69c 8659 TREE_TYPE (decl) = error_mark_node;
5cce22b6 8660 }
8d08fdba 8661
d363e7bf 8662 if (type != error_mark_node)
04f3dc2b
MM
8663 {
8664 /* Top-level qualifiers on the parameters are
8665 ignored for function types. */
79a1a736 8666 type = cp_build_qualified_type (type, 0);
04f3dc2b
MM
8667 if (TREE_CODE (type) == METHOD_TYPE)
8668 {
33bd39a2 8669 error ("parameter `%D' invalidly declared method type", decl);
04f3dc2b
MM
8670 type = build_pointer_type (type);
8671 TREE_TYPE (decl) = type;
8672 }
04f3dc2b 8673 else if (abstract_virtuals_error (decl, type))
a1c65f9f 8674 any_error = 1; /* Seems like a good idea. */
04f3dc2b
MM
8675 else if (POINTER_TYPE_P (type))
8676 {
8677 /* [dcl.fct]/6, parameter types cannot contain pointers
8678 (references) to arrays of unknown bound. */
98979fe0
NS
8679 tree t = TREE_TYPE (type);
8680 int ptr = TYPE_PTR_P (type);
8681
8682 while (1)
8683 {
8684 if (TYPE_PTR_P (t))
8685 ptr = 1;
8686 else if (TREE_CODE (t) != ARRAY_TYPE)
8687 break;
8688 else if (!TYPE_DOMAIN (t))
8689 break;
8690 t = TREE_TYPE (t);
8691 }
04f3dc2b 8692 if (TREE_CODE (t) == ARRAY_TYPE)
33bd39a2 8693 error ("parameter `%D' includes %s to array of unknown bound `%T'",
98979fe0 8694 decl, ptr ? "pointer" : "reference", t);
04f3dc2b
MM
8695 }
8696
04f3dc2b
MM
8697 if (!any_error && init)
8698 init = check_default_argument (decl, init);
8699 else
8700 init = NULL_TREE;
8701 }
8d08fdba 8702
5cce22b6
NS
8703 TREE_CHAIN (decl) = decls;
8704 decls = decl;
0657c69c 8705 result = tree_cons (init, type, result);
8d08fdba 8706 }
5cce22b6
NS
8707 decls = nreverse (decls);
8708 result = nreverse (result);
8709 if (!ellipsis)
8710 result = chainon (result, void_list_node);
8d08fdba
MS
8711 last_function_parms = decls;
8712
8d08fdba
MS
8713 return result;
8714}
42976354 8715
8d08fdba 8716\f
271e6f02
NS
8717/* D is a constructor or overloaded `operator='.
8718
8719 Let T be the class in which D is declared. Then, this function
8720 returns:
8721
8722 -1 if D's is an ill-formed constructor or copy assignment operator
8723 whose first parameter is of type `T'.
8724 0 if D is not a copy constructor or copy assignment
8725 operator.
8726 1 if D is a copy constructor or copy assignment operator whose
8727 first parameter is a reference to const qualified T.
8728 2 if D is a copy constructor or copy assignment operator whose
8729 first parameter is a reference to non-const qualified T.
8730
8731 This function can be used as a predicate. Positive values indicate
838dfd8a 8732 a copy constructor and nonzero values indicate a copy assignment
4f1c5b7d
MM
8733 operator. */
8734
c11b6f21 8735int
11f6b451 8736copy_fn_p (tree d)
c11b6f21 8737{
271e6f02
NS
8738 tree args;
8739 tree arg_type;
8740 int result = 1;
8741
8742 my_friendly_assert (DECL_FUNCTION_MEMBER_P (d), 20011208);
4f1c5b7d 8743
271e6f02
NS
8744 if (DECL_TEMPLATE_INFO (d) && is_member_template (DECL_TI_TEMPLATE (d)))
8745 /* Instantiations of template member functions are never copy
8746 functions. Note that member functions of templated classes are
8747 represented as template functions internally, and we must
8748 accept those as copy functions. */
8749 return 0;
8750
8751 args = FUNCTION_FIRST_USER_PARMTYPE (d);
8752 if (!args)
4f1c5b7d
MM
8753 return 0;
8754
271e6f02
NS
8755 arg_type = TREE_VALUE (args);
8756
8757 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8758 {
8759 /* Pass by value copy assignment operator. */
8760 result = -1;
8761 }
8762 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8763 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8764 {
8765 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8766 result = 2;
8767 }
8768 else
8769 return 0;
8770
8771 args = TREE_CHAIN (args);
8772
8773 if (args && args != void_list_node && !TREE_PURPOSE (args))
8774 /* There are more non-optional args. */
8775 return 0;
8776
8777 return result;
8778}
8779
8780/* Remember any special properties of member function DECL. */
8781
11f6b451 8782void grok_special_member_properties (tree decl)
271e6f02
NS
8783{
8784 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P(decl))
8785 ; /* Not special. */
8786 else if (DECL_CONSTRUCTOR_P (decl))
8787 {
8788 int ctor = copy_fn_p (decl);
8789
8790 if (ctor > 0)
8791 {
8792 /* [class.copy]
8793
8794 A non-template constructor for class X is a copy
8795 constructor if its first parameter is of type X&, const
8796 X&, volatile X& or const volatile X&, and either there
8797 are no other parameters or else all other parameters have
8798 default arguments. */
8799 TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
8800 if (ctor > 1)
8801 TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
8802 }
8803 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
8804 TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
8805 }
8806 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8807 {
8808 /* [class.copy]
8809
8810 A non-template assignment operator for class X is a copy
8811 assignment operator if its parameter is of type X, X&, const
8812 X&, volatile X& or const volatile X&. */
8813
8814 int assop = copy_fn_p (decl);
8815
8816 if (assop)
8817 {
8818 TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8819 if (assop != 1)
8820 TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8821 if (DECL_PURE_VIRTUAL_P (decl))
8822 TYPE_HAS_ABSTRACT_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8823 }
8824 }
c11b6f21
MS
8825}
8826
271e6f02
NS
8827/* Check a constructor DECL has the correct form. Complains
8828 if the class has a constructor of the form X(X). */
e92cc029 8829
a0a33927 8830int
11f6b451 8831grok_ctor_properties (tree ctype, tree decl)
8d08fdba 8832{
271e6f02
NS
8833 int ctor_parm = copy_fn_p (decl);
8834
8835 if (ctor_parm < 0)
8836 {
8837 /* [class.copy]
8838
8839 A declaration of a constructor for a class X is ill-formed if
8840 its first parameter is of type (optionally cv-qualified) X
8841 and either there are no other parameters or else all other
8842 parameters have default arguments.
8843
8844 We *don't* complain about member template instantiations that
8845 have this form, though; they can occur as we try to decide
8846 what constructor to use during overload resolution. Since
8847 overload resolution will never prefer such a constructor to
8848 the non-template copy constructor (which is either explicitly
8849 or implicitly defined), there's no need to worry about their
8850 existence. Theoretically, they should never even be
8851 instantiated, but that's hard to forestall. */
33bd39a2 8852 error ("invalid constructor; you probably meant `%T (const %T&)'",
0b41abe6
JM
8853 ctype, ctype);
8854 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
8855 return 0;
8d08fdba 8856 }
271e6f02 8857
a0a33927 8858 return 1;
8d08fdba
MS
8859}
8860
596ea4e5 8861/* An operator with this code is unary, but can also be binary. */
e92cc029 8862
a28e3c7f 8863static int
11f6b451 8864ambi_op_p (enum tree_code code)
8d08fdba 8865{
596ea4e5
AS
8866 return (code == INDIRECT_REF
8867 || code == ADDR_EXPR
8868 || code == CONVERT_EXPR
8869 || code == NEGATE_EXPR
8870 || code == PREINCREMENT_EXPR
8871 || code == PREDECREMENT_EXPR);
8d08fdba
MS
8872}
8873
8874/* An operator with this name can only be unary. */
e92cc029 8875
a28e3c7f 8876static int
11f6b451 8877unary_op_p (enum tree_code code)
8d08fdba 8878{
596ea4e5
AS
8879 return (code == TRUTH_NOT_EXPR
8880 || code == BIT_NOT_EXPR
8881 || code == COMPONENT_REF
8882 || code == TYPE_EXPR);
8d08fdba
MS
8883}
8884
4b0d3cbe
MM
8885/* DECL is a declaration for an overloaded operator. Returns true if
8886 the declaration is valid; false otherwise. If COMPLAIN is true,
8887 errors are issued for invalid declarations. */
e92cc029 8888
4b0d3cbe
MM
8889bool
8890grok_op_properties (tree decl, int friendp, bool complain)
8d08fdba
MS
8891{
8892 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
596ea4e5 8893 tree argtype;
8d08fdba
MS
8894 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
8895 tree name = DECL_NAME (decl);
596ea4e5
AS
8896 enum tree_code operator_code;
8897 int arity;
4b0d3cbe
MM
8898 bool ok;
8899
8900 /* Assume that the declaration is valid. */
8901 ok = true;
596ea4e5
AS
8902
8903 /* Count the number of arguments. */
8904 for (argtype = argtypes, arity = 0;
8905 argtype && argtype != void_list_node;
8906 argtype = TREE_CHAIN (argtype))
8907 ++arity;
8d08fdba 8908
a28e3c7f
MS
8909 if (current_class_type == NULL_TREE)
8910 friendp = 1;
8d08fdba 8911
596ea4e5
AS
8912 if (DECL_CONV_FN_P (decl))
8913 operator_code = TYPE_EXPR;
8914 else
8915 do
8916 {
0c918ce5
MM
8917#define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
8918 if (ansi_opname (CODE) == name) \
8919 { \
75ac8dec 8920 operator_code = (CODE); \
0c918ce5
MM
8921 break; \
8922 } \
8923 else if (ansi_assopname (CODE) == name) \
8924 { \
75ac8dec 8925 operator_code = (CODE); \
0c918ce5
MM
8926 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
8927 break; \
596ea4e5
AS
8928 }
8929
8930#include "operators.def"
8931#undef DEF_OPERATOR
8932
a98facb0 8933 abort ();
596ea4e5
AS
8934 }
8935 while (0);
8936 my_friendly_assert (operator_code != LAST_CPLUS_TREE_CODE, 20000526);
8937 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
8938
a28e3c7f
MS
8939 if (! friendp)
8940 {
596ea4e5
AS
8941 switch (operator_code)
8942 {
596ea4e5
AS
8943 case NEW_EXPR:
8944 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
8945 break;
5362b086 8946
596ea4e5
AS
8947 case DELETE_EXPR:
8948 TYPE_GETS_DELETE (current_class_type) |= 1;
8949 break;
5362b086 8950
596ea4e5
AS
8951 case VEC_NEW_EXPR:
8952 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
8953 break;
5362b086 8954
596ea4e5
AS
8955 case VEC_DELETE_EXPR:
8956 TYPE_GETS_DELETE (current_class_type) |= 2;
8957 break;
8958
8959 default:
8960 break;
8961 }
8962 }
8963
8964 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
8d08fdba 8965 {
8d08fdba
MS
8966 /* When the compiler encounters the definition of A::operator new, it
8967 doesn't look at the class declaration to find out if it's static. */
a28e3c7f 8968 if (methodp)
3afb32a4 8969 revert_static_member_fn (decl);
68642fb6 8970
36791f1e 8971 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8d08fdba 8972 }
596ea4e5 8973 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8d08fdba 8974 {
a28e3c7f 8975 if (methodp)
3afb32a4 8976 revert_static_member_fn (decl);
68642fb6 8977
36791f1e 8978 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8d08fdba 8979 }
8d08fdba
MS
8980 else
8981 {
8982 /* An operator function must either be a non-static member function
8983 or have at least one parameter of a class, a reference to a class,
8984 an enumeration, or a reference to an enumeration. 13.4.0.6 */
700f8a87 8985 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba 8986 {
596ea4e5
AS
8987 if (operator_code == TYPE_EXPR
8988 || operator_code == CALL_EXPR
8989 || operator_code == COMPONENT_REF
8990 || operator_code == ARRAY_REF
8991 || operator_code == NOP_EXPR)
33bd39a2 8992 error ("`%D' must be a nonstatic member function", decl);
8d08fdba
MS
8993 else
8994 {
4b0d3cbe 8995 tree p;
8d08fdba 8996
700f8a87 8997 if (DECL_STATIC_FUNCTION_P (decl))
33bd39a2 8998 error ("`%D' must be either a non-static member function or a non-member function", decl);
700f8a87 8999
4b0d3cbe
MM
9000 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
9001 {
9002 tree arg = non_reference (TREE_VALUE (p));
9003 /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
9004 because these checks are performed even on
9005 template functions. */
9006 if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
9007 break;
9008 }
9009
9010 if (!p || p == void_list_node)
9011 {
9012 if (!complain)
9013 return false;
9014
9015 error ("`%D' must have an argument of class or "
9016 "enumerated type",
9017 decl);
9018 ok = false;
9019 }
8d08fdba
MS
9020 }
9021 }
68642fb6 9022
4b0d3cbe
MM
9023 /* There are no restrictions on the arguments to an overloaded
9024 "operator ()". */
596ea4e5 9025 if (operator_code == CALL_EXPR)
4b0d3cbe 9026 return ok;
8d08fdba 9027
9a3b49ac 9028 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
a0a33927
MS
9029 {
9030 tree t = TREE_TYPE (name);
17708e90 9031 if (! friendp)
a0a33927
MS
9032 {
9033 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
d8e178a0 9034 const char *what = 0;
5362b086 9035
a0a33927
MS
9036 if (ref)
9037 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
9038
17708e90
NS
9039 if (TREE_CODE (t) == VOID_TYPE)
9040 what = "void";
9041 else if (t == current_class_type)
a0a33927 9042 what = "the same type";
9a3b49ac 9043 /* Don't force t to be complete here. */
a0a33927 9044 else if (IS_AGGR_TYPE (t)
d0f062fb 9045 && COMPLETE_TYPE_P (t)
a0a33927
MS
9046 && DERIVED_FROM_P (t, current_class_type))
9047 what = "a base class";
9048
dfbeb061 9049 if (what && warn_conversion)
8251199e 9050 warning ("conversion to %s%s will never use a type conversion operator",
a0a33927
MS
9051 ref ? "a reference to " : "", what);
9052 }
9053 }
271e6f02 9054 if (operator_code == COND_EXPR)
8d08fdba
MS
9055 {
9056 /* 13.4.0.3 */
33bd39a2 9057 error ("ISO C++ prohibits overloading operator ?:");
68642fb6 9058 }
596ea4e5 9059 else if (ambi_op_p (operator_code))
8d08fdba 9060 {
596ea4e5
AS
9061 if (arity == 1)
9062 /* We pick the one-argument operator codes by default, so
9063 we don't have to change anything. */
9064 ;
9065 else if (arity == 2)
8d08fdba 9066 {
596ea4e5
AS
9067 /* If we thought this was a unary operator, we now know
9068 it to be a binary operator. */
9069 switch (operator_code)
9070 {
9071 case INDIRECT_REF:
9072 operator_code = MULT_EXPR;
9073 break;
9074
9075 case ADDR_EXPR:
9076 operator_code = BIT_AND_EXPR;
9077 break;
9078
9079 case CONVERT_EXPR:
9080 operator_code = PLUS_EXPR;
9081 break;
9082
9083 case NEGATE_EXPR:
9084 operator_code = MINUS_EXPR;
9085 break;
9086
9087 case PREINCREMENT_EXPR:
9088 operator_code = POSTINCREMENT_EXPR;
9089 break;
9090
9091 case PREDECREMENT_EXPR:
655dc6ee 9092 operator_code = POSTDECREMENT_EXPR;
596ea4e5
AS
9093 break;
9094
9095 default:
a98facb0 9096 abort ();
596ea4e5
AS
9097 }
9098
9099 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9100
9101 if ((operator_code == POSTINCREMENT_EXPR
9102 || operator_code == POSTDECREMENT_EXPR)
5156628f 9103 && ! processing_template_decl
007e5fea 9104 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8d08fdba
MS
9105 {
9106 if (methodp)
33bd39a2 9107 error ("postfix `%D' must take `int' as its argument",
8d08fdba
MS
9108 decl);
9109 else
33bd39a2 9110 error
8251199e
JM
9111 ("postfix `%D' must take `int' as its second argument",
9112 decl);
8d08fdba
MS
9113 }
9114 }
9115 else
9116 {
9117 if (methodp)
33bd39a2 9118 error ("`%D' must take either zero or one argument", decl);
8d08fdba 9119 else
33bd39a2 9120 error ("`%D' must take either one or two arguments", decl);
8d08fdba 9121 }
824b9a4c
MS
9122
9123 /* More Effective C++ rule 6. */
eb448459 9124 if (warn_ecpp
596ea4e5
AS
9125 && (operator_code == POSTINCREMENT_EXPR
9126 || operator_code == POSTDECREMENT_EXPR
9127 || operator_code == PREINCREMENT_EXPR
9128 || operator_code == PREDECREMENT_EXPR))
824b9a4c
MS
9129 {
9130 tree arg = TREE_VALUE (argtypes);
9131 tree ret = TREE_TYPE (TREE_TYPE (decl));
9132 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
9133 arg = TREE_TYPE (arg);
9134 arg = TYPE_MAIN_VARIANT (arg);
596ea4e5
AS
9135 if (operator_code == PREINCREMENT_EXPR
9136 || operator_code == PREDECREMENT_EXPR)
824b9a4c
MS
9137 {
9138 if (TREE_CODE (ret) != REFERENCE_TYPE
3bfdc719
MM
9139 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
9140 arg))
33bd39a2 9141 warning ("prefix `%D' should return `%T'", decl,
824b9a4c
MS
9142 build_reference_type (arg));
9143 }
9144 else
9145 {
3bfdc719 9146 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
33bd39a2 9147 warning ("postfix `%D' should return `%T'", decl, arg);
824b9a4c
MS
9148 }
9149 }
8d08fdba 9150 }
596ea4e5 9151 else if (unary_op_p (operator_code))
8d08fdba 9152 {
596ea4e5 9153 if (arity != 1)
8d08fdba
MS
9154 {
9155 if (methodp)
33bd39a2 9156 error ("`%D' must take `void'", decl);
8d08fdba 9157 else
33bd39a2 9158 error ("`%D' must take exactly one argument", decl);
8d08fdba
MS
9159 }
9160 }
596ea4e5 9161 else /* if (binary_op_p (operator_code)) */
8d08fdba 9162 {
596ea4e5 9163 if (arity != 2)
8d08fdba
MS
9164 {
9165 if (methodp)
33bd39a2 9166 error ("`%D' must take exactly one argument", decl);
8d08fdba 9167 else
33bd39a2 9168 error ("`%D' must take exactly two arguments", decl);
8d08fdba 9169 }
824b9a4c
MS
9170
9171 /* More Effective C++ rule 7. */
eb448459 9172 if (warn_ecpp
596ea4e5
AS
9173 && (operator_code == TRUTH_ANDIF_EXPR
9174 || operator_code == TRUTH_ORIF_EXPR
9175 || operator_code == COMPOUND_EXPR))
33bd39a2 9176 warning ("user-defined `%D' always evaluates both arguments",
824b9a4c
MS
9177 decl);
9178 }
9179
9180 /* Effective C++ rule 23. */
eb448459 9181 if (warn_ecpp
596ea4e5 9182 && arity == 2
4bd7c270 9183 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
596ea4e5
AS
9184 && (operator_code == PLUS_EXPR
9185 || operator_code == MINUS_EXPR
9186 || operator_code == TRUNC_DIV_EXPR
4bd7c270
NS
9187 || operator_code == MULT_EXPR
9188 || operator_code == TRUNC_MOD_EXPR)
824b9a4c 9189 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
33bd39a2 9190 warning ("`%D' should return by value", decl);
8d08fdba 9191
271e6f02 9192 /* [over.oper]/8 */
34332678
CT
9193 for (; argtypes && argtypes != void_list_node;
9194 argtypes = TREE_CHAIN (argtypes))
9195 if (TREE_PURPOSE (argtypes))
9196 {
9197 TREE_PURPOSE (argtypes) = NULL_TREE;
596ea4e5
AS
9198 if (operator_code == POSTINCREMENT_EXPR
9199 || operator_code == POSTDECREMENT_EXPR)
34332678
CT
9200 {
9201 if (pedantic)
33bd39a2 9202 pedwarn ("`%D' cannot have default arguments", decl);
34332678
CT
9203 }
9204 else
33bd39a2 9205 error ("`%D' cannot have default arguments", decl);
34332678
CT
9206 }
9207
8d08fdba 9208 }
4b0d3cbe
MM
9209
9210 return ok;
8d08fdba
MS
9211}
9212\f
d8e178a0 9213static const char *
11f6b451 9214tag_name (enum tag_types code)
094fe153
JM
9215{
9216 switch (code)
9217 {
9218 case record_type:
9219 return "struct";
9220 case class_type:
9221 return "class";
9222 case union_type:
9223 return "union ";
9224 case enum_type:
9225 return "enum";
094fe153 9226 default:
a98facb0 9227 abort ();
094fe153
JM
9228 }
9229}
9230
befcd99b 9231/* Name lookup in an elaborated-type-specifier (after the keyword
4b0d3cbe 9232 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
befcd99b 9233 elaborated-type-specifier is invalid, issue a diagnostic and return
4b0d3cbe 9234 error_mark_node; otherwise, return the *_TYPE to which it referred.
cbd63935 9235 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
befcd99b 9236
560ad596 9237tree
befcd99b 9238check_elaborated_type_specifier (enum tag_types tag_code,
4b0d3cbe 9239 tree decl,
cbd63935 9240 bool allow_template_p)
befcd99b 9241{
4b0d3cbe 9242 tree type;
befcd99b 9243
4b0d3cbe
MM
9244 /* In the case of:
9245
9246 struct S { struct S *p; };
9247
9248 name lookup will find the TYPE_DECL for the implicit "S::S"
9249 typedef. Adjust for that here. */
9250 if (DECL_SELF_REFERENCE_P (decl))
9251 decl = TYPE_NAME (TREE_TYPE (decl));
9252
9253 type = TREE_TYPE (decl);
9254
9255 /* [dcl.type.elab]
9256
9257 If the identifier resolves to a typedef-name or a template
9258 type-parameter, the elaborated-type-specifier is ill-formed.
9259
9260 In other words, the only legitimate declaration to use in the
9261 elaborated type specifier is the implicit typedef created when
9262 the type is declared. */
9263 if (!DECL_IMPLICIT_TYPEDEF_P (decl))
befcd99b 9264 {
4b0d3cbe
MM
9265 error ("using typedef-name `%D' after `%s'", decl, tag_name (tag_code));
9266 return IS_AGGR_TYPE (type) ? type : error_mark_node;
befcd99b 9267 }
4b0d3cbe
MM
9268
9269 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
befcd99b
MM
9270 {
9271 error ("using template type parameter `%T' after `%s'",
9272 type, tag_name (tag_code));
4b0d3cbe 9273 return error_mark_node;
befcd99b 9274 }
cbd63935
KL
9275 else if (TREE_CODE (type) != RECORD_TYPE
9276 && TREE_CODE (type) != UNION_TYPE
9277 && tag_code != enum_type)
9278 {
9279 error ("`%T' referred to as `%s'", type, tag_name (tag_code));
4b0d3cbe 9280 return error_mark_node;
cbd63935
KL
9281 }
9282 else if (TREE_CODE (type) != ENUMERAL_TYPE
9283 && tag_code == enum_type)
9284 {
9285 error ("`%T' referred to as enum", type);
4b0d3cbe 9286 return error_mark_node;
cbd63935
KL
9287 }
9288 else if (!allow_template_p
9289 && TREE_CODE (type) == RECORD_TYPE
9290 && CLASSTYPE_IS_TEMPLATE (type))
9291 {
9292 /* If a class template appears as elaborated type specifier
9293 without a template header such as:
9294
9295 template <class T> class C {};
9296 void f(class C); // No template header here
9297
9298 then the required template argument is missing. */
9299
9300 error ("template argument required for `%s %T'",
9301 tag_name (tag_code),
9302 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
4b0d3cbe 9303 return error_mark_node;
cbd63935 9304 }
befcd99b 9305
4b0d3cbe 9306 return type;
befcd99b
MM
9307}
9308
cbd63935 9309/* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
8d08fdba
MS
9310 Define the tag as a forward-reference if it is not defined.
9311
cbd63935
KL
9312 If a declaration is given, process it here, and report an error if
9313 multiple declarations are not identical. ATTRIBUTE is the attribute
9314 appeared in this declaration.
8d08fdba 9315
cbd63935 9316 GLOBALIZE is false when this is also a definition. Only look in
8d08fdba 9317 the current frame for the name (since C++ allows new names in any
cbd63935
KL
9318 scope.)
9319
9320 TEMPLATE_HEADER_P is true when this declaration is preceded by
9321 a set of template parameters. */
8d08fdba 9322
8d08fdba 9323tree
88e5899c 9324xref_tag (enum tag_types tag_code, tree name, tree attributes,
cbd63935 9325 bool globalize, bool template_header_p)
8d08fdba 9326{
8d08fdba 9327 enum tree_code code;
926ce8bd 9328 tree t;
e2500fed 9329 struct cp_binding_level *b = current_binding_level;
25aab5d0 9330 tree context = NULL_TREE;
dc8263bc 9331
22ffcc6f 9332 timevar_push (TV_NAME_LOOKUP);
cbd63935
KL
9333
9334 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 0);
9335
8d08fdba
MS
9336 switch (tag_code)
9337 {
9338 case record_type:
9339 case class_type:
8d08fdba 9340 code = RECORD_TYPE;
8d08fdba
MS
9341 break;
9342 case union_type:
9343 code = UNION_TYPE;
8d08fdba
MS
9344 break;
9345 case enum_type:
9346 code = ENUMERAL_TYPE;
9347 break;
9348 default:
a98facb0 9349 abort ();
8d08fdba
MS
9350 }
9351
8ccc31eb 9352 if (! globalize)
8d08fdba 9353 {
f3400fe2
JM
9354 /* If we know we are defining this tag, only look it up in
9355 this scope and don't try to find it as a type. */
cbd63935 9356 t = lookup_tag (code, name, b, 1);
8d08fdba
MS
9357 }
9358 else
9359 {
cbd63935
KL
9360 tree decl = lookup_name (name, 1);
9361
9362 if (decl && DECL_CLASS_TEMPLATE_P (decl))
9363 decl = DECL_TEMPLATE_RESULT (decl);
68642fb6 9364
cbd63935 9365 if (decl && TREE_CODE (decl) == TYPE_DECL)
25aab5d0 9366 {
cbd63935
KL
9367 /* Two cases we need to consider when deciding if a class
9368 template is allowed as an elaborated type specifier:
9369 1. It is a self reference to its own class.
9370 2. It comes with a template header.
25aab5d0 9371
cbd63935 9372 For example:
6757edfe 9373
cbd63935
KL
9374 template <class T> class C {
9375 class C *c1; // DECL_SELF_REFERENCE_P is true
9376 class D;
9377 };
9378 template <class U> class C; // template_header_p is true
9379 template <class T> class C<T>::D {
9380 class C *c2; // DECL_SELF_REFERENCE_P is true
9381 }; */
9382
4b0d3cbe
MM
9383 t = check_elaborated_type_specifier (tag_code,
9384 decl,
cbd63935
KL
9385 template_header_p
9386 | DECL_SELF_REFERENCE_P (decl));
9387 if (t == error_mark_node)
9388 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
25aab5d0 9389 }
cbd63935
KL
9390 else
9391 t = NULL_TREE;
25aab5d0 9392
cbd63935 9393 if (t && current_class_type
68642fb6 9394 && template_class_depth (current_class_type)
cbd63935 9395 && template_header_p)
25aab5d0 9396 {
838dfd8a 9397 /* Since GLOBALIZE is nonzero, we are not looking at a
25aab5d0
MM
9398 definition of this tag. Since, in addition, we are currently
9399 processing a (member) template declaration of a template
9400 class, we must be very careful; consider:
9401
9402 template <class X>
9403 struct S1
9404
9405 template <class U>
9406 struct S2
9407 { template <class V>
9408 friend struct S1; };
9409
9410 Here, the S2::S1 declaration should not be confused with the
9411 outer declaration. In particular, the inner version should
9412 have a template parameter of level 2, not level 1. This
9413 would be particularly important if the member declaration
9414 were instead:
9415
9416 template <class V = U> friend struct S1;
9417
9418 say, when we should tsubst into `U' when instantiating
9419 S2. On the other hand, when presented with:
9420
9421 template <class T>
9422 struct S1 {
9423 template <class U>
9424 struct S2 {};
9425 template <class U>
9426 friend struct S2;
9427 };
9428
9429 we must find the inner binding eventually. We
9430 accomplish this by making sure that the new type we
9431 create to represent this declaration has the right
9432 TYPE_CONTEXT. */
cbd63935
KL
9433 context = TYPE_CONTEXT (t);
9434 t = NULL_TREE;
8d08fdba
MS
9435 }
9436 }
9437
cbd63935 9438 if (! t)
8d08fdba
MS
9439 {
9440 /* If no such tag is yet defined, create a forward-reference node
9441 and record it as the "definition".
9442 When a real declaration of this type is found,
9443 the forward-reference will be altered into a real type. */
8d08fdba
MS
9444 if (code == ENUMERAL_TYPE)
9445 {
33bd39a2 9446 error ("use of enum `%#D' without previous declaration", name);
fc378698 9447
cbd63935 9448 t = make_node (ENUMERAL_TYPE);
8d08fdba
MS
9449
9450 /* Give the type a default layout like unsigned int
9451 to avoid crashing if it does not get defined. */
cbd63935
KL
9452 TYPE_MODE (t) = TYPE_MODE (unsigned_type_node);
9453 TYPE_ALIGN (t) = TYPE_ALIGN (unsigned_type_node);
9454 TYPE_USER_ALIGN (t) = 0;
9455 TREE_UNSIGNED (t) = 1;
9456 TYPE_PRECISION (t) = TYPE_PRECISION (unsigned_type_node);
9457 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (unsigned_type_node);
9458 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (unsigned_type_node);
8d08fdba
MS
9459
9460 /* Enable us to recognize when a type is created in class context.
9461 To do nested classes correctly, this should probably be cleared
9462 out when we leave this classes scope. Currently this in only
9463 done in `start_enum'. */
9464
cbd63935 9465 pushtag (name, t, globalize);
8d08fdba 9466 }
8d08fdba
MS
9467 else
9468 {
cbd63935
KL
9469 t = make_aggr_type (code);
9470 TYPE_CONTEXT (t) = context;
9471 pushtag (name, t, globalize);
8d08fdba
MS
9472 }
9473 }
9474 else
9475 {
cbd63935
KL
9476 if (!globalize && processing_template_decl && IS_AGGR_TYPE (t))
9477 redeclare_class_template (t, current_template_parms);
8d08fdba
MS
9478 }
9479
cbd63935 9480 TYPE_ATTRIBUTES (t) = attributes;
dc8263bc 9481
cbd63935 9482 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
8d08fdba 9483}
8ccc31eb 9484
fc378698 9485tree
11f6b451 9486xref_tag_from_type (tree old, tree id, int globalize)
fc378698 9487{
88e5899c 9488 enum tag_types tag_kind;
fc378698
MS
9489
9490 if (TREE_CODE (old) == RECORD_TYPE)
88e5899c 9491 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
fc378698 9492 else
88e5899c 9493 tag_kind = union_type;
fc378698
MS
9494
9495 if (id == NULL_TREE)
9496 id = TYPE_IDENTIFIER (old);
9497
cbd63935 9498 return xref_tag (tag_kind, id, /*attributes=*/NULL_TREE, globalize, false);
fc378698
MS
9499}
9500
3fd71a52 9501/* REF is a type (named NAME), for which we have just seen some
dbbf88d1 9502 baseclasses. BASE_LIST is a list of those baseclasses; the
3fd71a52 9503 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
dbbf88d1
NS
9504 the base-class. TREE_VIA_VIRTUAL indicates virtual
9505 inheritance. CODE_TYPE_NODE indicates whether REF is a class,
3fd71a52
MM
9506 struct, or union. */
9507
8ccc31eb 9508void
dbbf88d1 9509xref_basetypes (tree ref, tree base_list)
8ccc31eb
MS
9510{
9511 /* In the declaration `A : X, Y, ... Z' we mark all the types
9512 (A, X, Y, ..., Z) so we can check for duplicates. */
8fbc5ae7 9513 tree *basep;
d6479fe7 9514
8fbc5ae7 9515 int i;
591382c4 9516 enum tag_types tag_code;
a5d7c4a3 9517
bef89e9e
KL
9518 if (ref == error_mark_node)
9519 return;
9520
da15dae6 9521 if (TREE_CODE (ref) == UNION_TYPE)
8ccc31eb 9522 {
33bd39a2 9523 error ("derived union `%T' invalid", ref);
8ccc31eb
MS
9524 return;
9525 }
9526
da15dae6
MM
9527 tag_code = (CLASSTYPE_DECLARED_CLASS (ref) ? class_type : record_type);
9528
d6479fe7
MM
9529 /* First, make sure that any templates in base-classes are
9530 instantiated. This ensures that if we call ourselves recursively
9531 we do not get confused about which classes are marked and which
9532 are not. */
dbbf88d1 9533 basep = &base_list;
8fbc5ae7
MM
9534 while (*basep)
9535 {
9536 tree basetype = TREE_VALUE (*basep);
9537 if (!(processing_template_decl && uses_template_parms (basetype))
9538 && !complete_type_or_else (basetype, NULL))
dbbf88d1 9539 /* An incomplete type. Remove it from the list. */
8fbc5ae7
MM
9540 *basep = TREE_CHAIN (*basep);
9541 else
9542 basep = &TREE_CHAIN (*basep);
9543 }
d6479fe7 9544
8ccc31eb 9545 SET_CLASSTYPE_MARKED (ref);
dbbf88d1
NS
9546 i = list_length (base_list);
9547 if (i)
9548 {
9549 tree binfo = TYPE_BINFO (ref);
9550 tree binfos = make_tree_vec (i);
9551 tree accesses = make_tree_vec (i);
9552
9553 BINFO_BASETYPES (binfo) = binfos;
9554 BINFO_BASEACCESSES (binfo) = accesses;
9555
9556 for (i = 0; base_list; base_list = TREE_CHAIN (base_list))
8ccc31eb 9557 {
dbbf88d1
NS
9558 tree access = TREE_PURPOSE (base_list);
9559 int via_virtual = TREE_VIA_VIRTUAL (base_list);
9560 tree basetype = TREE_VALUE (base_list);
9561 tree base_binfo;
9562
9563 if (access == access_default_node)
9564 /* The base of a derived struct is public by default. */
9565 access = (tag_code == class_type
9566 ? access_private_node : access_public_node);
9567
9568 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
9569 basetype = TREE_TYPE (basetype);
9570 if (!basetype
9571 || (TREE_CODE (basetype) != RECORD_TYPE
9572 && TREE_CODE (basetype) != TYPENAME_TYPE
9573 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9574 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM))
9575 {
9576 error ("base type `%T' fails to be a struct or class type",
9577 basetype);
9578 continue;
9579 }
9580
9581 if (CLASSTYPE_MARKED (basetype))
9582 {
9583 if (basetype == ref)
9584 error ("recursive type `%T' undefined", basetype);
9585 else
9586 error ("duplicate base type `%T' invalid", basetype);
9587 continue;
9588 }
9589
9590 if (TYPE_FOR_JAVA (basetype)
9591 && (current_lang_depth () == 0))
9592 TYPE_FOR_JAVA (ref) = 1;
9593
9594 if (CLASS_TYPE_P (basetype))
9595 {
9596 base_binfo = TYPE_BINFO (basetype);
9597 /* This flag will be in the binfo of the base type, we must
9598 clear it after copying the base binfos. */
9599 BINFO_DEPENDENT_BASE_P (base_binfo)
9600 = dependent_type_p (basetype);
9601 }
8fbc5ae7 9602 else
dbbf88d1
NS
9603 base_binfo = make_binfo (size_zero_node, basetype,
9604 NULL_TREE, NULL_TREE);
9605
9606 TREE_VEC_ELT (binfos, i) = base_binfo;
9607 TREE_VEC_ELT (accesses, i) = access;
9608 /* This flag will be in the binfo of the base type, we must
9609 clear it after copying the base binfos. */
9610 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
9611
9612 SET_CLASSTYPE_MARKED (basetype);
9613
9614 /* We are free to modify these bits because they are meaningless
9615 at top level, and BASETYPE is a top-level type. */
9616 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
9617 {
9618 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
9619 /* Converting to a virtual base class requires looking
9620 up the offset of the virtual base. */
9621 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
9622 }
9623
9624 if (CLASS_TYPE_P (basetype))
9625 {
9626 TYPE_HAS_NEW_OPERATOR (ref)
9627 |= TYPE_HAS_NEW_OPERATOR (basetype);
9628 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9629 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9630 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
9631 /* If the base-class uses multiple inheritance, so do we. */
9632 TYPE_USES_MULTIPLE_INHERITANCE (ref)
9633 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
9634 /* Likewise, if converting to a base of the base may require
9635 code, then we may need to generate code to convert to a
9636 base as well. */
9637 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
9638 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
9639 }
9640 i++;
8ccc31eb 9641 }
dbbf88d1
NS
9642 if (i)
9643 TREE_VEC_LENGTH (accesses) = TREE_VEC_LENGTH (binfos) = i;
9644 else
9645 BINFO_BASEACCESSES (binfo) = BINFO_BASETYPES (binfo) = NULL_TREE;
9646
9647 if (i > 1)
9648 {
9649 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
9650 /* If there is more than one non-empty they cannot be at the same
9651 address. */
8fbc5ae7
MM
9652 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
9653 }
dbbf88d1
NS
9654 }
9655
9656 /* Copy the base binfos, collect the virtual bases and set the
9657 inheritance order chain. */
9658 copy_base_binfos (TYPE_BINFO (ref), ref, NULL_TREE);
9659 CLASSTYPE_VBASECLASSES (ref) = nreverse (CLASSTYPE_VBASECLASSES (ref));
f5c28a15
NS
9660
9661 if (TYPE_FOR_JAVA (ref))
9662 {
9663 if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
9664 error ("Java class '%T' cannot have multiple bases", ref);
9665 if (CLASSTYPE_VBASECLASSES (ref))
9666 error ("Java class '%T' cannot have virtual bases", ref);
9667 }
9668
dbbf88d1
NS
9669 /* Unmark all the types. */
9670 while (i--)
9671 {
9672 tree basetype = BINFO_TYPE (BINFO_BASETYPE (TYPE_BINFO (ref), i));
9673
9674 CLEAR_CLASSTYPE_MARKED (basetype);
8fbc5ae7
MM
9675 if (CLASS_TYPE_P (basetype))
9676 {
dbbf88d1
NS
9677 TREE_VIA_VIRTUAL (TYPE_BINFO (basetype)) = 0;
9678 BINFO_DEPENDENT_BASE_P (TYPE_BINFO (basetype)) = 0;
8fbc5ae7 9679 }
7ddedda4 9680 }
8ccc31eb 9681 CLEAR_CLASSTYPE_MARKED (ref);
8ccc31eb 9682}
68642fb6 9683
8d08fdba 9684\f
8d08fdba
MS
9685/* Begin compiling the definition of an enumeration type.
9686 NAME is its name (or null if anonymous).
9687 Returns the type object, as yet incomplete.
9688 Also records info about it so that build_enumerator
9689 may be used to declare the individual values as they are read. */
9690
9691tree
11f6b451 9692start_enum (tree name)
8d08fdba 9693{
926ce8bd 9694 tree enumtype = NULL_TREE;
e2500fed 9695 struct cp_binding_level *b = current_binding_level;
8d08fdba
MS
9696
9697 /* If this is the real definition for a previous forward reference,
9698 fill in the contents in the same object that used to be the
9699 forward reference. */
9700
9701 if (name != NULL_TREE)
9702 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
9703
9704 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
30ff8252 9705 {
33bd39a2 9706 error ("multiple definition of `%#T'", enumtype);
ddd2d57e 9707 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
58595203
MM
9708 /* Clear out TYPE_VALUES, and start again. */
9709 TYPE_VALUES (enumtype) = NULL_TREE;
30ff8252 9710 }
8d08fdba
MS
9711 else
9712 {
9713 enumtype = make_node (ENUMERAL_TYPE);
9714 pushtag (name, enumtype, 0);
9715 }
9716
8d08fdba
MS
9717 return enumtype;
9718}
9719
9720/* After processing and defining all the values of an enumeration type,
9721 install their decls in the enumeration type and finish it off.
968b956a 9722 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
8d08fdba 9723
968b956a 9724void
11f6b451 9725finish_enum (tree enumtype)
8d08fdba 9726{
7b6d72fc
MM
9727 tree values;
9728 tree decl;
9729 tree value;
968b956a
MM
9730 tree minnode;
9731 tree maxnode;
9732 tree t;
9733 bool unsignedp;
9734 int lowprec;
9735 int highprec;
9736 int precision;
7b6d72fc 9737 integer_type_kind itk;
ad96995b 9738 tree underlying_type = NULL_TREE;
968b956a
MM
9739
9740 /* We built up the VALUES in reverse order. */
9741 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
9742
f5d70cc0
JM
9743 /* For an enum defined in a template, just set the type of the values;
9744 all further processing is postponed until the template is
9745 instantiated. We need to set the type so that tsubst of a CONST_DECL
9746 works. */
968b956a
MM
9747 if (processing_template_decl)
9748 {
7b6d72fc
MM
9749 for (values = TYPE_VALUES (enumtype);
9750 values;
9751 values = TREE_CHAIN (values))
9752 TREE_TYPE (TREE_VALUE (values)) = enumtype;
5f261ba9 9753 if (at_function_scope_p ())
968b956a 9754 add_stmt (build_min (TAG_DEFN, enumtype));
968b956a
MM
9755 return;
9756 }
9757
7b6d72fc 9758 /* Determine the minimum and maximum values of the enumerators. */
968b956a 9759 if (TYPE_VALUES (enumtype))
8d08fdba 9760 {
968b956a 9761 minnode = maxnode = NULL_TREE;
5566b478 9762
7b6d72fc
MM
9763 for (values = TYPE_VALUES (enumtype);
9764 values;
9765 values = TREE_CHAIN (values))
8d08fdba 9766 {
7b6d72fc 9767 decl = TREE_VALUE (values);
f5d70cc0
JM
9768
9769 /* [dcl.enum]: Following the closing brace of an enum-specifier,
9770 each enumerator has the type of its enumeration. Prior to the
9771 closing brace, the type of each enumerator is the type of its
9772 initializing value. */
9773 TREE_TYPE (decl) = enumtype;
9774
7b6d72fc
MM
9775 /* Update the minimum and maximum values, if appropriate. */
9776 value = DECL_INITIAL (decl);
f5d70cc0
JM
9777 /* Figure out what the minimum and maximum values of the
9778 enumerators are. */
9779 if (!minnode)
9780 minnode = maxnode = value;
9781 else if (tree_int_cst_lt (maxnode, value))
9782 maxnode = value;
9783 else if (tree_int_cst_lt (value, minnode))
9784 minnode = value;
9785
9786 /* Set the TREE_TYPE for the values as well. That's so that when
9787 we call decl_constant_value we get an entity of the right type
9788 (but with the constant value). But first make a copy so we
9789 don't clobber shared INTEGER_CSTs. */
9790 if (TREE_TYPE (value) != enumtype)
fdedded1 9791 {
f5d70cc0
JM
9792 value = DECL_INITIAL (decl) = copy_node (value);
9793 TREE_TYPE (value) = enumtype;
fdedded1 9794 }
8d08fdba
MS
9795 }
9796 }
f376e137 9797 else
7b6d72fc
MM
9798 /* [dcl.enum]
9799
9800 If the enumerator-list is empty, the underlying type is as if
9801 the enumeration had a single enumerator with value 0. */
968b956a
MM
9802 minnode = maxnode = integer_zero_node;
9803
9804 /* Compute the number of bits require to represent all values of the
9805 enumeration. We must do this before the type of MINNODE and
9806 MAXNODE are transformed, since min_precision relies on the
9807 TREE_TYPE of the value it is passed. */
9808 unsignedp = tree_int_cst_sgn (minnode) >= 0;
9809 lowprec = min_precision (minnode, unsignedp);
9810 highprec = min_precision (maxnode, unsignedp);
9811 precision = MAX (lowprec, highprec);
9812
7b6d72fc
MM
9813 /* Determine the underlying type of the enumeration.
9814
9815 [dcl.enum]
9816
9817 The underlying type of an enumeration is an integral type that
9818 can represent all the enumerator values defined in the
9819 enumeration. It is implementation-defined which integral type is
9820 used as the underlying type for an enumeration except that the
9821 underlying type shall not be larger than int unless the value of
9822 an enumerator cannot fit in an int or unsigned int.
9823
9824 We use "int" or an "unsigned int" as the underlying type, even if
9825 a smaller integral type would work, unless the user has
9826 explicitly requested that we use the smallest possible type. */
9827 for (itk = (flag_short_enums ? itk_char : itk_int);
9828 itk != itk_none;
9829 itk++)
e455bc27 9830 {
7b6d72fc
MM
9831 underlying_type = integer_types[itk];
9832 if (TYPE_PRECISION (underlying_type) >= precision
9833 && TREE_UNSIGNED (underlying_type) == unsignedp)
9834 break;
9835 }
9836 if (itk == itk_none)
9837 {
9838 /* DR 377
9839
9840 IF no integral type can represent all the enumerator values, the
9841 enumeration is ill-formed. */
e455bc27
MM
9842 error ("no integral type can represent all of the enumerator values "
9843 "for `%T'", enumtype);
9844 precision = TYPE_PRECISION (long_long_integer_type_node);
7b6d72fc 9845 underlying_type = integer_types[itk_unsigned_long_long];
e455bc27
MM
9846 }
9847
7b6d72fc 9848 /* Compute the minium and maximum values for the type.
8d08fdba 9849
7b6d72fc
MM
9850 [dcl.enum]
9851
9852 For an enumeration where emin is the smallest enumerator and emax
9853 is the largest, the values of the enumeration are the values of the
9854 underlying type in the range bmin to bmax, where bmin and bmax are,
9855 respectively, the smallest and largest values of the smallest bit-
9856 field that can store emin and emax. */
9857 TYPE_PRECISION (enumtype) = precision;
9858 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
9859
9860 /* [dcl.enum]
9861
9862 The value of sizeof() applied to an enumeration type, an object
9863 of an enumeration type, or an enumerator, is the value of sizeof()
9864 applied to the underlying type. */
9865 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
9866 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
9867 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
9868 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
9869 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
9870 TREE_UNSIGNED (enumtype) = TREE_UNSIGNED (underlying_type);
9871
9872 /* Convert each of the enumerators to the type of the underlying
9873 type of the enumeration. */
9874 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
9875 {
9876 decl = TREE_VALUE (values);
9877 value = perform_implicit_conversion (underlying_type,
9878 DECL_INITIAL (decl));
9879 TREE_TYPE (value) = enumtype;
9880 DECL_INITIAL (decl) = value;
9881 TREE_VALUE (values) = value;
e455bc27 9882 }
8d08fdba 9883
968b956a
MM
9884 /* Fix up all variant types of this enum type. */
9885 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
9886 {
9887 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
9888 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
9889 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
9890 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
9891 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
9892 TYPE_MODE (t) = TYPE_MODE (enumtype);
9893 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
9894 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
9895 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
9896 TREE_UNSIGNED (t) = TREE_UNSIGNED (enumtype);
cbf882af
MM
9897 }
9898
968b956a
MM
9899 /* Finish debugging output for this type. */
9900 rest_of_type_compilation (enumtype, namespace_bindings_p ());
8d08fdba
MS
9901}
9902
079e1098 9903/* Build and install a CONST_DECL for an enumeration constant of the
58595203 9904 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
8d08fdba
MS
9905 Assignment of sequential values by default is handled here. */
9906
58595203 9907void
11f6b451 9908build_enumerator (tree name, tree value, tree enumtype)
8d08fdba 9909{
58595203 9910 tree decl;
e8bd800e 9911 tree context;
58595203 9912 tree type;
8d08fdba
MS
9913
9914 /* Remove no-op casts from the value. */
9915 if (value)
9916 STRIP_TYPE_NOPS (value);
9917
58595203
MM
9918 if (! processing_template_decl)
9919 {
9920 /* Validate and default VALUE. */
9921 if (value != NULL_TREE)
9922 {
fc611ce0 9923 value = decl_constant_value (value);
58595203
MM
9924
9925 if (TREE_CODE (value) == INTEGER_CST)
9926 {
0a72704b 9927 value = perform_integral_promotions (value);
58595203
MM
9928 constant_expression_warning (value);
9929 }
9930 else
9931 {
33bd39a2 9932 error ("enumerator value for `%D' not integer constant", name);
58595203
MM
9933 value = NULL_TREE;
9934 }
9935 }
9936
9937 /* Default based on previous value. */
6a540f3c 9938 if (value == NULL_TREE)
58595203
MM
9939 {
9940 tree prev_value;
9941
9942 if (TYPE_VALUES (enumtype))
9943 {
a1c65f9f 9944 /* The next value is the previous value ... */
58595203
MM
9945 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
9946 /* ... plus one. */
ab76ca54
MM
9947 value = cp_build_binary_op (PLUS_EXPR,
9948 prev_value,
9949 integer_one_node);
68642fb6 9950
58595203 9951 if (tree_int_cst_lt (value, prev_value))
33bd39a2 9952 error ("overflow in enumeration values at `%D'", name);
58595203
MM
9953 }
9954 else
9955 value = integer_zero_node;
9956 }
9957
9958 /* Remove no-op casts from the value. */
f5d70cc0 9959 STRIP_TYPE_NOPS (value);
58595203 9960 }
8d08fdba 9961
8d08fdba 9962 /* C++ associates enums with global, function, or class declarations. */
58595203 9963 context = current_scope ();
7b6d72fc
MM
9964 if (!context)
9965 context = current_namespace;
58595203
MM
9966
9967 /* Build the actual enumeration constant. Note that the enumeration
9968 constants have the type of their initializers until the
9969 enumeration is complete:
9970
9971 [ dcl.enum ]
9972
9973 Following the closing brace of an enum-specifier, each enumer-
9974 ator has the type of its enumeration. Prior to the closing
9975 brace, the type of each enumerator is the type of its
9976 initializing value.
9977
9978 In finish_enum we will reset the type. Of course, if we're
a1c65f9f 9979 processing a template, there may be no value. */
58595203
MM
9980 type = value ? TREE_TYPE (value) : NULL_TREE;
9981
9982 if (context && context == current_class_type)
9983 /* This enum declaration is local to the class. We need the full
8f17b5c5 9984 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
58595203
MM
9985 decl = build_lang_decl (CONST_DECL, name, type);
9986 else
9987 /* It's a global enum, or it's local to a function. (Note local to
e8bd800e 9988 a function could mean local to a class method. */
58595203 9989 decl = build_decl (CONST_DECL, name, type);
e8bd800e 9990
58595203 9991 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
3e4a3562 9992 TREE_CONSTANT (decl) = TREE_READONLY (decl) = 1;
58595203 9993 DECL_INITIAL (decl) = value;
e8bd800e 9994
58595203
MM
9995 if (context && context == current_class_type)
9996 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
7b6d72fc
MM
9997 on the TYPE_FIELDS list for `S'. (That's so that you can say
9998 things like `S::i' later.) */
58595203
MM
9999 finish_member_declaration (decl);
10000 else
9780c24f 10001 pushdecl (decl);
58595203
MM
10002
10003 /* Add this enumeration constant to the list for this type. */
10004 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
8d08fdba
MS
10005}
10006
8d08fdba 10007\f
a8f73d4b
MM
10008/* We're defining DECL. Make sure that it's type is OK. */
10009
10010static void
11f6b451 10011check_function_type (tree decl, tree current_function_parms)
a8f73d4b
MM
10012{
10013 tree fntype = TREE_TYPE (decl);
d0f062fb 10014 tree return_type = complete_type (TREE_TYPE (fntype));
a8f73d4b
MM
10015
10016 /* In a function definition, arg types must be complete. */
10017 require_complete_types_for_parms (current_function_parms);
10018
d0f062fb 10019 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
a8f73d4b 10020 {
33bd39a2 10021 error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
a8f73d4b
MM
10022
10023 /* Make it return void instead, but don't change the
10024 type of the DECL_RESULT, in case we have a named return value. */
10025 if (TREE_CODE (fntype) == METHOD_TYPE)
10026 {
10027 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
10028 TREE_TYPE (decl)
43dc123f
MM
10029 = build_method_type_directly (ctype,
10030 void_type_node,
10031 FUNCTION_ARG_CHAIN (decl));
a8f73d4b
MM
10032 }
10033 else
10034 TREE_TYPE (decl)
10035 = build_function_type (void_type_node,
10036 TYPE_ARG_TYPES (TREE_TYPE (decl)));
68642fb6 10037 TREE_TYPE (decl)
a8f73d4b
MM
10038 = build_exception_variant (fntype,
10039 TYPE_RAISES_EXCEPTIONS (fntype));
10040 }
10041 else
10042 abstract_virtuals_error (decl, TREE_TYPE (fntype));
10043}
10044
8d08fdba
MS
10045/* Create the FUNCTION_DECL for a function definition.
10046 DECLSPECS and DECLARATOR are the parts of the declaration;
10047 they describe the function's name and the type it returns,
10048 but twisted together in a fashion that parallels the syntax of C.
10049
a8f73d4b
MM
10050 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
10051 DECLARATOR is really the DECL for the function we are about to
10052 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
f444e36b 10053 indicating that the function is an inline defined in-class.
68642fb6 10054
8d08fdba
MS
10055 This function creates a binding context for the function body
10056 as well as setting up the FUNCTION_DECL in current_function_decl.
10057
10058 Returns 1 on success. If the DECLARATOR is not suitable for a function
10059 (it defines a datum instead), we return 0, which tells
10060 yyparse to report a parse error.
10061
10062 For C++, we must first check whether that datum makes any sense.
10063 For example, "class A local_a(1,2);" means that variable local_a
10064 is an aggregate of type A, which should have a constructor
87e3dbc9 10065 applied to it with the argument list [1, 2]. */
8d08fdba
MS
10066
10067int
11f6b451 10068start_function (tree declspecs, tree declarator, tree attrs, int flags)
8d08fdba 10069{
5566b478 10070 tree decl1;
8d08fdba
MS
10071 tree ctype = NULL_TREE;
10072 tree fntype;
10073 tree restype;
8d08fdba 10074 int doing_friend = 0;
e2500fed 10075 struct cp_binding_level *bl;
f444e36b 10076 tree current_function_parms;
8d08fdba 10077
8d08fdba 10078 /* Sanity check. */
a1774733 10079 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
8d08fdba
MS
10080 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
10081
e92cc029 10082 /* This should only be done once on the top most decl. */
594bb0e7 10083 if (have_extern_spec)
8d08fdba 10084 {
1f8f4a0b 10085 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
594bb0e7 10086 have_extern_spec = false;
8d08fdba
MS
10087 }
10088
a8f73d4b 10089 if (flags & SF_PRE_PARSED)
8d08fdba
MS
10090 {
10091 decl1 = declarator;
10092
8d08fdba
MS
10093 fntype = TREE_TYPE (decl1);
10094 if (TREE_CODE (fntype) == METHOD_TYPE)
10095 ctype = TYPE_METHOD_BASETYPE (fntype);
10096
cab1f180
ML
10097 /* ISO C++ 11.4/5. A friend function defined in a class is in
10098 the (lexical) scope of the class in which it is defined. */
8d08fdba
MS
10099 if (!ctype && DECL_FRIEND_P (decl1))
10100 {
4f1c5b7d 10101 ctype = DECL_FRIEND_CONTEXT (decl1);
8d08fdba
MS
10102
10103 /* CTYPE could be null here if we're dealing with a template;
10104 for example, `inline friend float foo()' inside a template
10105 will have no CTYPE set. */
10106 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
10107 ctype = NULL_TREE;
10108 else
10109 doing_friend = 1;
10110 }
10111
5566b478 10112 last_function_parms = DECL_ARGUMENTS (decl1);
8d08fdba
MS
10113 }
10114 else
10115 {
d04a575f 10116 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
8d08fdba
MS
10117 /* If the declarator is not suitable for a function definition,
10118 cause a syntax error. */
e89a6075
JM
10119 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10120 return 0;
10121
10122 cplus_decl_attributes (&decl1, attrs, 0);
8d08fdba 10123
ecb0eece 10124 /* If #pragma weak was used, mark the decl weak now. */
5f52c0e0 10125 if (global_scope_p (current_binding_level))
ecb0eece
RH
10126 maybe_apply_pragma_weak (decl1);
10127
8d08fdba
MS
10128 fntype = TREE_TYPE (decl1);
10129
10130 restype = TREE_TYPE (fntype);
8d08fdba
MS
10131
10132 if (TREE_CODE (fntype) == METHOD_TYPE)
10133 ctype = TYPE_METHOD_BASETYPE (fntype);
35680744 10134 else if (DECL_MAIN_P (decl1))
8d08fdba 10135 {
4b41d9eb
KL
10136 /* If this doesn't return integer_type, or a typedef to
10137 integer_type, complain. */
10138 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl1)), integer_type_node))
8d08fdba 10139 {
a28e3c7f 10140 if (pedantic || warn_return_type)
8251199e 10141 pedwarn ("return type for `main' changed to `int'");
8d08fdba
MS
10142 TREE_TYPE (decl1) = fntype = default_function_type;
10143 }
8d08fdba
MS
10144 }
10145 }
68642fb6 10146
97055d5c
AO
10147 if (DECL_DECLARED_INLINE_P (decl1)
10148 && lookup_attribute ("noinline", attrs))
ddd2d57e 10149 warning ("%Jinline function '%D' given attribute noinline", decl1, decl1);
97055d5c 10150
5f6eeeb3
NS
10151 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
10152 /* This is a constructor, we must ensure that any default args
10153 introduced by this definition are propagated to the clones
10154 now. The clones are used directly in overload resolution. */
10155 adjust_clone_args (decl1);
10156
b35d4555
MM
10157 /* Sometimes we don't notice that a function is a static member, and
10158 build a METHOD_TYPE for it. Fix that up now. */
10159 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
10160 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
10161 {
3afb32a4 10162 revert_static_member_fn (decl1);
b35d4555
MM
10163 last_function_parms = TREE_CHAIN (last_function_parms);
10164 ctype = NULL_TREE;
10165 }
8d08fdba
MS
10166
10167 /* Warn if function was previously implicitly declared
10168 (but not if we warned then). */
10169 if (! warn_implicit
10170 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
8251199e 10171 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
8d08fdba 10172
f181d4ae
MM
10173 /* Set up current_class_type, and enter the scope of the class, if
10174 appropriate. */
10175 if (ctype)
14d22dd6 10176 push_nested_class (ctype);
f181d4ae 10177 else if (DECL_STATIC_FUNCTION_P (decl1))
14d22dd6 10178 push_nested_class (DECL_CONTEXT (decl1));
f181d4ae
MM
10179
10180 /* Now that we have entered the scope of the class, we must restore
10181 the bindings for any template parameters surrounding DECL1, if it
10182 is an inline member template. (Order is important; consider the
10183 case where a template parameter has the same name as a field of
10184 the class.) It is not until after this point that
10185 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
a8f73d4b 10186 if (flags & SF_INCLASS_INLINE)
f181d4ae
MM
10187 maybe_begin_member_template_processing (decl1);
10188
56cb9733 10189 /* Effective C++ rule 15. */
9188c363 10190 if (warn_ecpp
596ea4e5 10191 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9188c363 10192 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
33bd39a2 10193 warning ("`operator=' should return a reference to `*this'");
9188c363
MM
10194
10195 /* Make the init_value nonzero so pushdecl knows this is not tentative.
10196 error_mark_node is replaced below (in poplevel) with the BLOCK. */
b35d4555
MM
10197 if (!DECL_INITIAL (decl1))
10198 DECL_INITIAL (decl1) = error_mark_node;
9188c363 10199
9188c363
MM
10200 /* This function exists in static storage.
10201 (This does not mean `static' in the C sense!) */
10202 TREE_STATIC (decl1) = 1;
10203
10204 /* We must call push_template_decl after current_class_type is set
10205 up. (If we are processing inline definitions after exiting a
10206 class scope, current_class_type will be NULL_TREE until set above
10207 by push_nested_class.) */
10208 if (processing_template_decl)
10209 decl1 = push_template_decl (decl1);
10210
f181d4ae 10211 /* We are now in the scope of the function being defined. */
8d08fdba 10212 current_function_decl = decl1;
f181d4ae 10213
5566b478
MS
10214 /* Save the parm names or decls from this function's declarator
10215 where store_parm_decls will find them. */
10216 current_function_parms = last_function_parms;
8d08fdba 10217
a8f73d4b
MM
10218 /* Make sure the parameter and return types are reasonable. When
10219 you declare a function, these types can be incomplete, but they
10220 must be complete when you define the function. */
5156628f 10221 if (! processing_template_decl)
f444e36b 10222 check_function_type (decl1, current_function_parms);
f181d4ae 10223
a8f73d4b
MM
10224 /* Build the return declaration for the function. */
10225 restype = TREE_TYPE (fntype);
e89a6075
JM
10226 /* Promote the value to int before returning it. */
10227 if (c_promoting_integer_type_p (restype))
10228 restype = type_promotes_to (restype);
10229 if (DECL_RESULT (decl1) == NULL_TREE)
a8f73d4b 10230 {
e89a6075
JM
10231 DECL_RESULT (decl1)
10232 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
10233 c_apply_type_quals_to_decl (cp_type_quals (restype),
10234 DECL_RESULT (decl1));
5566b478 10235 }
a8f73d4b
MM
10236
10237 /* Initialize RTL machinery. We cannot do this until
10238 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
10239 even when processing a template; this is how we get
c00996a3
JM
10240 CFUN set up, and our per-function variables initialized.
10241 FIXME factor out the non-RTL stuff. */
a8f73d4b 10242 bl = current_binding_level;
4985cde3 10243 allocate_struct_function (decl1);
ff955512 10244 current_binding_level = bl;
a8f73d4b
MM
10245
10246 /* Even though we're inside a function body, we still don't want to
10247 call expand_expr to calculate the size of a variable-sized array.
10248 We haven't necessarily assigned RTL to all variables yet, so it's
10249 not safe to try to expand expressions involving them. */
10250 immediate_size_expand = 0;
01d939e8 10251 cfun->x_dont_save_pending_sizes_p = 1;
a8f73d4b 10252
f444e36b
MM
10253 /* Start the statement-tree, start the tree now. */
10254 begin_stmt_tree (&DECL_SAVED_TREE (decl1));
6f80451c 10255
d1a74aa7 10256 /* Don't double-count statements in templates. */
084c1779 10257 DECL_ESTIMATED_INSNS (decl1) = 0;
d1a74aa7 10258
a8f73d4b 10259 /* Let the user know we're compiling this function. */
ea11ca7e 10260 announce_function (decl1);
b7484fbe 10261
878cd289
MS
10262 /* Record the decl so that the function name is defined.
10263 If we already have a decl for this name, and it is a FUNCTION_DECL,
10264 use the old decl. */
a8f73d4b 10265 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
878cd289 10266 {
75650646 10267 /* A specialization is not used to guide overload resolution. */
2228d450 10268 if (!DECL_TEMPLATE_SPECIALIZATION (decl1)
959d8796 10269 && ! DECL_FUNCTION_MEMBER_P (decl1))
b1a19c7c
MM
10270 {
10271 tree olddecl = pushdecl (decl1);
10272
10273 if (olddecl == error_mark_node)
10274 /* If something went wrong when registering the declaration,
10275 use DECL1; we have to have a FUNCTION_DECL to use when
10276 parsing the body of the function. */
10277 ;
10278 else
10279 /* Otherwise, OLDDECL is either a previous declaration of
10280 the same function or DECL1 itself. */
10281 decl1 = olddecl;
10282 }
2c73f9f5 10283 else
b7698cf0 10284 {
a1c65f9f 10285 /* We need to set the DECL_CONTEXT. */
b7698cf0
JM
10286 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
10287 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
10288 /* And make sure we have enough default args. */
10289 check_default_args (decl1);
10290 }
878cd289
MS
10291 fntype = TREE_TYPE (decl1);
10292 }
5566b478 10293
a8f73d4b 10294 /* Reset these in case the call to pushdecl changed them. */
5566b478 10295 current_function_decl = decl1;
01d939e8 10296 cfun->decl = decl1;
878cd289 10297
78c120b5
MM
10298 /* If we are (erroneously) defining a function that we have already
10299 defined before, wipe out what we knew before. */
e2500fed
GK
10300 if (!DECL_PENDING_INLINE_P (decl1))
10301 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
b35d4555 10302
f444e36b 10303 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
b35d4555
MM
10304 {
10305 /* We know that this was set up by `grokclassfn'. We do not
10306 wait until `store_parm_decls', since evil parse errors may
10307 never get us to that point. Here we keep the consistency
10308 between `current_class_type' and `current_class_ptr'. */
10309 tree t = DECL_ARGUMENTS (decl1);
68642fb6
UD
10310
10311 my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
b35d4555
MM
10312 162);
10313 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
10314 19990811);
68642fb6
UD
10315
10316 cp_function_chain->x_current_class_ref
3e411c3f 10317 = build_indirect_ref (t, NULL);
b35d4555
MM
10318 cp_function_chain->x_current_class_ptr = t;
10319
018fc244
MM
10320 /* Constructors and destructors need to know whether they're "in
10321 charge" of initializing virtual base classes. */
e0fff4b3 10322 t = TREE_CHAIN (t);
454fa7a7 10323 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
e0fff4b3
JM
10324 {
10325 current_in_charge_parm = t;
10326 t = TREE_CHAIN (t);
10327 }
10328 if (DECL_HAS_VTT_PARM_P (decl1))
10329 {
10330 if (DECL_NAME (t) != vtt_parm_identifier)
10331 abort ();
10332 current_vtt_parm = t;
10333 }
b35d4555
MM
10334 }
10335
db5ae43f 10336 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 10337 {
4f1c5b7d 10338 tree ctx = decl_function_context (decl1);
86052cc3 10339
faae18ab
MS
10340 if (DECL_NOT_REALLY_EXTERN (decl1))
10341 DECL_EXTERNAL (decl1) = 0;
86052cc3 10342
79065db2 10343 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
86052cc3
JM
10344 && TREE_PUBLIC (ctx))
10345 /* This is a function in a local class in an extern inline
10346 function. */
10347 comdat_linkage (decl1);
faae18ab 10348 }
8d08fdba
MS
10349 /* If this function belongs to an interface, it is public.
10350 If it belongs to someone else's interface, it is also external.
1f901793 10351 This only affects inlines and template instantiations. */
5566b478 10352 else if (interface_unknown == 0
7813d14c 10353 && ! DECL_TEMPLATE_INSTANTIATION (decl1))
8d08fdba 10354 {
79065db2
MM
10355 if (DECL_DECLARED_INLINE_P (decl1)
10356 || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 10357 || processing_template_decl)
1f901793
JM
10358 {
10359 DECL_EXTERNAL (decl1)
10360 = (interface_only
79065db2
MM
10361 || (DECL_DECLARED_INLINE_P (decl1)
10362 && ! flag_implement_inlines
9c73ec84 10363 && !DECL_VINDEX (decl1)));
1f901793
JM
10364
10365 /* For WIN32 we also want to put these in linkonce sections. */
10366 maybe_make_one_only (decl1);
10367 }
db5ae43f 10368 else
893de33c 10369 DECL_EXTERNAL (decl1) = 0;
e8abc66f 10370 DECL_NOT_REALLY_EXTERN (decl1) = 0;
db5ae43f 10371 DECL_INTERFACE_KNOWN (decl1) = 1;
8d08fdba 10372 }
c16c47fb 10373 else if (interface_unknown && interface_only
7813d14c 10374 && ! DECL_TEMPLATE_INSTANTIATION (decl1))
c16c47fb
JM
10375 {
10376 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10377 interface, we will have interface_only set but not
10378 interface_known. In that case, we don't want to use the normal
10379 heuristics because someone will supply a #pragma implementation
10380 elsewhere, and deducing it here would produce a conflict. */
10381 comdat_linkage (decl1);
10382 DECL_EXTERNAL (decl1) = 0;
10383 DECL_INTERFACE_KNOWN (decl1) = 1;
10384 DECL_DEFER_OUTPUT (decl1) = 1;
10385 }
8d08fdba 10386 else
a0a33927
MS
10387 {
10388 /* This is a definition, not a reference.
b7484fbe
MS
10389 So clear DECL_EXTERNAL. */
10390 DECL_EXTERNAL (decl1) = 0;
faae18ab 10391
79065db2
MM
10392 if ((DECL_DECLARED_INLINE_P (decl1)
10393 || DECL_TEMPLATE_INSTANTIATION (decl1))
5566b478
MS
10394 && ! DECL_INTERFACE_KNOWN (decl1)
10395 /* Don't try to defer nested functions for now. */
4f1c5b7d 10396 && ! decl_function_context (decl1))
878cd289
MS
10397 DECL_DEFER_OUTPUT (decl1) = 1;
10398 else
893de33c 10399 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 10400 }
a9aedbc2 10401
ac20c67a 10402 begin_scope (sk_function_parms, decl1);
8d08fdba 10403
5566b478
MS
10404 ++function_depth;
10405
0d9eb3ba 10406 if (DECL_DESTRUCTOR_P (decl1))
46e8c075
MM
10407 {
10408 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10409 DECL_CONTEXT (dtor_label) = current_function_decl;
10410 }
8d08fdba 10411
0ba8a114
NS
10412 start_fname_decls ();
10413
f444e36b
MM
10414 store_parm_decls (current_function_parms);
10415
8d08fdba
MS
10416 return 1;
10417}
10418\f
10419/* Store the parameter declarations into the current function declaration.
10420 This is called after parsing the parameter declarations, before
10421 digesting the body of the function.
10422
10423 Also install to binding contour return value identifier, if any. */
10424
f444e36b 10425static void
11f6b451 10426store_parm_decls (tree current_function_parms)
8d08fdba 10427{
926ce8bd
KH
10428 tree fndecl = current_function_decl;
10429 tree parm;
8d08fdba 10430
8d08fdba
MS
10431 /* This is a chain of any other decls that came in among the parm
10432 declarations. If a parm is declared with enum {foo, bar} x;
10433 then CONST_DECLs for foo and bar are put here. */
10434 tree nonparms = NULL_TREE;
10435
b35d4555 10436 if (current_function_parms)
8d08fdba
MS
10437 {
10438 /* This case is when the function was defined with an ANSI prototype.
10439 The parms already have decls, so we need not do anything here
10440 except record them as in effect
10441 and complain if any redundant old-style parm decls were written. */
10442
b35d4555
MM
10443 tree specparms = current_function_parms;
10444 tree next;
10445
f444e36b 10446 /* Must clear this because it might contain TYPE_DECLs declared
b35d4555 10447 at class level. */
00e8de68 10448 current_binding_level->names = NULL;
8d08fdba 10449
f444e36b 10450 /* If we're doing semantic analysis, then we'll call pushdecl
b35d4555
MM
10451 for each of these. We must do them in reverse order so that
10452 they end in the correct forward order. */
f444e36b 10453 specparms = nreverse (specparms);
5566b478 10454
b35d4555 10455 for (parm = specparms; parm; parm = next)
8d08fdba
MS
10456 {
10457 next = TREE_CHAIN (parm);
10458 if (TREE_CODE (parm) == PARM_DECL)
10459 {
f444e36b
MM
10460 if (DECL_NAME (parm) == NULL_TREE
10461 || TREE_CODE (parm) != VOID_TYPE)
10462 pushdecl (parm);
10463 else
33bd39a2 10464 error ("parameter `%D' declared void", parm);
8d08fdba
MS
10465 }
10466 else
10467 {
10468 /* If we find an enum constant or a type tag,
10469 put it aside for the moment. */
10470 TREE_CHAIN (parm) = NULL_TREE;
10471 nonparms = chainon (nonparms, parm);
10472 }
10473 }
10474
f444e36b
MM
10475 /* Get the decls in their original chain order and record in the
10476 function. This is all and only the PARM_DECLs that were
10477 pushed into scope by the loop above. */
10478 DECL_ARGUMENTS (fndecl) = getdecls ();
8d08fdba
MS
10479 }
10480 else
10481 DECL_ARGUMENTS (fndecl) = NULL_TREE;
10482
10483 /* Now store the final chain of decls for the arguments
10484 as the decl-chain of the current lexical scope.
10485 Put the enumerators in as well, at the front so that
10486 DECL_ARGUMENTS is not modified. */
00e8de68 10487 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
eb448459 10488
b35d4555 10489 /* Do the starting of the exception specifications, if we have any. */
68642fb6 10490 if (flag_exceptions && !processing_template_decl
1660cb3a 10491 && flag_enforce_eh_specs
b35d4555 10492 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
52a11cbf 10493 current_eh_spec_block = begin_eh_spec_block ();
8d08fdba
MS
10494}
10495
8d08fdba 10496\f
59026e79
MM
10497/* We have finished doing semantic analysis on DECL, but have not yet
10498 generated RTL for its body. Save away our current state, so that
10499 when we want to generate RTL later we know what to do. */
10500
10501static void
11f6b451 10502save_function_data (tree decl)
59026e79 10503{
e2500fed 10504 struct language_function *f;
59026e79
MM
10505
10506 /* Save the language-specific per-function data so that we can
10507 get it back when we really expand this function. */
10508 my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
10509 19990908);
68642fb6 10510
59026e79 10511 /* Make a copy. */
c68b0a84 10512 f = ggc_alloc (sizeof (struct language_function));
e2500fed 10513 memcpy (f, cp_function_chain, sizeof (struct language_function));
59026e79
MM
10514 DECL_SAVED_FUNCTION_DATA (decl) = f;
10515
10516 /* Clear out the bits we don't need. */
ae499cce
MM
10517 f->base.x_stmt_tree.x_last_stmt = NULL_TREE;
10518 f->base.x_stmt_tree.x_last_expr_type = NULL_TREE;
59026e79
MM
10519 f->x_named_label_uses = NULL;
10520 f->bindings = NULL;
8e4ce833 10521 f->x_local_names = NULL;
59026e79 10522
914653a2
MM
10523 /* If we've already decided that we cannot inline this function, we
10524 must remember that fact when we actually go to expand the
10525 function. */
acc72c37
MM
10526 if (current_function_cannot_inline)
10527 {
10528 f->cannot_inline = current_function_cannot_inline;
10529 DECL_INLINE (decl) = 0;
10530 }
59026e79
MM
10531}
10532
cdd2559c
JM
10533/* Add a note to mark the beginning of the main body of the constructor.
10534 This is used to set up the data structures for the cleanup regions for
10535 fully-constructed bases and members. */
10536
10537static void
11f6b451 10538begin_constructor_body (void)
cdd2559c 10539{
cdd2559c
JM
10540}
10541
ade3dc07
JM
10542/* Add a note to mark the end of the main body of the constructor. This is
10543 used to end the cleanup regions for fully-constructed bases and
10544 members. */
efee38a9
MM
10545
10546static void
11f6b451 10547finish_constructor_body (void)
efee38a9 10548{
efee38a9
MM
10549}
10550
cdd2559c
JM
10551/* Do all the processing for the beginning of a destructor; set up the
10552 vtable pointers and cleanups for bases and members. */
10553
10554static void
11f6b451 10555begin_destructor_body (void)
cdd2559c
JM
10556{
10557 tree if_stmt;
10558 tree compound_stmt;
10559
10560 /* If the dtor is empty, and we know there is not any possible
10561 way we could use any vtable entries, before they are possibly
10562 set by a base class dtor, we don't have to setup the vtables,
10563 as we know that any base class dtor will set up any vtables
10564 it needs. We avoid MI, because one base class dtor can do a
10565 virtual dispatch to an overridden function that would need to
10566 have a non-related vtable set up, we cannot avoid setting up
10567 vtables in that case. We could change this to see if there
10568 is just one vtable.
10569
10570 ??? In the destructor for a class, the vtables are set
10571 appropriately for that class. There will be no non-related
10572 vtables. jason 2001-12-11. */
10573 if_stmt = begin_if_stmt ();
10574
10575 /* If it is not safe to avoid setting up the vtables, then
10576 someone will change the condition to be boolean_true_node.
10577 (Actually, for now, we do not have code to set the condition
10578 appropriately, so we just assume that we always need to
10579 initialize the vtables.) */
10580 finish_if_stmt_cond (boolean_true_node, if_stmt);
cdd2559c 10581
7a3397c7 10582 compound_stmt = begin_compound_stmt (/*has_no_scope=*/false);
cdd2559c
JM
10583
10584 /* Make all virtual function table pointers in non-virtual base
10585 classes point to CURRENT_CLASS_TYPE's virtual function
10586 tables. */
10587 initialize_vtbl_ptrs (current_class_ptr);
10588
7a3397c7 10589 finish_compound_stmt (compound_stmt);
cdd2559c
JM
10590 finish_then_clause (if_stmt);
10591 finish_if_stmt ();
10592
10593 /* And insert cleanups for our bases and members so that they
10594 will be properly destroyed if we throw. */
10595 push_base_cleanups ();
10596}
10597
ade3dc07
JM
10598/* At the end of every destructor we generate code to delete the object if
10599 necessary. Do that now. */
9bfadf57
MM
10600
10601static void
11f6b451 10602finish_destructor_body (void)
9bfadf57 10603{
9bfadf57
MM
10604 tree exprstmt;
10605
5633b37c
MM
10606 /* Any return from a destructor will end up here; that way all base
10607 and member cleanups will be run when the function returns. */
10608 add_stmt (build_stmt (LABEL_STMT, dtor_label));
10609
52682a1b
MM
10610 /* In a virtual destructor, we must call delete. */
10611 if (DECL_VIRTUAL_P (current_function_decl))
10612 {
10613 tree if_stmt;
fa72b064 10614 tree virtual_size = cxx_sizeof (current_class_type);
68642fb6 10615
52682a1b 10616 /* [class.dtor]
68642fb6 10617
ade3dc07
JM
10618 At the point of definition of a virtual destructor (including
10619 an implicit definition), non-placement operator delete shall
10620 be looked up in the scope of the destructor's class and if
10621 found shall be accessible and unambiguous. */
52682a1b
MM
10622 exprstmt = build_op_delete_call
10623 (DELETE_EXPR, current_class_ptr, virtual_size,
10624 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
298d6f60 10625
52682a1b
MM
10626 if_stmt = begin_if_stmt ();
10627 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
10628 current_in_charge_parm,
10629 integer_one_node),
10630 if_stmt);
10631 finish_expr_stmt (exprstmt);
10632 finish_then_clause (if_stmt);
10633 finish_if_stmt ();
10634 }
ade3dc07 10635}
9bfadf57 10636
ade3dc07
JM
10637/* Do the necessary processing for the beginning of a function body, which
10638 in this case includes member-initializers, but not the catch clauses of
10639 a function-try-block. Currently, this means opening a binding level
10640 for the member-initializers (in a ctor) and member cleanups (in a dtor).
10641 In other functions, this isn't necessary, but it doesn't hurt. */
10642
10643tree
11f6b451 10644begin_function_body (void)
ade3dc07 10645{
cdd2559c
JM
10646 tree stmt;
10647
b5856475
JM
10648 if (processing_template_decl)
10649 /* Do nothing now. */;
10650 else
10651 /* Always keep the BLOCK node associated with the outermost pair of
10652 curly braces of a function. These are needed for correct
10653 operation of dwarfout.c. */
ac20c67a 10654 keep_next_level (true);
b5856475 10655
7a3397c7 10656 stmt = begin_compound_stmt (/*has_no_scope=*/false);
ade3dc07 10657 COMPOUND_STMT_BODY_BLOCK (stmt) = 1;
cdd2559c
JM
10658
10659 if (processing_template_decl)
10660 /* Do nothing now. */;
10661 else if (DECL_CONSTRUCTOR_P (current_function_decl))
10662 begin_constructor_body ();
10663 else if (DECL_DESTRUCTOR_P (current_function_decl))
10664 begin_destructor_body ();
10665
ade3dc07 10666 return stmt;
9bfadf57
MM
10667}
10668
ade3dc07
JM
10669/* Do the processing for the end of a function body. Currently, this means
10670 closing out the cleanups for fully-constructed bases and members, and in
10671 the case of the destructor, deleting the object if desired. Again, this
10672 is only meaningful for [cd]tors, since they are the only functions where
10673 there is a significant distinction between the main body and any
10674 function catch clauses. Handling, say, main() return semantics here
10675 would be wrong, as flowing off the end of a function catch clause for
10676 main() would also need to return 0. */
10677
10678void
11f6b451 10679finish_function_body (tree compstmt)
ade3dc07 10680{
5633b37c 10681 /* Close the block. */
7a3397c7 10682 finish_compound_stmt (compstmt);
ade3dc07
JM
10683
10684 if (processing_template_decl)
10685 /* Do nothing now. */;
10686 else if (DECL_CONSTRUCTOR_P (current_function_decl))
10687 finish_constructor_body ();
10688 else if (DECL_DESTRUCTOR_P (current_function_decl))
10689 finish_destructor_body ();
10690}
10691
8d08fdba
MS
10692/* Finish up a function declaration and compile that function
10693 all the way to assembler language output. The free the storage
10694 for the function definition.
10695
68642fb6 10696 FLAGS is a bitwise or of the following values:
f181d4ae
MM
10697 2 - INCLASS_INLINE
10698 We just finished processing the body of an in-class inline
10699 function definition. (This processing will have taken place
87e3dbc9 10700 after the class definition is complete.) */
8d08fdba 10701
4d6abc1c 10702tree
11f6b451 10703finish_function (int flags)
8d08fdba 10704{
926ce8bd 10705 tree fndecl = current_function_decl;
8d08fdba 10706 tree fntype, ctype = NULL_TREE;
f181d4ae 10707 int inclass_inline = (flags & 2) != 0;
87e3dbc9 10708 int nested;
8d08fdba
MS
10709
10710 /* When we get some parse errors, we can end up without a
10711 current_function_decl, so cope. */
10712 if (fndecl == NULL_TREE)
4d6abc1c 10713 return error_mark_node;
8d08fdba 10714
9aad8f83
MA
10715 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
10716 && DECL_VIRTUAL_P (fndecl)
10717 && !processing_template_decl)
10718 {
10719 tree fnclass = DECL_CONTEXT (fndecl);
10720 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
10721 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
10722 }
10723
87e3dbc9 10724 nested = function_depth > 1;
8d08fdba
MS
10725 fntype = TREE_TYPE (fndecl);
10726
9bfadf57
MM
10727 /* TREE_READONLY (fndecl) = 1;
10728 This caused &foo to be of type ptr-to-const-function
10729 which then got a warning when stored in a ptr-to-function variable. */
8d08fdba 10730
f444e36b 10731 my_friendly_assert (building_stmt_tree (), 20000911);
8d08fdba 10732
0ba8a114
NS
10733 finish_fname_decls ();
10734
db9b2174
MM
10735 /* For a cloned function, we've already got all the code we need;
10736 there's no need to add any extra bits. */
f444e36b 10737 if (!DECL_CLONED_FUNCTION_P (fndecl))
8d08fdba 10738 {
ade3dc07 10739 if (DECL_MAIN_P (current_function_decl))
efee38a9
MM
10740 {
10741 /* Make it so that `main' always returns 0 by default. */
08c7ae5a 10742#if VMS_TARGET
efee38a9
MM
10743 finish_return_stmt (integer_one_node);
10744#else
10745 finish_return_stmt (integer_zero_node);
10746#endif
10747 }
87e3dbc9 10748
b35d4555
MM
10749 /* Finish dealing with exception specifiers. */
10750 if (flag_exceptions && !processing_template_decl
1660cb3a 10751 && flag_enforce_eh_specs
b35d4555 10752 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
52a11cbf
RH
10753 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
10754 (TREE_TYPE (current_function_decl)),
10755 current_eh_spec_block);
5566b478 10756 }
68642fb6 10757
558475f0 10758 /* If we're saving up tree structure, tie off the function now. */
f444e36b 10759 finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
8d2733ca 10760
b2dd096b
MM
10761 /* If this function can't throw any exceptions, remember that. */
10762 if (!processing_template_decl
10763 && !cp_function_chain->can_throw
10764 && !flag_non_call_exceptions)
10765 TREE_NOTHROW (fndecl) = 1;
10766
8d08fdba
MS
10767 /* This must come after expand_function_end because cleanups might
10768 have declarations (from inline functions) that need to go into
10769 this function's blocks. */
7437519c
ZW
10770
10771 /* If the current binding level isn't the outermost binding level
10772 for this function, either there is a bug, or we have experienced
10773 syntax errors and the statement tree is malformed. */
a7e8c268 10774 if (current_binding_level->kind != sk_function_parms)
7437519c
ZW
10775 {
10776 /* Make sure we have already experienced errors. */
10777 if (errorcount == 0)
10778 abort ();
10779
10780 /* Throw away the broken statement tree and extra binding
10781 levels. */
10782 DECL_SAVED_TREE (fndecl) = build_stmt (COMPOUND_STMT, NULL_TREE);
10783
a7e8c268 10784 while (current_binding_level->kind != sk_function_parms)
7437519c 10785 {
a7e8c268 10786 if (current_binding_level->kind == sk_class)
7437519c
ZW
10787 pop_nested_class ();
10788 else
10789 poplevel (0, 0, 0);
10790 }
10791 }
f444e36b 10792 poplevel (1, 0, 1);
8d08fdba 10793
4985cde3
RH
10794 /* Statements should always be full-expressions at the outermost set
10795 of curly braces for a function. */
10796 my_friendly_assert (stmts_are_full_exprs_p (), 19990831);
10797
07b2f2fd
JM
10798 /* Set up the named return value optimization, if we can. Here, we
10799 eliminate the copy from the nrv into the RESULT_DECL and any cleanup
10800 for the nrv. genrtl_start_function and declare_return_variable
10801 handle making the nrv and RESULT_DECL share space. */
10802 if (current_function_return_value)
10803 {
10804 tree r = current_function_return_value;
35e939ae
JM
10805 tree outer;
10806
07b2f2fd 10807 if (r != error_mark_node
35e939ae
JM
10808 /* This is only worth doing for fns that return in memory--and
10809 simpler, since we don't have to worry about promoted modes. */
61f71b34 10810 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
35e939ae
JM
10811 /* Only allow this for variables declared in the outer scope of
10812 the function so we know that their lifetime always ends with a
10813 return; see g++.dg/opt/nrv6.C. We could be more flexible if
10814 we were to do this optimization in tree-ssa. */
10815 /* Skip the artificial function body block. */
10816 && (outer = BLOCK_SUBBLOCKS (BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl))),
10817 chain_member (r, BLOCK_VARS (outer))))
07b2f2fd 10818 {
35e939ae 10819
07b2f2fd
JM
10820 DECL_ALIGN (r) = DECL_ALIGN (DECL_RESULT (fndecl));
10821 walk_tree_without_duplicates (&DECL_SAVED_TREE (fndecl),
10822 nullify_returns_r, r);
10823 }
10824 else
10825 /* Clear it so genrtl_start_function and declare_return_variable
10826 know we're not optimizing. */
10827 current_function_return_value = NULL_TREE;
10828 }
10829
a8f73d4b 10830 /* Remember that we were in class scope. */
db5ae43f 10831 if (current_class_name)
a8f73d4b 10832 ctype = current_class_type;
db5ae43f 10833
1caa11d3
MM
10834 /* Must mark the RESULT_DECL as being in this function. */
10835 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
10836
10837 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
10838 to the FUNCTION_DECL node itself. */
10839 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
10840
59026e79 10841 /* Save away current state, if appropriate. */
f444e36b 10842 if (!processing_template_decl)
59026e79
MM
10843 save_function_data (fndecl);
10844
95fabfd3
MM
10845 /* If this function calls `setjmp' it cannot be inlined. When
10846 `longjmp' is called it is not guaranteed to restore the value of
10847 local variables that have been modified since the call to
10848 `setjmp'. So, if were to inline this function into some caller
10849 `c', then when we `longjmp', we might not restore all variables
10850 in `c'. (It might seem, at first blush, that there's no way for
10851 this function to modify local variables in `c', but their
10852 addresses may have been stored somewhere accessible to this
10853 function.) */
f444e36b 10854 if (!processing_template_decl && calls_setjmp_p (fndecl))
95fabfd3
MM
10855 DECL_UNINLINABLE (fndecl) = 1;
10856
efe49da0 10857 /* Complain if there's just no return statement. */
46cfb101 10858 if (warn_return_type
efe49da0 10859 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
c1b83cc9 10860 && !dependent_type_p (TREE_TYPE (fntype))
57d5032b 10861 && !current_function_returns_value && !current_function_returns_null
efe49da0
JM
10862 /* Don't complain if we abort or throw. */
10863 && !current_function_returns_abnormally
46cfb101
JM
10864 && !DECL_NAME (DECL_RESULT (fndecl))
10865 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
efe49da0 10866 inline function, as we might never be compiled separately. */
efc7052d 10867 && (DECL_INLINE (fndecl) || processing_template_decl))
efe49da0 10868 warning ("no return statement in function returning non-void");
4985cde3
RH
10869
10870 /* We're leaving the context of this function, so zap cfun. It's still in
10871 DECL_SAVED_INSNS, and we'll restore it in tree_rest_of_compilation. */
f444e36b 10872 cfun = NULL;
c1f927e8 10873 current_function_decl = NULL;
a8f73d4b 10874
27631dae 10875 /* If this is an in-class inline definition, we may have to pop the
a8f73d4b
MM
10876 bindings for the template parameters that we added in
10877 maybe_begin_member_template_processing when start_function was
10878 called. */
10879 if (inclass_inline)
10880 maybe_end_member_template_processing ();
10881
10882 /* Leave the scope of the class. */
10883 if (ctype)
10884 pop_nested_class ();
5566b478
MS
10885
10886 --function_depth;
8d08fdba 10887
4d6abc1c 10888 /* Clean up. */
28cbf42c 10889 if (! nested)
1f8f4a0b
MM
10890 /* Let the error reporting routines know that we're outside a
10891 function. For a nested function, this value is used in
b03e38e1 10892 cxx_pop_function_context and then reset via pop_function_context. */
1f8f4a0b 10893 current_function_decl = NULL_TREE;
4d6abc1c
MM
10894
10895 return fndecl;
8d08fdba
MS
10896}
10897\f
10898/* Create the FUNCTION_DECL for a function definition.
8d08fdba
MS
10899 DECLSPECS and DECLARATOR are the parts of the declaration;
10900 they describe the return type and the name of the function,
10901 but twisted together in a fashion that parallels the syntax of C.
10902
10903 This function creates a binding context for the function body
10904 as well as setting up the FUNCTION_DECL in current_function_decl.
10905
10906 Returns a FUNCTION_DECL on success.
10907
10908 If the DECLARATOR is not suitable for a function (it defines a datum
10909 instead), we return 0, which tells yyparse to report a parse error.
10910
10911 May return void_type_node indicating that this method is actually
10912 a friend. See grokfield for more details.
10913
10914 Came here with a `.pushlevel' .
10915
10916 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
10917 CHANGES TO CODE IN `grokfield'. */
e92cc029 10918
8d08fdba 10919tree
11f6b451 10920start_method (tree declspecs, tree declarator, tree attrlist)
8d08fdba 10921{
c11b6f21 10922 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
91d231cb 10923 &attrlist);
8d08fdba 10924
a723baf1
MM
10925 if (fndecl == error_mark_node)
10926 return error_mark_node;
10927
10928 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
10929 {
10930 error ("invalid member function declaration");
10931 return error_mark_node;
10932 }
8d08fdba 10933
195a5def
IR
10934 if (attrlist)
10935 cplus_decl_attributes (&fndecl, attrlist, 0);
10936
8d08fdba 10937 /* Pass friends other than inline friend functions back. */
a1774733 10938 if (fndecl == void_type_node)
8d08fdba
MS
10939 return fndecl;
10940
8d08fdba
MS
10941 if (DECL_IN_AGGR_P (fndecl))
10942 {
10943 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
10944 {
68642fb6 10945 if (DECL_CONTEXT (fndecl)
2c73f9f5 10946 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
33bd39a2 10947 error ("`%D' is already defined in class `%T'", fndecl,
2ae7bada 10948 DECL_CONTEXT (fndecl));
8d08fdba
MS
10949 }
10950 return void_type_node;
10951 }
10952
f3400fe2
JM
10953 check_template_shadow (fndecl);
10954
79065db2 10955 DECL_DECLARED_INLINE_P (fndecl) = 1;
8926095f 10956 if (flag_default_inline)
8d08fdba
MS
10957 DECL_INLINE (fndecl) = 1;
10958
36a117a5
MM
10959 /* We process method specializations in finish_struct_1. */
10960 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
4b0d3cbe
MM
10961 {
10962 fndecl = push_template_decl (fndecl);
10963 if (fndecl == error_mark_node)
10964 return fndecl;
10965 }
a0a33927 10966
8d08fdba
MS
10967 if (! DECL_FRIEND_P (fndecl))
10968 {
8d08fdba
MS
10969 if (TREE_CHAIN (fndecl))
10970 {
10971 fndecl = copy_node (fndecl);
10972 TREE_CHAIN (fndecl) = NULL_TREE;
10973 }
271e6f02 10974 grok_special_member_properties (fndecl);
8d08fdba
MS
10975 }
10976
cd9f6678 10977 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
8d08fdba 10978
f4f206f4 10979 /* Make a place for the parms. */
ac20c67a 10980 begin_scope (sk_function_parms, fndecl);
68642fb6 10981
8d08fdba
MS
10982 DECL_IN_AGGR_P (fndecl) = 1;
10983 return fndecl;
10984}
10985
10986/* Go through the motions of finishing a function definition.
10987 We don't compile this method until after the whole class has
10988 been processed.
10989
10990 FINISH_METHOD must return something that looks as though it
10991 came from GROKFIELD (since we are defining a method, after all).
10992
10993 This is called after parsing the body of the function definition.
10994 STMTS is the chain of statements that makes up the function body.
10995
10996 DECL is the ..._DECL that `start_method' provided. */
10997
10998tree
11f6b451 10999finish_method (tree decl)
8d08fdba 11000{
926ce8bd 11001 tree fndecl = decl;
8d08fdba 11002 tree old_initial;
8d08fdba 11003
926ce8bd 11004 tree link;
8d08fdba 11005
a1774733 11006 if (decl == void_type_node)
8d08fdba
MS
11007 return decl;
11008
11009 old_initial = DECL_INITIAL (fndecl);
11010
11011 /* Undo the level for the parms (from start_method).
11012 This is like poplevel, but it causes nothing to be
11013 saved. Saving information here confuses symbol-table
11014 output routines. Besides, this information will
11015 be correctly output when this method is actually
11016 compiled. */
11017
11018 /* Clear out the meanings of the local variables of this level;
11019 also record in each decl which block it belongs to. */
11020
11021 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
11022 {
11023 if (DECL_NAME (link) != NULL_TREE)
d8f8dca1 11024 pop_binding (DECL_NAME (link), link);
8d08fdba
MS
11025 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
11026 DECL_CONTEXT (link) = NULL_TREE;
11027 }
11028
8d08fdba
MS
11029 poplevel (0, 0, 0);
11030
11031 DECL_INITIAL (fndecl) = old_initial;
11032
11033 /* We used to check if the context of FNDECL was different from
11034 current_class_type as another way to get inside here. This didn't work
11035 for String.cc in libg++. */
11036 if (DECL_FRIEND_P (fndecl))
11037 {
11038 CLASSTYPE_INLINE_FRIENDS (current_class_type)
11039 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
11040 decl = void_type_node;
11041 }
11042
11043 return decl;
11044}
11045\f
0154eaa8
MM
11046
11047/* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
11048 we can lay it out later, when and if its type becomes complete. */
8d08fdba
MS
11049
11050void
11f6b451 11051maybe_register_incomplete_var (tree var)
8d08fdba 11052{
0154eaa8 11053 my_friendly_assert (TREE_CODE (var) == VAR_DECL, 20020406);
8d08fdba 11054
0154eaa8
MM
11055 /* Keep track of variables with incomplete types. */
11056 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
11057 && DECL_EXTERNAL (var))
70adf8a9 11058 {
0154eaa8
MM
11059 tree inner_type = TREE_TYPE (var);
11060
11061 while (TREE_CODE (inner_type) == ARRAY_TYPE)
11062 inner_type = TREE_TYPE (inner_type);
11063 inner_type = TYPE_MAIN_VARIANT (inner_type);
11064
11065 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
11066 /* RTTI TD entries are created while defining the type_info. */
11067 || (TYPE_LANG_SPECIFIC (inner_type)
11068 && TYPE_BEING_DEFINED (inner_type)))
11069 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
70adf8a9 11070 }
0154eaa8 11071}
70adf8a9 11072
0154eaa8
MM
11073/* Called when a class type (given by TYPE) is defined. If there are
11074 any existing VAR_DECLs whose type hsa been completed by this
11075 declaration, update them now. */
70adf8a9 11076
0154eaa8 11077void
11f6b451 11078complete_vars (tree type)
0154eaa8
MM
11079{
11080 tree *list = &incomplete_vars;
11081
11082 my_friendly_assert (CLASS_TYPE_P (type), 20020406);
11083 while (*list)
11084 {
11085 if (same_type_p (type, TREE_PURPOSE (*list)))
70adf8a9 11086 {
0154eaa8 11087 tree var = TREE_VALUE (*list);
c740732f
MM
11088 /* Complete the type of the variable. The VAR_DECL itself
11089 will be laid out in expand_expr. */
11090 complete_type (TREE_TYPE (var));
0154eaa8
MM
11091 /* Remove this entry from the list. */
11092 *list = TREE_CHAIN (*list);
f30432d7
MS
11093 }
11094 else
0154eaa8 11095 list = &TREE_CHAIN (*list);
f30432d7 11096 }
8d08fdba
MS
11097}
11098
86f45d2c
MM
11099/* If DECL is of a type which needs a cleanup, build that cleanup
11100 here. */
e92cc029 11101
86f45d2c 11102tree
11f6b451 11103cxx_maybe_build_cleanup (tree decl)
8d08fdba
MS
11104{
11105 tree type = TREE_TYPE (decl);
86f45d2c 11106
834c6dff 11107 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8d08fdba 11108 {
80048418 11109 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
8d08fdba 11110 tree rval;
8d08fdba 11111
8d08fdba
MS
11112 if (TREE_CODE (type) == ARRAY_TYPE)
11113 rval = decl;
11114 else
11115 {
dffd7eb6 11116 cxx_mark_addressable (decl);
8d08fdba
MS
11117 rval = build_unary_op (ADDR_EXPR, decl, 0);
11118 }
11119
11120 /* Optimize for space over speed here. */
11121 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
11122 || flag_expensive_optimizations)
11123 flags |= LOOKUP_NONVIRTUAL;
11124
86f45d2c
MM
11125 rval = build_delete (TREE_TYPE (rval), rval,
11126 sfk_complete_destructor, flags, 0);
8d08fdba
MS
11127
11128 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
11129 && ! TYPE_HAS_DESTRUCTOR (type))
c7b62f14 11130 rval = build_compound_expr (rval, build_vbase_delete (type, decl));
8d08fdba 11131
8d08fdba
MS
11132 return rval;
11133 }
6e4ae815 11134 return NULL_TREE;
8d08fdba
MS
11135}
11136\f
558475f0 11137/* When a stmt has been parsed, this function is called. */
8d08fdba
MS
11138
11139void
11f6b451 11140finish_stmt (void)
8d08fdba 11141{
558475f0
MM
11142 /* Always assume this statement was not an expression statement. If
11143 it actually was an expression statement, its our callers
11144 responsibility to fix this up. */
11145 last_expr_type = NULL_TREE;
8d08fdba
MS
11146}
11147
3afb32a4
MM
11148/* DECL was originally constructed as a non-static member function,
11149 but turned out to be static. Update it accordingly. */
700f8a87 11150
8857f91e 11151void
11f6b451 11152revert_static_member_fn (tree decl)
8d08fdba 11153{
700f8a87 11154 tree tmp;
3afb32a4
MM
11155 tree function = TREE_TYPE (decl);
11156 tree args = TYPE_ARG_TYPES (function);
8d08fdba 11157
89d684bb 11158 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
91063b51 11159 != TYPE_UNQUALIFIED)
33bd39a2 11160 error ("static member function `%#D' declared with type qualifiers",
11306230 11161 decl);
f30432d7 11162
700f8a87
MS
11163 args = TREE_CHAIN (args);
11164 tmp = build_function_type (TREE_TYPE (function), args);
89d684bb 11165 tmp = build_qualified_type (tmp, cp_type_quals (function));
f30432d7 11166 tmp = build_exception_variant (tmp,
8d08fdba 11167 TYPE_RAISES_EXCEPTIONS (function));
3afb32a4
MM
11168 TREE_TYPE (decl) = tmp;
11169 if (DECL_ARGUMENTS (decl))
11170 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
11171 DECL_STATIC_FUNCTION_P (decl) = 1;
8d08fdba 11172}
a4443a08 11173
68642fb6
UD
11174/* Initialize the variables used during compilation of a C++
11175 function. */
db5ae43f 11176
b03e38e1 11177void
11f6b451 11178cxx_push_function_context (struct function * f)
99dccabc 11179{
e2500fed 11180 struct language_function *p
c68b0a84 11181 = ggc_alloc_cleared (sizeof (struct language_function));
e2500fed 11182 f->language = p;
db5ae43f 11183
f1dedc31
MM
11184 /* Whenever we start a new function, we destroy temporaries in the
11185 usual way. */
ae499cce 11186 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4985cde3
RH
11187
11188 if (f->decl)
11189 {
11190 tree fn = f->decl;
11191
11192 current_function_is_thunk = DECL_THUNK_P (fn);
11193
11194 if (DECL_SAVED_FUNCTION_DATA (fn))
11195 {
11196 /* If we already parsed this function, and we're just expanding it
11197 now, restore saved state. */
11198 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
11199
11200 /* If we decided that we didn't want to inline this function,
11201 make sure the back-end knows that. */
11202 if (!current_function_cannot_inline)
11203 current_function_cannot_inline = cp_function_chain->cannot_inline;
11204
11205 /* We don't need the saved data anymore. Unless this is an inline
11206 function; we need the named return value info for
11207 cp_copy_res_decl_for_inlining. */
11208 if (! DECL_INLINE (fn))
11209 DECL_SAVED_FUNCTION_DATA (fn) = NULL;
11210 }
11211 }
db5ae43f
MS
11212}
11213
a8f73d4b
MM
11214/* Free the language-specific parts of F, now that we've finished
11215 compiling the function. */
db5ae43f 11216
b03e38e1 11217void
11f6b451 11218cxx_pop_function_context (struct function * f)
db5ae43f 11219{
99dccabc 11220 f->language = 0;
db5ae43f 11221}
ebfc180f 11222
e2500fed
GK
11223/* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11224 one of the language-independent trees. */
4519c0a8 11225
e2500fed 11226enum cp_tree_node_structure_enum
11f6b451 11227cp_tree_node_structure (union lang_tree_node * t)
4519c0a8 11228{
e2500fed 11229 switch (TREE_CODE (&t->generic))
4519c0a8 11230 {
a723baf1 11231 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
e2500fed 11232 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
e2500fed
GK
11233 case OVERLOAD: return TS_CP_OVERLOAD;
11234 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
11235 case PTRMEM_CST: return TS_CP_PTRMEM;
5dae1114 11236 case BASELINK: return TS_CP_BASELINK;
e2500fed 11237 case WRAPPER: return TS_CP_WRAPPER;
e2500fed 11238 default: return TS_CP_GENERIC;
4519c0a8
MM
11239 }
11240}
5fd8e536 11241
eaa7c03f
JM
11242/* Build the void_list_node (void_type_node having been created). */
11243tree
11f6b451 11244build_void_list_node (void)
eaa7c03f
JM
11245{
11246 tree t = build_tree_list (NULL_TREE, void_type_node);
11247 TREE_PARMLIST (t) = 1;
11248 return t;
11249}
11250
d363e7bf 11251static int
11f6b451 11252cp_missing_noreturn_ok_p (tree decl)
d363e7bf
AJ
11253{
11254 /* A missing noreturn is ok for the `main' function. */
92643fea 11255 return DECL_MAIN_P (decl);
d363e7bf 11256}
e2500fed
GK
11257
11258#include "gt-cp-decl.h"
11259#include "gtype-cp.h"
This page took 5.445466 seconds and 5 git commands to generate.