]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/decl.c
re PR fortran/25746 (Elemental assignment gives wrong result)
[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
e2537f2c
MM
5811/* Build a PARM_DECL for the "this" parameter. TYPE is the
5812 METHOD_TYPE for a non-static member function; QUALS are the
5813 cv-qualifiers that apply to the function. */
5814
5815tree
5816build_this_parm (tree type, cp_cv_quals quals)
5817{
5818 tree this_type;
5819 tree qual_type;
5820 tree parm;
5821 cp_cv_quals this_quals;
5822
5823 this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
5824 /* The `this' parameter is implicitly `const'; it cannot be
5825 assigned to. */
5826 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
5827 qual_type = cp_build_qualified_type (this_type, this_quals);
5828 parm = build_artificial_parm (this_identifier, qual_type);
5829 cp_apply_type_quals_to_decl (this_quals, parm);
5830 return parm;
5831}
5832
8d08fdba
MS
5833/* CTYPE is class type, or null if non-class.
5834 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5835 or METHOD_TYPE.
5836 DECLARATOR is the function's name.
4546865e 5837 PARMS is a chain of PARM_DECLs for the function.
8d08fdba
MS
5838 VIRTUALP is truthvalue of whether the function is virtual or not.
5839 FLAGS are to be passed through to `grokclassfn'.
5840 QUALS are qualifiers indicating whether the function is `const'
5841 or `volatile'.
5842 RAISES is a list of exceptions that this function can raise.
5843 CHECK is 1 if we must find this method in CTYPE, 0 if we should
68642fb6 5844 not look, and -1 if we should not call `grokclassfn' at all.
3ddfb0e6 5845
27d6592c
MM
5846 SFK is the kind of special function (if any) for the new function.
5847
20496fa2 5848 Returns `NULL_TREE' if something goes wrong, after issuing
3ddfb0e6 5849 applicable error messages. */
e92cc029 5850
8d08fdba 5851static tree
caf93cb0 5852grokfndecl (tree ctype,
0cbd7506
MS
5853 tree type,
5854 tree declarator,
4546865e 5855 tree parms,
0cbd7506
MS
5856 tree orig_declarator,
5857 int virtualp,
5858 enum overload_flags flags,
3c01e5df 5859 cp_cv_quals quals,
0cbd7506
MS
5860 tree raises,
5861 int check,
5862 int friendp,
5863 int publicp,
5864 int inlinep,
27d6592c 5865 special_function_kind sfk,
357d956e 5866 bool funcdef_flag,
0cbd7506
MS
5867 int template_count,
5868 tree in_namespace,
037cc9c5 5869 tree* attrlist)
8d08fdba 5870{
1951a1b6 5871 tree decl;
8d08fdba 5872 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
42976354 5873 tree t;
8d08fdba 5874
8d08fdba 5875 if (raises)
271e6f02 5876 type = build_exception_variant (type, raises);
c11b6f21 5877
8d08fdba 5878 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
e2537f2c
MM
5879 if (TREE_CODE (type) == METHOD_TYPE)
5880 {
5881 tree parm;
5882 parm = build_this_parm (type, quals);
5883 TREE_CHAIN (parm) = parms;
5884 parms = parm;
5885 }
4546865e 5886 DECL_ARGUMENTS (decl) = parms;
a1c65f9f 5887 /* Propagate volatile out from type to decl. */
8d08fdba 5888 if (TYPE_VOLATILE (type))
893de33c 5889 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba 5890
abc088aa
MM
5891 if (friendp
5892 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
5893 {
5894 if (funcdef_flag)
5895 error
5896 ("defining explicit specialization %qD in friend declaration",
5897 orig_declarator);
5898 else
5899 {
5900 tree fns = TREE_OPERAND (orig_declarator, 0);
5901 tree args = TREE_OPERAND (orig_declarator, 1);
5902
5903 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5904 {
5905 /* Something like `template <class T> friend void f<T>()'. */
5906 error ("invalid use of template-id %qD in declaration "
5907 "of primary template",
5908 orig_declarator);
5909 return NULL_TREE;
5910 }
5911
5912
5913 /* A friend declaration of the form friend void f<>(). Record
5914 the information in the TEMPLATE_ID_EXPR. */
5915 SET_DECL_IMPLICIT_INSTANTIATION (decl);
5916
5917 if (TREE_CODE (fns) == COMPONENT_REF)
5918 {
5919 /* Due to bison parser ickiness, we will have already looked
5920 up an operator_name or PFUNCNAME within the current class
5921 (see template_id in parse.y). If the current class contains
5922 such a name, we'll get a COMPONENT_REF here. Undo that. */
5923
5924 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
5925 == current_class_type);
5926 fns = TREE_OPERAND (fns, 1);
5927 }
5928 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
5929 || TREE_CODE (fns) == OVERLOAD);
5930 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
5931
5932 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
5933 if (TREE_PURPOSE (t)
5934 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
5935 {
5936 error ("default arguments are not allowed in declaration "
5937 "of friend template specialization %qD",
5938 decl);
5939 return NULL_TREE;
5940 }
5941
5942 if (inlinep)
5943 {
5944 error ("%<inline%> is not allowed in declaration of friend "
5945 "template specialization %qD",
5946 decl);
5947 return NULL_TREE;
5948 }
5949 }
5950 }
5951
79c4d4b7 5952 /* If this decl has namespace scope, set that up. */
2c73f9f5 5953 if (in_namespace)
b262d64c 5954 set_decl_namespace (decl, in_namespace, friendp);
adae082f 5955 else if (!ctype)
79c4d4b7 5956 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 5957
0f8766b8
JM
5958 /* `main' and builtins have implicit 'C' linkage. */
5959 if ((MAIN_NAME_P (declarator)
5960 || (IDENTIFIER_LENGTH (declarator) > 10
5961 && IDENTIFIER_POINTER (declarator)[0] == '_'
5962 && IDENTIFIER_POINTER (declarator)[1] == '_'
5963 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
5964 && current_lang_name == lang_name_cplusplus
94706a5c 5965 && ctype == NULL_TREE
79c4d4b7
JM
5966 /* NULL_TREE means global namespace. */
5967 && DECL_CONTEXT (decl) == NULL_TREE)
5d2ed28c 5968 SET_DECL_LANGUAGE (decl, lang_c);
0f8766b8 5969
8d08fdba
MS
5970 /* Should probably propagate const out from type to decl I bet (mrs). */
5971 if (staticp)
5972 {
5973 DECL_STATIC_FUNCTION_P (decl) = 1;
5974 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
5975 }
5976
e76a2646 5977 if (ctype)
9c12301f
MM
5978 {
5979 DECL_CONTEXT (decl) = ctype;
5980 if (funcdef_flag)
5981 check_class_member_definition_namespace (decl);
5982 }
e76a2646 5983
0f8766b8 5984 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
faae18ab 5985 {
848b92e1 5986 if (processing_template_decl)
2d01edd7 5987 error ("cannot declare %<::main%> to be a template");
faae18ab 5988 if (inlinep)
2d01edd7 5989 error ("cannot declare %<::main%> to be inline");
f22967f3 5990 if (!publicp)
2d01edd7 5991 error ("cannot declare %<::main%> to be static");
f22967f3
MM
5992 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
5993 integer_type_node))
2cfe82fe 5994 {
9a1c562a
AP
5995 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
5996 tree newtype;
2d01edd7 5997 error ("%<::main%> must return %<int%>");
9a1c562a
AP
5998 newtype = build_function_type (integer_type_node,
5999 oldtypeargs);
6000 TREE_TYPE (decl) = newtype;
2cfe82fe 6001 }
faae18ab
MS
6002 inlinep = 0;
6003 publicp = 1;
6004 }
50a6dbd7 6005
59e76fc6 6006 /* Members of anonymous types and local classes have no linkage; make
9fc444cc 6007 them internal. If a typedef is made later, this will be changed. */
1951a1b6 6008 if (ctype && (TYPE_ANONYMOUS_P (ctype)
4f1c5b7d 6009 || decl_function_context (TYPE_MAIN_DECL (ctype))))
50a6dbd7
JM
6010 publicp = 0;
6011
6012 if (publicp)
6013 {
6014 /* [basic.link]: A name with no linkage (notably, the name of a class
6015 or enumeration declared in a local scope) shall not be used to
6016 declare an entity with linkage.
6017
50b97e0f 6018 Only check this for public decls for now. See core 319, 389. */
4684cd27
MM
6019 t = no_linkage_check (TREE_TYPE (decl),
6020 /*relaxed_p=*/false);
50a6dbd7
JM
6021 if (t)
6022 {
1951a1b6 6023 if (TYPE_ANONYMOUS_P (t))
7f7c930e 6024 {
eb68cb58 6025 if (DECL_EXTERN_C_P (decl))
7f7c930e
JM
6026 /* Allow this; it's pretty common in C. */;
6027 else
1951a1b6 6028 {
2d01edd7 6029 pedwarn ("non-local function %q#D uses anonymous type",
1951a1b6
JM
6030 decl);
6031 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
dee15844
JM
6032 pedwarn ("%q+#D does not refer to the unqualified "
6033 "type, so it is not used for linkage",
6034 TYPE_NAME (t));
1951a1b6 6035 }
7f7c930e 6036 }
50a6dbd7 6037 else
2d01edd7 6038 pedwarn ("non-local function %q#D uses local type %qT", decl, t);
50a6dbd7
JM
6039 }
6040 }
6041
893de33c 6042 TREE_PUBLIC (decl) = publicp;
faae18ab 6043 if (! publicp)
893de33c
JM
6044 {
6045 DECL_INTERFACE_KNOWN (decl) = 1;
6046 DECL_NOT_REALLY_EXTERN (decl) = 1;
6047 }
faae18ab 6048
acc72c37 6049 /* If the declaration was declared inline, mark it as such. */
faae18ab 6050 if (inlinep)
acc72c37
MM
6051 DECL_DECLARED_INLINE_P (decl) = 1;
6052 /* We inline functions that are explicitly declared inline, or, when
6053 the user explicitly asks us to, all functions. */
b3c3af2f
SB
6054 if (DECL_DECLARED_INLINE_P (decl)
6055 || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
acc72c37 6056 DECL_INLINE (decl) = 1;
8d08fdba
MS
6057
6058 DECL_EXTERNAL (decl) = 1;
3c01e5df 6059 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba 6060 {
2d01edd7 6061 error ("%smember function %qD cannot have cv-qualifier",
3c01e5df
MM
6062 (ctype ? "static " : "non-"), decl);
6063 quals = TYPE_UNQUALIFIED;
8d08fdba
MS
6064 }
6065
596ea4e5 6066 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
7e45bd18 6067 grok_op_properties (decl, /*complain=*/true);
8d08fdba 6068
4f1c5b7d 6069 if (ctype && decl_function_context (decl))
893de33c 6070 DECL_NO_STATIC_CHAIN (decl) = 1;
e76a2646 6071
1eb0072d
JM
6072 if (funcdef_flag)
6073 /* Make the init_value nonzero so pushdecl knows this is not
6074 tentative. error_mark_node is replaced later with the BLOCK. */
6075 DECL_INITIAL (decl) = error_mark_node;
6076
93ca4ba7 6077 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
1660cb3a
JM
6078 TREE_NOTHROW (decl) = 1;
6079
75650646 6080 /* Caller will do the rest of this. */
8d08fdba
MS
6081 if (check < 0)
6082 return decl;
6083
74b846e0 6084 if (ctype != NULL_TREE)
27d6592c
MM
6085 {
6086 if (sfk == sfk_constructor)
6087 DECL_CONSTRUCTOR_P (decl) = 1;
6088
e2537f2c 6089 grokclassfn (ctype, decl, flags);
27d6592c 6090 }
74b846e0
MM
6091
6092 decl = check_explicit_specialization (orig_declarator, decl,
6093 template_count,
357d956e 6094 2 * funcdef_flag +
74b846e0
MM
6095 4 * (friendp != 0));
6096 if (decl == error_mark_node)
6097 return NULL_TREE;
98c1c668 6098
037cc9c5
FJ
6099 if (attrlist)
6100 {
6101 cplus_decl_attributes (&decl, *attrlist, 0);
6102 *attrlist = NULL_TREE;
6103 }
6104
74b846e0
MM
6105 if (ctype != NULL_TREE
6106 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6107 && check)
8d08fdba 6108 {
74b846e0 6109 tree old_decl;
8d08fdba 6110
d43f603d 6111 old_decl = check_classfn (ctype, decl,
44021471
GB
6112 (processing_template_decl
6113 > template_class_depth (ctype))
6114 ? current_template_parms
c8094d83 6115 : NULL_TREE);
74b846e0 6116 if (old_decl)
8d08fdba 6117 {
79ae853c 6118 tree ok;
4514aa8c 6119 tree pushed_scope;
316a2456 6120
357d956e
MM
6121 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6122 /* Because grokfndecl is always supposed to return a
6123 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6124 here. We depend on our callers to figure out that its
6125 really a template that's being returned. */
6126 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6127
6128 if (DECL_STATIC_FUNCTION_P (old_decl)
6129 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6130 /* Remove the `this' parm added by grokclassfn.
6131 XXX Isn't this done in start_function, too? */
6132 revert_static_member_fn (decl);
6133 if (DECL_ARTIFICIAL (old_decl))
6134 error ("definition of implicitly-declared %qD", old_decl);
6135
74b846e0
MM
6136 /* Since we've smashed OLD_DECL to its
6137 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
6138 if (TREE_CODE (decl) == TEMPLATE_DECL)
6139 decl = DECL_TEMPLATE_RESULT (decl);
6140
6141 /* Attempt to merge the declarations. This can fail, in
0e339752 6142 the case of some invalid specialization declarations. */
4514aa8c 6143 pushed_scope = push_scope (ctype);
d63d5d0c 6144 ok = duplicate_decls (decl, old_decl, friendp);
4514aa8c
NS
6145 if (pushed_scope)
6146 pop_scope (pushed_scope);
316a2456
MM
6147 if (!ok)
6148 {
2d01edd7 6149 error ("no %q#D member function declared in class %qT",
316a2456
MM
6150 decl, ctype);
6151 return NULL_TREE;
6152 }
74b846e0 6153 return old_decl;
8d08fdba
MS
6154 }
6155 }
74b846e0
MM
6156
6157 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6158 return NULL_TREE;
6159
6160 if (ctype == NULL_TREE || check)
6161 return decl;
6162
6163 if (virtualp)
cbb40945 6164 DECL_VIRTUAL_P (decl) = 1;
74b846e0 6165
8d08fdba
MS
6166 return decl;
6167}
6168
4684cd27
MM
6169/* DECL is a VAR_DECL for a static data member. Set flags to reflect
6170 the linkage that DECL will receive in the object file. */
6171
6172static void
6173set_linkage_for_static_data_member (tree decl)
6174{
6175 /* A static data member always has static storage duration and
6176 external linkage. Note that static data members are forbidden in
6177 local classes -- the only situation in which a class has
6178 non-external linkage. */
6179 TREE_PUBLIC (decl) = 1;
6180 TREE_STATIC (decl) = 1;
6181 /* For non-template classes, static data members are always put
6182 out in exactly those files where they are defined, just as
77880ae4 6183 with ordinary namespace-scope variables. */
4684cd27
MM
6184 if (!processing_template_decl)
6185 DECL_INTERFACE_KNOWN (decl) = 1;
6186}
6187
caf93cb0 6188/* Create a VAR_DECL named NAME with the indicated TYPE.
9e259dd1
MM
6189
6190 If SCOPE is non-NULL, it is the class type or namespace containing
6191 the variable. If SCOPE is NULL, the variable should is created in
6192 the innermost enclosings scope. */
6193
8d08fdba 6194static tree
11f6b451 6195grokvardecl (tree type,
0cbd7506 6196 tree name,
1ff3c076 6197 const cp_decl_specifier_seq *declspecs,
0cbd7506
MS
6198 int initialized,
6199 int constp,
6200 tree scope)
8d08fdba
MS
6201{
6202 tree decl;
5ae9ba3e 6203 tree explicit_scope;
f7da6097 6204
50bc768d 6205 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
9e259dd1 6206
5ae9ba3e
MM
6207 /* Compute the scope in which to place the variable, but remember
6208 whether or not that scope was explicitly specified by the user. */
6209 explicit_scope = scope;
9e259dd1 6210 if (!scope)
8d08fdba 6211 {
9e259dd1
MM
6212 /* An explicit "extern" specifier indicates a namespace-scope
6213 variable. */
62d1db17 6214 if (declspecs->storage_class == sc_extern)
9e259dd1
MM
6215 scope = current_namespace;
6216 else if (!at_function_scope_p ())
a5201a91 6217 scope = current_scope ();
9e259dd1
MM
6218 }
6219
6220 if (scope
6221 && (/* If the variable is a namespace-scope variable declared in a
6222 template, we need DECL_LANG_SPECIFIC. */
6223 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6224 /* Similarly for namespace-scope variables with language linkage
6225 other than C++. */
caf93cb0 6226 || (TREE_CODE (scope) == NAMESPACE_DECL
9e259dd1
MM
6227 && current_lang_name != lang_name_cplusplus)
6228 /* Similarly for static data members. */
6229 || TYPE_P (scope)))
6230 decl = build_lang_decl (VAR_DECL, name, type);
8d08fdba 6231 else
9e259dd1 6232 decl = build_decl (VAR_DECL, name, type);
79c4d4b7 6233
5ae9ba3e
MM
6234 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6235 set_decl_namespace (decl, explicit_scope, 0);
9e259dd1
MM
6236 else
6237 DECL_CONTEXT (decl) = scope;
6060a796 6238
62d1db17 6239 if (declspecs->storage_class == sc_extern)
8d08fdba
MS
6240 {
6241 DECL_THIS_EXTERN (decl) = 1;
6242 DECL_EXTERNAL (decl) = !initialized;
6243 }
6244
2b9dc906 6245 if (DECL_CLASS_SCOPE_P (decl))
8d08fdba 6246 {
4684cd27
MM
6247 set_linkage_for_static_data_member (decl);
6248 /* This function is only called with out-of-class definitions. */
5b605f68 6249 DECL_EXTERNAL (decl) = 0;
9c12301f 6250 check_class_member_definition_namespace (decl);
8d08fdba
MS
6251 }
6252 /* At top level, either `static' or no s.c. makes a definition
6253 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 6254 else if (toplevel_bindings_p ())
8d08fdba 6255 {
62d1db17 6256 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9fffd093 6257 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
6258 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
6259 }
6260 /* Not at top level, only `static' makes a static definition. */
6261 else
6262 {
62d1db17 6263 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
8d08fdba
MS
6264 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
6265 }
50a6dbd7 6266
62d1db17 6267 if (declspecs->specs[(int)ds_thread])
7a1f3f5f
RH
6268 {
6269 if (targetm.have_tls)
c2f7fa15 6270 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7a1f3f5f
RH
6271 else
6272 /* A mere warning is sure to result in improper semantics
6273 at runtime. Don't bother to allow this to compile. */
6274 error ("thread-local storage not supported for this target");
6275 }
6276
50a6dbd7
JM
6277 if (TREE_PUBLIC (decl))
6278 {
6279 /* [basic.link]: A name with no linkage (notably, the name of a class
6280 or enumeration declared in a local scope) shall not be used to
6281 declare an entity with linkage.
6282
03fd3f84 6283 Only check this for public decls for now. */
6b211746 6284 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
50a6dbd7
JM
6285 if (t)
6286 {
1951a1b6 6287 if (TYPE_ANONYMOUS_P (t))
9fc444cc
GK
6288 {
6289 if (DECL_EXTERN_C_P (decl))
6bdb98d1
MA
6290 /* Allow this; it's pretty common in C. */
6291 ;
9fc444cc
GK
6292 else
6293 {
6b211746
AO
6294 /* DRs 132, 319 and 389 seem to indicate types with
6295 no linkage can only be used to declare extern "C"
6296 entities. Since it's not always an error in the
6297 ISO C++ 90 Standard, we only issue a warning. */
d4ee4d25 6298 warning (0, "non-local variable %q#D uses anonymous type",
9fc444cc
GK
6299 decl);
6300 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
dee15844
JM
6301 warning (0, "%q+#D does not refer to the unqualified "
6302 "type, so it is not used for linkage",
6303 TYPE_NAME (t));
9fc444cc
GK
6304 }
6305 }
50a6dbd7 6306 else
d4ee4d25 6307 warning (0, "non-local variable %q#D uses local type %qT", decl, t);
50a6dbd7
JM
6308 }
6309 }
1ceb02be
MM
6310 else
6311 DECL_INTERFACE_KNOWN (decl) = 1;
50a6dbd7 6312
8d08fdba
MS
6313 return decl;
6314}
6315
d8f8dca1
MM
6316/* Create and return a canonical pointer to member function type, for
6317 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8d08fdba
MS
6318
6319tree
11f6b451 6320build_ptrmemfunc_type (tree type)
8d08fdba 6321{
4977bab6 6322 tree field, fields;
8d08fdba 6323 tree t;
46cbda4a 6324 tree unqualified_variant = NULL_TREE;
8d08fdba 6325
d48ebde1
NS
6326 if (type == error_mark_node)
6327 return type;
d363e7bf 6328
8d08fdba
MS
6329 /* If a canonical type already exists for this type, use it. We use
6330 this method instead of type_hash_canon, because it only does a
6331 simple equality check on the list of field members. */
6332
6333 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
6334 return t;
6335
46cbda4a
MM
6336 /* Make sure that we always have the unqualified pointer-to-member
6337 type first. */
89d684bb 6338 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
68642fb6 6339 unqualified_variant
46cbda4a
MM
6340 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
6341
33848bb0 6342 t = make_aggr_type (RECORD_TYPE);
cad7e87b 6343 xref_basetypes (t, NULL_TREE);
caf93cb0 6344
2c73f9f5 6345 /* Let the front-end know this is a pointer to member function... */
db5ae43f 6346 TYPE_PTRMEMFUNC_FLAG (t) = 1;
2c73f9f5 6347 /* ... and not really an aggregate. */
7ddedda4 6348 SET_IS_AGGR_TYPE (t, 0);
8d08fdba 6349
4977bab6
ZW
6350 field = build_decl (FIELD_DECL, pfn_identifier, type);
6351 fields = field;
caf93cb0 6352
4977bab6
ZW
6353 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
6354 TREE_CHAIN (field) = fields;
6355 fields = field;
caf93cb0 6356
4977bab6 6357 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8d08fdba 6358
8d08fdba
MS
6359 /* Zap out the name so that the back-end will give us the debugging
6360 information for this anonymous RECORD_TYPE. */
6361 TYPE_NAME (t) = NULL_TREE;
6362
46cbda4a
MM
6363 /* If this is not the unqualified form of this pointer-to-member
6364 type, set the TYPE_MAIN_VARIANT for this type to be the
6365 unqualified type. Since they are actually RECORD_TYPEs that are
6366 not variants of each other, we must do this manually. */
89d684bb 6367 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
46cbda4a 6368 {
89d684bb 6369 t = build_qualified_type (t, cp_type_quals (type));
46cbda4a
MM
6370 TYPE_MAIN_VARIANT (t) = unqualified_variant;
6371 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
6372 TYPE_NEXT_VARIANT (unqualified_variant) = t;
6373 }
6374
6375 /* Cache this pointer-to-member type so that we can find it again
6376 later. */
8d08fdba
MS
6377 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
6378
8d08fdba
MS
6379 return t;
6380}
6381
9e259dd1
MM
6382/* Create and return a pointer to data member type. */
6383
6384tree
6385build_ptrmem_type (tree class_type, tree member_type)
6386{
a5ac359a
MM
6387 if (TREE_CODE (member_type) == METHOD_TYPE)
6388 {
6389 tree arg_types;
6390
6391 arg_types = TYPE_ARG_TYPES (member_type);
caf93cb0 6392 class_type = (cp_build_qualified_type
a5ac359a
MM
6393 (class_type,
6394 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
caf93cb0
EC
6395 member_type
6396 = build_method_type_directly (class_type,
43dc123f
MM
6397 TREE_TYPE (member_type),
6398 TREE_CHAIN (arg_types));
a5ac359a
MM
6399 return build_ptrmemfunc_type (build_pointer_type (member_type));
6400 }
6401 else
6402 {
50bc768d 6403 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
a5ac359a
MM
6404 return build_offset_type (class_type, member_type);
6405 }
9e259dd1
MM
6406}
6407
b17e2870
JM
6408/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
6409 Check to see that the definition is valid. Issue appropriate error
6410 messages. Return 1 if the definition is particularly bad, or 0
6411 otherwise. */
6412
6413int
11f6b451 6414check_static_variable_definition (tree decl, tree type)
b17e2870
JM
6415{
6416 /* Motion 10 at San Diego: If a static const integral data member is
6417 initialized with an integral constant expression, the initializer
6418 may appear either in the declaration (within the class), or in
6419 the definition, but not both. If it appears in the class, the
6420 member is a member constant. The file-scope definition is always
6421 required. */
dcba9b0f 6422 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
b17e2870 6423 {
2d01edd7 6424 error ("invalid in-class initialization of static data member "
0cbd7506 6425 "of non-integral type %qT",
dcba9b0f 6426 type);
b17e2870 6427 /* If we just return the declaration, crashes will sometimes
852dcbdd 6428 occur. We therefore return void_type_node, as if this were a
b17e2870
JM
6429 friend declaration, to cause callers to completely ignore
6430 this declaration. */
6431 return 1;
6432 }
6433 else if (!CP_TYPE_CONST_P (type))
2d01edd7 6434 error ("ISO C++ forbids in-class initialization of non-const "
0cbd7506
MS
6435 "static member %qD",
6436 decl);
b17e2870 6437 else if (pedantic && !INTEGRAL_TYPE_P (type))
2d01edd7 6438 pedwarn ("ISO C++ forbids initialization of member constant "
0cbd7506 6439 "%qD of non-integral type %qT", decl, type);
b17e2870
JM
6440
6441 return 0;
6442}
6443
2848ad0f
MM
6444/* Given the SIZE (i.e., number of elements) in an array, compute an
6445 appropriate index type for the array. If non-NULL, NAME is the
6446 name of the thing being declared. */
6447
c95cd22e 6448tree
11f6b451 6449compute_array_index_type (tree name, tree size)
2848ad0f 6450{
d174af6c 6451 tree type;
2848ad0f
MM
6452 tree itype;
6453
d174af6c
MM
6454 if (error_operand_p (size))
6455 return error_mark_node;
6456
6457 type = TREE_TYPE (size);
d63b5e9f
NS
6458 /* The array bound must be an integer type. */
6459 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
2848ad0f 6460 {
d63b5e9f 6461 if (name)
2d01edd7 6462 error ("size of array %qD has non-integral type %qT", name, type);
d63b5e9f 6463 else
2d01edd7 6464 error ("size of array has non-integral type %qT", type);
d63b5e9f
NS
6465 size = integer_one_node;
6466 type = TREE_TYPE (size);
2848ad0f
MM
6467 }
6468
d63b5e9f
NS
6469 if (abi_version_at_least (2)
6470 /* We should only handle value dependent expressions specially. */
6471 ? value_dependent_expression_p (size)
6472 /* But for abi-1, we handled all instances in templates. This
6473 effects the manglings produced. */
6474 : processing_template_decl)
6475 return build_index_type (build_min (MINUS_EXPR, sizetype,
6476 size, integer_one_node));
6477
a1c65f9f 6478 /* The size might be the result of a cast. */
80f5bb34
MM
6479 STRIP_TYPE_NOPS (size);
6480
6481 /* It might be a const variable or enumeration constant. */
8a784e4a 6482 size = integral_constant_value (size);
80f5bb34 6483
2848ad0f 6484 /* Normally, the array-bound will be a constant. */
2bb5d995 6485 if (TREE_CODE (size) == INTEGER_CST)
2848ad0f
MM
6486 {
6487 /* Check to see if the array bound overflowed. Make that an
6488 error, no matter how generous we're being. */
6489 int old_flag_pedantic_errors = flag_pedantic_errors;
6490 int old_pedantic = pedantic;
6491 pedantic = flag_pedantic_errors = 1;
6492 constant_expression_warning (size);
6493 pedantic = old_pedantic;
6494 flag_pedantic_errors = old_flag_pedantic_errors;
6495
6496 /* An array must have a positive number of elements. */
6497 if (INT_CST_LT (size, integer_zero_node))
6498 {
d67cdbc3 6499 if (name)
2d01edd7 6500 error ("size of array %qD is negative", name);
d67cdbc3 6501 else
33bd39a2 6502 error ("size of array is negative");
2848ad0f
MM
6503 size = integer_one_node;
6504 }
a8e6c82a
MM
6505 /* As an extension we allow zero-sized arrays. We always allow
6506 them in system headers because glibc uses them. */
2848ad0f 6507 else if (integer_zerop (size) && pedantic && !in_system_header)
d67cdbc3
JM
6508 {
6509 if (name)
2d01edd7 6510 pedwarn ("ISO C++ forbids zero-size array %qD", name);
d67cdbc3 6511 else
33bd39a2 6512 pedwarn ("ISO C++ forbids zero-size array");
d67cdbc3 6513 }
2848ad0f 6514 }
2bb5d995
JM
6515 else if (TREE_CONSTANT (size))
6516 {
6517 /* `(int) &fn' is not a valid array bound. */
6518 if (name)
2d01edd7 6519 error ("size of array %qD is not an integral constant-expression",
0cbd7506 6520 name);
2bb5d995 6521 else
33bd39a2 6522 error ("size of array is not an integral constant-expression");
3aa2ddb8 6523 size = integer_one_node;
2bb5d995 6524 }
d63b5e9f
NS
6525 else if (pedantic)
6526 {
6527 if (name)
2d01edd7 6528 pedwarn ("ISO C++ forbids variable-size array %qD", name);
d63b5e9f
NS
6529 else
6530 pedwarn ("ISO C++ forbids variable-size array");
6531 }
2848ad0f 6532
d63b5e9f
NS
6533 if (processing_template_decl && !TREE_CONSTANT (size))
6534 /* A variable sized array. */
6535 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
6536 else
2848ad0f 6537 {
455f19cb
MM
6538 HOST_WIDE_INT saved_processing_template_decl;
6539
d63b5e9f 6540 /* Compute the index of the largest element in the array. It is
0cbd7506
MS
6541 one less than the number of elements in the array. We save
6542 and restore PROCESSING_TEMPLATE_DECL so that computations in
6543 cp_build_binary_op will be appropriately folded. */
455f19cb
MM
6544 saved_processing_template_decl = processing_template_decl;
6545 processing_template_decl = 0;
6546 itype = cp_build_binary_op (MINUS_EXPR,
6547 cp_convert (ssizetype, size),
6548 cp_convert (ssizetype, integer_one_node));
6549 itype = fold (itype);
6550 processing_template_decl = saved_processing_template_decl;
6551
d63b5e9f 6552 if (!TREE_CONSTANT (itype))
f4f206f4 6553 /* A variable sized array. */
d63b5e9f
NS
6554 itype = variable_size (itype);
6555 /* Make sure that there was no overflow when creating to a signed
0cbd7506
MS
6556 index type. (For example, on a 32-bit machine, an array with
6557 size 2^32 - 1 is too big.) */
9116d529
RS
6558 else if (TREE_CODE (itype) == INTEGER_CST
6559 && TREE_OVERFLOW (itype))
2848ad0f 6560 {
d63b5e9f
NS
6561 error ("overflow in array dimension");
6562 TREE_OVERFLOW (itype) = 0;
2848ad0f 6563 }
2848ad0f 6564 }
68642fb6 6565
2848ad0f
MM
6566 /* Create and return the appropriate index type. */
6567 return build_index_type (itype);
6568}
6569
a723baf1
MM
6570/* Returns the scope (if any) in which the entity declared by
6571 DECLARATOR will be located. If the entity was declared with an
6572 unqualified name, NULL_TREE is returned. */
6573
6574tree
058b15c1 6575get_scope_of_declarator (const cp_declarator *declarator)
a723baf1 6576{
058b15c1
MM
6577 while (declarator && declarator->kind != cdk_id)
6578 declarator = declarator->declarator;
6579
6580 /* If the declarator-id is a SCOPE_REF, the scope in which the
6581 declaration occurs is the first operand. */
6582 if (declarator
1d786913
MM
6583 && declarator->u.id.qualifying_scope)
6584 return declarator->u.id.qualifying_scope;
058b15c1 6585
77880ae4 6586 /* Otherwise, the declarator is not a qualified name; the entity will
058b15c1
MM
6587 be declared in the current scope. */
6588 return NULL_TREE;
a723baf1
MM
6589}
6590
2848ad0f
MM
6591/* Returns an ARRAY_TYPE for an array with SIZE elements of the
6592 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
6593 with this type. */
6594
6595static tree
11f6b451 6596create_array_type_for_decl (tree name, tree type, tree size)
2848ad0f
MM
6597{
6598 tree itype = NULL_TREE;
6599 const char* error_msg;
6600
6601 /* If things have already gone awry, bail now. */
6602 if (type == error_mark_node || size == error_mark_node)
6603 return error_mark_node;
6604
6605 /* Assume that everything will go OK. */
6606 error_msg = NULL;
6607
6608 /* There are some types which cannot be array elements. */
6609 switch (TREE_CODE (type))
6610 {
6611 case VOID_TYPE:
6612 error_msg = "array of void";
6613 break;
6614
6615 case FUNCTION_TYPE:
6616 error_msg = "array of functions";
6617 break;
6618
6619 case REFERENCE_TYPE:
6620 error_msg = "array of references";
6621 break;
6622
2848ad0f
MM
6623 case METHOD_TYPE:
6624 error_msg = "array of function members";
6625 break;
6626
6627 default:
6628 break;
6629 }
6630
6631 /* If something went wrong, issue an error-message and return. */
6632 if (error_msg)
6633 {
6634 if (name)
2d01edd7 6635 error ("declaration of %qD as %s", name, error_msg);
2848ad0f 6636 else
33bd39a2 6637 error ("creating %s", error_msg);
2848ad0f
MM
6638
6639 return error_mark_node;
6640 }
6641
6642 /* [dcl.array]
68642fb6 6643
2848ad0f
MM
6644 The constant expressions that specify the bounds of the arrays
6645 can be omitted only for the first member of the sequence. */
6646 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
6647 {
b3faacfd 6648 if (name)
2d01edd7 6649 error ("declaration of %qD as multidimensional array must "
0cbd7506
MS
6650 "have bounds for all dimensions except the first",
6651 name);
b3faacfd 6652 else
2d01edd7 6653 error ("multidimensional array must have bounds for all "
0cbd7506 6654 "dimensions except the first");
2848ad0f
MM
6655
6656 return error_mark_node;
6657 }
6658
6659 /* Figure out the index type for the array. */
6660 if (size)
6661 itype = compute_array_index_type (name, size);
6662
7fb213d8
GB
6663 /* [dcl.array]
6664 T is called the array element type; this type shall not be [...] an
6665 abstract class type. */
6666 abstract_virtuals_error (name, type);
6667
2848ad0f
MM
6668 return build_cplus_array_type (type, itype);
6669}
6670
3dbc07b6
MM
6671/* Check that it's OK to declare a function with the indicated TYPE.
6672 SFK indicates the kind of special function (if any) that this
1f84ec23 6673 function is. OPTYPE is the type given in a conversion operator
44d10c10
PB
6674 declaration, or the class type for a constructor/destructor.
6675 Returns the actual return type of the function; that
3dbc07b6
MM
6676 may be different than TYPE if an error occurs, or for certain
6677 special functions. */
6678
6679static tree
11f6b451 6680check_special_function_return_type (special_function_kind sfk,
0cbd7506
MS
6681 tree type,
6682 tree optype)
3dbc07b6
MM
6683{
6684 switch (sfk)
6685 {
6686 case sfk_constructor:
6687 if (type)
33bd39a2 6688 error ("return type specification for constructor invalid");
5362b086 6689
44d10c10
PB
6690 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6691 type = build_pointer_type (optype);
6692 else
6693 type = void_type_node;
3dbc07b6
MM
6694 break;
6695
6696 case sfk_destructor:
6697 if (type)
33bd39a2 6698 error ("return type specification for destructor invalid");
44d10c10 6699 /* We can't use the proper return type here because we run into
77880ae4 6700 problems with ambiguous bases and covariant returns.
44d10c10
PB
6701 Java classes are left unchanged because (void *) isn't a valid
6702 Java type, and we don't want to change the Java ABI. */
6703 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6704 type = build_pointer_type (void_type_node);
6705 else
6706 type = void_type_node;
3dbc07b6
MM
6707 break;
6708
6709 case sfk_conversion:
6710 if (type && !same_type_p (type, optype))
2d01edd7 6711 error ("operator %qT declared to return %qT", optype, type);
3dbc07b6 6712 else if (type)
2d01edd7 6713 pedwarn ("return type specified for %<operator %T%>", optype);
3dbc07b6
MM
6714 type = optype;
6715 break;
6716
6717 default:
8dc2b103 6718 gcc_unreachable ();
3dbc07b6
MM
6719 }
6720
6721 return type;
6722}
6723
62e19030
MM
6724/* A variable or data member (whose unqualified name is IDENTIFIER)
6725 has been declared with the indicated TYPE. If the TYPE is not
6726 acceptable, issue an error message and return a type to use for
03fd3f84 6727 error-recovery purposes. */
62e19030
MM
6728
6729tree
6730check_var_type (tree identifier, tree type)
6731{
6732 if (VOID_TYPE_P (type))
6733 {
6734 if (!identifier)
6735 error ("unnamed variable or field declared void");
6736 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
6737 {
6738 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
6739 error ("variable or field %qE declared void", identifier);
6740 }
6741 else
6742 error ("variable or field declared void");
6743 type = integer_type_node;
6744 }
c8094d83 6745
62e19030
MM
6746 return type;
6747}
6748
a723baf1
MM
6749/* Given declspecs and a declarator (abstract or otherwise), determine
6750 the name and type of the object declared and construct a DECL node
6751 for it.
8d08fdba
MS
6752
6753 DECLSPECS is a chain of tree_list nodes whose value fields
6754 are the storage classes and type specifiers.
6755
6756 DECL_CONTEXT says which syntactic context this declaration is in:
6757 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6758 FUNCDEF for a function definition. Like NORMAL but a few different
6759 error messages in each case. Return value may be zero meaning
6760 this definition is too screwy to try to parse.
6761 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
6762 handle member functions (which have FIELD context).
6763 Return value may be zero meaning this definition is too screwy to
6764 try to parse.
6765 PARM for a parameter declaration (either within a function prototype
6766 or before a function body). Make a PARM_DECL, or return void_type_node.
db5ae43f 6767 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
6768 TYPENAME if for a typename (in a cast or sizeof).
6769 Don't make a DECL node; just return the ..._TYPE node.
6770 FIELD for a struct or union field; make a FIELD_DECL.
6771 BITFIELD for a field with specified width.
6772 INITIALIZED is 1 if the decl has an initializer.
6773
91d231cb
JM
6774 ATTRLIST is a pointer to the list of attributes, which may be NULL
6775 if there are none; *ATTRLIST may be modified if attributes from inside
6776 the declarator should be applied to the declaration.
b17e2870 6777
a723baf1
MM
6778 When this function is called, scoping variables (such as
6779 CURRENT_CLASS_TYPE) should reflect the scope in which the
6780 declaration occurs, not the scope in which the new declaration will
6781 be placed. For example, on:
8d08fdba 6782
a723baf1 6783 void S::f() { ... }
8d08fdba 6784
a723baf1
MM
6785 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6786 should not be `S'. */
8d08fdba 6787
8d08fdba 6788tree
058b15c1 6789grokdeclarator (const cp_declarator *declarator,
1ff3c076 6790 const cp_decl_specifier_seq *declspecs,
0cbd7506
MS
6791 enum decl_context decl_context,
6792 int initialized,
6793 tree* attrlist)
8d08fdba 6794{
8d08fdba
MS
6795 tree type = NULL_TREE;
6796 int longlong = 0;
db5ae43f 6797 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
6798 int explicit_int = 0;
6799 int explicit_char = 0;
37c46b43 6800 int defaulted_int = 0;
d1c78882 6801 tree dependent_name = NULL_TREE;
caf93cb0 6802
8d08fdba 6803 tree typedef_decl = NULL_TREE;
058b15c1 6804 const char *name = NULL;
8d08fdba 6805 tree typedef_type = NULL_TREE;
357d956e
MM
6806 /* True if this declarator is a function definition. */
6807 bool funcdef_flag = false;
058b15c1 6808 cp_declarator_kind innermost_code = cdk_error;
8d08fdba 6809 int bitfield = 0;
6125f3be
DE
6810#if 0
6811 /* See the code below that used this. */
91d231cb 6812 tree decl_attr = NULL_TREE;
6125f3be 6813#endif
8d08fdba
MS
6814
6815 /* Keep track of what sort of function is being processed
6816 so that we can warn about default return values, or explicit
6817 return values which do not match prescribed defaults. */
3dbc07b6 6818 special_function_kind sfk = sfk_none;
8d08fdba
MS
6819
6820 tree dname = NULL_TREE;
8d08fdba
MS
6821 tree ctor_return_type = NULL_TREE;
6822 enum overload_flags flags = NO_SPECIAL;
e2537f2c
MM
6823 /* cv-qualifiers that apply to the declarator, for a declaration of
6824 a member function. */
6825 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
6826 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
6827 int type_quals;
c11b6f21 6828 tree raises = NULL_TREE;
386b8a85 6829 int template_count = 0;
91d231cb 6830 tree returned_attrs = NULL_TREE;
4546865e 6831 tree parms = NULL_TREE;
058b15c1
MM
6832 const cp_declarator *id_declarator;
6833 /* The unqualified name of the declarator; either an
6834 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
6835 tree unqualified_id;
6836 /* The class type, if any, in which this entity is located,
6837 or NULL_TREE if none. Note that this value may be different from
6838 the current class type; for example if an attempt is made to declare
6839 "A::f" inside "B", this value will be "A". */
6840 tree ctype = current_class_type;
6841 /* The NAMESPACE_DECL for the namespace in which this entity is
6842 located. If an unqualified name is used to declare the entity,
6843 this value will be NULL_TREE, even if the entity is located at
caf93cb0 6844 namespace scope. */
058b15c1 6845 tree in_namespace = NULL_TREE;
1ff3c076
MM
6846 cp_storage_class storage_class;
6847 bool unsigned_p, signed_p, short_p, long_p, thread_p;
2cfe82fe 6848 bool type_was_error_mark_node = false;
1ff3c076
MM
6849
6850 signed_p = declspecs->specs[(int)ds_signed];
6851 unsigned_p = declspecs->specs[(int)ds_unsigned];
6852 short_p = declspecs->specs[(int)ds_short];
6853 long_p = declspecs->specs[(int)ds_long];
28c84d63 6854 longlong = declspecs->specs[(int)ds_long] >= 2;
1ff3c076 6855 thread_p = declspecs->specs[(int)ds_thread];
8d08fdba 6856
8d08fdba 6857 if (decl_context == FUNCDEF)
357d956e 6858 funcdef_flag = true, decl_context = NORMAL;
8d08fdba 6859 else if (decl_context == MEMFUNCDEF)
357d956e 6860 funcdef_flag = true, decl_context = FIELD;
8d08fdba
MS
6861 else if (decl_context == BITFIELD)
6862 bitfield = 1, decl_context = FIELD;
6863
8d08fdba
MS
6864 /* Look inside a declarator for the name being declared
6865 and get it as a string, for an error message. */
caf93cb0
EC
6866 for (id_declarator = declarator;
6867 id_declarator;
058b15c1
MM
6868 id_declarator = id_declarator->declarator)
6869 {
6870 if (id_declarator->kind != cdk_id)
6871 innermost_code = id_declarator->kind;
8d08fdba 6872
058b15c1
MM
6873 switch (id_declarator->kind)
6874 {
6875 case cdk_function:
6876 if (id_declarator->declarator
6877 && id_declarator->declarator->kind == cdk_id)
8d08fdba 6878 {
058b15c1
MM
6879 sfk = id_declarator->declarator->u.id.sfk;
6880 if (sfk == sfk_destructor)
6881 flags = DTOR_FLAG;
51c184be 6882 }
058b15c1 6883 break;
be99da77 6884
058b15c1
MM
6885 case cdk_id:
6886 {
1d786913
MM
6887 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
6888 tree decl = id_declarator->u.id.unqualified_name;
058b15c1
MM
6889 if (!decl)
6890 break;
1d786913 6891 if (qualifying_scope)
8d08fdba 6892 {
1d786913 6893 if (TYPE_P (qualifying_scope))
058b15c1 6894 {
1d786913 6895 ctype = qualifying_scope;
058b15c1
MM
6896 if (innermost_code != cdk_function
6897 && current_class_type
caf93cb0 6898 && !UNIQUELY_DERIVED_FROM_P (ctype,
058b15c1
MM
6899 current_class_type))
6900 {
2d01edd7 6901 error ("type %qT is not derived from type %qT",
058b15c1 6902 ctype, current_class_type);
1d786913 6903 return error_mark_node;
058b15c1 6904 }
058b15c1
MM
6905 }
6906 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
6907 in_namespace = qualifying_scope;
058b15c1 6908 }
058b15c1
MM
6909 switch (TREE_CODE (decl))
6910 {
6911 case BIT_NOT_EXPR:
be99da77 6912 {
88e95ee3
MM
6913 tree type;
6914
6915 if (innermost_code != cdk_function)
6916 {
6917 error ("declaration of %qD as non-function", decl);
6918 return error_mark_node;
6919 }
c8094d83 6920 else if (!qualifying_scope
88e95ee3
MM
6921 && !(current_class_type && at_class_scope_p ()))
6922 {
6923 error ("declaration of %qD as non-member", decl);
6924 return error_mark_node;
6925 }
c8094d83 6926
88e95ee3
MM
6927 type = TREE_OPERAND (decl, 0);
6928 name = IDENTIFIER_POINTER (constructor_name (type));
af02935e 6929 dname = decl;
058b15c1
MM
6930 }
6931 break;
633221db 6932
058b15c1
MM
6933 case TEMPLATE_ID_EXPR:
6934 {
6935 tree fns = TREE_OPERAND (decl, 0);
633221db 6936
058b15c1
MM
6937 dname = fns;
6938 if (TREE_CODE (dname) == COMPONENT_REF)
6939 dname = TREE_OPERAND (dname, 1);
6940 if (TREE_CODE (dname) != IDENTIFIER_NODE)
be99da77 6941 {
50bc768d 6942 gcc_assert (is_overloaded_fn (dname));
058b15c1 6943 dname = DECL_NAME (get_first_fn (dname));
be99da77
MS
6944 }
6945 }
058b15c1 6946 /* Fall through. */
be99da77 6947
058b15c1
MM
6948 case IDENTIFIER_NODE:
6949 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6950 dname = decl;
be99da77 6951
058b15c1
MM
6952 if (C_IS_RESERVED_WORD (dname))
6953 {
2d01edd7 6954 error ("declarator-id missing; using reserved word %qD",
058b15c1
MM
6955 dname);
6956 name = IDENTIFIER_POINTER (dname);
6957 }
6958 else if (!IDENTIFIER_TYPENAME_P (dname))
6959 name = IDENTIFIER_POINTER (dname);
6960 else
6961 {
50bc768d 6962 gcc_assert (flags == NO_SPECIAL);
058b15c1
MM
6963 flags = TYPENAME_FLAG;
6964 ctor_return_type = TREE_TYPE (dname);
6965 sfk = sfk_conversion;
6966 if (is_typename_at_global_scope (dname))
6967 name = IDENTIFIER_POINTER (dname);
6968 else
6969 name = "<invalid operator>";
6970 }
6971 break;
6972
058b15c1 6973 default:
8dc2b103 6974 gcc_unreachable ();
058b15c1 6975 }
45537677
MS
6976 break;
6977
058b15c1
MM
6978 case cdk_array:
6979 case cdk_pointer:
6980 case cdk_reference:
6981 case cdk_ptrmem:
50ad9642 6982 break;
2ee366b5 6983
058b15c1 6984 case cdk_error:
fa6098f8 6985 return error_mark_node;
058b15c1 6986
be99da77 6987 default:
8dc2b103 6988 gcc_unreachable ();
8d08fdba 6989 }
058b15c1
MM
6990 }
6991 if (id_declarator->kind == cdk_id)
6992 break;
6993 }
8d08fdba 6994
fa6098f8
MM
6995 /* [dcl.fct.edf]
6996
6997 The declarator in a function-definition shall have the form
6998 D1 ( parameter-declaration-clause) ... */
058b15c1 6999 if (funcdef_flag && innermost_code != cdk_function)
fa6098f8
MM
7000 {
7001 error ("function definition does not declare parameters");
7002 return error_mark_node;
7003 }
8d08fdba 7004
e1cd6e56 7005 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
058b15c1 7006 && innermost_code != cdk_function
62d1db17 7007 && ! (ctype && !declspecs->any_specifiers_p))
e1cd6e56 7008 {
2d01edd7 7009 error ("declaration of %qD as non-function", dname);
943e3ede 7010 return error_mark_node;
e1cd6e56
MS
7011 }
7012
8d08fdba
MS
7013 /* Anything declared one level down from the top level
7014 must be one of the parameters of a function
7015 (because the body is at least two levels down). */
7016
7017 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7018 by not allowing C++ class definitions to specify their parameters
7019 with xdecls (must be spec.d in the parmlist).
7020
7021 Since we now wait to push a class scope until we are sure that
7022 we are in a legitimate method context, we must set oldcname
a9aedbc2
MS
7023 explicitly (since current_class_name is not yet alive).
7024
7025 We also want to avoid calling this a PARM if it is in a namespace. */
8d08fdba 7026
9188c363 7027 if (decl_context == NORMAL && !toplevel_bindings_p ())
a9aedbc2 7028 {
e2500fed 7029 struct cp_binding_level *b = current_binding_level;
ff955512 7030 current_binding_level = b->level_chain;
a9aedbc2
MS
7031 if (current_binding_level != 0 && toplevel_bindings_p ())
7032 decl_context = PARM;
ff955512 7033 current_binding_level = b;
a9aedbc2 7034 }
8d08fdba 7035
34fc957d
NS
7036 if (name == NULL)
7037 name = decl_context == PARM ? "parameter" : "type name";
68642fb6 7038
62d1db17
MM
7039 /* If there were multiple types specified in the decl-specifier-seq,
7040 issue an error message. */
7041 if (declspecs->multiple_types_p)
2d01edd7 7042 error ("two or more data types in declaration of %qs", name);
62d1db17
MM
7043 /* Extract the basic type from the decl-specifier-seq. */
7044 type = declspecs->type;
7045 if (type == error_mark_node)
2cfe82fe
ZW
7046 {
7047 type = NULL_TREE;
7048 type_was_error_mark_node = true;
7049 }
62d1db17
MM
7050 /* If the entire declaration is itself tagged as deprecated then
7051 suppress reports of deprecated items. */
7052 if (type && TREE_DEPRECATED (type)
7053 && deprecated_state != DEPRECATED_SUPPRESS)
7054 warn_deprecated_use (type);
7055 if (type && TREE_CODE (type) == TYPE_DECL)
8d08fdba 7056 {
62d1db17
MM
7057 typedef_decl = type;
7058 type = TREE_TYPE (typedef_decl);
7059 }
7060 /* No type at all: default to `int', and set DEFAULTED_INT
7061 because it was not a user-defined typedef. */
1ff3c076 7062 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
62d1db17
MM
7063 {
7064 /* These imply 'int'. */
7065 type = integer_type_node;
7066 defaulted_int = 1;
7067 }
7068 /* Gather flags. */
7069 explicit_int = declspecs->explicit_int_p;
7070 explicit_char = declspecs->explicit_char_p;
7a1f3f5f 7071
8d6e459d
NS
7072#if 0
7073 /* See the code below that used this. */
7074 if (typedef_decl)
7075 decl_attr = DECL_ATTRIBUTES (typedef_decl);
7076#endif
8d08fdba
MS
7077 typedef_type = type;
7078
a3203465 7079
44d10c10
PB
7080 if (sfk != sfk_conversion)
7081 ctor_return_type = ctype;
7082
3dbc07b6
MM
7083 if (sfk != sfk_none)
7084 type = check_special_function_return_type (sfk, type,
3dbc07b6
MM
7085 ctor_return_type);
7086 else if (type == NULL_TREE)
8d08fdba 7087 {
3dbc07b6
MM
7088 int is_main;
7089
8d08fdba 7090 explicit_int = -1;
3dbc07b6 7091
0fd0b7ee
JM
7092 /* We handle `main' specially here, because 'main () { }' is so
7093 common. With no options, it is allowed. With -Wreturn-type,
7094 it is a warning. It is only an error with -pedantic-errors. */
3dbc07b6 7095 is_main = (funcdef_flag
7437519c 7096 && dname && MAIN_NAME_P (dname)
3dbc07b6
MM
7097 && ctype == NULL_TREE
7098 && in_namespace == NULL_TREE
7099 && current_namespace == global_namespace);
7100
2cfe82fe
ZW
7101 if (type_was_error_mark_node)
7102 /* We've already issued an error, don't complain more. */;
7103 else if (in_system_header || flag_ms_extensions)
3dbc07b6
MM
7104 /* Allow it, sigh. */;
7105 else if (pedantic || ! is_main)
2d01edd7 7106 pedwarn ("ISO C++ forbids declaration of %qs with no type", name);
3dbc07b6 7107 else if (warn_return_type)
d4ee4d25 7108 warning (0, "ISO C++ forbids declaration of %qs with no type", name);
41eff652 7109
3dbc07b6 7110 type = integer_type_node;
51c184be 7111 }
caf93cb0 7112
8d08fdba
MS
7113 ctype = NULL_TREE;
7114
7115 /* Now process the modifiers that were specified
7116 and check for invalid combinations. */
7117
7118 /* Long double is a special combination. */
3cc189f5 7119 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8d08fdba 7120 {
1ff3c076 7121 long_p = false;
68642fb6 7122 type = build_qualified_type (long_double_type_node,
89d684bb 7123 cp_type_quals (type));
8d08fdba
MS
7124 }
7125
7126 /* Check all other uses of type modifiers. */
7127
1ff3c076 7128 if (unsigned_p || signed_p || long_p || short_p)
8d08fdba
MS
7129 {
7130 int ok = 0;
7131
3cc189f5
VR
7132 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
7133 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
1ff3c076 7134 else if (signed_p && unsigned_p)
3cc189f5
VR
7135 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
7136 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
7137 error ("%<long long%> invalid for %qs", name);
7138 else if (long_p && TREE_CODE (type) == REAL_TYPE)
7139 error ("%<long%> invalid for %qs", name);
7140 else if (short_p && TREE_CODE (type) == REAL_TYPE)
7141 error ("%<short%> invalid for %qs", name);
7142 else if ((long_p || short_p) && explicit_char)
7143 error ("%<long%> or %<short%> specified with char for %qs", name);
7144 else if (long_p && short_p)
7145 error ("%<long%> and %<short%> specified together for %qs", name);
8d08fdba
MS
7146 else
7147 {
7148 ok = 1;
37c46b43 7149 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8d08fdba 7150 {
2d01edd7 7151 pedwarn ("long, short, signed or unsigned used invalidly for %qs",
8d08fdba
MS
7152 name);
7153 if (flag_pedantic_errors)
7154 ok = 0;
7155 }
7156 }
7157
7158 /* Discard the type modifiers if they are invalid. */
7159 if (! ok)
7160 {
1ff3c076
MM
7161 unsigned_p = false;
7162 signed_p = false;
7163 long_p = false;
7164 short_p = false;
8d08fdba
MS
7165 longlong = 0;
7166 }
7167 }
7168
7169 /* Decide whether an integer type is signed or not.
7170 Optionally treat bitfields as signed by default. */
1ff3c076 7171 if (unsigned_p
b89c5a7b
MM
7172 /* [class.bit]
7173
7174 It is implementation-defined whether a plain (neither
7175 explicitly signed or unsigned) char, short, int, or long
7176 bit-field is signed or unsigned.
68642fb6 7177
b89c5a7b
MM
7178 Naturally, we extend this to long long as well. Note that
7179 this does not include wchar_t. */
7180 || (bitfield && !flag_signed_bitfields
1ff3c076 7181 && !signed_p
b89c5a7b
MM
7182 /* A typedef for plain `int' without `signed' can be
7183 controlled just like plain `int', but a typedef for
7184 `signed int' cannot be so controlled. */
68642fb6 7185 && !(typedef_decl
29bbeb1c 7186 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
b38a05d0 7187 && TREE_CODE (type) == INTEGER_TYPE
29bbeb1c 7188 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8d08fdba
MS
7189 {
7190 if (longlong)
7191 type = long_long_unsigned_type_node;
1ff3c076 7192 else if (long_p)
8d08fdba 7193 type = long_unsigned_type_node;
1ff3c076 7194 else if (short_p)
8d08fdba
MS
7195 type = short_unsigned_type_node;
7196 else if (type == char_type_node)
7197 type = unsigned_char_type_node;
7198 else if (typedef_decl)
ceef8ce4 7199 type = c_common_unsigned_type (type);
8d08fdba
MS
7200 else
7201 type = unsigned_type_node;
7202 }
1ff3c076 7203 else if (signed_p && type == char_type_node)
8d08fdba
MS
7204 type = signed_char_type_node;
7205 else if (longlong)
7206 type = long_long_integer_type_node;
1ff3c076 7207 else if (long_p)
8d08fdba 7208 type = long_integer_type_node;
1ff3c076 7209 else if (short_p)
8d08fdba
MS
7210 type = short_integer_type_node;
7211
62d1db17 7212 if (declspecs->specs[(int)ds_complex])
37c46b43 7213 {
1ff3c076 7214 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
2d01edd7 7215 error ("complex invalid for %qs", name);
37c46b43
MS
7216 /* If we just have "complex", it is equivalent to
7217 "complex double", but if any modifiers at all are specified it is
7218 the complex form of TYPE. E.g, "complex short" is
7219 "complex short int". */
7220
1ff3c076
MM
7221 else if (defaulted_int && ! longlong
7222 && ! (long_p || short_p || signed_p || unsigned_p))
37c46b43
MS
7223 type = complex_double_type_node;
7224 else if (type == integer_type_node)
7225 type = complex_integer_type_node;
7226 else if (type == float_type_node)
7227 type = complex_float_type_node;
7228 else if (type == double_type_node)
7229 type = complex_double_type_node;
7230 else if (type == long_double_type_node)
7231 type = complex_long_double_type_node;
7232 else
7233 type = build_complex_type (type);
7234 }
7235
4f2b0fb2 7236 type_quals = TYPE_UNQUALIFIED;
62d1db17 7237 if (declspecs->specs[(int)ds_const])
4f2b0fb2 7238 type_quals |= TYPE_QUAL_CONST;
62d1db17 7239 if (declspecs->specs[(int)ds_volatile])
4f2b0fb2 7240 type_quals |= TYPE_QUAL_VOLATILE;
62d1db17 7241 if (declspecs->specs[(int)ds_restrict])
4f2b0fb2
NS
7242 type_quals |= TYPE_QUAL_RESTRICT;
7243 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
2d01edd7 7244 error ("qualifiers are not allowed on declaration of %<operator %T%>",
0cbd7506 7245 ctor_return_type);
3ac3d9ea 7246
c8094d83 7247 if (TREE_CODE (type) == FUNCTION_TYPE
9804209d
DG
7248 && type_quals != TYPE_UNQUALIFIED)
7249 {
7250 /* This was an error in C++98 (cv-qualifiers cannot be added to
0cbd7506
MS
7251 a function type), but DR 295 makes the code well-formed by
7252 dropping the extra qualifiers. */
9804209d 7253 if (pedantic)
0cbd7506
MS
7254 {
7255 tree bad_type = build_qualified_type (type, type_quals);
7256 pedwarn ("ignoring %qV qualifiers added to function type %qT",
7257 bad_type, type);
7258 }
9804209d
DG
7259 type_quals = TYPE_UNQUALIFIED;
7260 }
4f2b0fb2
NS
7261 type_quals |= cp_type_quals (type);
7262 type = cp_build_qualified_type_real
7263 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
23fca1f5 7264 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
4f2b0fb2
NS
7265 /* We might have ignored or rejected some of the qualifiers. */
7266 type_quals = cp_type_quals (type);
caf93cb0 7267
8d08fdba 7268 staticp = 0;
62d1db17
MM
7269 inlinep = !! declspecs->specs[(int)ds_inline];
7270 virtualp = !! declspecs->specs[(int)ds_virtual];
7271 explicitp = !! declspecs->specs[(int)ds_explicit];
8d08fdba 7272
1ff3c076
MM
7273 storage_class = declspecs->storage_class;
7274 if (storage_class == sc_static)
8d08fdba
MS
7275 staticp = 1 + (decl_context == FIELD);
7276
7277 if (virtualp && staticp == 2)
7278 {
2d01edd7 7279 error ("member %qD cannot be declared both virtual and static", dname);
7e1e0765 7280 storage_class = sc_none;
8d08fdba
MS
7281 staticp = 0;
7282 }
62d1db17 7283 friendp = !! declspecs->specs[(int)ds_friend];
8d08fdba 7284
d1c78882 7285 if (dependent_name && !friendp)
d5614afb 7286 {
d1c78882 7287 error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
d5614afb
NS
7288 return void_type_node;
7289 }
8d08fdba 7290
62d1db17
MM
7291 /* Issue errors about use of storage classes for parameters. */
7292 if (decl_context == PARM)
8d08fdba 7293 {
62d1db17
MM
7294 if (declspecs->specs[(int)ds_typedef])
7295 error ("typedef declaration invalid in parameter declaration");
1ff3c076
MM
7296 else if (storage_class == sc_static
7297 || storage_class == sc_extern
7298 || thread_p)
8251199e 7299 error ("storage class specifiers invalid in parameter declarations");
8d08fdba
MS
7300 }
7301
7302 /* Give error if `virtual' is used outside of class declaration. */
b7484fbe
MS
7303 if (virtualp
7304 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba 7305 {
8251199e 7306 error ("virtual outside class declaration");
8d08fdba
MS
7307 virtualp = 0;
7308 }
8d08fdba
MS
7309
7310 /* Static anonymous unions are dealt with here. */
7311 if (staticp && decl_context == TYPENAME
62d1db17
MM
7312 && declspecs->type
7313 && ANON_AGGR_TYPE_P (declspecs->type))
8d08fdba
MS
7314 decl_context = FIELD;
7315
8d08fdba
MS
7316 /* Warn about storage classes that are invalid for certain
7317 kinds of declarations (parameters, typenames, etc.). */
62d1db17 7318 if (declspecs->multiple_storage_classes_p)
a23e08d9
VR
7319 {
7320 error ("multiple storage classes in declaration of %qs", name);
7321 storage_class = sc_none;
7322 }
1ff3c076 7323 else if (thread_p
caf93cb0 7324 && ((storage_class
1ff3c076
MM
7325 && storage_class != sc_extern
7326 && storage_class != sc_static)
f1b90a04
MM
7327 || declspecs->specs[(int)ds_typedef]))
7328 {
2d01edd7 7329 error ("multiple storage classes in declaration of %qs", name);
1ff3c076 7330 thread_p = false;
f1b90a04 7331 }
caf93cb0 7332 else if (decl_context != NORMAL
1ff3c076
MM
7333 && ((storage_class != sc_none
7334 && storage_class != sc_mutable)
7335 || thread_p))
8d08fdba 7336 {
db5ae43f 7337 if ((decl_context == PARM || decl_context == CATCHPARM)
1ff3c076
MM
7338 && (storage_class == sc_register
7339 || storage_class == sc_auto))
8d08fdba 7340 ;
62d1db17 7341 else if (declspecs->specs[(int)ds_typedef])
fc378698 7342 ;
8d08fdba 7343 else if (decl_context == FIELD
f4f206f4 7344 /* C++ allows static class elements. */
1ff3c076 7345 && storage_class == sc_static)
d363e7bf
AJ
7346 /* C++ also allows inlines and signed and unsigned elements,
7347 but in those cases we don't come in here. */
8d08fdba
MS
7348 ;
7349 else
7350 {
7351 if (decl_context == FIELD)
389c6c8b 7352 error ("storage class specified for %qs", name);
8d08fdba 7353 else
b9d12519
KG
7354 {
7355 if (decl_context == PARM || decl_context == CATCHPARM)
2d01edd7 7356 error ("storage class specified for parameter %qs", name);
b9d12519
KG
7357 else
7358 error ("storage class specified for typename");
7359 }
1ff3c076
MM
7360 if (storage_class == sc_register
7361 || storage_class == sc_auto
7362 || storage_class == sc_extern
7363 || thread_p)
7364 storage_class = sc_none;
8d08fdba
MS
7365 }
7366 }
caf93cb0 7367 else if (storage_class == sc_extern && initialized
62d1db17 7368 && !funcdef_flag)
8d08fdba 7369 {
a9aedbc2 7370 if (toplevel_bindings_p ())
8d08fdba 7371 {
59be0cdd 7372 /* It's common practice (and completely valid) to have a const
8d08fdba 7373 be initialized and declared extern. */
950ad3c3 7374 if (!(type_quals & TYPE_QUAL_CONST))
d4ee4d25 7375 warning (0, "%qs initialized and declared %<extern%>", name);
8d08fdba
MS
7376 }
7377 else
2d01edd7 7378 error ("%qs has both %<extern%> and initializer", name);
8d08fdba 7379 }
1ff3c076 7380 else if (storage_class == sc_extern && funcdef_flag
a9aedbc2 7381 && ! toplevel_bindings_p ())
2d01edd7 7382 error ("nested function %qs declared %<extern%>", name);
a9aedbc2 7383 else if (toplevel_bindings_p ())
8d08fdba 7384 {
1ff3c076 7385 if (storage_class == sc_auto)
2d01edd7 7386 error ("top-level declaration of %qs specifies %<auto%>", name);
8d08fdba 7387 }
1ff3c076
MM
7388 else if (thread_p
7389 && storage_class != sc_extern
7390 && storage_class != sc_static)
7a1f3f5f 7391 {
2d01edd7 7392 error ("function-scope %qs implicitly auto and declared %<__thread%>",
7a1f3f5f 7393 name);
1ff3c076 7394 thread_p = false;
7a1f3f5f 7395 }
8d08fdba 7396
1ff3c076 7397 if (storage_class && friendp)
8251199e 7398 error ("storage class specifiers invalid in friend function declarations");
909e536a 7399
058b15c1
MM
7400 if (!id_declarator)
7401 unqualified_id = NULL_TREE;
7402 else
8d08fdba 7403 {
1d786913 7404 unqualified_id = id_declarator->u.id.unqualified_name;
058b15c1 7405 switch (TREE_CODE (unqualified_id))
8d08fdba 7406 {
058b15c1 7407 case BIT_NOT_EXPR:
caf93cb0 7408 unqualified_id
058b15c1
MM
7409 = constructor_name (TREE_OPERAND (unqualified_id, 0));
7410 break;
caf93cb0 7411
058b15c1
MM
7412 case IDENTIFIER_NODE:
7413 case TEMPLATE_ID_EXPR:
52fbc847 7414 break;
caf93cb0 7415
058b15c1 7416 default:
8dc2b103 7417 gcc_unreachable ();
058b15c1
MM
7418 }
7419 }
52fbc847 7420
058b15c1
MM
7421 /* Determine the type of the entity declared by recurring on the
7422 declarator. */
f4f18103 7423 for (; declarator; declarator = declarator->declarator)
058b15c1
MM
7424 {
7425 const cp_declarator *inner_declarator;
7426 tree attrs;
8d08fdba 7427
058b15c1
MM
7428 if (type == error_mark_node)
7429 return error_mark_node;
c1b177ec 7430
058b15c1
MM
7431 attrs = declarator->attributes;
7432 if (attrs)
7433 {
7434 int attr_flags;
caf93cb0 7435
058b15c1
MM
7436 attr_flags = 0;
7437 if (declarator == NULL || declarator->kind == cdk_id)
7438 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
7439 if (declarator->kind == cdk_function)
7440 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
7441 if (declarator->kind == cdk_array)
7442 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
7443 returned_attrs = decl_attributes (&type,
7444 chainon (returned_attrs, attrs),
7445 attr_flags);
7446 }
7447
f4f18103
MM
7448 if (declarator->kind == cdk_id)
7449 break;
7450
7451 inner_declarator = declarator->declarator;
7452
058b15c1
MM
7453 switch (declarator->kind)
7454 {
7455 case cdk_array:
caf93cb0 7456 type = create_array_type_for_decl (dname, type,
058b15c1 7457 declarator->u.array.bounds);
8d08fdba
MS
7458 break;
7459
058b15c1 7460 case cdk_function:
8d08fdba
MS
7461 {
7462 tree arg_types;
f376e137 7463 int funcdecl_p;
8d08fdba
MS
7464
7465 /* Declaring a function type.
7466 Make sure we have a valid type for the function to return. */
8d08fdba 7467
91063b51 7468 /* We now know that the TYPE_QUALS don't apply to the
0cbd7506 7469 decl, but to its return type. */
91063b51 7470 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
7471
7472 /* Warn about some types functions can't return. */
7473
7474 if (TREE_CODE (type) == FUNCTION_TYPE)
7475 {
2d01edd7 7476 error ("%qs declared as function returning a function", name);
8d08fdba
MS
7477 type = integer_type_node;
7478 }
7479 if (TREE_CODE (type) == ARRAY_TYPE)
7480 {
2d01edd7 7481 error ("%qs declared as function returning an array", name);
8d08fdba
MS
7482 type = integer_type_node;
7483 }
7484
b7484fbe 7485 /* Pick up type qualifiers which should be applied to `this'. */
e2537f2c 7486 memfn_quals = declarator->u.function.qualifiers;
b7484fbe 7487
c11b6f21 7488 /* Pick up the exception specifications. */
058b15c1 7489 raises = declarator->u.function.exception_specification;
c11b6f21 7490
f376e137
MS
7491 /* Say it's a definition only for the CALL_EXPR
7492 closest to the identifier. */
058b15c1 7493 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
68642fb6 7494
8d08fdba
MS
7495 if (ctype == NULL_TREE
7496 && decl_context == FIELD
f376e137 7497 && funcdecl_p
8d08fdba
MS
7498 && (friendp == 0 || dname == current_class_name))
7499 ctype = current_class_type;
7500
058b15c1
MM
7501 if (ctype && (sfk == sfk_constructor
7502 || sfk == sfk_destructor))
8d08fdba
MS
7503 {
7504 /* We are within a class's scope. If our declarator name
7505 is the same as the class name, and we are defining
7506 a function, then it is a constructor/destructor, and
7507 therefore returns a void type. */
e2537f2c
MM
7508
7509 /* ISO C++ 12.4/2. A destructor may not be declared
7510 const or volatile. A destructor may not be
7511 static.
7512
7513 ISO C++ 12.1. A constructor may not be declared
7514 const or volatile. A constructor may not be
7515 virtual. A constructor may not be static. */
7516 if (staticp == 2)
7517 error ((flags == DTOR_FLAG)
7518 ? "destructor cannot be static member function"
7519 : "constructor cannot be static member function");
7520 if (memfn_quals)
8d08fdba 7521 {
e2537f2c
MM
7522 error ((flags == DTOR_FLAG)
7523 ? "destructors may not be cv-qualified"
7524 : "constructors may not be cv-qualified");
7525 memfn_quals = TYPE_UNQUALIFIED;
8d08fdba 7526 }
e2537f2c
MM
7527
7528 if (decl_context == FIELD
7529 && !member_function_or_else (ctype,
7530 current_class_type,
7531 flags))
7532 return void_type_node;
7533
7534 if (flags != DTOR_FLAG)
8d08fdba 7535 {
e2537f2c 7536 /* It's a constructor. */
db5ae43f
MS
7537 if (explicitp == 1)
7538 explicitp = 2;
8d08fdba
MS
7539 if (virtualp)
7540 {
8251199e 7541 pedwarn ("constructors cannot be declared virtual");
8d08fdba
MS
7542 virtualp = 0;
7543 }
7137605e
MM
7544 if (decl_context == FIELD
7545 && sfk != sfk_constructor)
7546 return NULL_TREE;
8d08fdba
MS
7547 }
7548 if (decl_context == FIELD)
7549 staticp = 0;
7550 }
b7484fbe 7551 else if (friendp)
8d08fdba 7552 {
b7484fbe 7553 if (initialized)
2d01edd7 7554 error ("can't initialize friend function %qs", name);
b7484fbe
MS
7555 if (virtualp)
7556 {
7557 /* Cannot be both friend and virtual. */
8251199e 7558 error ("virtual functions cannot be friends");
b7484fbe
MS
7559 friendp = 0;
7560 }
28cbf42c 7561 if (decl_context == NORMAL)
8251199e 7562 error ("friend declaration not in class definition");
28cbf42c 7563 if (current_function_decl && funcdef_flag)
2d01edd7 7564 error ("can't define friend function %qs in a local "
0cbd7506
MS
7565 "class definition",
7566 name);
8d08fdba
MS
7567 }
7568
caf93cb0 7569 arg_types = grokparms (declarator->u.function.parameters,
058b15c1 7570 &parms);
8d08fdba 7571
058b15c1
MM
7572 if (inner_declarator
7573 && inner_declarator->kind == cdk_id
7574 && inner_declarator->u.id.sfk == sfk_destructor
7575 && arg_types != void_list_node)
8d08fdba 7576 {
058b15c1
MM
7577 error ("destructors may not have parameters");
7578 arg_types = void_list_node;
7579 parms = NULL_TREE;
8d08fdba 7580 }
caf93cb0 7581
d22c8596 7582 type = build_function_type (type, arg_types);
8d08fdba
MS
7583 }
7584 break;
7585
058b15c1
MM
7586 case cdk_pointer:
7587 case cdk_reference:
7588 case cdk_ptrmem:
8d08fdba
MS
7589 /* Filter out pointers-to-references and references-to-references.
7590 We can get these if a TYPE_DECL is used. */
7591
7592 if (TREE_CODE (type) == REFERENCE_TYPE)
7593 {
058b15c1 7594 error (declarator->kind == cdk_reference
2d01edd7
GDR
7595 ? "cannot declare reference to %q#T"
7596 : "cannot declare pointer to %q#T", type);
a5894242
MS
7597 type = TREE_TYPE (type);
7598 }
058b15c1
MM
7599 else if (VOID_TYPE_P (type))
7600 {
7601 if (declarator->kind == cdk_reference)
2d01edd7 7602 error ("cannot declare reference to %q#T", type);
058b15c1 7603 else if (declarator->kind == cdk_ptrmem)
2d01edd7 7604 error ("cannot declare pointer to %q#T member", type);
058b15c1 7605 }
61a127b3 7606
91063b51
MM
7607 /* We now know that the TYPE_QUALS don't apply to the decl,
7608 but to the target of the pointer. */
7609 type_quals = TYPE_UNQUALIFIED;
8d08fdba 7610
058b15c1 7611 if (declarator->kind == cdk_ptrmem
e2537f2c 7612 && (TREE_CODE (type) == FUNCTION_TYPE || memfn_quals))
058b15c1 7613 {
e2537f2c
MM
7614 memfn_quals |= cp_type_quals (type);
7615 type = build_memfn_type (type,
7616 declarator->u.pointer.class_type,
7617 memfn_quals);
7618 memfn_quals = TYPE_UNQUALIFIED;
058b15c1
MM
7619 }
7620
7621 if (declarator->kind == cdk_reference)
8d08fdba 7622 {
dd29188b 7623 if (!VOID_TYPE_P (type))
69851283 7624 type = build_reference_type (type);
8d08fdba
MS
7625 }
7626 else if (TREE_CODE (type) == METHOD_TYPE)
d8f8dca1 7627 type = build_ptrmemfunc_type (build_pointer_type (type));
058b15c1 7628 else if (declarator->kind == cdk_ptrmem)
f4ed7d21 7629 {
63c9a190
MM
7630 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
7631 != NAMESPACE_DECL);
7632 if (declarator->u.pointer.class_type == error_mark_node)
4230cec2
NS
7633 /* We will already have complained. */
7634 type = error_mark_node;
f4ed7d21
NS
7635 else
7636 type = build_ptrmem_type (declarator->u.pointer.class_type,
7637 type);
7638 }
8d08fdba
MS
7639 else
7640 type = build_pointer_type (type);
7641
7642 /* Process a list of type modifier keywords (such as
7643 const or volatile) that were given inside the `*' or `&'. */
7644
058b15c1 7645 if (declarator->u.pointer.qualifiers)
8d08fdba 7646 {
caf93cb0
EC
7647 type
7648 = cp_build_qualified_type (type,
3c01e5df 7649 declarator->u.pointer.qualifiers);
4f2b0fb2 7650 type_quals = cp_type_quals (type);
8d08fdba 7651 }
8d08fdba
MS
7652 ctype = NULL_TREE;
7653 break;
7654
058b15c1
MM
7655 case cdk_error:
7656 break;
8d08fdba 7657
058b15c1 7658 default:
8dc2b103 7659 gcc_unreachable ();
058b15c1
MM
7660 }
7661 }
caf93cb0 7662
058b15c1
MM
7663 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
7664 && TREE_CODE (type) != FUNCTION_TYPE
7665 && TREE_CODE (type) != METHOD_TYPE)
7666 {
2d01edd7 7667 error ("template-id %qD used as a declarator",
058b15c1
MM
7668 unqualified_id);
7669 unqualified_id = dname;
7670 }
386b8a85 7671
9c12301f
MM
7672 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
7673 qualified with a class-name, turn it into a METHOD_TYPE, unless
7674 we know that the function is static. We take advantage of this
7675 opportunity to do other processing that pertains to entities
7676 explicitly declared to be class members. Note that if DECLARATOR
7677 is non-NULL, we know it is a cdk_id declarator; otherwise, we
7678 would not have exited the loop above. */
caf93cb0 7679 if (declarator
1d786913
MM
7680 && declarator->u.id.qualifying_scope
7681 && TYPE_P (declarator->u.id.qualifying_scope))
058b15c1
MM
7682 {
7683 tree t;
8d08fdba 7684
1d786913
MM
7685 ctype = declarator->u.id.qualifying_scope;
7686 ctype = TYPE_MAIN_VARIANT (ctype);
058b15c1
MM
7687 t = ctype;
7688 while (t != NULL_TREE && CLASS_TYPE_P (t))
7689 {
7690 /* You're supposed to have one `template <...>' for every
7691 template class, but you don't need one for a full
7692 specialization. For example:
8d08fdba 7693
058b15c1
MM
7694 template <class T> struct S{};
7695 template <> struct S<int> { void f(); };
7696 void S<int>::f () {}
28cbf42c 7697
058b15c1
MM
7698 is correct; there shouldn't be a `template <>' for the
7699 definition of `S<int>::f'. */
f0d60e22
MM
7700 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
7701 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
7702 /* T is an explicit (not partial) specialization. All
7703 containing classes must therefore also be explicitly
7704 specialized. */
7705 break;
7706 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
058b15c1
MM
7707 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
7708 template_count += 1;
28cbf42c 7709
058b15c1
MM
7710 t = TYPE_MAIN_DECL (t);
7711 t = DECL_CONTEXT (t);
7712 }
8d08fdba 7713
058b15c1 7714 if (ctype == current_class_type)
59e7c84c
VR
7715 {
7716 if (friendp)
7717 pedwarn ("member functions are implicitly friends of their class");
7718 else
7719 pedwarn ("extra qualification %<%T::%> on member %qs",
7720 ctype, name);
7721 }
fa6098f8
MM
7722 else if (/* If the qualifying type is already complete, then we
7723 can skip the following checks. */
7724 !COMPLETE_TYPE_P (ctype)
cc328145
MM
7725 && (/* If the function is being defined, then
7726 qualifying type must certainly be complete. */
7727 funcdef_flag
7728 /* A friend declaration of "T::f" is OK, even if
7729 "T" is a template parameter. But, if this
7730 function is not a friend, the qualifying type
7731 must be a class. */
7732 || (!friendp && !CLASS_TYPE_P (ctype))
7733 /* For a declaration, the type need not be
7734 complete, if either it is dependent (since there
7735 is no meaningful definition of complete in that
7736 case) or the qualifying class is currently being
7737 defined. */
fa6098f8
MM
7738 || !(dependent_type_p (ctype)
7739 || currently_open_class (ctype)))
9f9a713e 7740 /* Check that the qualifying type is complete. */
fa6098f8
MM
7741 && !complete_type_or_else (ctype, NULL_TREE))
7742 return error_mark_node;
058b15c1
MM
7743 else if (TREE_CODE (type) == FUNCTION_TYPE)
7744 {
1d786913 7745 tree sname = declarator->u.id.unqualified_name;
50ad9642 7746
357d956e
MM
7747 if (current_class_type
7748 && (!friendp || funcdef_flag))
7749 {
7750 error (funcdef_flag
7751 ? "cannot define member function %<%T::%s%> within %<%T%>"
7752 : "cannot declare member function %<%T::%s%> within %<%T%>",
7753 ctype, name, current_class_type);
7754 return error_mark_node;
7755 }
7756
058b15c1
MM
7757 if (TREE_CODE (sname) == IDENTIFIER_NODE
7758 && NEW_DELETE_OPNAME_P (sname))
7759 /* Overloaded operator new and operator delete
7760 are always static functions. */
7761 ;
058b15c1 7762 else
e2537f2c 7763 type = build_memfn_type (type, ctype, memfn_quals);
058b15c1 7764 }
62d1db17 7765 else if (declspecs->specs[(int)ds_typedef]
fa6098f8 7766 && current_class_type)
058b15c1 7767 {
fa6098f8
MM
7768 error ("cannot declare member %<%T::%s%> within %qT",
7769 ctype, name, current_class_type);
058b15c1 7770 return error_mark_node;
8d08fdba
MS
7771 }
7772 }
7773
9c12301f
MM
7774 /* Now TYPE has the actual type. */
7775
91d231cb 7776 if (returned_attrs)
1eab9b56 7777 {
91d231cb
JM
7778 if (attrlist)
7779 *attrlist = chainon (returned_attrs, *attrlist);
1eab9b56 7780 else
91d231cb 7781 attrlist = &returned_attrs;
1eab9b56
JM
7782 }
7783
55b3d665
JM
7784 /* Did array size calculations overflow? */
7785
7786 if (TREE_CODE (type) == ARRAY_TYPE
7787 && COMPLETE_TYPE_P (type)
96ce2ac9
JW
7788 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
7789 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
55b3d665 7790 {
2d01edd7 7791 error ("size of array %qs is too large", name);
aba649ba 7792 /* If we proceed with the array type as it is, we'll eventually
55b3d665
JM
7793 crash in tree_low_cst(). */
7794 type = error_mark_node;
7795 }
7796
2fff6d71 7797 if ((decl_context == FIELD || decl_context == PARM)
caf93cb0 7798 && !processing_template_decl
5377d5ba 7799 && variably_modified_type_p (type, NULL_TREE))
dac45b5c 7800 {
2fff6d71 7801 if (decl_context == FIELD)
2d01edd7 7802 error ("data member may not have variably modified type %qT", type);
2fff6d71 7803 else
2d01edd7 7804 error ("parameter may not have variably modified type %qT", type);
dac45b5c
MM
7805 type = error_mark_node;
7806 }
7807
34fc957d 7808 if (explicitp == 1 || (explicitp && friendp))
db5ae43f 7809 {
34fc957d 7810 /* [dcl.fct.spec] The explicit specifier shall only be used in
0cbd7506 7811 declarations of constructors within a class definition. */
2d01edd7 7812 error ("only declarations of constructors can be %<explicit%>");
db5ae43f
MS
7813 explicitp = 0;
7814 }
7815
1ff3c076 7816 if (storage_class == sc_mutable)
f30432d7 7817 {
4223f82f 7818 if (decl_context != FIELD || friendp)
0cbd7506 7819 {
2d01edd7 7820 error ("non-member %qs cannot be declared %<mutable%>", name);
1ff3c076 7821 storage_class = sc_none;
0cbd7506 7822 }
62d1db17 7823 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
f30432d7 7824 {
2d01edd7 7825 error ("non-object member %qs cannot be declared %<mutable%>", name);
1ff3c076 7826 storage_class = sc_none;
f30432d7 7827 }
34fc957d 7828 else if (TREE_CODE (type) == FUNCTION_TYPE
0cbd7506
MS
7829 || TREE_CODE (type) == METHOD_TYPE)
7830 {
2d01edd7 7831 error ("function %qs cannot be declared %<mutable%>", name);
1ff3c076 7832 storage_class = sc_none;
0cbd7506 7833 }
f30432d7
MS
7834 else if (staticp)
7835 {
2d01edd7 7836 error ("static %qs cannot be declared %<mutable%>", name);
1ff3c076 7837 storage_class = sc_none;
f30432d7 7838 }
34fc957d
NS
7839 else if (type_quals & TYPE_QUAL_CONST)
7840 {
2d01edd7 7841 error ("const %qs cannot be declared %<mutable%>", name);
1ff3c076 7842 storage_class = sc_none;
34fc957d 7843 }
f30432d7
MS
7844 }
7845
419c6212 7846 /* If this is declaring a typedef name, return a TYPE_DECL. */
62d1db17 7847 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
8d08fdba
MS
7848 {
7849 tree decl;
7850
7851 /* Note that the grammar rejects storage classes
7852 in typenames, fields or parameters. */
eff71ab0
PB
7853 if (current_lang_name == lang_name_java)
7854 TYPE_FOR_JAVA (type) = 1;
e2537f2c
MM
7855
7856 /* This declaration:
7857
7858 typedef void f(int) const;
7859
7860 declares a function type which is not a member of any
7861 particular class, but which is cv-qualified; for
7862 example "f S::*" declares a pointer to a const-qualified
7863 member function of S. We record the cv-qualification in the
7864 function type. */
7865 if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
7866 type = cp_build_qualified_type (type, memfn_quals);
8d08fdba 7867
d2e5ee5c 7868 if (decl_context == FIELD)
e3016344 7869 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
d2e5ee5c 7870 else
e3016344
MM
7871 decl = build_decl (TYPE_DECL, unqualified_id, type);
7872 if (id_declarator && declarator->u.id.qualifying_scope)
7873 error ("%Jtypedef name may not be a nested-name-specifier", decl);
7874
7875 if (decl_context != FIELD)
6bda7a5e 7876 {
6bda7a5e
NS
7877 if (!current_function_decl)
7878 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
1dc82a99 7879 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
c8094d83 7880 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
1dc82a99
MM
7881 (current_function_decl)))
7882 /* The TYPE_DECL is "abstract" because there will be
7883 clones of this constructor/destructor, and there will
7884 be copies of this TYPE_DECL generated in those
7885 clones. */
7886 DECL_ABSTRACT (decl) = 1;
6bda7a5e 7887 }
e3016344
MM
7888 else if (constructor_name_p (unqualified_id, current_class_type))
7889 pedwarn ("ISO C++ forbids nested type %qD with same name "
7890 "as enclosing class",
7891 unqualified_id);
caf93cb0 7892
9188c363
MM
7893 /* If the user declares "typedef struct {...} foo" then the
7894 struct will have an anonymous name. Fill that name in now.
7895 Nothing can refer to it, so nothing needs know about the name
7896 change. */
8d08fdba 7897 if (type != error_mark_node
058b15c1 7898 && unqualified_id
8d08fdba
MS
7899 && TYPE_NAME (type)
7900 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1951a1b6 7901 && TYPE_ANONYMOUS_P (type)
ac905924
JM
7902 /* Don't do this if there are attributes. */
7903 && (!attrlist || !*attrlist)
89d684bb 7904 && cp_type_quals (type) == TYPE_UNQUALIFIED)
8d08fdba 7905 {
dcd08efc
JM
7906 tree oldname = TYPE_NAME (type);
7907 tree t;
7908
2c73f9f5 7909 /* Replace the anonymous name with the real name everywhere. */
dcd08efc
JM
7910 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
7911 if (TYPE_NAME (t) == oldname)
7912 TYPE_NAME (t) = decl;
8d08fdba
MS
7913
7914 if (TYPE_LANG_SPECIFIC (type))
7915 TYPE_WAS_ANONYMOUS (type) = 1;
7916
33964bf4
MM
7917 /* If this is a typedef within a template class, the nested
7918 type is a (non-primary) template. The name for the
7919 template needs updating as well. */
7920 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
68642fb6 7921 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
33964bf4
MM
7922 = TYPE_IDENTIFIER (type);
7923
50a6dbd7
JM
7924 /* FIXME remangle member functions; member functions of a
7925 type with external linkage have external linkage. */
fc378698 7926 }
fc378698 7927
e2537f2c
MM
7928 /* Any qualifiers on a function type typedef have already been
7929 dealt with. */
7930 if (memfn_quals && !ctype && TREE_CODE (type) == FUNCTION_TYPE)
7931 memfn_quals = TYPE_UNQUALIFIED;
8d08fdba 7932
1ff3c076 7933 if (signed_p
8d08fdba
MS
7934 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
7935 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
7936
e2537f2c
MM
7937 bad_specifiers (decl, "type", virtualp,
7938 memfn_quals != TYPE_UNQUALIFIED,
c91a56d2
MS
7939 inlinep, friendp, raises != NULL_TREE);
7940
8d08fdba
MS
7941 return decl;
7942 }
7943
7944 /* Detect the case of an array type of unspecified size
7945 which came, as such, direct from a typedef name.
8d6e459d
NS
7946 We must copy the type, so that the array's domain can be
7947 individually set by the object's initializer. */
8d08fdba 7948
8d6e459d
NS
7949 if (type && typedef_type
7950 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
55b3d665 7951 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8d6e459d 7952 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
8d08fdba 7953
969fd501 7954 /* Detect where we're using a typedef of function type to declare a
4546865e 7955 function. PARMS will not be set, so we must create it now. */
caf93cb0 7956
969fd501
NS
7957 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
7958 {
7959 tree decls = NULL_TREE;
7960 tree args;
7961
7962 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
7963 {
8e51619a 7964 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
969fd501
NS
7965
7966 TREE_CHAIN (decl) = decls;
7967 decls = decl;
7968 }
caf93cb0 7969
4546865e 7970 parms = nreverse (decls);
9804209d
DG
7971
7972 if (decl_context != TYPENAME)
0cbd7506
MS
7973 {
7974 /* A cv-qualifier-seq shall only be part of the function type
7975 for a non-static member function. [8.3.5/4 dcl.fct] */
7976 if (cp_type_quals (type) != TYPE_UNQUALIFIED
7977 && (current_class_type == NULL_TREE || staticp) )
7978 {
7979 error ("qualified function types cannot be used to declare %s functions",
7980 (staticp? "static member" : "free"));
7981 type = TYPE_MAIN_VARIANT (type);
7982 }
7983
7984 /* The qualifiers on the function type become the qualifiers on
7985 the non-static member function. */
e2537f2c 7986 memfn_quals |= cp_type_quals (type);
0cbd7506 7987 }
969fd501
NS
7988 }
7989
8d08fdba
MS
7990 /* If this is a type name (such as, in a cast or sizeof),
7991 compute the type and return it now. */
7992
7993 if (decl_context == TYPENAME)
7994 {
7995 /* Note that the grammar rejects storage classes
7996 in typenames, fields or parameters. */
91063b51 7997 if (type_quals != TYPE_UNQUALIFIED)
6eabb241 7998 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
7999
8000 /* Special case: "friend class foo" looks like a TYPENAME context. */
8001 if (friendp)
8002 {
91063b51 8003 if (type_quals != TYPE_UNQUALIFIED)
b7484fbe 8004 {
33bd39a2 8005 error ("type qualifiers specified for friend class declaration");
91063b51 8006 type_quals = TYPE_UNQUALIFIED;
b7484fbe
MS
8007 }
8008 if (inlinep)
8009 {
2d01edd7 8010 error ("%<inline%> specified for friend class declaration");
b7484fbe
MS
8011 inlinep = 0;
8012 }
f2ae0c45 8013
218e0eb6 8014 if (!current_aggr)
4b054b80 8015 {
218e0eb6 8016 /* Don't allow friend declaration without a class-key. */
4b054b80 8017 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
218e0eb6 8018 pedwarn ("template parameters cannot be friends");
f2ae0c45 8019 else if (TREE_CODE (type) == TYPENAME_TYPE)
0cbd7506 8020 pedwarn ("friend declaration requires class-key, "
2d01edd7 8021 "i.e. %<friend class %T::%D%>",
218e0eb6 8022 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
4b054b80 8023 else
0cbd7506 8024 pedwarn ("friend declaration requires class-key, "
2d01edd7 8025 "i.e. %<friend %#T%>",
218e0eb6 8026 type);
4b054b80 8027 }
b7484fbe
MS
8028
8029 /* Only try to do this stuff if we didn't already give up. */
8030 if (type != integer_type_node)
8031 {
8032 /* A friendly class? */
8033 if (current_class_type)
19db77ce
KL
8034 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8035 /*complain=*/true);
b7484fbe 8036 else
2d01edd7 8037 error ("trying to make class %qT a friend of global scope",
0cbd7506 8038 type);
d363e7bf 8039
b7484fbe
MS
8040 type = void_type_node;
8041 }
8d08fdba 8042 }
e2537f2c 8043 else if (memfn_quals)
8d08fdba 8044 {
8d08fdba
MS
8045 if (ctype == NULL_TREE)
8046 {
41cbc04c 8047 if (TREE_CODE (type) != METHOD_TYPE)
0cbd7506 8048 error ("invalid qualifiers on non-member function type");
41cbc04c 8049 else
0cbd7506 8050 ctype = TYPE_METHOD_BASETYPE (type);
41cbc04c
NS
8051 }
8052 if (ctype)
e2537f2c 8053 type = build_memfn_type (type, ctype, memfn_quals);
8d08fdba
MS
8054 }
8055
8056 return type;
8057 }
058b15c1 8058 else if (unqualified_id == NULL_TREE && decl_context != PARM
db5ae43f 8059 && decl_context != CATCHPARM
8d08fdba
MS
8060 && TREE_CODE (type) != UNION_TYPE
8061 && ! bitfield)
8062 {
2d01edd7 8063 error ("abstract declarator %qT used as declaration", type);
22ab714d 8064 return error_mark_node;
8d08fdba
MS
8065 }
8066
62e19030
MM
8067 /* Only functions may be declared using an operator-function-id. */
8068 if (unqualified_id
8069 && IDENTIFIER_OPNAME_P (unqualified_id)
8070 && TREE_CODE (type) != FUNCTION_TYPE
8071 && TREE_CODE (type) != METHOD_TYPE)
8d08fdba 8072 {
62e19030
MM
8073 error ("declaration of %qD as non-function", unqualified_id);
8074 return error_mark_node;
8d08fdba
MS
8075 }
8076
62e19030
MM
8077 /* We don't check parameter types here because we can emit a better
8078 error message later. */
8079 if (decl_context != PARM)
8080 type = check_var_type (unqualified_id, type);
8081
8d08fdba
MS
8082 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
8083 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
8084
14ae7e7d
JM
8085 if (decl_context == PARM || decl_context == CATCHPARM)
8086 {
8087 if (ctype || in_namespace)
2d01edd7 8088 error ("cannot use %<::%> in parameter declaration");
14ae7e7d
JM
8089
8090 /* A parameter declared as an array of T is really a pointer to T.
8091 One declared as a function is really a pointer to a function.
8092 One declared as a member is really a pointer to member. */
8093
8094 if (TREE_CODE (type) == ARRAY_TYPE)
8095 {
8096 /* Transfer const-ness of array into that of type pointed to. */
8097 type = build_pointer_type (TREE_TYPE (type));
91063b51 8098 type_quals = TYPE_UNQUALIFIED;
14ae7e7d
JM
8099 }
8100 else if (TREE_CODE (type) == FUNCTION_TYPE)
8101 type = build_pointer_type (type);
14ae7e7d 8102 }
68642fb6 8103
8d08fdba 8104 {
926ce8bd 8105 tree decl;
8d08fdba
MS
8106
8107 if (decl_context == PARM)
8108 {
058b15c1 8109 decl = cp_build_parm_decl (unqualified_id, type);
8d08fdba 8110
e2537f2c
MM
8111 bad_specifiers (decl, "parameter", virtualp,
8112 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba 8113 inlinep, friendp, raises != NULL_TREE);
8d08fdba
MS
8114 }
8115 else if (decl_context == FIELD)
8116 {
01bf0f3e
JM
8117 /* The C99 flexible array extension. */
8118 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8119 && TYPE_DOMAIN (type) == NULL_TREE)
8120 {
8121 tree itype = compute_array_index_type (dname, integer_zero_node);
8122 type = build_cplus_array_type (TREE_TYPE (type), itype);
8123 }
8124
8d08fdba
MS
8125 if (type == error_mark_node)
8126 {
8127 /* Happens when declaring arrays of sizes which
8128 are error_mark_node, for example. */
8129 decl = NULL_TREE;
8130 }
997a088c 8131 else if (in_namespace && !friendp)
05008fb9
MM
8132 {
8133 /* Something like struct S { int N::j; }; */
2d01edd7 8134 error ("invalid use of %<::%>");
05008fb9
MM
8135 decl = NULL_TREE;
8136 }
8d08fdba
MS
8137 else if (TREE_CODE (type) == FUNCTION_TYPE)
8138 {
8139 int publicp = 0;
e1467ff2 8140 tree function_context;
8d08fdba
MS
8141
8142 if (friendp == 0)
8143 {
8144 if (ctype == NULL_TREE)
8145 ctype = current_class_type;
8146
8147 if (ctype == NULL_TREE)
8148 {
2d01edd7 8149 error ("can't make %qD into a method -- not in a class",
058b15c1 8150 unqualified_id);
8d08fdba
MS
8151 return void_type_node;
8152 }
8153
8154 /* ``A union may [ ... ] not [ have ] virtual functions.''
8155 ARM 9.5 */
8156 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
8157 {
2d01edd7 8158 error ("function %qD declared virtual inside a union",
058b15c1 8159 unqualified_id);
8d08fdba
MS
8160 return void_type_node;
8161 }
8162
058b15c1 8163 if (NEW_DELETE_OPNAME_P (unqualified_id))
8d08fdba
MS
8164 {
8165 if (virtualp)
8166 {
2d01edd7 8167 error ("%qD cannot be declared virtual, since it "
0cbd7506 8168 "is always static",
058b15c1 8169 unqualified_id);
8d08fdba
MS
8170 virtualp = 0;
8171 }
8172 }
8173 else if (staticp < 2)
e2537f2c 8174 type = build_memfn_type (type, ctype, memfn_quals);
8d08fdba
MS
8175 }
8176
88e95ee3 8177 /* Check that the name used for a destructor makes sense. */
6d2989e1 8178 if (sfk == sfk_destructor)
88e95ee3 8179 {
6d2989e1
VR
8180 if (!ctype)
8181 {
8182 gcc_assert (friendp);
8183 error ("expected qualified name in friend declaration "
8184 "for destructor %qD",
8185 id_declarator->u.id.unqualified_name);
8186 return error_mark_node;
8187 }
8188
8189 if (!same_type_p (TREE_OPERAND
8190 (id_declarator->u.id.unqualified_name, 0),
8191 ctype))
8192 {
8193 error ("declaration of %qD as member of %qT",
8194 id_declarator->u.id.unqualified_name, ctype);
8195 return error_mark_node;
8196 }
88e95ee3
MM
8197 }
8198
8d08fdba 8199 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
68642fb6 8200 function_context = (ctype != NULL_TREE) ?
4f1c5b7d 8201 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
e1467ff2
MM
8202 publicp = (! friendp || ! staticp)
8203 && function_context == NULL_TREE;
68642fb6 8204 decl = grokfndecl (ctype, type,
058b15c1
MM
8205 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8206 ? unqualified_id : dname,
4546865e 8207 parms,
058b15c1 8208 unqualified_id,
e2537f2c 8209 virtualp, flags, memfn_quals, raises,
386b8a85 8210 friendp ? -1 : 0, friendp, publicp, inlinep,
27d6592c 8211 sfk,
037cc9c5 8212 funcdef_flag, template_count, in_namespace, attrlist);
20496fa2 8213 if (decl == NULL_TREE)
3ddfb0e6 8214 return decl;
6125f3be
DE
8215#if 0
8216 /* This clobbers the attrs stored in `decl' from `attrlist'. */
91d231cb
JM
8217 /* The decl and setting of decl_attr is also turned off. */
8218 decl = build_decl_attribute_variant (decl, decl_attr);
6125f3be 8219#endif
f0e01782 8220
cc804e51
MM
8221 /* [class.conv.ctor]
8222
8223 A constructor declared without the function-specifier
8224 explicit that can be called with a single parameter
8225 specifies a conversion from the type of its first
8226 parameter to the type of its class. Such a constructor
8227 is called a converting constructor. */
db5ae43f
MS
8228 if (explicitp == 2)
8229 DECL_NONCONVERTING_P (decl) = 1;
cc804e51
MM
8230 else if (DECL_CONSTRUCTOR_P (decl))
8231 {
8232 /* The constructor can be called with exactly one
8233 parameter if there is at least one parameter, and
8234 any subsequent parameters have default arguments.
e0fff4b3
JM
8235 Ignore any compiler-added parms. */
8236 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
cc804e51
MM
8237
8238 if (arg_types == void_list_node
68642fb6
UD
8239 || (arg_types
8240 && TREE_CHAIN (arg_types)
cc804e51
MM
8241 && TREE_CHAIN (arg_types) != void_list_node
8242 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
8243 DECL_NONCONVERTING_P (decl) = 1;
8244 }
8d08fdba
MS
8245 }
8246 else if (TREE_CODE (type) == METHOD_TYPE)
8247 {
faae18ab
MS
8248 /* We only get here for friend declarations of
8249 members of other classes. */
8d08fdba
MS
8250 /* All method decls are public, so tell grokfndecl to set
8251 TREE_PUBLIC, also. */
866eb556 8252 decl = grokfndecl (ctype, type,
058b15c1
MM
8253 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8254 ? unqualified_id : dname,
4546865e 8255 parms,
058b15c1 8256 unqualified_id,
e2537f2c 8257 virtualp, flags, memfn_quals, raises,
27d6592c 8258 friendp ? -1 : 0, friendp, 1, 0, sfk,
c8094d83
MS
8259 funcdef_flag, template_count, in_namespace,
8260 attrlist);
f0e01782
MS
8261 if (decl == NULL_TREE)
8262 return NULL_TREE;
8d08fdba 8263 }
a9f46cbb 8264 else if (!staticp && !dependent_type_p (type)
d0f062fb 8265 && !COMPLETE_TYPE_P (complete_type (type))
8d08fdba
MS
8266 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
8267 {
058b15c1 8268 if (unqualified_id)
2d01edd7 8269 error ("field %qD has incomplete type", unqualified_id);
b7484fbe 8270 else
2d01edd7 8271 error ("name %qT has incomplete type", type);
8d08fdba
MS
8272
8273 /* If we're instantiating a template, tell them which
8274 instantiation made the field's type be incomplete. */
8275 if (current_class_type
8276 && TYPE_NAME (current_class_type)
d2e5ee5c 8277 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
62d1db17
MM
8278 && declspecs->type
8279 && declspecs->type == type)
2d01edd7 8280 error (" in instantiation of template %qT",
0cbd7506 8281 current_class_type);
db5ae43f 8282
8d08fdba
MS
8283 type = error_mark_node;
8284 decl = NULL_TREE;
8285 }
8286 else
8287 {
8288 if (friendp)
8289 {
2d01edd7 8290 error ("%qE is neither function nor member function; "
0cbd7506 8291 "cannot be declared friend", unqualified_id);
8d08fdba
MS
8292 friendp = 0;
8293 }
8294 decl = NULL_TREE;
8295 }
8296
8297 if (friendp)
8298 {
8299 /* Friends are treated specially. */
8300 if (ctype == current_class_type)
59e7c84c 8301 ; /* We already issued a pedwarn. */
0cbd7506 8302 else if (decl && DECL_NAME (decl))
8db1028e
NS
8303 {
8304 if (template_class_depth (current_class_type) == 0)
8305 {
8306 decl = check_explicit_specialization
058b15c1 8307 (unqualified_id, decl, template_count,
357d956e 8308 2 * funcdef_flag + 4);
8db1028e
NS
8309 if (decl == error_mark_node)
8310 return error_mark_node;
8311 }
caf93cb0 8312
058b15c1 8313 decl = do_friend (ctype, unqualified_id, decl,
e2537f2c
MM
8314 *attrlist, flags,
8315 funcdef_flag);
8db1028e
NS
8316 return decl;
8317 }
8318 else
8319 return void_type_node;
8d08fdba
MS
8320 }
8321
f4f206f4 8322 /* Structure field. It may not be a function, except for C++. */
8d08fdba
MS
8323
8324 if (decl == NULL_TREE)
8325 {
8d08fdba
MS
8326 if (initialized)
8327 {
3ac3d9ea
MM
8328 if (!staticp)
8329 {
8330 /* An attempt is being made to initialize a non-static
8331 member. But, from [class.mem]:
68642fb6 8332
3ac3d9ea
MM
8333 4 A member-declarator can contain a
8334 constant-initializer only if it declares a static
8335 member (_class.static_) of integral or enumeration
68642fb6 8336 type, see _class.static.data_.
3ac3d9ea
MM
8337
8338 This used to be relatively common practice, but
8339 the rest of the compiler does not correctly
8340 handle the initialization unless the member is
8341 static so we make it static below. */
2d01edd7 8342 pedwarn ("ISO C++ forbids initialization of member %qD",
058b15c1 8343 unqualified_id);
2d01edd7 8344 pedwarn ("making %qD static", unqualified_id);
3ac3d9ea
MM
8345 staticp = 1;
8346 }
8347
6ba89f8e
MM
8348 if (uses_template_parms (type))
8349 /* We'll check at instantiation time. */
8350 ;
058b15c1 8351 else if (check_static_variable_definition (unqualified_id,
6ba89f8e
MM
8352 type))
8353 /* If we just return the declaration, crashes
8354 will sometimes occur. We therefore return
72a93143
JM
8355 void_type_node, as if this was a friend
8356 declaration, to cause callers to completely
8357 ignore this declaration. */
6ba89f8e 8358 return void_type_node;
8d08fdba
MS
8359 }
8360
3ac3d9ea 8361 if (staticp)
8d08fdba 8362 {
f18a14bc
MM
8363 /* C++ allows static class members. All other work
8364 for this is done by grokfield. */
058b15c1 8365 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
4684cd27
MM
8366 set_linkage_for_static_data_member (decl);
8367 /* Even if there is an in-class initialization, DECL
8368 is considered undefined until an out-of-class
8369 definition is provided. */
8370 DECL_EXTERNAL (decl) = 1;
31a79236
JJ
8371
8372 if (thread_p)
8373 {
8374 if (targetm.have_tls)
8375 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8376 else
8377 /* A mere warning is sure to result in improper
8378 semantics at runtime. Don't bother to allow this to
8379 compile. */
8380 error ("thread-local storage not supported for this target");
8381 }
8d08fdba
MS
8382 }
8383 else
8384 {
058b15c1 8385 decl = build_decl (FIELD_DECL, unqualified_id, type);
2bf105ab 8386 DECL_NONADDRESSABLE_P (decl) = bitfield;
1ff3c076 8387 if (storage_class == sc_mutable)
8d08fdba
MS
8388 {
8389 DECL_MUTABLE_P (decl) = 1;
1ff3c076 8390 storage_class = sc_none;
8d08fdba
MS
8391 }
8392 }
8393
e2537f2c
MM
8394 bad_specifiers (decl, "field", virtualp,
8395 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba
MS
8396 inlinep, friendp, raises != NULL_TREE);
8397 }
8398 }
fd9aef9d
NS
8399 else if (TREE_CODE (type) == FUNCTION_TYPE
8400 || TREE_CODE (type) == METHOD_TYPE)
8d08fdba 8401 {
386b8a85 8402 tree original_name;
8d08fdba
MS
8403 int publicp = 0;
8404
058b15c1 8405 if (!unqualified_id)
8d08fdba
MS
8406 return NULL_TREE;
8407
058b15c1 8408 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
386b8a85
JM
8409 original_name = dname;
8410 else
058b15c1 8411 original_name = unqualified_id;
386b8a85 8412
1ff3c076 8413 if (storage_class == sc_auto)
2d01edd7 8414 error ("storage class %<auto%> invalid for function %qs", name);
1ff3c076 8415 else if (storage_class == sc_register)
2d01edd7 8416 error ("storage class %<register%> invalid for function %qs", name);
1ff3c076 8417 else if (thread_p)
2d01edd7 8418 error ("storage class %<__thread%> invalid for function %qs", name);
8d08fdba
MS
8419
8420 /* Function declaration not at top level.
8421 Storage classes other than `extern' are not allowed
8422 and `extern' makes no difference. */
a9aedbc2 8423 if (! toplevel_bindings_p ()
1ff3c076 8424 && (storage_class == sc_static
62d1db17 8425 || declspecs->specs[(int)ds_inline])
8d08fdba 8426 && pedantic)
8926095f 8427 {
1ff3c076 8428 if (storage_class == sc_static)
2d01edd7 8429 pedwarn ("%<static%> specified invalid for function %qs "
0cbd7506 8430 "declared out of global scope", name);
8926095f 8431 else
2d01edd7 8432 pedwarn ("%<inline%> specifier invalid for function %qs "
0cbd7506 8433 "declared out of global scope", name);
8926095f 8434 }
68642fb6 8435
8d08fdba
MS
8436 if (ctype == NULL_TREE)
8437 {
8438 if (virtualp)
8439 {
2d01edd7 8440 error ("virtual non-class function %qs", name);
8d08fdba
MS
8441 virtualp = 0;
8442 }
8d08fdba 8443 }
4546865e
MM
8444 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
8445 && !NEW_DELETE_OPNAME_P (original_name))
caf93cb0 8446 type = build_method_type_directly (ctype,
43dc123f
MM
8447 TREE_TYPE (type),
8448 TYPE_ARG_TYPES (type));
8d08fdba 8449
eb66be0e 8450 /* Record presence of `static'. */
faae18ab 8451 publicp = (ctype != NULL_TREE
1ff3c076
MM
8452 || storage_class == sc_extern
8453 || storage_class != sc_static);
8d08fdba 8454
058b15c1 8455 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
e2537f2c 8456 virtualp, flags, memfn_quals, raises,
75650646 8457 1, friendp,
27d6592c 8458 publicp, inlinep, sfk, funcdef_flag,
037cc9c5 8459 template_count, in_namespace, attrlist);
f0e01782
MS
8460 if (decl == NULL_TREE)
8461 return NULL_TREE;
8d08fdba 8462
8d08fdba
MS
8463 if (staticp == 1)
8464 {
0e339752 8465 int invalid_static = 0;
8d08fdba
MS
8466
8467 /* Don't allow a static member function in a class, and forbid
8468 declaring main to be static. */
8469 if (TREE_CODE (type) == METHOD_TYPE)
8470 {
2d01edd7 8471 pedwarn ("cannot declare member function %qD to have "
0cbd7506 8472 "static linkage", decl);
0e339752 8473 invalid_static = 1;
8d08fdba 8474 }
8d08fdba
MS
8475 else if (current_function_decl)
8476 {
8477 /* FIXME need arm citation */
8251199e 8478 error ("cannot declare static function inside another function");
0e339752 8479 invalid_static = 1;
8d08fdba
MS
8480 }
8481
0e339752 8482 if (invalid_static)
8d08fdba
MS
8483 {
8484 staticp = 0;
1ff3c076 8485 storage_class = sc_none;
8d08fdba
MS
8486 }
8487 }
8d08fdba
MS
8488 }
8489 else
8490 {
8491 /* It's a variable. */
8492
8493 /* An uninitialized decl with `extern' is a reference. */
caf93cb0 8494 decl = grokvardecl (type, unqualified_id,
62d1db17 8495 declspecs,
68642fb6
UD
8496 initialized,
8497 (type_quals & TYPE_QUAL_CONST) != 0,
9e259dd1 8498 ctype ? ctype : in_namespace);
e2537f2c
MM
8499 bad_specifiers (decl, "variable", virtualp,
8500 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba
MS
8501 inlinep, friendp, raises != NULL_TREE);
8502
8503 if (ctype)
8504 {
f0e01782 8505 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
8506 if (staticp == 1)
8507 {
0cbd7506
MS
8508 pedwarn ("%<static%> may not be used when defining "
8509 "(as opposed to declaring) a static data member");
8510 staticp = 0;
1ff3c076 8511 storage_class = sc_none;
8d08fdba 8512 }
1ff3c076 8513 if (storage_class == sc_register && TREE_STATIC (decl))
b7484fbe 8514 {
2d01edd7 8515 error ("static member %qD declared %<register%>", decl);
1ff3c076 8516 storage_class = sc_none;
b7484fbe 8517 }
1ff3c076 8518 if (storage_class == sc_extern && pedantic)
8d08fdba 8519 {
0cbd7506
MS
8520 pedwarn ("cannot explicitly declare member %q#D to have "
8521 "extern linkage",
8522 decl);
1ff3c076 8523 storage_class = sc_none;
8d08fdba
MS
8524 }
8525 }
8526 }
8527
8d08fdba
MS
8528 /* Record `register' declaration for warnings on &
8529 and in case doing stupid register allocation. */
8530
1ff3c076 8531 if (storage_class == sc_register)
8d08fdba 8532 DECL_REGISTER (decl) = 1;
1ff3c076 8533 else if (storage_class == sc_extern)
8926095f 8534 DECL_THIS_EXTERN (decl) = 1;
1ff3c076 8535 else if (storage_class == sc_static)
faae18ab
MS
8536 DECL_THIS_STATIC (decl) = 1;
8537
adecb3f4
MM
8538 /* Record constancy and volatility. There's no need to do this
8539 when processing a template; we'll do this for the instantiated
8540 declaration based on the type of DECL. */
8541 if (!processing_template_decl)
9804209d 8542 cp_apply_type_quals_to_decl (type_quals, decl);
8d08fdba
MS
8543
8544 return decl;
8545 }
8546}
8547\f
f181d4ae
MM
8548/* Subroutine of start_function. Ensure that each of the parameter
8549 types (as listed in PARMS) is complete, as is required for a
8550 function definition. */
e92cc029 8551
8d08fdba 8552static void
11f6b451 8553require_complete_types_for_parms (tree parms)
8d08fdba 8554{
07c88314 8555 for (; parms; parms = TREE_CHAIN (parms))
8d08fdba 8556 {
c9387915
GB
8557 if (dependent_type_p (TREE_TYPE (parms)))
8558 continue;
dff1b563
VR
8559 if (!VOID_TYPE_P (TREE_TYPE (parms))
8560 && complete_type_or_else (TREE_TYPE (parms), parms))
753225c1 8561 {
7523dc31 8562 relayout_decl (parms);
753225c1
JM
8563 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8564 }
dff1b563
VR
8565 else
8566 /* grokparms or complete_type_or_else will have already issued
8567 an error. */
8568 TREE_TYPE (parms) = error_mark_node;
8d08fdba
MS
8569 }
8570}
8571
838dfd8a 8572/* Returns nonzero if T is a local variable. */
297e73d8 8573
46e8c075 8574int
11f6b451 8575local_variable_p (tree t)
297e73d8 8576{
68642fb6 8577 if ((TREE_CODE (t) == VAR_DECL
297e73d8
MM
8578 /* A VAR_DECL with a context that is a _TYPE is a static data
8579 member. */
8580 && !TYPE_P (CP_DECL_CONTEXT (t))
8581 /* Any other non-local variable must be at namespace scope. */
46e8c075 8582 && !DECL_NAMESPACE_SCOPE_P (t))
297e73d8 8583 || (TREE_CODE (t) == PARM_DECL))
46e8c075 8584 return 1;
297e73d8 8585
46e8c075
MM
8586 return 0;
8587}
8588
838dfd8a 8589/* Returns nonzero if T is an automatic local variable or a label.
46e8c075
MM
8590 (These are the declarations that need to be remapped when the code
8591 containing them is duplicated.) */
8592
8593int
11f6b451 8594nonstatic_local_decl_p (tree t)
46e8c075
MM
8595{
8596 return ((local_variable_p (t) && !TREE_STATIC (t))
8597 || TREE_CODE (t) == LABEL_DECL
8598 || TREE_CODE (t) == RESULT_DECL);
8599}
8600
8601/* Like local_variable_p, but suitable for use as a tree-walking
8602 function. */
8603
8604static tree
44de5aeb
RK
8605local_variable_p_walkfn (tree *tp, int *walk_subtrees,
8606 void *data ATTRIBUTE_UNUSED)
46e8c075 8607{
44de5aeb
RK
8608 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8609 return *tp;
8610 else if (TYPE_P (*tp))
8611 *walk_subtrees = 0;
8612
8613 return NULL_TREE;
297e73d8
MM
8614}
8615
44de5aeb 8616
297e73d8 8617/* Check that ARG, which is a default-argument expression for a
0e339752 8618 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
297e73d8
MM
8619 something goes wrong. DECL may also be a _TYPE node, rather than a
8620 DECL, if there is no DECL available. */
8621
8622tree
11f6b451 8623check_default_argument (tree decl, tree arg)
297e73d8
MM
8624{
8625 tree var;
8626 tree decl_type;
8627
8628 if (TREE_CODE (arg) == DEFAULT_ARG)
8629 /* We get a DEFAULT_ARG when looking at an in-class declaration
8630 with a default argument. Ignore the argument for now; we'll
8631 deal with it after the class is complete. */
8632 return arg;
8633
297e73d8
MM
8634 if (TYPE_P (decl))
8635 {
8636 decl_type = decl;
8637 decl = NULL_TREE;
8638 }
8639 else
8640 decl_type = TREE_TYPE (decl);
8641
68642fb6 8642 if (arg == error_mark_node
297e73d8
MM
8643 || decl == error_mark_node
8644 || TREE_TYPE (arg) == error_mark_node
8645 || decl_type == error_mark_node)
8646 /* Something already went wrong. There's no need to check
8647 further. */
8648 return error_mark_node;
8649
8650 /* [dcl.fct.default]
68642fb6 8651
297e73d8
MM
8652 A default argument expression is implicitly converted to the
8653 parameter type. */
8654 if (!TREE_TYPE (arg)
30f86ec3 8655 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
297e73d8
MM
8656 {
8657 if (decl)
2d01edd7 8658 error ("default argument for %q#D has type %qT",
0cbd7506 8659 decl, TREE_TYPE (arg));
297e73d8 8660 else
2d01edd7 8661 error ("default argument for parameter of type %qT has type %qT",
0cbd7506 8662 decl_type, TREE_TYPE (arg));
297e73d8
MM
8663
8664 return error_mark_node;
8665 }
8666
8667 /* [dcl.fct.default]
8668
8669 Local variables shall not be used in default argument
68642fb6 8670 expressions.
297e73d8
MM
8671
8672 The keyword `this' shall not be used in a default argument of a
8673 member function. */
5362b086 8674 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
ee94fce6 8675 NULL);
297e73d8
MM
8676 if (var)
8677 {
2d01edd7 8678 error ("default argument %qE uses local variable %qD", arg, var);
297e73d8
MM
8679 return error_mark_node;
8680 }
8681
8682 /* All is well. */
8683 return arg;
8684}
8685
8d08fdba
MS
8686/* Decode the list of parameter types for a function type.
8687 Given the list of things declared inside the parens,
8688 return a list of types.
8689
058b15c1
MM
8690 If this parameter does not end with an ellipsis, we append
8691 void_list_node.
5cce22b6 8692
4546865e 8693 *PARMS is set to the chain of PARM_DECLs created. */
8d08fdba
MS
8694
8695static tree
62d1db17 8696grokparms (cp_parameter_declarator *first_parm, tree *parms)
8d08fdba
MS
8697{
8698 tree result = NULL_TREE;
8699 tree decls = NULL_TREE;
058b15c1 8700 int ellipsis = !first_parm || first_parm->ellipsis_p;
62d1db17 8701 cp_parameter_declarator *parm;
5cce22b6 8702 int any_error = 0;
8d08fdba 8703
058b15c1 8704 for (parm = first_parm; parm != NULL; parm = parm->next)
8d08fdba 8705 {
0657c69c 8706 tree type = NULL_TREE;
058b15c1 8707 tree init = parm->default_argument;
62d1db17 8708 tree attrs;
058b15c1 8709 tree decl;
8d08fdba 8710
058b15c1 8711 if (parm == no_parameters)
0cbd7506 8712 break;
8d08fdba 8713
62d1db17
MM
8714 attrs = parm->decl_specifiers.attributes;
8715 parm->decl_specifiers.attributes = NULL_TREE;
8716 decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
98884b26 8717 PARM, init != NULL_TREE, &attrs);
5cce22b6 8718 if (! decl || TREE_TYPE (decl) == error_mark_node)
0cbd7506 8719 continue;
d363e7bf 8720
98884b26
JM
8721 if (attrs)
8722 cplus_decl_attributes (&decl, attrs, 0);
8723
5cce22b6
NS
8724 type = TREE_TYPE (decl);
8725 if (VOID_TYPE_P (type))
0cbd7506
MS
8726 {
8727 if (same_type_p (type, void_type_node)
e7e53192 8728 && DECL_SELF_REFERENCE_P (type)
0cbd7506
MS
8729 && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
8730 /* this is a parmlist of `(void)', which is ok. */
8731 break;
8732 cxx_incomplete_type_error (decl, type);
0657c69c
MM
8733 /* It's not a good idea to actually create parameters of
8734 type `void'; other parts of the compiler assume that a
8735 void type terminates the parameter list. */
04f3dc2b 8736 type = error_mark_node;
0657c69c 8737 TREE_TYPE (decl) = error_mark_node;
0cbd7506 8738 }
8d08fdba 8739
d363e7bf 8740 if (type != error_mark_node)
04f3dc2b
MM
8741 {
8742 /* Top-level qualifiers on the parameters are
8743 ignored for function types. */
79a1a736 8744 type = cp_build_qualified_type (type, 0);
04f3dc2b
MM
8745 if (TREE_CODE (type) == METHOD_TYPE)
8746 {
2d01edd7 8747 error ("parameter %qD invalidly declared method type", decl);
04f3dc2b
MM
8748 type = build_pointer_type (type);
8749 TREE_TYPE (decl) = type;
8750 }
04f3dc2b 8751 else if (abstract_virtuals_error (decl, type))
a1c65f9f 8752 any_error = 1; /* Seems like a good idea. */
04f3dc2b
MM
8753 else if (POINTER_TYPE_P (type))
8754 {
8755 /* [dcl.fct]/6, parameter types cannot contain pointers
8756 (references) to arrays of unknown bound. */
98979fe0
NS
8757 tree t = TREE_TYPE (type);
8758 int ptr = TYPE_PTR_P (type);
8759
0cbd7506
MS
8760 while (1)
8761 {
8762 if (TYPE_PTR_P (t))
8763 ptr = 1;
8764 else if (TREE_CODE (t) != ARRAY_TYPE)
8765 break;
8766 else if (!TYPE_DOMAIN (t))
8767 break;
8768 t = TREE_TYPE (t);
8769 }
04f3dc2b 8770 if (TREE_CODE (t) == ARRAY_TYPE)
2d01edd7 8771 error ("parameter %qD includes %s to array of unknown "
0cbd7506
MS
8772 "bound %qT",
8773 decl, ptr ? "pointer" : "reference", t);
04f3dc2b
MM
8774 }
8775
c3ee4651 8776 if (any_error)
04f3dc2b 8777 init = NULL_TREE;
c3ee4651
NS
8778 else if (init && !processing_template_decl)
8779 init = check_default_argument (decl, init);
04f3dc2b 8780 }
8d08fdba 8781
5cce22b6
NS
8782 TREE_CHAIN (decl) = decls;
8783 decls = decl;
0657c69c 8784 result = tree_cons (init, type, result);
8d08fdba 8785 }
5cce22b6
NS
8786 decls = nreverse (decls);
8787 result = nreverse (result);
8788 if (!ellipsis)
8789 result = chainon (result, void_list_node);
4546865e 8790 *parms = decls;
8d08fdba 8791
8d08fdba
MS
8792 return result;
8793}
42976354 8794
8d08fdba 8795\f
271e6f02
NS
8796/* D is a constructor or overloaded `operator='.
8797
8798 Let T be the class in which D is declared. Then, this function
8799 returns:
8800
8801 -1 if D's is an ill-formed constructor or copy assignment operator
8802 whose first parameter is of type `T'.
8803 0 if D is not a copy constructor or copy assignment
8804 operator.
8805 1 if D is a copy constructor or copy assignment operator whose
8806 first parameter is a reference to const qualified T.
8807 2 if D is a copy constructor or copy assignment operator whose
8808 first parameter is a reference to non-const qualified T.
8809
8810 This function can be used as a predicate. Positive values indicate
838dfd8a 8811 a copy constructor and nonzero values indicate a copy assignment
4f1c5b7d
MM
8812 operator. */
8813
c11b6f21 8814int
11f6b451 8815copy_fn_p (tree d)
c11b6f21 8816{
271e6f02
NS
8817 tree args;
8818 tree arg_type;
8819 int result = 1;
caf93cb0 8820
80cdd94a
VR
8821 if (!DECL_FUNCTION_MEMBER_P (d))
8822 /* Non-members are invalid. We complained, but kept the declaration. */
8823 return 0;
4f1c5b7d 8824
7137605e
MM
8825 if (TREE_CODE (d) == TEMPLATE_DECL
8826 || (DECL_TEMPLATE_INFO (d)
8827 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
271e6f02
NS
8828 /* Instantiations of template member functions are never copy
8829 functions. Note that member functions of templated classes are
8830 represented as template functions internally, and we must
8831 accept those as copy functions. */
8832 return 0;
caf93cb0 8833
271e6f02
NS
8834 args = FUNCTION_FIRST_USER_PARMTYPE (d);
8835 if (!args)
4f1c5b7d
MM
8836 return 0;
8837
271e6f02 8838 arg_type = TREE_VALUE (args);
139a78c7
VR
8839 if (arg_type == error_mark_node)
8840 return 0;
271e6f02
NS
8841
8842 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8843 {
8844 /* Pass by value copy assignment operator. */
8845 result = -1;
8846 }
8847 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8848 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8849 {
8850 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8851 result = 2;
8852 }
8853 else
8854 return 0;
caf93cb0 8855
271e6f02
NS
8856 args = TREE_CHAIN (args);
8857
8858 if (args && args != void_list_node && !TREE_PURPOSE (args))
8859 /* There are more non-optional args. */
8860 return 0;
8861
8862 return result;
8863}
8864
8865/* Remember any special properties of member function DECL. */
8866
11f6b451 8867void grok_special_member_properties (tree decl)
271e6f02 8868{
7137605e
MM
8869 tree class_type;
8870
6d69fe27 8871 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
7137605e
MM
8872 return;
8873
8874 class_type = DECL_CONTEXT (decl);
8875 if (DECL_CONSTRUCTOR_P (decl))
271e6f02
NS
8876 {
8877 int ctor = copy_fn_p (decl);
caf93cb0 8878
7137605e
MM
8879 TYPE_HAS_CONSTRUCTOR (class_type) = 1;
8880
271e6f02
NS
8881 if (ctor > 0)
8882 {
8883 /* [class.copy]
caf93cb0 8884
0cbd7506
MS
8885 A non-template constructor for class X is a copy
8886 constructor if its first parameter is of type X&, const
8887 X&, volatile X& or const volatile X&, and either there
8888 are no other parameters or else all other parameters have
8889 default arguments. */
7137605e 8890 TYPE_HAS_INIT_REF (class_type) = 1;
271e6f02 8891 if (ctor > 1)
7137605e 8892 TYPE_HAS_CONST_INIT_REF (class_type) = 1;
271e6f02
NS
8893 }
8894 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
7137605e 8895 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
271e6f02
NS
8896 }
8897 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8898 {
8899 /* [class.copy]
caf93cb0 8900
0cbd7506
MS
8901 A non-template assignment operator for class X is a copy
8902 assignment operator if its parameter is of type X, X&, const
8903 X&, volatile X& or const volatile X&. */
caf93cb0 8904
271e6f02 8905 int assop = copy_fn_p (decl);
caf93cb0 8906
271e6f02
NS
8907 if (assop)
8908 {
7137605e 8909 TYPE_HAS_ASSIGN_REF (class_type) = 1;
271e6f02 8910 if (assop != 1)
7137605e 8911 TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
271e6f02
NS
8912 }
8913 }
c11b6f21
MS
8914}
8915
271e6f02
NS
8916/* Check a constructor DECL has the correct form. Complains
8917 if the class has a constructor of the form X(X). */
e92cc029 8918
a0a33927 8919int
11f6b451 8920grok_ctor_properties (tree ctype, tree decl)
8d08fdba 8921{
271e6f02
NS
8922 int ctor_parm = copy_fn_p (decl);
8923
8924 if (ctor_parm < 0)
8925 {
8926 /* [class.copy]
caf93cb0 8927
0cbd7506
MS
8928 A declaration of a constructor for a class X is ill-formed if
8929 its first parameter is of type (optionally cv-qualified) X
8930 and either there are no other parameters or else all other
8931 parameters have default arguments.
8932
8933 We *don't* complain about member template instantiations that
8934 have this form, though; they can occur as we try to decide
8935 what constructor to use during overload resolution. Since
8936 overload resolution will never prefer such a constructor to
8937 the non-template copy constructor (which is either explicitly
8938 or implicitly defined), there's no need to worry about their
8939 existence. Theoretically, they should never even be
8940 instantiated, but that's hard to forestall. */
2d01edd7 8941 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
0b41abe6 8942 ctype, ctype);
0b41abe6 8943 return 0;
8d08fdba 8944 }
caf93cb0 8945
a0a33927 8946 return 1;
8d08fdba
MS
8947}
8948
596ea4e5 8949/* An operator with this code is unary, but can also be binary. */
e92cc029 8950
a28e3c7f 8951static int
11f6b451 8952ambi_op_p (enum tree_code code)
8d08fdba 8953{
596ea4e5
AS
8954 return (code == INDIRECT_REF
8955 || code == ADDR_EXPR
392e3d51 8956 || code == UNARY_PLUS_EXPR
596ea4e5
AS
8957 || code == NEGATE_EXPR
8958 || code == PREINCREMENT_EXPR
8959 || code == PREDECREMENT_EXPR);
8d08fdba
MS
8960}
8961
8962/* An operator with this name can only be unary. */
e92cc029 8963
a28e3c7f 8964static int
11f6b451 8965unary_op_p (enum tree_code code)
8d08fdba 8966{
596ea4e5
AS
8967 return (code == TRUTH_NOT_EXPR
8968 || code == BIT_NOT_EXPR
8969 || code == COMPONENT_REF
8970 || code == TYPE_EXPR);
8d08fdba
MS
8971}
8972
f2a79152 8973/* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
4b0d3cbe 8974 errors are issued for invalid declarations. */
e92cc029 8975
f2a79152 8976void
7e45bd18 8977grok_op_properties (tree decl, bool complain)
8d08fdba
MS
8978{
8979 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
596ea4e5 8980 tree argtype;
8d08fdba
MS
8981 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
8982 tree name = DECL_NAME (decl);
596ea4e5
AS
8983 enum tree_code operator_code;
8984 int arity;
64844139 8985 bool ellipsis_p;
7e45bd18 8986 tree class_type;
596ea4e5 8987
64844139 8988 /* Count the number of arguments and check for ellipsis. */
596ea4e5
AS
8989 for (argtype = argtypes, arity = 0;
8990 argtype && argtype != void_list_node;
8991 argtype = TREE_CHAIN (argtype))
8992 ++arity;
64844139 8993 ellipsis_p = !argtype;
8d08fdba 8994
7e45bd18
MM
8995 class_type = DECL_CONTEXT (decl);
8996 if (class_type && !CLASS_TYPE_P (class_type))
8997 class_type = NULL_TREE;
8d08fdba 8998
596ea4e5
AS
8999 if (DECL_CONV_FN_P (decl))
9000 operator_code = TYPE_EXPR;
9001 else
9002 do
9003 {
0c918ce5
MM
9004#define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
9005 if (ansi_opname (CODE) == name) \
9006 { \
75ac8dec 9007 operator_code = (CODE); \
0c918ce5
MM
9008 break; \
9009 } \
9010 else if (ansi_assopname (CODE) == name) \
9011 { \
75ac8dec 9012 operator_code = (CODE); \
0c918ce5
MM
9013 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
9014 break; \
596ea4e5
AS
9015 }
9016
9017#include "operators.def"
9018#undef DEF_OPERATOR
9019
8dc2b103 9020 gcc_unreachable ();
596ea4e5
AS
9021 }
9022 while (0);
50bc768d 9023 gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
596ea4e5
AS
9024 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9025
7e45bd18
MM
9026 if (class_type)
9027 switch (operator_code)
9028 {
9029 case NEW_EXPR:
9030 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
9031 break;
5362b086 9032
7e45bd18
MM
9033 case DELETE_EXPR:
9034 TYPE_GETS_DELETE (class_type) |= 1;
9035 break;
5362b086 9036
7e45bd18
MM
9037 case VEC_NEW_EXPR:
9038 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
9039 break;
5362b086 9040
7e45bd18
MM
9041 case VEC_DELETE_EXPR:
9042 TYPE_GETS_DELETE (class_type) |= 2;
9043 break;
596ea4e5 9044
7e45bd18
MM
9045 default:
9046 break;
9047 }
596ea4e5 9048
3143d517
GB
9049 /* [basic.std.dynamic.allocation]/1:
9050
9051 A program is ill-formed if an allocation function is declared
9052 in a namespace scope other than global scope or declared static
9053 in global scope.
9054
9055 The same also holds true for deallocation functions. */
9056 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
9057 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9058 {
9059 if (DECL_NAMESPACE_SCOPE_P (decl))
9060 {
9061 if (CP_DECL_CONTEXT (decl) != global_namespace)
2d01edd7 9062 error ("%qD may not be declared within a namespace", decl);
3143d517 9063 else if (!TREE_PUBLIC (decl))
2d01edd7 9064 error ("%qD may not be declared as static", decl);
3143d517
GB
9065 }
9066 }
9067
596ea4e5 9068 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
4546865e 9069 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
596ea4e5 9070 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
4546865e 9071 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8d08fdba
MS
9072 else
9073 {
9074 /* An operator function must either be a non-static member function
9075 or have at least one parameter of a class, a reference to a class,
9076 an enumeration, or a reference to an enumeration. 13.4.0.6 */
700f8a87 9077 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba 9078 {
596ea4e5
AS
9079 if (operator_code == TYPE_EXPR
9080 || operator_code == CALL_EXPR
9081 || operator_code == COMPONENT_REF
9082 || operator_code == ARRAY_REF
9083 || operator_code == NOP_EXPR)
f2a79152
PC
9084 {
9085 error ("%qD must be a nonstatic member function", decl);
9086 return;
9087 }
8d08fdba
MS
9088 else
9089 {
4b0d3cbe 9090 tree p;
8d08fdba 9091
700f8a87 9092 if (DECL_STATIC_FUNCTION_P (decl))
f2a79152
PC
9093 {
9094 error ("%qD must be either a non-static member "
9095 "function or a non-member function", decl);
9096 return;
9097 }
700f8a87 9098
4b0d3cbe
MM
9099 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
9100 {
9101 tree arg = non_reference (TREE_VALUE (p));
85990800
VR
9102 if (arg == error_mark_node)
9103 return;
9104
4b0d3cbe
MM
9105 /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
9106 because these checks are performed even on
9107 template functions. */
9108 if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
9109 break;
9110 }
9111
9112 if (!p || p == void_list_node)
9113 {
9114 if (!complain)
f2a79152 9115 return;
4b0d3cbe 9116
2d01edd7 9117 error ("%qD must have an argument of class or "
4b0d3cbe
MM
9118 "enumerated type",
9119 decl);
4b0d3cbe 9120 }
8d08fdba
MS
9121 }
9122 }
68642fb6 9123
4b0d3cbe
MM
9124 /* There are no restrictions on the arguments to an overloaded
9125 "operator ()". */
596ea4e5 9126 if (operator_code == CALL_EXPR)
f2a79152 9127 return;
8d08fdba 9128
7e45bd18 9129 /* Warn about conversion operators that will never be used. */
c8094d83 9130 if (IDENTIFIER_TYPENAME_P (name)
7e45bd18
MM
9131 && ! DECL_TEMPLATE_INFO (decl)
9132 && warn_conversion
9133 /* Warn only declaring the function; there is no need to
9134 warn again about out-of-class definitions. */
9135 && class_type == current_class_type)
a0a33927
MS
9136 {
9137 tree t = TREE_TYPE (name);
7e45bd18
MM
9138 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
9139 const char *what = 0;
5362b086 9140
7e45bd18
MM
9141 if (ref)
9142 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
a0a33927 9143
7e45bd18
MM
9144 if (TREE_CODE (t) == VOID_TYPE)
9145 what = "void";
9146 else if (class_type)
9147 {
9148 if (t == class_type)
a0a33927 9149 what = "the same type";
9a3b49ac 9150 /* Don't force t to be complete here. */
a0a33927 9151 else if (IS_AGGR_TYPE (t)
d0f062fb 9152 && COMPLETE_TYPE_P (t)
7e45bd18 9153 && DERIVED_FROM_P (t, class_type))
a0a33927 9154 what = "a base class";
a0a33927 9155 }
7e45bd18
MM
9156
9157 if (what)
b323323f 9158 warning (OPT_Wconversion, "conversion to %s%s will never use a type "
7e45bd18
MM
9159 "conversion operator",
9160 ref ? "a reference to " : "", what);
a0a33927 9161 }
64844139 9162
271e6f02 9163 if (operator_code == COND_EXPR)
8d08fdba
MS
9164 {
9165 /* 13.4.0.3 */
33bd39a2 9166 error ("ISO C++ prohibits overloading operator ?:");
68642fb6 9167 }
64844139
VR
9168 else if (ellipsis_p)
9169 error ("%qD must not have variable number of arguments", decl);
596ea4e5 9170 else if (ambi_op_p (operator_code))
8d08fdba 9171 {
596ea4e5
AS
9172 if (arity == 1)
9173 /* We pick the one-argument operator codes by default, so
9174 we don't have to change anything. */
9175 ;
9176 else if (arity == 2)
8d08fdba 9177 {
596ea4e5
AS
9178 /* If we thought this was a unary operator, we now know
9179 it to be a binary operator. */
9180 switch (operator_code)
9181 {
9182 case INDIRECT_REF:
9183 operator_code = MULT_EXPR;
9184 break;
9185
9186 case ADDR_EXPR:
9187 operator_code = BIT_AND_EXPR;
9188 break;
9189
392e3d51 9190 case UNARY_PLUS_EXPR:
596ea4e5
AS
9191 operator_code = PLUS_EXPR;
9192 break;
9193
9194 case NEGATE_EXPR:
9195 operator_code = MINUS_EXPR;
9196 break;
9197
9198 case PREINCREMENT_EXPR:
9199 operator_code = POSTINCREMENT_EXPR;
9200 break;
9201
9202 case PREDECREMENT_EXPR:
655dc6ee 9203 operator_code = POSTDECREMENT_EXPR;
596ea4e5
AS
9204 break;
9205
9206 default:
8dc2b103 9207 gcc_unreachable ();
596ea4e5
AS
9208 }
9209
9210 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9211
9212 if ((operator_code == POSTINCREMENT_EXPR
9213 || operator_code == POSTDECREMENT_EXPR)
5156628f 9214 && ! processing_template_decl
007e5fea 9215 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8d08fdba
MS
9216 {
9217 if (methodp)
2d01edd7 9218 error ("postfix %qD must take %<int%> as its argument",
8d08fdba
MS
9219 decl);
9220 else
33bd39a2 9221 error
2d01edd7 9222 ("postfix %qD must take %<int%> as its second argument",
8251199e 9223 decl);
8d08fdba
MS
9224 }
9225 }
9226 else
9227 {
9228 if (methodp)
2d01edd7 9229 error ("%qD must take either zero or one argument", decl);
8d08fdba 9230 else
2d01edd7 9231 error ("%qD must take either one or two arguments", decl);
8d08fdba 9232 }
824b9a4c
MS
9233
9234 /* More Effective C++ rule 6. */
eb448459 9235 if (warn_ecpp
596ea4e5
AS
9236 && (operator_code == POSTINCREMENT_EXPR
9237 || operator_code == POSTDECREMENT_EXPR
9238 || operator_code == PREINCREMENT_EXPR
9239 || operator_code == PREDECREMENT_EXPR))
824b9a4c
MS
9240 {
9241 tree arg = TREE_VALUE (argtypes);
9242 tree ret = TREE_TYPE (TREE_TYPE (decl));
9243 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
9244 arg = TREE_TYPE (arg);
9245 arg = TYPE_MAIN_VARIANT (arg);
596ea4e5
AS
9246 if (operator_code == PREINCREMENT_EXPR
9247 || operator_code == PREDECREMENT_EXPR)
824b9a4c
MS
9248 {
9249 if (TREE_CODE (ret) != REFERENCE_TYPE
3bfdc719
MM
9250 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
9251 arg))
b323323f 9252 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
0cbd7506 9253 build_reference_type (arg));
824b9a4c
MS
9254 }
9255 else
9256 {
3bfdc719 9257 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
b323323f 9258 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
824b9a4c
MS
9259 }
9260 }
8d08fdba 9261 }
596ea4e5 9262 else if (unary_op_p (operator_code))
8d08fdba 9263 {
596ea4e5 9264 if (arity != 1)
8d08fdba
MS
9265 {
9266 if (methodp)
2d01edd7 9267 error ("%qD must take %<void%>", decl);
8d08fdba 9268 else
2d01edd7 9269 error ("%qD must take exactly one argument", decl);
8d08fdba
MS
9270 }
9271 }
596ea4e5 9272 else /* if (binary_op_p (operator_code)) */
8d08fdba 9273 {
596ea4e5 9274 if (arity != 2)
8d08fdba
MS
9275 {
9276 if (methodp)
2d01edd7 9277 error ("%qD must take exactly one argument", decl);
8d08fdba 9278 else
2d01edd7 9279 error ("%qD must take exactly two arguments", decl);
8d08fdba 9280 }
824b9a4c
MS
9281
9282 /* More Effective C++ rule 7. */
eb448459 9283 if (warn_ecpp
596ea4e5
AS
9284 && (operator_code == TRUTH_ANDIF_EXPR
9285 || operator_code == TRUTH_ORIF_EXPR
9286 || operator_code == COMPOUND_EXPR))
b323323f 9287 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
0cbd7506 9288 decl);
824b9a4c
MS
9289 }
9290
9291 /* Effective C++ rule 23. */
eb448459 9292 if (warn_ecpp
596ea4e5 9293 && arity == 2
4bd7c270 9294 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
596ea4e5
AS
9295 && (operator_code == PLUS_EXPR
9296 || operator_code == MINUS_EXPR
9297 || operator_code == TRUNC_DIV_EXPR
4bd7c270
NS
9298 || operator_code == MULT_EXPR
9299 || operator_code == TRUNC_MOD_EXPR)
824b9a4c 9300 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
b323323f 9301 warning (OPT_Weffc__, "%qD should return by value", decl);
8d08fdba 9302
271e6f02 9303 /* [over.oper]/8 */
34332678 9304 for (; argtypes && argtypes != void_list_node;
0cbd7506
MS
9305 argtypes = TREE_CHAIN (argtypes))
9306 if (TREE_PURPOSE (argtypes))
9307 {
9308 TREE_PURPOSE (argtypes) = NULL_TREE;
9309 if (operator_code == POSTINCREMENT_EXPR
596ea4e5 9310 || operator_code == POSTDECREMENT_EXPR)
0cbd7506
MS
9311 {
9312 if (pedantic)
9313 pedwarn ("%qD cannot have default arguments", decl);
9314 }
9315 else
9316 error ("%qD cannot have default arguments", decl);
9317 }
34332678 9318
8d08fdba 9319 }
4b0d3cbe 9320
8d08fdba
MS
9321}
9322\f
0c88d886
MM
9323/* Return a string giving the keyword associate with CODE. */
9324
d8e178a0 9325static const char *
11f6b451 9326tag_name (enum tag_types code)
094fe153
JM
9327{
9328 switch (code)
9329 {
9330 case record_type:
9331 return "struct";
9332 case class_type:
9333 return "class";
9334 case union_type:
0c88d886 9335 return "union";
094fe153
JM
9336 case enum_type:
9337 return "enum";
0c88d886
MM
9338 case typename_type:
9339 return "typename";
094fe153 9340 default:
8dc2b103 9341 gcc_unreachable ();
094fe153
JM
9342 }
9343}
9344
befcd99b 9345/* Name lookup in an elaborated-type-specifier (after the keyword
4b0d3cbe 9346 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
befcd99b 9347 elaborated-type-specifier is invalid, issue a diagnostic and return
4b0d3cbe 9348 error_mark_node; otherwise, return the *_TYPE to which it referred.
cbd63935 9349 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
befcd99b 9350
560ad596 9351tree
befcd99b 9352check_elaborated_type_specifier (enum tag_types tag_code,
4b0d3cbe 9353 tree decl,
cbd63935 9354 bool allow_template_p)
befcd99b 9355{
4b0d3cbe 9356 tree type;
befcd99b 9357
4b0d3cbe
MM
9358 /* In the case of:
9359
9360 struct S { struct S *p; };
9361
9362 name lookup will find the TYPE_DECL for the implicit "S::S"
9363 typedef. Adjust for that here. */
9364 if (DECL_SELF_REFERENCE_P (decl))
9365 decl = TYPE_NAME (TREE_TYPE (decl));
9366
9367 type = TREE_TYPE (decl);
9368
461c6fce
KL
9369 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
9370 is false for this case as well. */
9371 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9372 {
9373 error ("using template type parameter %qT after %qs",
9374 type, tag_name (tag_code));
9375 return error_mark_node;
9376 }
caf93cb0 9377 /* [dcl.type.elab]
4b0d3cbe
MM
9378
9379 If the identifier resolves to a typedef-name or a template
9380 type-parameter, the elaborated-type-specifier is ill-formed.
9381
9382 In other words, the only legitimate declaration to use in the
9383 elaborated type specifier is the implicit typedef created when
9384 the type is declared. */
0c88d886
MM
9385 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
9386 && tag_code != typename_type)
befcd99b 9387 {
2d01edd7 9388 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
dee15844 9389 error ("%q+D has a previous declaration here", decl);
4b0d3cbe 9390 return error_mark_node;
befcd99b 9391 }
cbd63935
KL
9392 else if (TREE_CODE (type) != RECORD_TYPE
9393 && TREE_CODE (type) != UNION_TYPE
0c88d886
MM
9394 && tag_code != enum_type
9395 && tag_code != typename_type)
cbd63935 9396 {
2d01edd7 9397 error ("%qT referred to as %qs", type, tag_name (tag_code));
dee15844 9398 error ("%q+T has a previous declaration here", type);
4b0d3cbe 9399 return error_mark_node;
cbd63935
KL
9400 }
9401 else if (TREE_CODE (type) != ENUMERAL_TYPE
4fe8db68 9402 && tag_code == enum_type)
cbd63935 9403 {
2d01edd7 9404 error ("%qT referred to as enum", type);
dee15844 9405 error ("%q+T has a previous declaration here", type);
4b0d3cbe 9406 return error_mark_node;
cbd63935
KL
9407 }
9408 else if (!allow_template_p
9409 && TREE_CODE (type) == RECORD_TYPE
9410 && CLASSTYPE_IS_TEMPLATE (type))
9411 {
9412 /* If a class template appears as elaborated type specifier
9413 without a template header such as:
9414
9415 template <class T> class C {};
9416 void f(class C); // No template header here
9417
9418 then the required template argument is missing. */
2d01edd7 9419 error ("template argument required for %<%s %T%>",
cbd63935
KL
9420 tag_name (tag_code),
9421 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
4b0d3cbe 9422 return error_mark_node;
cbd63935 9423 }
befcd99b 9424
4b0d3cbe 9425 return type;
befcd99b
MM
9426}
9427
461c6fce 9428/* Lookup NAME in elaborate type specifier in scope according to
29ef83de 9429 SCOPE and issue diagnostics if necessary.
461c6fce
KL
9430 Return *_TYPE node upon success, NULL_TREE when the NAME is not
9431 found, and ERROR_MARK_NODE for type error. */
9432
9433static tree
9434lookup_and_check_tag (enum tag_types tag_code, tree name,
29ef83de 9435 tag_scope scope, bool template_header_p)
461c6fce
KL
9436{
9437 tree t;
9438 tree decl;
29ef83de 9439 if (scope == ts_global)
bd3d082e
KL
9440 {
9441 /* First try ordinary name lookup, ignoring hidden class name
9442 injected via friend declaration. */
10e6657a 9443 decl = lookup_name_prefer_type (name, 2);
bd3d082e
KL
9444 /* If that fails, the name will be placed in the smallest
9445 non-class, non-function-prototype scope according to 3.3.1/5.
9446 We may already have a hidden name declared as friend in this
9447 scope. So lookup again but not ignoring hidden name.
9448 If we find one, that name will be made visible rather than
9449 creating a new tag. */
9450 if (!decl)
9451 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
9452 }
461c6fce 9453 else
29ef83de 9454 decl = lookup_type_scope (name, scope);
461c6fce
KL
9455
9456 if (decl && DECL_CLASS_TEMPLATE_P (decl))
9457 decl = DECL_TEMPLATE_RESULT (decl);
9458
9459 if (decl && TREE_CODE (decl) == TYPE_DECL)
9460 {
4104f0f4
KL
9461 /* Look for invalid nested type:
9462 class C {
9463 class C {};
9464 }; */
9465 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
9466 {
9467 error ("%qD has the same name as the class in which it is "
9468 "declared",
9469 decl);
9470 return error_mark_node;
9471 }
9472
461c6fce
KL
9473 /* Two cases we need to consider when deciding if a class
9474 template is allowed as an elaborated type specifier:
9475 1. It is a self reference to its own class.
9476 2. It comes with a template header.
9477
9478 For example:
9479
9480 template <class T> class C {
9481 class C *c1; // DECL_SELF_REFERENCE_P is true
9482 class D;
9483 };
9484 template <class U> class C; // template_header_p is true
9485 template <class T> class C<T>::D {
9486 class C *c2; // DECL_SELF_REFERENCE_P is true
9487 }; */
9488
9489 t = check_elaborated_type_specifier (tag_code,
9490 decl,
9491 template_header_p
9492 | DECL_SELF_REFERENCE_P (decl));
9493 return t;
9494 }
9495 else
9496 return NULL_TREE;
9497}
9498
cbd63935 9499/* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
8d08fdba
MS
9500 Define the tag as a forward-reference if it is not defined.
9501
cbd63935 9502 If a declaration is given, process it here, and report an error if
38b305d0 9503 multiple declarations are not identical.
8d08fdba 9504
29ef83de 9505 SCOPE is TS_CURRENT when this is also a definition. Only look in
8d08fdba 9506 the current frame for the name (since C++ allows new names in any
29ef83de
KL
9507 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
9508 declaration. Only look beginning from the current scope outward up
9509 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
cbd63935
KL
9510
9511 TEMPLATE_HEADER_P is true when this declaration is preceded by
9512 a set of template parameters. */
8d08fdba 9513
8d08fdba 9514tree
38b305d0 9515xref_tag (enum tag_types tag_code, tree name,
29ef83de 9516 tag_scope scope, bool template_header_p)
8d08fdba 9517{
8d08fdba 9518 enum tree_code code;
926ce8bd 9519 tree t;
25aab5d0 9520 tree context = NULL_TREE;
dc8263bc 9521
22ffcc6f 9522 timevar_push (TV_NAME_LOOKUP);
cbd63935 9523
50bc768d 9524 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
cbd63935 9525
8d08fdba
MS
9526 switch (tag_code)
9527 {
9528 case record_type:
9529 case class_type:
8d08fdba 9530 code = RECORD_TYPE;
8d08fdba
MS
9531 break;
9532 case union_type:
9533 code = UNION_TYPE;
8d08fdba
MS
9534 break;
9535 case enum_type:
9536 code = ENUMERAL_TYPE;
9537 break;
9538 default:
8dc2b103 9539 gcc_unreachable ();
8d08fdba
MS
9540 }
9541
461c6fce
KL
9542 /* In case of anonymous name, xref_tag is only called to
9543 make type node and push name. Name lookup is not required. */
9544 if (ANON_AGGRNAME_P (name))
9545 t = NULL_TREE;
8d08fdba 9546 else
461c6fce 9547 t = lookup_and_check_tag (tag_code, name,
29ef83de 9548 scope, template_header_p);
cbd63935 9549
461c6fce
KL
9550 if (t == error_mark_node)
9551 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
68642fb6 9552
29ef83de 9553 if (scope != ts_current && t && current_class_type
461c6fce
KL
9554 && template_class_depth (current_class_type)
9555 && template_header_p)
9556 {
29ef83de 9557 /* Since SCOPE is not TS_CURRENT, we are not looking at a
461c6fce
KL
9558 definition of this tag. Since, in addition, we are currently
9559 processing a (member) template declaration of a template
9560 class, we must be very careful; consider:
25aab5d0 9561
461c6fce
KL
9562 template <class X>
9563 struct S1
25aab5d0 9564
461c6fce
KL
9565 template <class U>
9566 struct S2
9567 { template <class V>
9568 friend struct S1; };
25aab5d0 9569
461c6fce
KL
9570 Here, the S2::S1 declaration should not be confused with the
9571 outer declaration. In particular, the inner version should
9572 have a template parameter of level 2, not level 1. This
9573 would be particularly important if the member declaration
9574 were instead:
25aab5d0 9575
461c6fce 9576 template <class V = U> friend struct S1;
25aab5d0 9577
461c6fce
KL
9578 say, when we should tsubst into `U' when instantiating
9579 S2. On the other hand, when presented with:
25aab5d0 9580
461c6fce
KL
9581 template <class T>
9582 struct S1 {
9583 template <class U>
9584 struct S2 {};
9585 template <class U>
9586 friend struct S2;
9587 };
25aab5d0 9588
461c6fce
KL
9589 we must find the inner binding eventually. We
9590 accomplish this by making sure that the new type we
9591 create to represent this declaration has the right
9592 TYPE_CONTEXT. */
9593 context = TYPE_CONTEXT (t);
9594 t = NULL_TREE;
8d08fdba
MS
9595 }
9596
cbd63935 9597 if (! t)
8d08fdba
MS
9598 {
9599 /* If no such tag is yet defined, create a forward-reference node
9600 and record it as the "definition".
9601 When a real declaration of this type is found,
9602 the forward-reference will be altered into a real type. */
8d08fdba
MS
9603 if (code == ENUMERAL_TYPE)
9604 {
2d01edd7 9605 error ("use of enum %q#D without previous declaration", name);
30fc3df7 9606 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
8d08fdba 9607 }
8d08fdba
MS
9608 else
9609 {
cbd63935
KL
9610 t = make_aggr_type (code);
9611 TYPE_CONTEXT (t) = context;
bd3d082e 9612 t = pushtag (name, t, scope);
8d08fdba
MS
9613 }
9614 }
9615 else
9616 {
29ef83de 9617 if (template_header_p && IS_AGGR_TYPE (t))
cbd63935 9618 redeclare_class_template (t, current_template_parms);
caf93cb0 9619 else if (!processing_template_decl
9ce1594a
MM
9620 && CLASS_TYPE_P (t)
9621 && CLASSTYPE_IS_TEMPLATE (t))
9622 {
2d01edd7 9623 error ("redeclaration of %qT as a non-template", t);
9ce1594a
MM
9624 t = error_mark_node;
9625 }
bd3d082e
KL
9626
9627 /* Make injected friend class visible. */
9628 if (scope != ts_within_enclosing_non_class
9629 && hidden_name_p (TYPE_NAME (t)))
9630 {
9631 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
9632 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
9633
9634 if (TYPE_TEMPLATE_INFO (t))
9635 {
9636 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
9637 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
9638 }
0cbd7506 9639 }
8d08fdba
MS
9640 }
9641
cbd63935 9642 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
8d08fdba 9643}
8ccc31eb 9644
fc378698 9645tree
29ef83de 9646xref_tag_from_type (tree old, tree id, tag_scope scope)
fc378698 9647{
88e5899c 9648 enum tag_types tag_kind;
fc378698
MS
9649
9650 if (TREE_CODE (old) == RECORD_TYPE)
88e5899c 9651 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
fc378698 9652 else
88e5899c 9653 tag_kind = union_type;
fc378698
MS
9654
9655 if (id == NULL_TREE)
9656 id = TYPE_IDENTIFIER (old);
9657
29ef83de 9658 return xref_tag (tag_kind, id, scope, false);
fc378698
MS
9659}
9660
48b45647
NS
9661/* Create the binfo hierarchy for REF with (possibly NULL) base list
9662 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
9663 access_* node, and the TREE_VALUE is the type of the base-class.
9664 Non-NULL TREE_TYPE indicates virtual inheritance. */
3fd71a52 9665
8ccc31eb 9666void
dbbf88d1 9667xref_basetypes (tree ref, tree base_list)
8ccc31eb 9668{
8fbc5ae7 9669 tree *basep;
fa743e8c 9670 tree binfo, base_binfo;
03fd3f84 9671 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
77880ae4 9672 unsigned max_bases = 0; /* Maximum direct bases. */
8fbc5ae7 9673 int i;
48b45647
NS
9674 tree default_access;
9675 tree igo_prev; /* Track Inheritance Graph Order. */
a5d7c4a3 9676
bef89e9e
KL
9677 if (ref == error_mark_node)
9678 return;
9679
48b45647
NS
9680 /* The base of a derived class is private by default, all others are
9681 public. */
9682 default_access = (TREE_CODE (ref) == RECORD_TYPE
9683 && CLASSTYPE_DECLARED_CLASS (ref)
9684 ? access_private_node : access_public_node);
da15dae6 9685
d6479fe7
MM
9686 /* First, make sure that any templates in base-classes are
9687 instantiated. This ensures that if we call ourselves recursively
9688 we do not get confused about which classes are marked and which
9689 are not. */
caf93cb0
EC
9690 basep = &base_list;
9691 while (*basep)
8fbc5ae7
MM
9692 {
9693 tree basetype = TREE_VALUE (*basep);
caf93cb0 9694
8fbc5ae7
MM
9695 if (!(processing_template_decl && uses_template_parms (basetype))
9696 && !complete_type_or_else (basetype, NULL))
dbbf88d1 9697 /* An incomplete type. Remove it from the list. */
8fbc5ae7
MM
9698 *basep = TREE_CHAIN (*basep);
9699 else
48b45647
NS
9700 {
9701 max_bases++;
9702 if (TREE_TYPE (*basep))
9703 max_vbases++;
9704 if (CLASS_TYPE_P (basetype))
9705 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
9706 basep = &TREE_CHAIN (*basep);
9707 }
8fbc5ae7 9708 }
d6479fe7 9709
3543e114 9710 TYPE_MARKED_P (ref) = 1;
48b45647 9711
cad7e87b
NS
9712 /* The binfo slot should be empty, unless this is an (ill-formed)
9713 redefinition. */
50bc768d
NS
9714 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
9715 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
caf93cb0 9716
fa743e8c 9717 binfo = make_tree_binfo (max_bases);
caf93cb0 9718
48b45647
NS
9719 TYPE_BINFO (ref) = binfo;
9720 BINFO_OFFSET (binfo) = size_zero_node;
9721 BINFO_TYPE (binfo) = ref;
caf93cb0 9722
48b45647
NS
9723 if (max_bases)
9724 {
d4e6fecb 9725 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
48b45647
NS
9726 /* An aggregate cannot have baseclasses. */
9727 CLASSTYPE_NON_AGGREGATE (ref) = 1;
caf93cb0 9728
48b45647 9729 if (TREE_CODE (ref) == UNION_TYPE)
2d01edd7 9730 error ("derived union %qT invalid", ref);
48b45647 9731 }
caf93cb0 9732
48b45647 9733 if (max_bases > 1)
dbbf88d1 9734 {
48b45647 9735 if (TYPE_FOR_JAVA (ref))
2d01edd7 9736 error ("Java class %qT cannot have multiple bases", ref);
48b45647 9737 }
caf93cb0 9738
48b45647
NS
9739 if (max_vbases)
9740 {
d4e6fecb 9741 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
caf93cb0 9742
48b45647 9743 if (TYPE_FOR_JAVA (ref))
2d01edd7 9744 error ("Java class %qT cannot have virtual bases", ref);
48b45647 9745 }
cad7e87b 9746
48b45647
NS
9747 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
9748 {
9749 tree access = TREE_PURPOSE (base_list);
9750 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
9751 tree basetype = TREE_VALUE (base_list);
caf93cb0 9752
48b45647
NS
9753 if (access == access_default_node)
9754 access = default_access;
caf93cb0 9755
48b45647
NS
9756 if (TREE_CODE (basetype) == TYPE_DECL)
9757 basetype = TREE_TYPE (basetype);
9758 if (TREE_CODE (basetype) != RECORD_TYPE
9759 && TREE_CODE (basetype) != TYPENAME_TYPE
9760 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9761 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM)
9762 {
2d01edd7 9763 error ("base type %qT fails to be a struct or class type",
48b45647
NS
9764 basetype);
9765 continue;
8ccc31eb 9766 }
caf93cb0 9767
48b45647
NS
9768 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
9769 TYPE_FOR_JAVA (ref) = 1;
9770
fa743e8c 9771 base_binfo = NULL_TREE;
48b45647 9772 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
dbbf88d1 9773 {
48b45647 9774 base_binfo = TYPE_BINFO (basetype);
77880ae4 9775 /* The original basetype could have been a typedef'd type. */
48b45647 9776 basetype = BINFO_TYPE (base_binfo);
caf93cb0 9777
48b45647
NS
9778 /* Inherit flags from the base. */
9779 TYPE_HAS_NEW_OPERATOR (ref)
9780 |= TYPE_HAS_NEW_OPERATOR (basetype);
9781 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9782 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9783 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
48b45647 9784 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
3543e114
NS
9785 CLASSTYPE_DIAMOND_SHAPED_P (ref)
9786 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
9787 CLASSTYPE_REPEATED_BASE_P (ref)
9788 |= CLASSTYPE_REPEATED_BASE_P (basetype);
8fbc5ae7 9789 }
c8094d83 9790
98d6e9af
NS
9791 /* We must do this test after we've seen through a typedef
9792 type. */
9793 if (TYPE_MARKED_P (basetype))
9794 {
9795 if (basetype == ref)
2d01edd7 9796 error ("recursive type %qT undefined", basetype);
98d6e9af 9797 else
2d01edd7 9798 error ("duplicate base type %qT invalid", basetype);
98d6e9af
NS
9799 continue;
9800 }
9801 TYPE_MARKED_P (basetype) = 1;
caf93cb0 9802
48b45647
NS
9803 base_binfo = copy_binfo (base_binfo, basetype, ref,
9804 &igo_prev, via_virtual);
9805 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
9806 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
f5c28a15 9807
fa743e8c 9808 BINFO_BASE_APPEND (binfo, base_binfo);
63d1c7b3 9809 BINFO_BASE_ACCESS_APPEND (binfo, access);
cad7e87b
NS
9810 }
9811
3543e114
NS
9812 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
9813 /* If we have space in the vbase vector, we must have shared at
9814 least one of them, and are therefore diamond shaped. */
9815 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
9816
dbbf88d1 9817 /* Unmark all the types. */
fa743e8c 9818 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
3543e114
NS
9819 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9820 TYPE_MARKED_P (ref) = 0;
9821
9822 /* Now see if we have a repeated base type. */
9823 if (!CLASSTYPE_REPEATED_BASE_P (ref))
9824 {
9825 for (base_binfo = binfo; base_binfo;
9826 base_binfo = TREE_CHAIN (base_binfo))
9827 {
9828 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9829 {
9830 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
9831 break;
9832 }
9833 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
9834 }
9835 for (base_binfo = binfo; base_binfo;
9836 base_binfo = TREE_CHAIN (base_binfo))
9837 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9838 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9839 else
9840 break;
9841 }
8ccc31eb 9842}
68642fb6 9843
8d08fdba 9844\f
8d08fdba 9845/* Begin compiling the definition of an enumeration type.
29ef83de 9846 NAME is its name.
8d08fdba
MS
9847 Returns the type object, as yet incomplete.
9848 Also records info about it so that build_enumerator
9849 may be used to declare the individual values as they are read. */
9850
9851tree
11f6b451 9852start_enum (tree name)
8d08fdba 9853{
29ef83de
KL
9854 tree enumtype;
9855
9856 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
8d08fdba
MS
9857
9858 /* If this is the real definition for a previous forward reference,
9859 fill in the contents in the same object that used to be the
9860 forward reference. */
9861
29ef83de
KL
9862 enumtype = lookup_and_check_tag (enum_type, name,
9863 /*tag_scope=*/ts_current,
9864 /*template_header_p=*/false);
8d08fdba
MS
9865
9866 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
30ff8252 9867 {
2d01edd7 9868 error ("multiple definition of %q#T", enumtype);
ddd2d57e 9869 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
58595203
MM
9870 /* Clear out TYPE_VALUES, and start again. */
9871 TYPE_VALUES (enumtype) = NULL_TREE;
30ff8252 9872 }
8d08fdba
MS
9873 else
9874 {
29ef83de
KL
9875 /* In case of error, make a dummy enum to allow parsing to
9876 continue. */
9877 if (enumtype == error_mark_node)
9878 name = make_anon_name ();
9879
8d08fdba 9880 enumtype = make_node (ENUMERAL_TYPE);
bd3d082e 9881 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
8d08fdba
MS
9882 }
9883
8d08fdba
MS
9884 return enumtype;
9885}
9886
9887/* After processing and defining all the values of an enumeration type,
9888 install their decls in the enumeration type and finish it off.
968b956a 9889 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
8d08fdba 9890
968b956a 9891void
11f6b451 9892finish_enum (tree enumtype)
8d08fdba 9893{
7b6d72fc
MM
9894 tree values;
9895 tree decl;
9896 tree value;
968b956a
MM
9897 tree minnode;
9898 tree maxnode;
9899 tree t;
9900 bool unsignedp;
f6af9a15 9901 bool use_short_enum;
968b956a 9902 int lowprec;
caf93cb0 9903 int highprec;
968b956a 9904 int precision;
7b6d72fc 9905 integer_type_kind itk;
ad96995b 9906 tree underlying_type = NULL_TREE;
968b956a
MM
9907
9908 /* We built up the VALUES in reverse order. */
9909 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
9910
f5d70cc0
JM
9911 /* For an enum defined in a template, just set the type of the values;
9912 all further processing is postponed until the template is
9913 instantiated. We need to set the type so that tsubst of a CONST_DECL
9914 works. */
968b956a
MM
9915 if (processing_template_decl)
9916 {
caf93cb0
EC
9917 for (values = TYPE_VALUES (enumtype);
9918 values;
7b6d72fc
MM
9919 values = TREE_CHAIN (values))
9920 TREE_TYPE (TREE_VALUE (values)) = enumtype;
5f261ba9 9921 if (at_function_scope_p ())
968b956a 9922 add_stmt (build_min (TAG_DEFN, enumtype));
968b956a
MM
9923 return;
9924 }
9925
7b6d72fc 9926 /* Determine the minimum and maximum values of the enumerators. */
968b956a 9927 if (TYPE_VALUES (enumtype))
8d08fdba 9928 {
968b956a 9929 minnode = maxnode = NULL_TREE;
5566b478 9930
caf93cb0
EC
9931 for (values = TYPE_VALUES (enumtype);
9932 values;
7b6d72fc 9933 values = TREE_CHAIN (values))
8d08fdba 9934 {
7b6d72fc 9935 decl = TREE_VALUE (values);
f5d70cc0
JM
9936
9937 /* [dcl.enum]: Following the closing brace of an enum-specifier,
9938 each enumerator has the type of its enumeration. Prior to the
9939 closing brace, the type of each enumerator is the type of its
9940 initializing value. */
9941 TREE_TYPE (decl) = enumtype;
9942
7b6d72fc
MM
9943 /* Update the minimum and maximum values, if appropriate. */
9944 value = DECL_INITIAL (decl);
3c955a04
MM
9945 if (value == error_mark_node)
9946 value = integer_zero_node;
f5d70cc0
JM
9947 /* Figure out what the minimum and maximum values of the
9948 enumerators are. */
9949 if (!minnode)
9950 minnode = maxnode = value;
9951 else if (tree_int_cst_lt (maxnode, value))
9952 maxnode = value;
9953 else if (tree_int_cst_lt (value, minnode))
9954 minnode = value;
8d08fdba
MS
9955 }
9956 }
f376e137 9957 else
7b6d72fc
MM
9958 /* [dcl.enum]
9959
9960 If the enumerator-list is empty, the underlying type is as if
9961 the enumeration had a single enumerator with value 0. */
968b956a
MM
9962 minnode = maxnode = integer_zero_node;
9963
9964 /* Compute the number of bits require to represent all values of the
9965 enumeration. We must do this before the type of MINNODE and
9966 MAXNODE are transformed, since min_precision relies on the
9967 TREE_TYPE of the value it is passed. */
9968 unsignedp = tree_int_cst_sgn (minnode) >= 0;
9969 lowprec = min_precision (minnode, unsignedp);
9970 highprec = min_precision (maxnode, unsignedp);
9971 precision = MAX (lowprec, highprec);
9972
7b6d72fc
MM
9973 /* Determine the underlying type of the enumeration.
9974
9975 [dcl.enum]
9976
9977 The underlying type of an enumeration is an integral type that
9978 can represent all the enumerator values defined in the
9979 enumeration. It is implementation-defined which integral type is
9980 used as the underlying type for an enumeration except that the
9981 underlying type shall not be larger than int unless the value of
caf93cb0 9982 an enumerator cannot fit in an int or unsigned int.
7b6d72fc
MM
9983
9984 We use "int" or an "unsigned int" as the underlying type, even if
9985 a smaller integral type would work, unless the user has
f6af9a15
MA
9986 explicitly requested that we use the smallest possible type. The
9987 user can request that for all enumerations with a command line
03fd3f84 9988 flag, or for just one enumeration with an attribute. */
f6af9a15
MA
9989
9990 use_short_enum = flag_short_enums
9991 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
9992
9993 for (itk = (use_short_enum ? itk_char : itk_int);
caf93cb0 9994 itk != itk_none;
7b6d72fc 9995 itk++)
e455bc27 9996 {
7b6d72fc
MM
9997 underlying_type = integer_types[itk];
9998 if (TYPE_PRECISION (underlying_type) >= precision
8df83eae 9999 && TYPE_UNSIGNED (underlying_type) == unsignedp)
7b6d72fc
MM
10000 break;
10001 }
10002 if (itk == itk_none)
10003 {
10004 /* DR 377
10005
10006 IF no integral type can represent all the enumerator values, the
10007 enumeration is ill-formed. */
e455bc27 10008 error ("no integral type can represent all of the enumerator values "
2d01edd7 10009 "for %qT", enumtype);
e455bc27 10010 precision = TYPE_PRECISION (long_long_integer_type_node);
7b6d72fc 10011 underlying_type = integer_types[itk_unsigned_long_long];
e455bc27
MM
10012 }
10013
caf93cb0 10014 /* Compute the minium and maximum values for the type.
8d08fdba 10015
7b6d72fc
MM
10016 [dcl.enum]
10017
10018 For an enumeration where emin is the smallest enumerator and emax
10019 is the largest, the values of the enumeration are the values of the
10020 underlying type in the range bmin to bmax, where bmin and bmax are,
10021 respectively, the smallest and largest values of the smallest bit-
10022 field that can store emin and emax. */
d0c5c9b1
RS
10023
10024 /* The middle-end currently assumes that types with TYPE_PRECISION
10025 narrower than their underlying type are suitably zero or sign
10026 extended to fill their mode. g++ doesn't make these guarantees.
10027 Until the middle-end can represent such paradoxical types, we
77880ae4 10028 set the TYPE_PRECISION to the width of the underlying type. */
d0c5c9b1
RS
10029 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
10030
7b6d72fc
MM
10031 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
10032
10033 /* [dcl.enum]
caf93cb0 10034
7b6d72fc
MM
10035 The value of sizeof() applied to an enumeration type, an object
10036 of an enumeration type, or an enumerator, is the value of sizeof()
10037 applied to the underlying type. */
10038 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
10039 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
10040 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
10041 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
10042 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
8df83eae 10043 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
7b6d72fc
MM
10044
10045 /* Convert each of the enumerators to the type of the underlying
10046 type of the enumeration. */
10047 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
10048 {
3c955a04
MM
10049 location_t saved_location;
10050
7b6d72fc 10051 decl = TREE_VALUE (values);
3c955a04
MM
10052 saved_location = input_location;
10053 input_location = DECL_SOURCE_LOCATION (decl);
7b6d72fc
MM
10054 value = perform_implicit_conversion (underlying_type,
10055 DECL_INITIAL (decl));
3c955a04 10056 input_location = saved_location;
89b0433e
NS
10057
10058 /* Do not clobber shared ints. */
10059 value = copy_node (value);
c8094d83 10060
7b6d72fc
MM
10061 TREE_TYPE (value) = enumtype;
10062 DECL_INITIAL (decl) = value;
10063 TREE_VALUE (values) = value;
e455bc27 10064 }
8d08fdba 10065
968b956a
MM
10066 /* Fix up all variant types of this enum type. */
10067 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
10068 {
10069 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
10070 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
10071 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
10072 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
10073 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
10074 TYPE_MODE (t) = TYPE_MODE (enumtype);
10075 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
10076 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
10077 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
8df83eae 10078 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
cbf882af
MM
10079 }
10080
968b956a
MM
10081 /* Finish debugging output for this type. */
10082 rest_of_type_compilation (enumtype, namespace_bindings_p ());
8d08fdba
MS
10083}
10084
079e1098 10085/* Build and install a CONST_DECL for an enumeration constant of the
58595203 10086 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
8d08fdba
MS
10087 Assignment of sequential values by default is handled here. */
10088
58595203 10089void
11f6b451 10090build_enumerator (tree name, tree value, tree enumtype)
8d08fdba 10091{
58595203 10092 tree decl;
e8bd800e 10093 tree context;
58595203 10094 tree type;
8d08fdba 10095
93678513
MM
10096 /* If the VALUE was erroneous, pretend it wasn't there; that will
10097 result in the enum being assigned the next value in sequence. */
10098 if (value == error_mark_node)
10099 value = NULL_TREE;
10100
8d08fdba
MS
10101 /* Remove no-op casts from the value. */
10102 if (value)
10103 STRIP_TYPE_NOPS (value);
10104
58595203
MM
10105 if (! processing_template_decl)
10106 {
10107 /* Validate and default VALUE. */
10108 if (value != NULL_TREE)
10109 {
8a784e4a 10110 value = integral_constant_value (value);
58595203
MM
10111
10112 if (TREE_CODE (value) == INTEGER_CST)
10113 {
0a72704b 10114 value = perform_integral_promotions (value);
58595203
MM
10115 constant_expression_warning (value);
10116 }
10117 else
10118 {
2d01edd7 10119 error ("enumerator value for %qD not integer constant", name);
58595203
MM
10120 value = NULL_TREE;
10121 }
10122 }
10123
10124 /* Default based on previous value. */
6a540f3c 10125 if (value == NULL_TREE)
58595203 10126 {
58595203
MM
10127 if (TYPE_VALUES (enumtype))
10128 {
ff4eb0b5
ZW
10129 HOST_WIDE_INT hi;
10130 unsigned HOST_WIDE_INT lo;
10131 tree prev_value;
10132 bool overflowed;
10133
10134 /* The next value is the previous value plus one. We can
0cbd7506 10135 safely assume that the previous value is an INTEGER_CST.
ff4eb0b5
ZW
10136 add_double doesn't know the type of the target expression,
10137 so we must check with int_fits_type_p as well. */
58595203 10138 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
ff4eb0b5
ZW
10139 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
10140 TREE_INT_CST_HIGH (prev_value),
10141 1, 0, &lo, &hi);
10142 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
10143 overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
68642fb6 10144
ff4eb0b5 10145 if (overflowed)
3c955a04
MM
10146 {
10147 error ("overflow in enumeration values at %qD", name);
10148 value = error_mark_node;
10149 }
58595203
MM
10150 }
10151 else
10152 value = integer_zero_node;
10153 }
10154
10155 /* Remove no-op casts from the value. */
f5d70cc0 10156 STRIP_TYPE_NOPS (value);
58595203 10157 }
8d08fdba 10158
8d08fdba 10159 /* C++ associates enums with global, function, or class declarations. */
58595203
MM
10160 context = current_scope ();
10161
10162 /* Build the actual enumeration constant. Note that the enumeration
10163 constants have the type of their initializers until the
10164 enumeration is complete:
10165
10166 [ dcl.enum ]
10167
10168 Following the closing brace of an enum-specifier, each enumer-
10169 ator has the type of its enumeration. Prior to the closing
10170 brace, the type of each enumerator is the type of its
10171 initializing value.
10172
10173 In finish_enum we will reset the type. Of course, if we're
a1c65f9f 10174 processing a template, there may be no value. */
58595203
MM
10175 type = value ? TREE_TYPE (value) : NULL_TREE;
10176
10177 if (context && context == current_class_type)
10178 /* This enum declaration is local to the class. We need the full
8f17b5c5 10179 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
58595203
MM
10180 decl = build_lang_decl (CONST_DECL, name, type);
10181 else
10182 /* It's a global enum, or it's local to a function. (Note local to
e8bd800e 10183 a function could mean local to a class method. */
58595203 10184 decl = build_decl (CONST_DECL, name, type);
e8bd800e 10185
58595203 10186 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
6de9cd9a
DN
10187 TREE_CONSTANT (decl) = 1;
10188 TREE_INVARIANT (decl) = 1;
10189 TREE_READONLY (decl) = 1;
58595203 10190 DECL_INITIAL (decl) = value;
e8bd800e 10191
58595203
MM
10192 if (context && context == current_class_type)
10193 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
7b6d72fc
MM
10194 on the TYPE_FIELDS list for `S'. (That's so that you can say
10195 things like `S::i' later.) */
58595203
MM
10196 finish_member_declaration (decl);
10197 else
9780c24f 10198 pushdecl (decl);
58595203
MM
10199
10200 /* Add this enumeration constant to the list for this type. */
10201 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
8d08fdba
MS
10202}
10203
8d08fdba 10204\f
a8f73d4b
MM
10205/* We're defining DECL. Make sure that it's type is OK. */
10206
10207static void
11f6b451 10208check_function_type (tree decl, tree current_function_parms)
a8f73d4b
MM
10209{
10210 tree fntype = TREE_TYPE (decl);
d0f062fb 10211 tree return_type = complete_type (TREE_TYPE (fntype));
a8f73d4b
MM
10212
10213 /* In a function definition, arg types must be complete. */
10214 require_complete_types_for_parms (current_function_parms);
10215
c9387915
GB
10216 if (dependent_type_p (return_type))
10217 return;
d0f062fb 10218 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
a8f73d4b 10219 {
51b15ede
NS
10220 tree args = TYPE_ARG_TYPES (fntype);
10221
10222 error ("return type %q#T is incomplete", return_type);
a8f73d4b 10223
51b15ede 10224 /* Make it return void instead. */
a8f73d4b 10225 if (TREE_CODE (fntype) == METHOD_TYPE)
51b15ede
NS
10226 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
10227 void_type_node,
10228 TREE_CHAIN (args));
a8f73d4b 10229 else
51b15ede 10230 fntype = build_function_type (void_type_node, args);
68642fb6 10231 TREE_TYPE (decl)
a8f73d4b 10232 = build_exception_variant (fntype,
51b15ede 10233 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
a8f73d4b
MM
10234 }
10235 else
10236 abstract_virtuals_error (decl, TREE_TYPE (fntype));
10237}
10238
8d08fdba
MS
10239/* Create the FUNCTION_DECL for a function definition.
10240 DECLSPECS and DECLARATOR are the parts of the declaration;
10241 they describe the function's name and the type it returns,
10242 but twisted together in a fashion that parallels the syntax of C.
10243
a8f73d4b
MM
10244 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
10245 DECLARATOR is really the DECL for the function we are about to
10246 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
f444e36b 10247 indicating that the function is an inline defined in-class.
68642fb6 10248
8d08fdba
MS
10249 This function creates a binding context for the function body
10250 as well as setting up the FUNCTION_DECL in current_function_decl.
10251
8d08fdba
MS
10252 For C++, we must first check whether that datum makes any sense.
10253 For example, "class A local_a(1,2);" means that variable local_a
10254 is an aggregate of type A, which should have a constructor
87e3dbc9 10255 applied to it with the argument list [1, 2]. */
8d08fdba 10256
058b15c1
MM
10257void
10258start_preparsed_function (tree decl1, tree attrs, int flags)
8d08fdba 10259{
8d08fdba
MS
10260 tree ctype = NULL_TREE;
10261 tree fntype;
10262 tree restype;
8d08fdba 10263 int doing_friend = 0;
e2500fed 10264 struct cp_binding_level *bl;
f444e36b 10265 tree current_function_parms;
3e3935a9
NS
10266 struct c_fileinfo *finfo
10267 = get_fileinfo (lbasename (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1))));
1ef0df47 10268 bool honor_interface;
8d08fdba 10269
8d08fdba 10270 /* Sanity check. */
50bc768d
NS
10271 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
10272 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
8d08fdba 10273
058b15c1
MM
10274 fntype = TREE_TYPE (decl1);
10275 if (TREE_CODE (fntype) == METHOD_TYPE)
10276 ctype = TYPE_METHOD_BASETYPE (fntype);
caf93cb0 10277
058b15c1
MM
10278 /* ISO C++ 11.4/5. A friend function defined in a class is in
10279 the (lexical) scope of the class in which it is defined. */
10280 if (!ctype && DECL_FRIEND_P (decl1))
8d08fdba 10281 {
058b15c1 10282 ctype = DECL_FRIEND_CONTEXT (decl1);
caf93cb0 10283
058b15c1
MM
10284 /* CTYPE could be null here if we're dealing with a template;
10285 for example, `inline friend float foo()' inside a template
10286 will have no CTYPE set. */
10287 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
10288 ctype = NULL_TREE;
10289 else
10290 doing_friend = 1;
8d08fdba 10291 }
68642fb6 10292
97055d5c
AO
10293 if (DECL_DECLARED_INLINE_P (decl1)
10294 && lookup_attribute ("noinline", attrs))
dee15844 10295 warning (0, "inline function %q+D given attribute noinline", decl1);
97055d5c 10296
5f6eeeb3
NS
10297 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
10298 /* This is a constructor, we must ensure that any default args
10299 introduced by this definition are propagated to the clones
10300 now. The clones are used directly in overload resolution. */
10301 adjust_clone_args (decl1);
10302
b35d4555
MM
10303 /* Sometimes we don't notice that a function is a static member, and
10304 build a METHOD_TYPE for it. Fix that up now. */
10305 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
10306 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
10307 {
3afb32a4 10308 revert_static_member_fn (decl1);
b35d4555
MM
10309 ctype = NULL_TREE;
10310 }
8d08fdba 10311
f181d4ae
MM
10312 /* Set up current_class_type, and enter the scope of the class, if
10313 appropriate. */
10314 if (ctype)
14d22dd6 10315 push_nested_class (ctype);
f181d4ae 10316 else if (DECL_STATIC_FUNCTION_P (decl1))
14d22dd6 10317 push_nested_class (DECL_CONTEXT (decl1));
f181d4ae
MM
10318
10319 /* Now that we have entered the scope of the class, we must restore
10320 the bindings for any template parameters surrounding DECL1, if it
10321 is an inline member template. (Order is important; consider the
10322 case where a template parameter has the same name as a field of
10323 the class.) It is not until after this point that
10324 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
a8f73d4b 10325 if (flags & SF_INCLASS_INLINE)
f181d4ae
MM
10326 maybe_begin_member_template_processing (decl1);
10327
56cb9733 10328 /* Effective C++ rule 15. */
9188c363 10329 if (warn_ecpp
596ea4e5 10330 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9188c363 10331 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
b323323f 10332 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
9188c363
MM
10333
10334 /* Make the init_value nonzero so pushdecl knows this is not tentative.
10335 error_mark_node is replaced below (in poplevel) with the BLOCK. */
b35d4555
MM
10336 if (!DECL_INITIAL (decl1))
10337 DECL_INITIAL (decl1) = error_mark_node;
9188c363 10338
9188c363
MM
10339 /* This function exists in static storage.
10340 (This does not mean `static' in the C sense!) */
10341 TREE_STATIC (decl1) = 1;
10342
10343 /* We must call push_template_decl after current_class_type is set
10344 up. (If we are processing inline definitions after exiting a
10345 class scope, current_class_type will be NULL_TREE until set above
10346 by push_nested_class.) */
10347 if (processing_template_decl)
11e97737
VR
10348 {
10349 /* FIXME: Handle error_mark_node more gracefully. */
10350 tree newdecl1 = push_template_decl (decl1);
10351 if (newdecl1 != error_mark_node)
0cbd7506 10352 decl1 = newdecl1;
11e97737 10353 }
9188c363 10354
f181d4ae 10355 /* We are now in the scope of the function being defined. */
8d08fdba 10356 current_function_decl = decl1;
f181d4ae 10357
5566b478
MS
10358 /* Save the parm names or decls from this function's declarator
10359 where store_parm_decls will find them. */
4546865e 10360 current_function_parms = DECL_ARGUMENTS (decl1);
8d08fdba 10361
a8f73d4b
MM
10362 /* Make sure the parameter and return types are reasonable. When
10363 you declare a function, these types can be incomplete, but they
10364 must be complete when you define the function. */
c9387915 10365 check_function_type (decl1, current_function_parms);
607c855e
VR
10366 /* Make sure no default arg is missing. */
10367 check_default_args (decl1);
f181d4ae 10368
a8f73d4b
MM
10369 /* Build the return declaration for the function. */
10370 restype = TREE_TYPE (fntype);
e89a6075
JM
10371 /* Promote the value to int before returning it. */
10372 if (c_promoting_integer_type_p (restype))
10373 restype = type_promotes_to (restype);
10374 if (DECL_RESULT (decl1) == NULL_TREE)
a8f73d4b 10375 {
b785f485
RH
10376 tree resdecl;
10377
10378 resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
10379 DECL_ARTIFICIAL (resdecl) = 1;
10380 DECL_IGNORED_P (resdecl) = 1;
10381 DECL_RESULT (decl1) = resdecl;
10382
9804209d 10383 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
5566b478 10384 }
a8f73d4b
MM
10385
10386 /* Initialize RTL machinery. We cannot do this until
10387 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
10388 even when processing a template; this is how we get
c00996a3
JM
10389 CFUN set up, and our per-function variables initialized.
10390 FIXME factor out the non-RTL stuff. */
a8f73d4b 10391 bl = current_binding_level;
4985cde3 10392 allocate_struct_function (decl1);
ff955512 10393 current_binding_level = bl;
a8f73d4b
MM
10394
10395 /* Even though we're inside a function body, we still don't want to
10396 call expand_expr to calculate the size of a variable-sized array.
10397 We haven't necessarily assigned RTL to all variables yet, so it's
10398 not safe to try to expand expressions involving them. */
01d939e8 10399 cfun->x_dont_save_pending_sizes_p = 1;
a8f73d4b 10400
f444e36b 10401 /* Start the statement-tree, start the tree now. */
325c3691 10402 DECL_SAVED_TREE (decl1) = push_stmt_list ();
6f80451c 10403
a8f73d4b 10404 /* Let the user know we're compiling this function. */
ea11ca7e 10405 announce_function (decl1);
b7484fbe 10406
878cd289
MS
10407 /* Record the decl so that the function name is defined.
10408 If we already have a decl for this name, and it is a FUNCTION_DECL,
10409 use the old decl. */
a8f73d4b 10410 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
878cd289 10411 {
75650646 10412 /* A specialization is not used to guide overload resolution. */
18f5be99 10413 if (!DECL_FUNCTION_MEMBER_P (decl1)
caf93cb0 10414 && !(DECL_USE_TEMPLATE (decl1) &&
18f5be99 10415 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
b1a19c7c
MM
10416 {
10417 tree olddecl = pushdecl (decl1);
10418
10419 if (olddecl == error_mark_node)
10420 /* If something went wrong when registering the declaration,
10421 use DECL1; we have to have a FUNCTION_DECL to use when
10422 parsing the body of the function. */
10423 ;
10424 else
10425 /* Otherwise, OLDDECL is either a previous declaration of
10426 the same function or DECL1 itself. */
10427 decl1 = olddecl;
10428 }
2c73f9f5 10429 else
b7698cf0 10430 {
a1c65f9f 10431 /* We need to set the DECL_CONTEXT. */
b7698cf0
JM
10432 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
10433 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
b7698cf0 10434 }
878cd289 10435 fntype = TREE_TYPE (decl1);
2ef06beb
MM
10436
10437 /* If #pragma weak applies, mark the decl appropriately now.
10438 The pragma only applies to global functions. Because
10439 determining whether or not the #pragma applies involves
10440 computing the mangled name for the declaration, we cannot
10441 apply the pragma until after we have merged this declaration
10442 with any previous declarations; if the original declaration
10443 has a linkage specification, that specification applies to
10444 the definition as well, and may affect the mangled name. */
10445 if (!DECL_CONTEXT (decl1))
10446 maybe_apply_pragma_weak (decl1);
878cd289 10447 }
5566b478 10448
a8f73d4b 10449 /* Reset these in case the call to pushdecl changed them. */
5566b478 10450 current_function_decl = decl1;
01d939e8 10451 cfun->decl = decl1;
878cd289 10452
78c120b5
MM
10453 /* If we are (erroneously) defining a function that we have already
10454 defined before, wipe out what we knew before. */
e2500fed
GK
10455 if (!DECL_PENDING_INLINE_P (decl1))
10456 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
b35d4555 10457
f444e36b 10458 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
b35d4555
MM
10459 {
10460 /* We know that this was set up by `grokclassfn'. We do not
10461 wait until `store_parm_decls', since evil parse errors may
10462 never get us to that point. Here we keep the consistency
10463 between `current_class_type' and `current_class_ptr'. */
10464 tree t = DECL_ARGUMENTS (decl1);
68642fb6 10465
50bc768d
NS
10466 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
10467 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
68642fb6
UD
10468
10469 cp_function_chain->x_current_class_ref
3e411c3f 10470 = build_indirect_ref (t, NULL);
b35d4555
MM
10471 cp_function_chain->x_current_class_ptr = t;
10472
018fc244
MM
10473 /* Constructors and destructors need to know whether they're "in
10474 charge" of initializing virtual base classes. */
e0fff4b3 10475 t = TREE_CHAIN (t);
454fa7a7 10476 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
e0fff4b3
JM
10477 {
10478 current_in_charge_parm = t;
10479 t = TREE_CHAIN (t);
10480 }
10481 if (DECL_HAS_VTT_PARM_P (decl1))
10482 {
8dc2b103 10483 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
e0fff4b3
JM
10484 current_vtt_parm = t;
10485 }
b35d4555
MM
10486 }
10487
1ef0df47
MM
10488 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
10489 /* Implicitly-defined methods (like the
10490 destructor for a class in which no destructor
10491 is explicitly declared) must not be defined
10492 until their definition is needed. So, we
10493 ignore interface specifications for
10494 compiler-generated functions. */
10495 && !DECL_ARTIFICIAL (decl1));
10496
db5ae43f 10497 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 10498 {
4f1c5b7d 10499 tree ctx = decl_function_context (decl1);
86052cc3 10500
faae18ab
MS
10501 if (DECL_NOT_REALLY_EXTERN (decl1))
10502 DECL_EXTERNAL (decl1) = 0;
86052cc3 10503
79065db2 10504 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
86052cc3
JM
10505 && TREE_PUBLIC (ctx))
10506 /* This is a function in a local class in an extern inline
10507 function. */
10508 comdat_linkage (decl1);
faae18ab 10509 }
8d08fdba
MS
10510 /* If this function belongs to an interface, it is public.
10511 If it belongs to someone else's interface, it is also external.
1f901793 10512 This only affects inlines and template instantiations. */
1ef0df47 10513 else if (!finfo->interface_unknown && honor_interface)
8d08fdba 10514 {
caf93cb0 10515 if (DECL_DECLARED_INLINE_P (decl1)
79065db2 10516 || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 10517 || processing_template_decl)
1f901793
JM
10518 {
10519 DECL_EXTERNAL (decl1)
5d709b00 10520 = (finfo->interface_only
caf93cb0 10521 || (DECL_DECLARED_INLINE_P (decl1)
79065db2 10522 && ! flag_implement_inlines
9c73ec84 10523 && !DECL_VINDEX (decl1)));
1f901793
JM
10524
10525 /* For WIN32 we also want to put these in linkonce sections. */
10526 maybe_make_one_only (decl1);
10527 }
db5ae43f 10528 else
893de33c 10529 DECL_EXTERNAL (decl1) = 0;
db5ae43f 10530 DECL_INTERFACE_KNOWN (decl1) = 1;
4684cd27 10531 /* If this function is in an interface implemented in this file,
c8094d83 10532 make sure that the backend knows to emit this function
4684cd27
MM
10533 here. */
10534 if (!DECL_EXTERNAL (decl1))
10535 mark_needed (decl1);
8d08fdba 10536 }
5d709b00 10537 else if (finfo->interface_unknown && finfo->interface_only
1ef0df47 10538 && honor_interface)
c16c47fb
JM
10539 {
10540 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
5d709b00
ZW
10541 interface, we will have both finfo->interface_unknown and
10542 finfo->interface_only set. In that case, we don't want to
10543 use the normal heuristics because someone will supply a
10544 #pragma implementation elsewhere, and deducing it here would
10545 produce a conflict. */
c16c47fb
JM
10546 comdat_linkage (decl1);
10547 DECL_EXTERNAL (decl1) = 0;
10548 DECL_INTERFACE_KNOWN (decl1) = 1;
10549 DECL_DEFER_OUTPUT (decl1) = 1;
10550 }
8d08fdba 10551 else
a0a33927
MS
10552 {
10553 /* This is a definition, not a reference.
b7484fbe
MS
10554 So clear DECL_EXTERNAL. */
10555 DECL_EXTERNAL (decl1) = 0;
faae18ab 10556
caf93cb0 10557 if ((DECL_DECLARED_INLINE_P (decl1)
79065db2 10558 || DECL_TEMPLATE_INSTANTIATION (decl1))
5566b478
MS
10559 && ! DECL_INTERFACE_KNOWN (decl1)
10560 /* Don't try to defer nested functions for now. */
4f1c5b7d 10561 && ! decl_function_context (decl1))
878cd289
MS
10562 DECL_DEFER_OUTPUT (decl1) = 1;
10563 else
893de33c 10564 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 10565 }
a9aedbc2 10566
0ed5edac
JM
10567 /* Determine the ELF visibility attribute for the function. We must not
10568 do this before calling "pushdecl", as we must allow "duplicate_decls"
10569 to merge any attributes appropriately. We also need to wait until
10570 linkage is set. */
10571 if (!DECL_CLONED_FUNCTION_P (decl1))
10572 determine_visibility (decl1);
10573
ac20c67a 10574 begin_scope (sk_function_parms, decl1);
8d08fdba 10575
5566b478
MS
10576 ++function_depth;
10577
44d10c10
PB
10578 if (DECL_DESTRUCTOR_P (decl1)
10579 || (DECL_CONSTRUCTOR_P (decl1)
10580 && targetm.cxx.cdtor_returns_this ()))
46e8c075 10581 {
44d10c10
PB
10582 cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10583 DECL_CONTEXT (cdtor_label) = current_function_decl;
46e8c075 10584 }
8d08fdba 10585
0ba8a114 10586 start_fname_decls ();
caf93cb0 10587
f444e36b 10588 store_parm_decls (current_function_parms);
058b15c1
MM
10589}
10590
10591
10592/* Like start_preparsed_function, except that instead of a
10593 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
10594
10595 Returns 1 on success. If the DECLARATOR is not suitable for a function
10596 (it defines a datum instead), we return 0, which tells
10597 yyparse to report a parse error. */
10598
10599int
caf93cb0 10600start_function (cp_decl_specifier_seq *declspecs,
62d1db17 10601 const cp_declarator *declarator,
058b15c1
MM
10602 tree attrs)
10603{
10604 tree decl1;
10605
10606 if (have_extern_spec)
10607 {
62d1db17 10608 declspecs->storage_class = sc_extern;
058b15c1
MM
10609 /* This should only be done once on the outermost decl. */
10610 have_extern_spec = false;
10611 }
caf93cb0 10612
058b15c1
MM
10613 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
10614 /* If the declarator is not suitable for a function definition,
10615 cause a syntax error. */
10616 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10617 return 0;
caf93cb0 10618
058b15c1 10619 if (DECL_MAIN_P (decl1))
2cfe82fe
ZW
10620 /* main must return int. grokfndecl should have corrected it
10621 (and issued a diagnostic) if the user got it wrong. */
10622 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
10623 integer_type_node));
058b15c1
MM
10624
10625 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
f444e36b 10626
8d08fdba
MS
10627 return 1;
10628}
10629\f
68d04c67
MM
10630/* Returns true iff an EH_SPEC_BLOCK should be created in the body of
10631 FN. */
10632
10633static bool
10634use_eh_spec_block (tree fn)
10635{
10636 return (flag_exceptions && flag_enforce_eh_specs
10637 && !processing_template_decl
10638 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
10639 /* We insert the EH_SPEC_BLOCK only in the original
10640 function; then, it is copied automatically to the
10641 clones. */
10642 && !DECL_CLONED_FUNCTION_P (fn)
10643 /* Implicitly-generated constructors and destructors have
10644 exception specifications. However, those specifications
10645 are the union of the possible exceptions specified by the
10646 constructors/destructors for bases and members, so no
10647 unallowed exception will ever reach this function. By
10648 not creating the EH_SPEC_BLOCK we save a little memory,
10649 and we avoid spurious warnings about unreachable
10650 code. */
10651 && !DECL_ARTIFICIAL (fn));
10652}
10653
8d08fdba
MS
10654/* Store the parameter declarations into the current function declaration.
10655 This is called after parsing the parameter declarations, before
10656 digesting the body of the function.
10657
10658 Also install to binding contour return value identifier, if any. */
10659
f444e36b 10660static void
11f6b451 10661store_parm_decls (tree current_function_parms)
8d08fdba 10662{
926ce8bd
KH
10663 tree fndecl = current_function_decl;
10664 tree parm;
8d08fdba 10665
8d08fdba
MS
10666 /* This is a chain of any other decls that came in among the parm
10667 declarations. If a parm is declared with enum {foo, bar} x;
10668 then CONST_DECLs for foo and bar are put here. */
10669 tree nonparms = NULL_TREE;
10670
b35d4555 10671 if (current_function_parms)
8d08fdba
MS
10672 {
10673 /* This case is when the function was defined with an ANSI prototype.
10674 The parms already have decls, so we need not do anything here
10675 except record them as in effect
10676 and complain if any redundant old-style parm decls were written. */
10677
b35d4555
MM
10678 tree specparms = current_function_parms;
10679 tree next;
10680
f444e36b 10681 /* Must clear this because it might contain TYPE_DECLs declared
b35d4555 10682 at class level. */
00e8de68 10683 current_binding_level->names = NULL;
8d08fdba 10684
f444e36b 10685 /* If we're doing semantic analysis, then we'll call pushdecl
b35d4555
MM
10686 for each of these. We must do them in reverse order so that
10687 they end in the correct forward order. */
f444e36b 10688 specparms = nreverse (specparms);
5566b478 10689
b35d4555 10690 for (parm = specparms; parm; parm = next)
8d08fdba
MS
10691 {
10692 next = TREE_CHAIN (parm);
10693 if (TREE_CODE (parm) == PARM_DECL)
10694 {
f444e36b
MM
10695 if (DECL_NAME (parm) == NULL_TREE
10696 || TREE_CODE (parm) != VOID_TYPE)
10697 pushdecl (parm);
10698 else
2d01edd7 10699 error ("parameter %qD declared void", parm);
8d08fdba
MS
10700 }
10701 else
10702 {
10703 /* If we find an enum constant or a type tag,
10704 put it aside for the moment. */
10705 TREE_CHAIN (parm) = NULL_TREE;
10706 nonparms = chainon (nonparms, parm);
10707 }
10708 }
10709
f444e36b
MM
10710 /* Get the decls in their original chain order and record in the
10711 function. This is all and only the PARM_DECLs that were
10712 pushed into scope by the loop above. */
10713 DECL_ARGUMENTS (fndecl) = getdecls ();
8d08fdba
MS
10714 }
10715 else
10716 DECL_ARGUMENTS (fndecl) = NULL_TREE;
10717
10718 /* Now store the final chain of decls for the arguments
10719 as the decl-chain of the current lexical scope.
10720 Put the enumerators in as well, at the front so that
10721 DECL_ARGUMENTS is not modified. */
00e8de68 10722 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
eb448459 10723
68d04c67
MM
10724 if (use_eh_spec_block (current_function_decl))
10725 current_eh_spec_block = begin_eh_spec_block ();
8d08fdba
MS
10726}
10727
8d08fdba 10728\f
59026e79
MM
10729/* We have finished doing semantic analysis on DECL, but have not yet
10730 generated RTL for its body. Save away our current state, so that
10731 when we want to generate RTL later we know what to do. */
10732
10733static void
11f6b451 10734save_function_data (tree decl)
59026e79 10735{
e2500fed 10736 struct language_function *f;
59026e79
MM
10737
10738 /* Save the language-specific per-function data so that we can
10739 get it back when we really expand this function. */
50bc768d 10740 gcc_assert (!DECL_PENDING_INLINE_P (decl));
68642fb6 10741
59026e79 10742 /* Make a copy. */
99dd239f 10743 f = GGC_NEW (struct language_function);
e2500fed 10744 memcpy (f, cp_function_chain, sizeof (struct language_function));
59026e79
MM
10745 DECL_SAVED_FUNCTION_DATA (decl) = f;
10746
10747 /* Clear out the bits we don't need. */
325c3691 10748 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
59026e79 10749 f->bindings = NULL;
8e4ce833 10750 f->x_local_names = NULL;
59026e79
MM
10751}
10752
cdd2559c 10753
44d10c10 10754/* Set the return value of the constructor (if present). */
efee38a9
MM
10755
10756static void
11f6b451 10757finish_constructor_body (void)
efee38a9 10758{
44d10c10
PB
10759 tree val;
10760 tree exprstmt;
10761
10762 if (targetm.cxx.cdtor_returns_this ())
10763 {
10764 /* Any return from a constructor will end up here. */
10765 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10766
10767 val = DECL_ARGUMENTS (current_function_decl);
f293ce4b
RS
10768 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10769 DECL_RESULT (current_function_decl), val);
44d10c10
PB
10770 /* Return the address of the object. */
10771 exprstmt = build_stmt (RETURN_EXPR, val);
10772 add_stmt (exprstmt);
10773 }
efee38a9
MM
10774}
10775
cdd2559c
JM
10776/* Do all the processing for the beginning of a destructor; set up the
10777 vtable pointers and cleanups for bases and members. */
10778
10779static void
11f6b451 10780begin_destructor_body (void)
cdd2559c 10781{
cdd2559c
JM
10782 tree compound_stmt;
10783
0e686aa6
MM
10784 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
10785 issued an error message. We still want to try to process the
10786 body of the function, but initialize_vtbl_ptrs will crash if
10787 TYPE_BINFO is NULL. */
10788 if (COMPLETE_TYPE_P (current_class_type))
10789 {
10790 compound_stmt = begin_compound_stmt (0);
10791 /* Make all virtual function table pointers in non-virtual base
10792 classes point to CURRENT_CLASS_TYPE's virtual function
10793 tables. */
10794 initialize_vtbl_ptrs (current_class_ptr);
10795 finish_compound_stmt (compound_stmt);
10796
10797 /* And insert cleanups for our bases and members so that they
10798 will be properly destroyed if we throw. */
10799 push_base_cleanups ();
10800 }
cdd2559c
JM
10801}
10802
ade3dc07
JM
10803/* At the end of every destructor we generate code to delete the object if
10804 necessary. Do that now. */
9bfadf57
MM
10805
10806static void
11f6b451 10807finish_destructor_body (void)
9bfadf57 10808{
9bfadf57
MM
10809 tree exprstmt;
10810
5633b37c
MM
10811 /* Any return from a destructor will end up here; that way all base
10812 and member cleanups will be run when the function returns. */
44d10c10 10813 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
5633b37c 10814
52682a1b
MM
10815 /* In a virtual destructor, we must call delete. */
10816 if (DECL_VIRTUAL_P (current_function_decl))
10817 {
10818 tree if_stmt;
fa72b064 10819 tree virtual_size = cxx_sizeof (current_class_type);
68642fb6 10820
52682a1b 10821 /* [class.dtor]
68642fb6 10822
ade3dc07
JM
10823 At the point of definition of a virtual destructor (including
10824 an implicit definition), non-placement operator delete shall
10825 be looked up in the scope of the destructor's class and if
10826 found shall be accessible and unambiguous. */
63c9a190
MM
10827 exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
10828 virtual_size,
10829 /*global_p=*/false,
10830 /*placement=*/NULL_TREE,
10831 /*alloc_fn=*/NULL_TREE);
298d6f60 10832
52682a1b 10833 if_stmt = begin_if_stmt ();
f293ce4b
RS
10834 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
10835 current_in_charge_parm,
10836 integer_one_node),
52682a1b
MM
10837 if_stmt);
10838 finish_expr_stmt (exprstmt);
10839 finish_then_clause (if_stmt);
325c3691 10840 finish_if_stmt (if_stmt);
52682a1b 10841 }
44d10c10
PB
10842
10843 if (targetm.cxx.cdtor_returns_this ())
10844 {
10845 tree val;
10846
10847 val = DECL_ARGUMENTS (current_function_decl);
f293ce4b
RS
10848 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10849 DECL_RESULT (current_function_decl), val);
44d10c10
PB
10850 /* Return the address of the object. */
10851 exprstmt = build_stmt (RETURN_EXPR, val);
10852 add_stmt (exprstmt);
10853 }
ade3dc07 10854}
9bfadf57 10855
ade3dc07
JM
10856/* Do the necessary processing for the beginning of a function body, which
10857 in this case includes member-initializers, but not the catch clauses of
10858 a function-try-block. Currently, this means opening a binding level
86ad3aa9 10859 for the member-initializers (in a ctor) and member cleanups (in a dtor). */
ade3dc07
JM
10860
10861tree
11f6b451 10862begin_function_body (void)
ade3dc07 10863{
cdd2559c
JM
10864 tree stmt;
10865
86ad3aa9
JM
10866 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
10867 return NULL_TREE;
10868
b5856475
JM
10869 if (processing_template_decl)
10870 /* Do nothing now. */;
10871 else
10872 /* Always keep the BLOCK node associated with the outermost pair of
10873 curly braces of a function. These are needed for correct
10874 operation of dwarfout.c. */
ac20c67a 10875 keep_next_level (true);
b5856475 10876
325c3691 10877 stmt = begin_compound_stmt (BCS_FN_BODY);
cdd2559c
JM
10878
10879 if (processing_template_decl)
10880 /* Do nothing now. */;
cdd2559c
JM
10881 else if (DECL_DESTRUCTOR_P (current_function_decl))
10882 begin_destructor_body ();
10883
ade3dc07 10884 return stmt;
9bfadf57
MM
10885}
10886
ade3dc07
JM
10887/* Do the processing for the end of a function body. Currently, this means
10888 closing out the cleanups for fully-constructed bases and members, and in
10889 the case of the destructor, deleting the object if desired. Again, this
10890 is only meaningful for [cd]tors, since they are the only functions where
10891 there is a significant distinction between the main body and any
10892 function catch clauses. Handling, say, main() return semantics here
10893 would be wrong, as flowing off the end of a function catch clause for
10894 main() would also need to return 0. */
10895
10896void
11f6b451 10897finish_function_body (tree compstmt)
ade3dc07 10898{
86ad3aa9
JM
10899 if (compstmt == NULL_TREE)
10900 return;
10901
5633b37c 10902 /* Close the block. */
7a3397c7 10903 finish_compound_stmt (compstmt);
ade3dc07
JM
10904
10905 if (processing_template_decl)
10906 /* Do nothing now. */;
10907 else if (DECL_CONSTRUCTOR_P (current_function_decl))
10908 finish_constructor_body ();
10909 else if (DECL_DESTRUCTOR_P (current_function_decl))
10910 finish_destructor_body ();
caf93cb0 10911}
ade3dc07 10912
86ad3aa9
JM
10913/* Given a function, returns the BLOCK corresponding to the outermost level
10914 of curly braces, skipping the artificial block created for constructor
10915 initializers. */
10916
10917static tree
10918outer_curly_brace_block (tree fndecl)
10919{
10920 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
10921 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
10922 /* Skip the artificial function body block. */
10923 block = BLOCK_SUBBLOCKS (block);
10924 return block;
10925}
10926
8d08fdba
MS
10927/* Finish up a function declaration and compile that function
10928 all the way to assembler language output. The free the storage
10929 for the function definition.
10930
68642fb6 10931 FLAGS is a bitwise or of the following values:
f181d4ae
MM
10932 2 - INCLASS_INLINE
10933 We just finished processing the body of an in-class inline
10934 function definition. (This processing will have taken place
87e3dbc9 10935 after the class definition is complete.) */
8d08fdba 10936
4d6abc1c 10937tree
11f6b451 10938finish_function (int flags)
8d08fdba 10939{
926ce8bd 10940 tree fndecl = current_function_decl;
8d08fdba 10941 tree fntype, ctype = NULL_TREE;
f181d4ae 10942 int inclass_inline = (flags & 2) != 0;
87e3dbc9 10943 int nested;
8d08fdba
MS
10944
10945 /* When we get some parse errors, we can end up without a
10946 current_function_decl, so cope. */
10947 if (fndecl == NULL_TREE)
4d6abc1c 10948 return error_mark_node;
8d08fdba 10949
9aad8f83
MA
10950 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
10951 && DECL_VIRTUAL_P (fndecl)
10952 && !processing_template_decl)
10953 {
10954 tree fnclass = DECL_CONTEXT (fndecl);
10955 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
10956 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
10957 }
10958
87e3dbc9 10959 nested = function_depth > 1;
8d08fdba
MS
10960 fntype = TREE_TYPE (fndecl);
10961
9bfadf57
MM
10962 /* TREE_READONLY (fndecl) = 1;
10963 This caused &foo to be of type ptr-to-const-function
10964 which then got a warning when stored in a ptr-to-function variable. */
8d08fdba 10965
50bc768d 10966 gcc_assert (building_stmt_tree ());
caf93cb0 10967
db9b2174
MM
10968 /* For a cloned function, we've already got all the code we need;
10969 there's no need to add any extra bits. */
f444e36b 10970 if (!DECL_CLONED_FUNCTION_P (fndecl))
8d08fdba 10971 {
ade3dc07 10972 if (DECL_MAIN_P (current_function_decl))
efee38a9 10973 {
43e05e45
SB
10974 tree stmt;
10975
10976 /* Make it so that `main' always returns 0 by default (or
10977 1 for VMS). */
08c7ae5a 10978#if VMS_TARGET
43e05e45 10979 stmt = finish_return_stmt (integer_one_node);
efee38a9 10980#else
43e05e45 10981 stmt = finish_return_stmt (integer_zero_node);
efee38a9 10982#endif
43e05e45
SB
10983 /* Hack. We don't want the middle-end to warn that this
10984 return is unreachable, so put the statement on the
10985 special line 0. */
176a0aad
PB
10986#ifdef USE_MAPPED_LOCATION
10987 SET_EXPR_LOCATION (stmt, UNKNOWN_LOCATION);
10988#else
43e05e45 10989 annotate_with_file_line (stmt, input_filename, 0);
176a0aad 10990#endif
efee38a9 10991 }
87e3dbc9 10992
68d04c67 10993 if (use_eh_spec_block (current_function_decl))
52a11cbf
RH
10994 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
10995 (TREE_TYPE (current_function_decl)),
10996 current_eh_spec_block);
5566b478 10997 }
68642fb6 10998
558475f0 10999 /* If we're saving up tree structure, tie off the function now. */
325c3691
RH
11000 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
11001
11002 finish_fname_decls ();
8d2733ca 11003
b2dd096b
MM
11004 /* If this function can't throw any exceptions, remember that. */
11005 if (!processing_template_decl
11006 && !cp_function_chain->can_throw
11007 && !flag_non_call_exceptions)
11008 TREE_NOTHROW (fndecl) = 1;
11009
8d08fdba
MS
11010 /* This must come after expand_function_end because cleanups might
11011 have declarations (from inline functions) that need to go into
11012 this function's blocks. */
caf93cb0 11013
7437519c
ZW
11014 /* If the current binding level isn't the outermost binding level
11015 for this function, either there is a bug, or we have experienced
11016 syntax errors and the statement tree is malformed. */
a7e8c268 11017 if (current_binding_level->kind != sk_function_parms)
7437519c
ZW
11018 {
11019 /* Make sure we have already experienced errors. */
8dc2b103 11020 gcc_assert (errorcount);
7437519c
ZW
11021
11022 /* Throw away the broken statement tree and extra binding
0cbd7506 11023 levels. */
5882f0f3 11024 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
7437519c 11025
a7e8c268 11026 while (current_binding_level->kind != sk_function_parms)
7437519c 11027 {
a7e8c268 11028 if (current_binding_level->kind == sk_class)
7437519c
ZW
11029 pop_nested_class ();
11030 else
11031 poplevel (0, 0, 0);
11032 }
11033 }
f444e36b 11034 poplevel (1, 0, 1);
8d08fdba 11035
4985cde3
RH
11036 /* Statements should always be full-expressions at the outermost set
11037 of curly braces for a function. */
50bc768d 11038 gcc_assert (stmts_are_full_exprs_p ());
4985cde3 11039
6de9cd9a
DN
11040 /* Set up the named return value optimization, if we can. Candidate
11041 variables are selected in check_return_value. */
07b2f2fd
JM
11042 if (current_function_return_value)
11043 {
11044 tree r = current_function_return_value;
35e939ae
JM
11045 tree outer;
11046
07b2f2fd 11047 if (r != error_mark_node
35e939ae
JM
11048 /* This is only worth doing for fns that return in memory--and
11049 simpler, since we don't have to worry about promoted modes. */
61f71b34 11050 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
35e939ae
JM
11051 /* Only allow this for variables declared in the outer scope of
11052 the function so we know that their lifetime always ends with a
11053 return; see g++.dg/opt/nrv6.C. We could be more flexible if
11054 we were to do this optimization in tree-ssa. */
86ad3aa9 11055 && (outer = outer_curly_brace_block (fndecl))
325c3691 11056 && chain_member (r, BLOCK_VARS (outer)))
6de9cd9a
DN
11057 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
11058
11059 current_function_return_value = NULL_TREE;
07b2f2fd
JM
11060 }
11061
a8f73d4b 11062 /* Remember that we were in class scope. */
db5ae43f 11063 if (current_class_name)
a8f73d4b 11064 ctype = current_class_type;
db5ae43f 11065
1caa11d3
MM
11066 /* Must mark the RESULT_DECL as being in this function. */
11067 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
11068
11069 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
11070 to the FUNCTION_DECL node itself. */
11071 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
11072
59026e79 11073 /* Save away current state, if appropriate. */
f444e36b 11074 if (!processing_template_decl)
59026e79
MM
11075 save_function_data (fndecl);
11076
efe49da0 11077 /* Complain if there's just no return statement. */
46cfb101 11078 if (warn_return_type
efe49da0 11079 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
c1b83cc9 11080 && !dependent_type_p (TREE_TYPE (fntype))
57d5032b 11081 && !current_function_returns_value && !current_function_returns_null
efe49da0
JM
11082 /* Don't complain if we abort or throw. */
11083 && !current_function_returns_abnormally
55e99d52 11084 && !DECL_NAME (DECL_RESULT (fndecl))
46cfb101 11085 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
efe49da0 11086 inline function, as we might never be compiled separately. */
44d10c10
PB
11087 && (DECL_INLINE (fndecl) || processing_template_decl)
11088 /* Structor return values (if any) are set by the compiler. */
11089 && !DECL_CONSTRUCTOR_P (fndecl)
11090 && !DECL_DESTRUCTOR_P (fndecl))
b323323f 11091 warning (OPT_Wreturn_type, "no return statement in function returning non-void");
4985cde3 11092
6de9cd9a
DN
11093 /* Store the end of the function, so that we get good line number
11094 info for the epilogue. */
11095 cfun->function_end_locus = input_location;
11096
11097 /* Genericize before inlining. */
11098 if (!processing_template_decl)
11099 {
37e6d6fe 11100 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
5a508662 11101 cp_genericize (fndecl);
37e6d6fe
JH
11102 /* Clear out the bits we don't need. */
11103 f->x_current_class_ptr = NULL;
11104 f->x_current_class_ref = NULL;
11105 f->x_eh_spec_block = NULL;
11106 f->x_in_charge_parm = NULL;
11107 f->x_vtt_parm = NULL;
11108 f->x_return_value = NULL;
11109 f->bindings = NULL;
6de9cd9a
DN
11110
11111 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
11112 c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
11113 }
37e6d6fe
JH
11114 /* Clear out the bits we don't need. */
11115 local_names = NULL;
6de9cd9a
DN
11116
11117 /* We're leaving the context of this function, so zap cfun. It's still in
11118 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
f444e36b 11119 cfun = NULL;
c1f927e8 11120 current_function_decl = NULL;
a8f73d4b 11121
27631dae 11122 /* If this is an in-class inline definition, we may have to pop the
a8f73d4b
MM
11123 bindings for the template parameters that we added in
11124 maybe_begin_member_template_processing when start_function was
11125 called. */
11126 if (inclass_inline)
11127 maybe_end_member_template_processing ();
11128
11129 /* Leave the scope of the class. */
11130 if (ctype)
11131 pop_nested_class ();
5566b478
MS
11132
11133 --function_depth;
8d08fdba 11134
4d6abc1c 11135 /* Clean up. */
28cbf42c 11136 if (! nested)
1f8f4a0b
MM
11137 /* Let the error reporting routines know that we're outside a
11138 function. For a nested function, this value is used in
b03e38e1 11139 cxx_pop_function_context and then reset via pop_function_context. */
1f8f4a0b 11140 current_function_decl = NULL_TREE;
4d6abc1c
MM
11141
11142 return fndecl;
8d08fdba
MS
11143}
11144\f
11145/* Create the FUNCTION_DECL for a function definition.
8d08fdba
MS
11146 DECLSPECS and DECLARATOR are the parts of the declaration;
11147 they describe the return type and the name of the function,
11148 but twisted together in a fashion that parallels the syntax of C.
11149
11150 This function creates a binding context for the function body
11151 as well as setting up the FUNCTION_DECL in current_function_decl.
11152
11153 Returns a FUNCTION_DECL on success.
11154
11155 If the DECLARATOR is not suitable for a function (it defines a datum
11156 instead), we return 0, which tells yyparse to report a parse error.
11157
11158 May return void_type_node indicating that this method is actually
11159 a friend. See grokfield for more details.
11160
11161 Came here with a `.pushlevel' .
11162
11163 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
11164 CHANGES TO CODE IN `grokfield'. */
e92cc029 11165
8d08fdba 11166tree
caf93cb0 11167start_method (cp_decl_specifier_seq *declspecs,
0cbd7506 11168 const cp_declarator *declarator, tree attrlist)
8d08fdba 11169{
c11b6f21 11170 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
91d231cb 11171 &attrlist);
8d08fdba 11172
a723baf1
MM
11173 if (fndecl == error_mark_node)
11174 return error_mark_node;
11175
11176 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
11177 {
11178 error ("invalid member function declaration");
11179 return error_mark_node;
11180 }
8d08fdba 11181
195a5def
IR
11182 if (attrlist)
11183 cplus_decl_attributes (&fndecl, attrlist, 0);
11184
8d08fdba 11185 /* Pass friends other than inline friend functions back. */
a1774733 11186 if (fndecl == void_type_node)
8d08fdba
MS
11187 return fndecl;
11188
8d08fdba
MS
11189 if (DECL_IN_AGGR_P (fndecl))
11190 {
58ec3cc5 11191 if (DECL_CONTEXT (fndecl)
6d69fe27 11192 && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
2d01edd7 11193 error ("%qD is already defined in class %qT", fndecl,
58ec3cc5 11194 DECL_CONTEXT (fndecl));
8ca4bf25 11195 return error_mark_node;
8d08fdba
MS
11196 }
11197
f3400fe2
JM
11198 check_template_shadow (fndecl);
11199
79065db2 11200 DECL_DECLARED_INLINE_P (fndecl) = 1;
8926095f 11201 if (flag_default_inline)
8d08fdba
MS
11202 DECL_INLINE (fndecl) = 1;
11203
36a117a5
MM
11204 /* We process method specializations in finish_struct_1. */
11205 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
4b0d3cbe
MM
11206 {
11207 fndecl = push_template_decl (fndecl);
11208 if (fndecl == error_mark_node)
11209 return fndecl;
11210 }
a0a33927 11211
8d08fdba
MS
11212 if (! DECL_FRIEND_P (fndecl))
11213 {
8d08fdba
MS
11214 if (TREE_CHAIN (fndecl))
11215 {
11216 fndecl = copy_node (fndecl);
11217 TREE_CHAIN (fndecl) = NULL_TREE;
11218 }
8d08fdba
MS
11219 }
11220
d174af6c 11221 finish_decl (fndecl, NULL_TREE, NULL_TREE);
8d08fdba 11222
f4f206f4 11223 /* Make a place for the parms. */
ac20c67a 11224 begin_scope (sk_function_parms, fndecl);
68642fb6 11225
8d08fdba
MS
11226 DECL_IN_AGGR_P (fndecl) = 1;
11227 return fndecl;
11228}
11229
11230/* Go through the motions of finishing a function definition.
11231 We don't compile this method until after the whole class has
11232 been processed.
11233
11234 FINISH_METHOD must return something that looks as though it
11235 came from GROKFIELD (since we are defining a method, after all).
11236
11237 This is called after parsing the body of the function definition.
11238 STMTS is the chain of statements that makes up the function body.
11239
11240 DECL is the ..._DECL that `start_method' provided. */
11241
11242tree
11f6b451 11243finish_method (tree decl)
8d08fdba 11244{
926ce8bd 11245 tree fndecl = decl;
8d08fdba 11246 tree old_initial;
8d08fdba 11247
926ce8bd 11248 tree link;
8d08fdba 11249
a1774733 11250 if (decl == void_type_node)
8d08fdba
MS
11251 return decl;
11252
11253 old_initial = DECL_INITIAL (fndecl);
11254
11255 /* Undo the level for the parms (from start_method).
11256 This is like poplevel, but it causes nothing to be
11257 saved. Saving information here confuses symbol-table
11258 output routines. Besides, this information will
11259 be correctly output when this method is actually
11260 compiled. */
11261
11262 /* Clear out the meanings of the local variables of this level;
11263 also record in each decl which block it belongs to. */
11264
11265 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
11266 {
11267 if (DECL_NAME (link) != NULL_TREE)
d8f8dca1 11268 pop_binding (DECL_NAME (link), link);
50bc768d 11269 gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
8d08fdba
MS
11270 DECL_CONTEXT (link) = NULL_TREE;
11271 }
11272
8d08fdba
MS
11273 poplevel (0, 0, 0);
11274
11275 DECL_INITIAL (fndecl) = old_initial;
11276
11277 /* We used to check if the context of FNDECL was different from
11278 current_class_type as another way to get inside here. This didn't work
11279 for String.cc in libg++. */
11280 if (DECL_FRIEND_P (fndecl))
11281 {
d4e6fecb 11282 VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
585b44d3 11283 fndecl);
8d08fdba
MS
11284 decl = void_type_node;
11285 }
11286
11287 return decl;
11288}
11289\f
0154eaa8
MM
11290
11291/* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
11292 we can lay it out later, when and if its type becomes complete. */
8d08fdba
MS
11293
11294void
11f6b451 11295maybe_register_incomplete_var (tree var)
8d08fdba 11296{
50bc768d 11297 gcc_assert (TREE_CODE (var) == VAR_DECL);
8d08fdba 11298
0154eaa8 11299 /* Keep track of variables with incomplete types. */
caf93cb0 11300 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
0154eaa8 11301 && DECL_EXTERNAL (var))
70adf8a9 11302 {
0154eaa8 11303 tree inner_type = TREE_TYPE (var);
caf93cb0 11304
0154eaa8
MM
11305 while (TREE_CODE (inner_type) == ARRAY_TYPE)
11306 inner_type = TREE_TYPE (inner_type);
11307 inner_type = TYPE_MAIN_VARIANT (inner_type);
caf93cb0 11308
0154eaa8
MM
11309 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
11310 /* RTTI TD entries are created while defining the type_info. */
11311 || (TYPE_LANG_SPECIFIC (inner_type)
11312 && TYPE_BEING_DEFINED (inner_type)))
11313 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
70adf8a9 11314 }
0154eaa8 11315}
70adf8a9 11316
0154eaa8
MM
11317/* Called when a class type (given by TYPE) is defined. If there are
11318 any existing VAR_DECLs whose type hsa been completed by this
11319 declaration, update them now. */
70adf8a9 11320
0154eaa8 11321void
11f6b451 11322complete_vars (tree type)
0154eaa8
MM
11323{
11324 tree *list = &incomplete_vars;
11325
50bc768d 11326 gcc_assert (CLASS_TYPE_P (type));
caf93cb0 11327 while (*list)
0154eaa8
MM
11328 {
11329 if (same_type_p (type, TREE_PURPOSE (*list)))
70adf8a9 11330 {
0154eaa8 11331 tree var = TREE_VALUE (*list);
67935995 11332 tree type = TREE_TYPE (var);
c740732f
MM
11333 /* Complete the type of the variable. The VAR_DECL itself
11334 will be laid out in expand_expr. */
67935995
MM
11335 complete_type (type);
11336 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
0154eaa8
MM
11337 /* Remove this entry from the list. */
11338 *list = TREE_CHAIN (*list);
f30432d7
MS
11339 }
11340 else
0154eaa8 11341 list = &TREE_CHAIN (*list);
f30432d7 11342 }
7fb213d8
GB
11343
11344 /* Check for pending declarations which may have abstract type. */
11345 complete_type_check_abstract (type);
8d08fdba
MS
11346}
11347
86f45d2c
MM
11348/* If DECL is of a type which needs a cleanup, build that cleanup
11349 here. */
e92cc029 11350
86f45d2c 11351tree
11f6b451 11352cxx_maybe_build_cleanup (tree decl)
8d08fdba
MS
11353{
11354 tree type = TREE_TYPE (decl);
86f45d2c 11355
834c6dff 11356 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8d08fdba 11357 {
80048418 11358 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
8d08fdba 11359 tree rval;
5775a06a
NS
11360 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
11361 && CLASSTYPE_VBASECLASSES (type));
8d08fdba 11362
8d08fdba
MS
11363 if (TREE_CODE (type) == ARRAY_TYPE)
11364 rval = decl;
11365 else
11366 {
dffd7eb6 11367 cxx_mark_addressable (decl);
8d08fdba
MS
11368 rval = build_unary_op (ADDR_EXPR, decl, 0);
11369 }
11370
11371 /* Optimize for space over speed here. */
5775a06a 11372 if (!has_vbases || flag_expensive_optimizations)
8d08fdba
MS
11373 flags |= LOOKUP_NONVIRTUAL;
11374
86f45d2c
MM
11375 rval = build_delete (TREE_TYPE (rval), rval,
11376 sfk_complete_destructor, flags, 0);
8d08fdba 11377
8d08fdba
MS
11378 return rval;
11379 }
6e4ae815 11380 return NULL_TREE;
8d08fdba
MS
11381}
11382\f
558475f0 11383/* When a stmt has been parsed, this function is called. */
8d08fdba
MS
11384
11385void
11f6b451 11386finish_stmt (void)
8d08fdba 11387{
8d08fdba
MS
11388}
11389
3afb32a4
MM
11390/* DECL was originally constructed as a non-static member function,
11391 but turned out to be static. Update it accordingly. */
700f8a87 11392
8857f91e 11393void
11f6b451 11394revert_static_member_fn (tree decl)
8d08fdba 11395{
700f8a87 11396 tree tmp;
3afb32a4
MM
11397 tree function = TREE_TYPE (decl);
11398 tree args = TYPE_ARG_TYPES (function);
8d08fdba 11399
89d684bb 11400 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
91063b51 11401 != TYPE_UNQUALIFIED)
c4f73174 11402 error ("static member function %q#D declared with type qualifiers", decl);
f30432d7 11403
700f8a87
MS
11404 args = TREE_CHAIN (args);
11405 tmp = build_function_type (TREE_TYPE (function), args);
89d684bb 11406 tmp = build_qualified_type (tmp, cp_type_quals (function));
f30432d7 11407 tmp = build_exception_variant (tmp,
8d08fdba 11408 TYPE_RAISES_EXCEPTIONS (function));
3afb32a4
MM
11409 TREE_TYPE (decl) = tmp;
11410 if (DECL_ARGUMENTS (decl))
11411 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
11412 DECL_STATIC_FUNCTION_P (decl) = 1;
8d08fdba 11413}
a4443a08 11414
68642fb6
UD
11415/* Initialize the variables used during compilation of a C++
11416 function. */
db5ae43f 11417
b03e38e1 11418void
11f6b451 11419cxx_push_function_context (struct function * f)
99dccabc 11420{
99dd239f 11421 struct language_function *p = GGC_CNEW (struct language_function);
e2500fed 11422 f->language = p;
db5ae43f 11423
f1dedc31
MM
11424 /* Whenever we start a new function, we destroy temporaries in the
11425 usual way. */
ae499cce 11426 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4985cde3
RH
11427
11428 if (f->decl)
11429 {
11430 tree fn = f->decl;
11431
4985cde3
RH
11432 if (DECL_SAVED_FUNCTION_DATA (fn))
11433 {
11434 /* If we already parsed this function, and we're just expanding it
11435 now, restore saved state. */
11436 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
11437
4985cde3 11438 /* We don't need the saved data anymore. Unless this is an inline
caf93cb0 11439 function; we need the named return value info for
7740f00d 11440 declare_return_variable. */
4985cde3
RH
11441 if (! DECL_INLINE (fn))
11442 DECL_SAVED_FUNCTION_DATA (fn) = NULL;
11443 }
11444 }
db5ae43f
MS
11445}
11446
a8f73d4b
MM
11447/* Free the language-specific parts of F, now that we've finished
11448 compiling the function. */
db5ae43f 11449
b03e38e1 11450void
11f6b451 11451cxx_pop_function_context (struct function * f)
db5ae43f 11452{
99dccabc 11453 f->language = 0;
db5ae43f 11454}
ebfc180f 11455
e2500fed
GK
11456/* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11457 one of the language-independent trees. */
4519c0a8 11458
e2500fed 11459enum cp_tree_node_structure_enum
11f6b451 11460cp_tree_node_structure (union lang_tree_node * t)
4519c0a8 11461{
e2500fed 11462 switch (TREE_CODE (&t->generic))
4519c0a8 11463 {
a723baf1 11464 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
e2500fed 11465 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
e2500fed
GK
11466 case OVERLOAD: return TS_CP_OVERLOAD;
11467 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
406d77a4 11468 case TINST_LEVEL: return TS_CP_TINST_LEVEL;
e2500fed 11469 case PTRMEM_CST: return TS_CP_PTRMEM;
0cbd7506 11470 case BASELINK: return TS_CP_BASELINK;
e2500fed 11471 default: return TS_CP_GENERIC;
4519c0a8
MM
11472 }
11473}
5fd8e536 11474
eaa7c03f
JM
11475/* Build the void_list_node (void_type_node having been created). */
11476tree
11f6b451 11477build_void_list_node (void)
eaa7c03f
JM
11478{
11479 tree t = build_tree_list (NULL_TREE, void_type_node);
eaa7c03f
JM
11480 return t;
11481}
11482
6de9cd9a 11483bool
11f6b451 11484cp_missing_noreturn_ok_p (tree decl)
d363e7bf
AJ
11485{
11486 /* A missing noreturn is ok for the `main' function. */
92643fea 11487 return DECL_MAIN_P (decl);
d363e7bf 11488}
e2500fed 11489
c18a5b6c
MM
11490/* Return the COMDAT group into which DECL should be placed. */
11491
11492const char *
11493cxx_comdat_group (tree decl)
11494{
11495 tree name;
11496
11497 /* Virtual tables, construction virtual tables, and virtual table
11498 tables all go in a single COMDAT group, named after the primary
11499 virtual table. */
11500 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
11501 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
11502 /* For all other DECLs, the COMDAT group is the mangled name of the
11503 declaration itself. */
11504 else
5591e5f9
JJ
11505 {
11506 while (DECL_THUNK_P (decl))
11507 {
11508 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
11509 into the same section as the target function. In that case
11510 we must return target's name. */
11511 tree target = THUNK_TARGET (decl);
11512 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
11513 && DECL_SECTION_NAME (target) != NULL
11514 && DECL_ONE_ONLY (target))
11515 decl = target;
11516 else
11517 break;
11518 }
11519 name = DECL_ASSEMBLER_NAME (decl);
11520 }
c18a5b6c
MM
11521
11522 return IDENTIFIER_POINTER (name);
11523}
11524
e2500fed 11525#include "gt-cp-decl.h"
This page took 6.92612 seconds and 5 git commands to generate.