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