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