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