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