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