]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/decl.c
Daily bump.
[gcc.git] / gcc / cp / decl.c
CommitLineData
3fd5abcf 1/* Process declarations and variables for C++ compiler.
d363e7bf 2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
1ea193c2
ILT
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
4 Free Software Foundation, Inc.
e5e809f4 5 Contributed by Michael Tiemann (tiemann@cygnus.com)
8d08fdba 6
1c313945 7This file is part of GCC.
8d08fdba 8
1c313945 9GCC is free software; you can redistribute it and/or modify
8d08fdba 10it under the terms of the GNU General Public License as published by
e77f031d 11the Free Software Foundation; either version 3, or (at your option)
8d08fdba
MS
12any later version.
13
1c313945 14GCC is distributed in the hope that it will be useful,
8d08fdba
MS
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
e77f031d
NC
20along with GCC; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>. */
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"
e7c41c99 51#include "intl.h"
e2500fed 52#include "debug.h"
22ffcc6f 53#include "timevar.h"
6de9cd9a 54#include "tree-flow.h"
0d83bf5a 55#include "pointer-set.h"
8d08fdba 56
62d1db17 57static tree grokparms (cp_parameter_declarator *, tree *);
11f6b451
NN
58static const char *redeclaration_error_message (tree, tree);
59
11f6b451 60static int decl_jump_unsafe (tree);
11f6b451
NN
61static void require_complete_types_for_parms (tree);
62static int ambi_op_p (enum tree_code);
63static int unary_op_p (enum tree_code);
11f6b451 64static void push_local_name (tree);
7e99327d 65static tree grok_reference_init (tree, tree, tree, tree *);
caf93cb0 66static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
1ff3c076 67 int, int, tree);
11f6b451 68static void record_unknown_type (tree, const char *);
c79efc4d 69static tree builtin_function_1 (tree, tree);
11f6b451
NN
70static tree build_library_fn_1 (tree, enum tree_code, tree);
71static int member_function_or_else (tree, tree, enum overload_flags);
72static void bad_specifiers (tree, const char *, int, int, int, int,
73 int);
11f6b451
NN
74static void check_for_uninitialized_const_var (tree);
75static hashval_t typename_hash (const void *);
76static int typename_compare (const void *, const void *);
11f6b451 77static tree local_variable_p_walkfn (tree *, int *, void *);
11f6b451 78static tree record_builtin_java_type (const char *, int);
461c6fce 79static const char *tag_name (enum tag_types);
29ef83de 80static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
11f6b451 81static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
11f6b451
NN
82static void maybe_deduce_size_from_array_init (tree, tree);
83static void layout_var_decl (tree);
84static void maybe_commonize_var (tree);
7e99327d 85static tree check_initializer (tree, tree, int, tree *);
11f6b451
NN
86static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
87static void save_function_data (tree);
88static void check_function_type (tree, tree);
11f6b451
NN
89static void finish_constructor_body (void);
90static void begin_destructor_body (void);
91static void finish_destructor_body (void);
92static tree create_array_type_for_decl (tree, tree, tree);
93static tree get_atexit_node (void);
94static tree get_dso_handle_node (void);
95static tree start_cleanup_fn (void);
96static void end_cleanup_fn (void);
97static tree cp_make_fname_decl (tree, int);
98static void initialize_predefined_identifiers (void);
caf93cb0 99static tree check_special_function_return_type
11f6b451
NN
100 (special_function_kind, tree, tree);
101static tree push_cp_library_fn (enum tree_code, tree);
102static tree build_cp_library_fn (tree, enum tree_code, tree);
103static void store_parm_decls (tree);
8e3df2de
MM
104static void initialize_local_var (tree, tree);
105static void expand_static_init (tree, tree);
106static tree next_initializable_field (tree);
8d08fdba 107
7f4edbcb 108/* The following symbols are subsumed in the cp_global_trees array, and
68642fb6 109 listed here individually for documentation purposes.
8d08fdba 110
7f4edbcb
BS
111 C++ extensions
112 tree wchar_decl_node;
37c46b43 113
7f4edbcb
BS
114 tree vtable_entry_type;
115 tree delta_type_node;
7f4edbcb 116 tree __t_desc_type_node;
8d08fdba 117
9e62871e 118 tree class_type_node;
7f4edbcb 119 tree unknown_type_node;
8d08fdba 120
7f4edbcb 121 Array type `vtable_entry_type[]'
8d08fdba 122
7f4edbcb
BS
123 tree vtbl_type_node;
124 tree vtbl_ptr_type_node;
8d08fdba 125
2854d3c6 126 Namespaces,
8d08fdba 127
7f4edbcb 128 tree std_node;
2854d3c6 129 tree abi_node;
8d08fdba 130
7f4edbcb
BS
131 A FUNCTION_DECL which can call `abort'. Not necessarily the
132 one that the user will declare, but sufficient to be called
133 by routines that want to abort the program.
8d08fdba 134
7f4edbcb 135 tree abort_fndecl;
8d08fdba 136
7f4edbcb 137 The FUNCTION_DECL for the default `::operator delete'.
2986ae00 138
7f4edbcb 139 tree global_delete_fndecl;
8d08fdba 140
7f4edbcb 141 Used by RTTI
669ec2b4 142 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
3db45ab5 143 tree tinfo_var_id; */
8d08fdba 144
7f4edbcb 145tree cp_global_trees[CPTI_MAX];
8d08fdba 146
2c73f9f5 147/* Indicates that there is a type value in some namespace, although
7f4edbcb 148 that is not necessarily in scope at the moment. */
2c73f9f5 149
00e8de68 150tree global_type_node;
2c73f9f5 151
82a2669e 152/* The node that holds the "name" of the global scope. */
00e8de68 153tree global_scope_name;
82a2669e 154
8e4ce833
JJ
155#define local_names cp_function_chain->x_local_names
156
8d08fdba
MS
157/* A list of objects which have constructors or destructors
158 which reside in the global scope. The decl is stored in
159 the TREE_VALUE slot and the initializer is stored
160 in the TREE_PURPOSE slot. */
161tree static_aggregates;
162
8d08fdba
MS
163/* -- end of C++ */
164
81b3411c 165/* A node for the integer constants 2, and 3. */
d11ad92e 166
81b3411c 167tree integer_two_node, integer_three_node;
8d08fdba 168
1799e5d5
RH
169/* Used only for jumps to as-yet undefined labels, since jumps to
170 defined labels can have their validity checked immediately. */
171
172struct named_label_use_entry GTY(())
173{
174 struct named_label_use_entry *next;
175 /* The binding level to which this entry is *currently* attached.
176 This is initially the binding level in which the goto appeared,
177 but is modified as scopes are closed. */
178 struct cp_binding_level *binding_level;
179 /* The head of the names list that was current when the goto appeared,
180 or the inner scope popped. These are the decls that will *not* be
181 skipped when jumping to the label. */
182 tree names_in_scope;
183 /* The location of the goto, for error reporting. */
184 location_t o_goto_locus;
185 /* True if an OpenMP structured block scope has been closed since
186 the goto appeared. This means that the branch from the label will
187 illegally exit an OpenMP scope. */
188 bool in_omp_scope;
189};
190
6625cdb5
JM
191/* A list of all LABEL_DECLs in the function that have names. Here so
192 we can clear out their names' definitions at the end of the
193 function, and so we can check the validity of jumps to these labels. */
194
1799e5d5 195struct named_label_entry GTY(())
6625cdb5 196{
1799e5d5
RH
197 /* The decl itself. */
198 tree label_decl;
199
200 /* The binding level to which the label is *currently* attached.
201 This is initially set to the binding level in which the label
202 is defined, but is modified as scopes are closed. */
e2500fed 203 struct cp_binding_level *binding_level;
3db45ab5 204 /* The head of the names list that was current when the label was
1799e5d5
RH
205 defined, or the inner scope popped. These are the decls that will
206 be skipped when jumping to the label. */
6625cdb5 207 tree names_in_scope;
1799e5d5
RH
208 /* A tree list of all decls from all binding levels that would be
209 crossed by a backward branch to the label. */
6625cdb5 210 tree bad_decls;
1799e5d5
RH
211
212 /* A list of uses of the label, before the label is defined. */
213 struct named_label_use_entry *uses;
214
215 /* The following bits are set after the label is defined, and are
216 updated as scopes are popped. They indicate that a backward jump
ddd0b831 217 to the label will illegally enter a scope of the given flavor. */
1799e5d5
RH
218 bool in_try_scope;
219 bool in_catch_scope;
220 bool in_omp_scope;
6625cdb5 221};
8d08fdba 222
4519c0a8 223#define named_labels cp_function_chain->x_named_labels
8d08fdba 224\f
b2244c65
MM
225/* The number of function bodies which we are currently processing.
226 (Zero if we are at namespace scope, one inside the body of a
227 function, two inside the body of a function in a local class, etc.) */
228int function_depth;
e23bd218
IR
229
230/* States indicating how grokdeclarator() should handle declspecs marked
231 with __attribute__((deprecated)). An object declared as
232 __attribute__((deprecated)) suppresses warnings of uses of other
233 deprecated items. */
caf93cb0 234
e23bd218
IR
235enum deprecated_states {
236 DEPRECATED_NORMAL,
237 DEPRECATED_SUPPRESS
238};
239
240static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
241
8d08fdba 242\f
0154eaa8
MM
243/* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
244 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
245 time the VAR_DECL was declared, the type was incomplete. */
246
e2500fed 247static GTY(()) tree incomplete_vars;
8d08fdba 248\f
74b846e0
MM
249/* Returns the kind of template specialization we are currently
250 processing, given that it's declaration contained N_CLASS_SCOPES
251 explicit scope qualifications. */
252
253tmpl_spec_kind
11f6b451 254current_tmpl_spec_kind (int n_class_scopes)
74b846e0
MM
255{
256 int n_template_parm_scopes = 0;
257 int seen_specialization_p = 0;
258 int innermost_specialization_p = 0;
e2500fed 259 struct cp_binding_level *b;
74b846e0
MM
260
261 /* Scan through the template parameter scopes. */
caf93cb0
EC
262 for (b = current_binding_level;
263 b->kind == sk_template_parms;
a7e8c268 264 b = b->level_chain)
74b846e0
MM
265 {
266 /* If we see a specialization scope inside a parameter scope,
267 then something is wrong. That corresponds to a declaration
268 like:
269
270 template <class T> template <> ...
271
0e339752 272 which is always invalid since [temp.expl.spec] forbids the
74b846e0
MM
273 specialization of a class member template if the enclosing
274 class templates are not explicitly specialized as well. */
a7e8c268 275 if (b->explicit_spec_p)
74b846e0
MM
276 {
277 if (n_template_parm_scopes == 0)
278 innermost_specialization_p = 1;
279 else
280 seen_specialization_p = 1;
281 }
282 else if (seen_specialization_p == 1)
283 return tsk_invalid_member_spec;
284
285 ++n_template_parm_scopes;
286 }
287
288 /* Handle explicit instantiations. */
289 if (processing_explicit_instantiation)
290 {
291 if (n_template_parm_scopes != 0)
292 /* We've seen a template parameter list during an explicit
293 instantiation. For example:
294
295 template <class T> template void f(int);
296
297 This is erroneous. */
298 return tsk_invalid_expl_inst;
299 else
300 return tsk_expl_inst;
301 }
302
303 if (n_template_parm_scopes < n_class_scopes)
304 /* We've not seen enough template headers to match all the
305 specialized classes present. For example:
306
0cbd7506 307 template <class T> void R<T>::S<T>::f(int);
74b846e0 308
0e339752 309 This is invalid; there needs to be one set of template
74b846e0
MM
310 parameters for each class. */
311 return tsk_insufficient_parms;
312 else if (n_template_parm_scopes == n_class_scopes)
313 /* We're processing a non-template declaration (even though it may
314 be a member of a template class.) For example:
315
0cbd7506 316 template <class T> void S<T>::f(int);
74b846e0 317
39a13be5 318 The `class T' matches the `S<T>', leaving no template headers
74b846e0
MM
319 corresponding to the `f'. */
320 return tsk_none;
321 else if (n_template_parm_scopes > n_class_scopes + 1)
322 /* We've got too many template headers. For example:
323
0cbd7506 324 template <> template <class T> void f (T);
74b846e0
MM
325
326 There need to be more enclosing classes. */
327 return tsk_excessive_parms;
328 else
329 /* This must be a template. It's of the form:
330
0cbd7506 331 template <class T> template <class U> void S<T>::f(U);
74b846e0
MM
332
333 This is a specialization if the innermost level was a
334 specialization; otherwise it's just a definition of the
335 template. */
336 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
8d08fdba
MS
337}
338
74b846e0
MM
339/* Exit the current scope. */
340
341void
11f6b451 342finish_scope (void)
74b846e0
MM
343{
344 poplevel (0, 0, 0);
345}
346
acef433b
MM
347/* When a label goes out of scope, check to see if that label was used
348 in a valid manner, and issue any appropriate warnings or errors. */
349
350static void
11f6b451 351pop_label (tree label, tree old_value)
acef433b 352{
a7e8c268 353 if (!processing_template_decl)
acef433b 354 {
88848bde
MM
355 if (DECL_INITIAL (label) == NULL_TREE)
356 {
5b030314
NS
357 location_t location;
358
dee15844 359 error ("label %q+D used but not defined", label);
93409b8c 360 location = input_location; /* FIXME want (input_filename, (line)0) */
88848bde 361 /* Avoid crashing later. */
5b030314 362 define_label (location, DECL_NAME (label));
88848bde 363 }
c616e51b
MLI
364 else
365 warn_for_unused_label (label);
acef433b 366 }
acef433b 367
6625cdb5 368 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
acef433b
MM
369}
370
0811ea8f 371/* At the end of a function, all labels declared within the function
68642fb6 372 go out of scope. BLOCK is the top-level block for the
acef433b
MM
373 function. */
374
1799e5d5
RH
375static int
376pop_labels_1 (void **slot, void *data)
377{
378 struct named_label_entry *ent = (struct named_label_entry *) *slot;
379 tree block = (tree) data;
380
381 pop_label (ent->label_decl, NULL_TREE);
382
383 /* Put the labels into the "variables" of the top-level block,
384 so debugger can see them. */
385 TREE_CHAIN (ent->label_decl) = BLOCK_VARS (block);
386 BLOCK_VARS (block) = ent->label_decl;
387
388 htab_clear_slot (named_labels, slot);
389
390 return 1;
391}
392
acef433b 393static void
11f6b451 394pop_labels (tree block)
acef433b 395{
1799e5d5 396 if (named_labels)
acef433b 397 {
1799e5d5
RH
398 htab_traverse (named_labels, pop_labels_1, block);
399 named_labels = NULL;
acef433b 400 }
1799e5d5
RH
401}
402
403/* At the end of a block with local labels, restore the outer definition. */
acef433b 404
1799e5d5
RH
405static void
406pop_local_label (tree label, tree old_value)
407{
408 struct named_label_entry dummy;
409 void **slot;
410
411 pop_label (label, old_value);
412
413 dummy.label_decl = label;
414 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
415 htab_clear_slot (named_labels, slot);
acef433b
MM
416}
417
80aa8340
ZL
418/* The following two routines are used to interface to Objective-C++.
419 The binding level is purposely treated as an opaque type. */
420
421void *
422objc_get_current_scope (void)
423{
424 return current_binding_level;
425}
426
427/* The following routine is used by the NeXT-style SJLJ exceptions;
428 variables get marked 'volatile' so as to not be clobbered by
f749f3c2
ZL
429 _setjmp()/_longjmp() calls. All variables in the current scope,
430 as well as parent scopes up to (but not including) ENCLOSING_BLK
431 shall be thusly marked. */
80aa8340
ZL
432
433void
434objc_mark_locals_volatile (void *enclosing_blk)
435{
436 struct cp_binding_level *scope;
437
438 for (scope = current_binding_level;
e58a9aa1 439 scope && scope != enclosing_blk;
80aa8340
ZL
440 scope = scope->level_chain)
441 {
442 tree decl;
443
444 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
660845bf 445 objc_volatilize_decl (decl);
e58a9aa1
ZL
446
447 /* Do not climb up past the current function. */
448 if (scope->kind == sk_function_parms)
449 break;
80aa8340
ZL
450 }
451}
452
1799e5d5
RH
453/* Update data for defined and undefined labels when leaving a scope. */
454
455static int
456poplevel_named_label_1 (void **slot, void *data)
457{
458 struct named_label_entry *ent = (struct named_label_entry *) *slot;
459 struct cp_binding_level *bl = (struct cp_binding_level *) data;
460 struct cp_binding_level *obl = bl->level_chain;
461
462 if (ent->binding_level == bl)
463 {
464 tree decl;
465
466 for (decl = ent->names_in_scope; decl; decl = TREE_CHAIN (decl))
467 if (decl_jump_unsafe (decl))
468 ent->bad_decls = tree_cons (NULL, decl, ent->bad_decls);
469
470 ent->binding_level = obl;
471 ent->names_in_scope = obl->names;
472 switch (bl->kind)
473 {
474 case sk_try:
475 ent->in_try_scope = true;
476 break;
477 case sk_catch:
478 ent->in_catch_scope = true;
479 break;
480 case sk_omp:
481 ent->in_omp_scope = true;
482 break;
483 default:
484 break;
485 }
486 }
487 else if (ent->uses)
488 {
489 struct named_label_use_entry *use;
490
491 for (use = ent->uses; use ; use = use->next)
492 if (use->binding_level == bl)
493 {
494 use->binding_level = obl;
495 use->names_in_scope = obl->names;
496 if (bl->kind == sk_omp)
497 use->in_omp_scope = true;
498 }
499 }
500
501 return 1;
502}
503
8d08fdba
MS
504/* Exit a binding level.
505 Pop the level off, and restore the state of the identifier-decl mappings
506 that were in effect when this level was entered.
507
508 If KEEP == 1, this level had explicit declarations, so
509 and create a "block" (a BLOCK node) for the level
510 to record its declarations and subblocks for symbol table output.
511
8d08fdba
MS
512 If FUNCTIONBODY is nonzero, this level is the body of a function,
513 so create a block as if KEEP were set and also clear out all
514 label names.
515
516 If REVERSE is nonzero, reverse the order of decls before putting
517 them into the BLOCK. */
518
519tree
11f6b451 520poplevel (int keep, int reverse, int functionbody)
8d08fdba 521{
926ce8bd 522 tree link;
8d08fdba
MS
523 /* The chain of decls was accumulated in reverse order.
524 Put it into forward order, just for cleanliness. */
525 tree decls;
526 int tmp = functionbody;
b35d4555 527 int real_functionbody;
b35d4555 528 tree subblocks;
325c3691 529 tree block;
8d08fdba 530 tree decl;
f181d4ae 531 int leaving_for_scope;
ac20c67a 532 scope_kind kind;
f181d4ae 533
22ffcc6f 534 timevar_push (TV_NAME_LOOKUP);
325c3691
RH
535 restart:
536
537 block = NULL_TREE;
b35d4555 538
50bc768d 539 gcc_assert (current_binding_level->kind != sk_class);
b74a0560 540
ac20c67a 541 real_functionbody = (current_binding_level->kind == sk_cleanup
b35d4555 542 ? ((functionbody = 0), tmp) : functionbody);
b35d4555
MM
543 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
544
50bc768d
NS
545 gcc_assert (!VEC_length(cp_class_binding,
546 current_binding_level->class_shadowed));
8d08fdba 547
536333d4
MM
548 /* We used to use KEEP == 2 to indicate that the new block should go
549 at the beginning of the list of blocks at this binding level,
550 rather than the end. This hack is no longer used. */
50bc768d 551 gcc_assert (keep == 0 || keep == 1);
536333d4 552
ac20c67a 553 if (current_binding_level->keep)
8d08fdba
MS
554 keep = 1;
555
6625cdb5
JM
556 /* Any uses of undefined labels, and any defined labels, now operate
557 under constraints of next binding contour. */
1799e5d5
RH
558 if (cfun && !functionbody && named_labels)
559 htab_traverse (named_labels, poplevel_named_label_1,
560 current_binding_level);
6625cdb5 561
8d08fdba
MS
562 /* Get the decls in the order they were written.
563 Usually current_binding_level->names is in reverse order.
564 But parameter decls were previously put in forward order. */
565
566 if (reverse)
567 current_binding_level->names
568 = decls = nreverse (current_binding_level->names);
569 else
570 decls = current_binding_level->names;
571
8d08fdba
MS
572 /* If there were any declarations or structure tags in that level,
573 or if this level is a function body,
574 create a BLOCK to record them for the life of this function. */
8d08fdba 575 block = NULL_TREE;
f444e36b 576 if (keep == 1 || functionbody)
8d08fdba
MS
577 block = make_node (BLOCK);
578 if (block != NULL_TREE)
579 {
f444e36b
MM
580 BLOCK_VARS (block) = decls;
581 BLOCK_SUBBLOCKS (block) = subblocks;
8d08fdba
MS
582 }
583
584 /* In each subblock, record that this is its superior. */
8d08fdba 585 if (keep >= 0)
87caf699 586 for (link = subblocks; link; link = BLOCK_CHAIN (link))
8d08fdba
MS
587 BLOCK_SUPERCONTEXT (link) = block;
588
f181d4ae
MM
589 /* We still support the old for-scope rules, whereby the variables
590 in a for-init statement were in scope after the for-statement
92bc1323 591 ended. We only use the new rules if flag_new_for_scope is
f181d4ae 592 nonzero. */
68642fb6 593 leaving_for_scope
a7e8c268 594 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
f181d4ae 595
caf93cb0
EC
596 /* Before we remove the declarations first check for unused variables. */
597 if (warn_unused_variable
598 && !processing_template_decl)
599 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
600 if (TREE_CODE (decl) == VAR_DECL
601 && ! TREE_USED (decl)
602 && ! DECL_IN_SYSTEM_HEADER (decl)
603 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
b323323f 604 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
caf93cb0 605
f181d4ae
MM
606 /* Remove declarations for all the DECLs in this level. */
607 for (link = decls; link; link = TREE_CHAIN (link))
608 {
c3783399 609 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
0cbd7506 610 && DECL_NAME (link))
f181d4ae 611 {
90ea9897
MM
612 tree name = DECL_NAME (link);
613 cxx_binding *ob;
f181d4ae
MM
614 tree ns_binding;
615
90ea9897
MM
616 ob = outer_binding (name,
617 IDENTIFIER_BINDING (name),
618 /*class_p=*/true);
619 if (!ob)
620 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
c7dda1e3
MM
621 else
622 ns_binding = NULL_TREE;
623
90ea9897 624 if (ob && ob->scope == current_binding_level->level_chain)
f181d4ae 625 /* We have something like:
68642fb6 626
0cbd7506
MS
627 int i;
628 for (int i; ;);
68642fb6 629
f181d4ae
MM
630 and we are leaving the `for' scope. There's no reason to
631 keep the binding of the inner `i' in this case. */
90ea9897
MM
632 pop_binding (name, link);
633 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
147135cc 634 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
f181d4ae
MM
635 /* Here, we have something like:
636
637 typedef int I;
638
639 void f () {
640 for (int I; ;);
641 }
642
643 We must pop the for-scope binding so we know what's a
644 type and what isn't. */
90ea9897 645 pop_binding (name, link);
e76a2646 646 else
e76a2646 647 {
f181d4ae
MM
648 /* Mark this VAR_DECL as dead so that we can tell we left it
649 there only for backward compatibility. */
650 DECL_DEAD_FOR_LOCAL (link) = 1;
68642fb6 651
517f3315 652 /* Keep track of what should have happened when we
f181d4ae 653 popped the binding. */
90ea9897 654 if (ob && ob->value)
820cc88f
DB
655 {
656 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
657 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
658 }
f181d4ae
MM
659
660 /* Add it to the list of dead variables in the next
661 outermost binding to that we can remove these when we
662 leave that binding. */
663 current_binding_level->level_chain->dead_vars_from_for
664 = tree_cons (NULL_TREE, link,
665 current_binding_level->level_chain->
666 dead_vars_from_for);
667
af6fd53f 668 /* Although we don't pop the cxx_binding, we do clear
147135cc 669 its SCOPE since the scope is going away now. */
caf93cb0 670 IDENTIFIER_BINDING (name)->scope
90ea9897 671 = current_binding_level->level_chain;
e76a2646 672 }
2ee887f2 673 }
68642fb6 674 else
8d6e462b 675 {
8dc2b103 676 tree name;
c8094d83 677
f181d4ae 678 /* Remove the binding. */
0034cf72 679 decl = link;
caf93cb0 680
0034cf72
JM
681 if (TREE_CODE (decl) == TREE_LIST)
682 decl = TREE_VALUE (decl);
8dc2b103 683 name = decl;
c8094d83 684
8dc2b103
NS
685 if (TREE_CODE (name) == OVERLOAD)
686 name = OVL_FUNCTION (name);
caf93cb0 687
8dc2b103
NS
688 gcc_assert (DECL_P (name));
689 pop_binding (DECL_NAME (name), decl);
8d08fdba 690 }
f181d4ae 691 }
8d08fdba 692
f181d4ae
MM
693 /* Remove declarations for any `for' variables from inner scopes
694 that we kept around. */
695 for (link = current_binding_level->dead_vars_from_for;
696 link; link = TREE_CHAIN (link))
d8f8dca1 697 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
2ee887f2 698
f181d4ae
MM
699 /* Restore the IDENTIFIER_TYPE_VALUEs. */
700 for (link = current_binding_level->type_shadowed;
701 link; link = TREE_CHAIN (link))
702 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
acef433b
MM
703
704 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
705 for (link = current_binding_level->shadowed_labels;
68642fb6 706 link;
acef433b 707 link = TREE_CHAIN (link))
1799e5d5 708 pop_local_label (TREE_VALUE (link), TREE_PURPOSE (link));
acef433b 709
f181d4ae
MM
710 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
711 list if a `using' declaration put them there. The debugging
3b426391 712 back ends won't understand OVERLOAD, so we remove them here.
f181d4ae
MM
713 Because the BLOCK_VARS are (temporarily) shared with
714 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
715 popped all the bindings. */
716 if (block)
717 {
718 tree* d;
8d6e462b 719
a06d48ef
JM
720 for (d = &BLOCK_VARS (block); *d; )
721 {
722 if (TREE_CODE (*d) == TREE_LIST)
723 *d = TREE_CHAIN (*d);
724 else
725 d = &TREE_CHAIN (*d);
726 }
8d6e462b 727 }
8d08fdba
MS
728
729 /* If the level being exited is the top level of a function,
730 check over all the labels. */
8d08fdba
MS
731 if (functionbody)
732 {
acef433b
MM
733 /* Since this is the top level block of a function, the vars are
734 the function's parameters. Don't leave them in the BLOCK
735 because they are found in the FUNCTION_DECL instead. */
8d08fdba 736 BLOCK_VARS (block) = 0;
acef433b 737 pop_labels (block);
8d08fdba
MS
738 }
739
ac20c67a 740 kind = current_binding_level->kind;
325c3691
RH
741 if (kind == sk_cleanup)
742 {
743 tree stmt;
744
745 /* If this is a temporary binding created for a cleanup, then we'll
746 have pushed a statement list level. Pop that, create a new
747 BIND_EXPR for the block, and insert it into the stream. */
748 stmt = pop_stmt_list (current_binding_level->statement_list);
749 stmt = c_build_bind_expr (block, stmt);
750 add_stmt (stmt);
751 }
8d08fdba 752
1a6daf15 753 leave_scope ();
8d08fdba 754 if (functionbody)
72c4a4ca
GK
755 {
756 /* The current function is being defined, so its DECL_INITIAL
757 should be error_mark_node. */
758 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
759 DECL_INITIAL (current_function_decl) = block;
760 }
8d08fdba 761 else if (block)
f444e36b
MM
762 current_binding_level->blocks
763 = chainon (current_binding_level->blocks, block);
764
8d08fdba
MS
765 /* If we did not make a block for the level just exited,
766 any blocks made for inner levels
767 (since they cannot be recorded as subblocks in that level)
768 must be carried forward so they will later become subblocks
769 of something else. */
770 else if (subblocks)
536333d4
MM
771 current_binding_level->blocks
772 = chainon (current_binding_level->blocks, subblocks);
8d08fdba 773
d9b2d9da
MM
774 /* Each and every BLOCK node created here in `poplevel' is important
775 (e.g. for proper debugging information) so if we created one
776 earlier, mark it as "used". */
777 if (block)
778 TREE_USED (block) = 1;
779
325c3691 780 /* All temporary bindings created for cleanups are popped silently. */
ac20c67a 781 if (kind == sk_cleanup)
325c3691 782 goto restart;
8d08fdba 783
22ffcc6f 784 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
8d08fdba
MS
785}
786
8d08fdba
MS
787/* Insert BLOCK at the end of the list of subblocks of the
788 current binding level. This is used when a BIND_EXPR is expanded,
789 to handle the BLOCK node inside the BIND_EXPR. */
790
791void
11f6b451 792insert_block (tree block)
8d08fdba
MS
793{
794 TREE_USED (block) = 1;
795 current_binding_level->blocks
796 = chainon (current_binding_level->blocks, block);
797}
798
0aafb128
MM
799/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
800 itself, calling F for each. The DATA is passed to F as well. */
801
00e8de68 802static int
be93747e 803walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
00e8de68
GDR
804{
805 int result = 0;
be93747e 806 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
8d08fdba 807
be93747e 808 result |= (*f) (name_space, data);
8d08fdba 809
00e8de68
GDR
810 for (; current; current = TREE_CHAIN (current))
811 result |= walk_namespaces_r (current, f, data);
fc0e7bf5 812
00e8de68 813 return result;
5566b478
MS
814}
815
00e8de68
GDR
816/* Walk all the namespaces, calling F for each. The DATA is passed to
817 F as well. */
818
819int
820walk_namespaces (walk_namespaces_fn f, void* data)
5566b478 821{
00e8de68 822 return walk_namespaces_r (global_namespace, f, data);
8d08fdba
MS
823}
824
00e8de68
GDR
825/* Call wrapup_globals_declarations for the globals in NAMESPACE. If
826 DATA is non-NULL, this is the last time we will call
827 wrapup_global_declarations for this NAMESPACE. */
39c01e4c 828
00e8de68 829int
be93747e 830wrapup_globals_for_namespace (tree name_space, void* data)
39c01e4c 831{
be93747e 832 struct cp_binding_level *level = NAMESPACE_LEVEL (name_space);
9857866d
KH
833 VEC(tree,gc) *statics = level->static_decls;
834 tree *vec = VEC_address (tree, statics);
835 int len = VEC_length (tree, statics);
00e8de68 836 int last_time = (data != 0);
68642fb6 837
00e8de68 838 if (last_time)
39c01e4c 839 {
00e8de68 840 check_global_declarations (vec, len);
db5f8b93 841 emit_debug_global_declarations (vec, len);
00e8de68 842 return 0;
39c01e4c
MM
843 }
844
00e8de68
GDR
845 /* Write out any globals that need to be output. */
846 return wrapup_global_declarations (vec, len);
39c01e4c
MM
847}
848
00e8de68 849\f
9188c363
MM
850/* In C++, you don't have to write `struct S' to refer to `S'; you
851 can just use `S'. We accomplish this by creating a TYPE_DECL as
852 if the user had written `typedef struct S S'. Create and return
853 the TYPE_DECL for TYPE. */
854
855tree
11f6b451 856create_implicit_typedef (tree name, tree type)
9188c363
MM
857{
858 tree decl;
859
860 decl = build_decl (TYPE_DECL, name, type);
c727aa5e 861 DECL_ARTIFICIAL (decl) = 1;
9188c363
MM
862 /* There are other implicit type declarations, like the one *within*
863 a class that allows you to write `S::S'. We must distinguish
864 amongst these. */
865 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
866 TYPE_NAME (type) = decl;
867
868 return decl;
869}
870
8e4ce833
JJ
871/* Remember a local name for name-mangling purposes. */
872
873static void
11f6b451 874push_local_name (tree decl)
8e4ce833
JJ
875{
876 size_t i, nelts;
877 tree t, name;
878
22ffcc6f 879 timevar_push (TV_NAME_LOOKUP);
8e4ce833
JJ
880
881 name = DECL_NAME (decl);
882
9acaf84a 883 nelts = VEC_length (tree, local_names);
8e4ce833
JJ
884 for (i = 0; i < nelts; i++)
885 {
9acaf84a 886 t = VEC_index (tree, local_names, i);
8e4ce833
JJ
887 if (DECL_NAME (t) == name)
888 {
889 if (!DECL_LANG_SPECIFIC (decl))
890 retrofit_lang_decl (decl);
e2500fed 891 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
8e4ce833
JJ
892 if (DECL_LANG_SPECIFIC (t))
893 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
894 else
895 DECL_DISCRIMINATOR (decl) = 1;
896
9acaf84a 897 VEC_replace (tree, local_names, i, decl);
de94b46c
KG
898 timevar_pop (TV_NAME_LOOKUP);
899 return;
8e4ce833
JJ
900 }
901 }
902
9acaf84a 903 VEC_safe_push (tree, gc, local_names, decl);
22ffcc6f 904 timevar_pop (TV_NAME_LOOKUP);
8e4ce833 905}
8d08fdba
MS
906\f
907/* Subroutine of duplicate_decls: return truthvalue of whether
908 or not types of these decls match.
909
910 For C++, we must compare the parameter list so that `int' can match
911 `int&' in a parameter position, but `int&' is not confused with
912 `const int&'. */
e92cc029 913
6060a796 914int
11f6b451 915decls_match (tree newdecl, tree olddecl)
8d08fdba
MS
916{
917 int types_match;
918
347d73d7
ML
919 if (newdecl == olddecl)
920 return 1;
921
6b4b3deb
MM
922 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
923 /* If the two DECLs are not even the same kind of thing, we're not
924 interested in their types. */
925 return 0;
926
927 if (TREE_CODE (newdecl) == FUNCTION_DECL)
8d08fdba
MS
928 {
929 tree f1 = TREE_TYPE (newdecl);
930 tree f2 = TREE_TYPE (olddecl);
931 tree p1 = TYPE_ARG_TYPES (f1);
932 tree p2 = TYPE_ARG_TYPES (f2);
933
4f1c5b7d 934 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
eb68cb58
MM
935 && ! (DECL_EXTERN_C_P (newdecl)
936 && DECL_EXTERN_C_P (olddecl)))
c5a6fc45
JM
937 return 0;
938
8d08fdba 939 if (TREE_CODE (f1) != TREE_CODE (f2))
0cbd7506 940 return 0;
8d08fdba 941
3bfdc719 942 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8926095f 943 {
8b27e9ef
NS
944 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
945 && (DECL_BUILT_IN (olddecl)
946#ifndef NO_IMPLICIT_EXTERN_C
0cbd7506
MS
947 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
948 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
8b27e9ef
NS
949#endif
950 ))
a28e3c7f
MS
951 {
952 types_match = self_promoting_args_p (p1);
953 if (p1 == void_list_node)
954 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
955 }
8b27e9ef
NS
956#ifndef NO_IMPLICIT_EXTERN_C
957 else if (p1 == NULL_TREE
958 && (DECL_EXTERN_C_P (olddecl)
0cbd7506
MS
959 && DECL_IN_SYSTEM_HEADER (olddecl)
960 && !DECL_CLASS_SCOPE_P (olddecl))
8b27e9ef 961 && (DECL_EXTERN_C_P (newdecl)
0cbd7506
MS
962 && DECL_IN_SYSTEM_HEADER (newdecl)
963 && !DECL_CLASS_SCOPE_P (newdecl)))
a28e3c7f
MS
964 {
965 types_match = self_promoting_args_p (p2);
966 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
967 }
8b27e9ef 968#endif
8926095f 969 else
91063b51 970 types_match = compparms (p1, p2);
8926095f 971 }
8d08fdba
MS
972 else
973 types_match = 0;
974 }
6b4b3deb 975 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
51c184be 976 {
2bb5d995
JM
977 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
978 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
979 return 0;
980
ee935db4
MM
981 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
982 DECL_TEMPLATE_PARMS (olddecl)))
983 return 0;
984
f84b4be9 985 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
ee935db4
MM
986 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
987 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
f84b4be9
JM
988 else
989 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
990 DECL_TEMPLATE_RESULT (newdecl));
51c184be 991 }
8d08fdba
MS
992 else
993 {
91a5bc9f
KL
994 /* Need to check scope for variable declaration (VAR_DECL).
995 For typedef (TYPE_DECL), scope is ignored. */
996 if (TREE_CODE (newdecl) == VAR_DECL
ace4831d
MM
997 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
998 /* [dcl.link]
999 Two declarations for an object with C language linkage
1000 with the same name (ignoring the namespace that qualify
1001 it) that appear in different namespace scopes refer to
1002 the same object. */
1003 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
91a5bc9f
KL
1004 return 0;
1005
8d08fdba
MS
1006 if (TREE_TYPE (newdecl) == error_mark_node)
1007 types_match = TREE_TYPE (olddecl) == error_mark_node;
1008 else if (TREE_TYPE (olddecl) == NULL_TREE)
1009 types_match = TREE_TYPE (newdecl) == NULL_TREE;
a0a33927
MS
1010 else if (TREE_TYPE (newdecl) == NULL_TREE)
1011 types_match = 0;
8d08fdba 1012 else
96d84882
PB
1013 types_match = comptypes (TREE_TYPE (newdecl),
1014 TREE_TYPE (olddecl),
1015 COMPARE_REDECLARATION);
8d08fdba
MS
1016 }
1017
1018 return types_match;
1019}
1020
1021/* If NEWDECL is `static' and an `extern' was seen previously,
24f30ed4 1022 warn about it. OLDDECL is the previous declaration.
8d08fdba
MS
1023
1024 Note that this does not apply to the C++ case of declaring
1025 a variable `extern const' and then later `const'.
1026
8d08fdba
MS
1027 Don't complain about built-in functions, since they are beyond
1028 the user's control. */
1029
a5e6b29b 1030void
11f6b451 1031warn_extern_redeclared_static (tree newdecl, tree olddecl)
8d08fdba 1032{
24f30ed4
MM
1033 tree name;
1034
68642fb6 1035 if (TREE_CODE (newdecl) == TYPE_DECL
655dc6ee 1036 || TREE_CODE (newdecl) == TEMPLATE_DECL
a2a9e21c
GDR
1037 || TREE_CODE (newdecl) == CONST_DECL
1038 || TREE_CODE (newdecl) == NAMESPACE_DECL)
8d08fdba 1039 return;
68642fb6 1040
963d5758
MM
1041 /* Don't get confused by static member functions; that's a different
1042 use of `static'. */
1043 if (TREE_CODE (newdecl) == FUNCTION_DECL
1044 && DECL_STATIC_FUNCTION_P (newdecl))
1045 return;
8d08fdba 1046
24f30ed4
MM
1047 /* If the old declaration was `static', or the new one isn't, then
1048 then everything is OK. */
1049 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1050 return;
1051
1052 /* It's OK to declare a builtin function as `static'. */
1053 if (TREE_CODE (olddecl) == FUNCTION_DECL
1054 && DECL_ARTIFICIAL (olddecl))
1055 return;
1056
8d08fdba 1057 name = DECL_ASSEMBLER_NAME (newdecl);
cbe5f3b3
MLI
1058 permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1059 permerror (input_location, "previous declaration of %q+D", olddecl);
8d08fdba
MS
1060}
1061
e1f0e7a6
MM
1062/* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1063 function templates. If their exception specifications do not
b9704fc5 1064 match, issue a diagnostic. */
e1f0e7a6
MM
1065
1066static void
1067check_redeclaration_exception_specification (tree new_decl,
1068 tree old_decl)
1069{
1070 tree new_type;
1071 tree old_type;
1072 tree new_exceptions;
1073 tree old_exceptions;
1074
1075 new_type = TREE_TYPE (new_decl);
1076 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1077 old_type = TREE_TYPE (old_decl);
1078 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1079
1080 /* [except.spec]
1081
1082 If any declaration of a function has an exception-specification,
1083 all declarations, including the definition and an explicit
1084 specialization, of that function shall have an
1085 exception-specification with the same set of type-ids. */
1086 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1087 && ! DECL_IS_BUILTIN (old_decl)
1088 && flag_exceptions
3db45ab5 1089 && !comp_except_specs (new_exceptions, old_exceptions,
e1f0e7a6
MM
1090 /*exact=*/true))
1091 {
1092 error ("declaration of %qF throws different exceptions", new_decl);
1093 error ("from previous declaration %q+F", old_decl);
1094 }
1095}
1096
3a47c4e4
AO
1097#define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1098 && lookup_attribute ("gnu_inline", \
1099 DECL_ATTRIBUTES (fn)))
1100
b1a19c7c
MM
1101/* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1102 If the redeclaration is invalid, a diagnostic is issued, and the
1103 error_mark_node is returned. Otherwise, OLDDECL is returned.
8d08fdba 1104
b1a19c7c 1105 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
d63d5d0c
ILT
1106 returned.
1107
1108 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
8d08fdba 1109
b1a19c7c 1110tree
d63d5d0c 1111duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
8d08fdba 1112{
8d08fdba 1113 unsigned olddecl_uid = DECL_UID (olddecl);
d63d5d0c 1114 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
0b60dfe3 1115 int new_defines_function = 0;
50b56799 1116 tree new_template;
5566b478
MS
1117
1118 if (newdecl == olddecl)
b1a19c7c 1119 return olddecl;
8d08fdba 1120
8926095f 1121 types_match = decls_match (newdecl, olddecl);
8d08fdba 1122
8d08fdba
MS
1123 /* If either the type of the new decl or the type of the old decl is an
1124 error_mark_node, then that implies that we have already issued an
1125 error (earlier) for some bogus type specification, and in that case,
1126 it is rather pointless to harass the user with yet more error message
0b60dfe3 1127 about the same declaration, so just pretend the types match here. */
bd6dd845
MS
1128 if (TREE_TYPE (newdecl) == error_mark_node
1129 || TREE_TYPE (olddecl) == error_mark_node)
dc5395cc 1130 return error_mark_node;
68642fb6 1131
97055d5c
AO
1132 if (DECL_P (olddecl)
1133 && TREE_CODE (newdecl) == FUNCTION_DECL
1134 && TREE_CODE (olddecl) == FUNCTION_DECL
1135 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1136 {
1137 if (DECL_DECLARED_INLINE_P (newdecl)
1138 && DECL_UNINLINABLE (newdecl)
1139 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1140 /* Already warned elsewhere. */;
1141 else if (DECL_DECLARED_INLINE_P (olddecl)
1142 && DECL_UNINLINABLE (olddecl)
1143 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1144 /* Already warned. */;
1145 else if (DECL_DECLARED_INLINE_P (newdecl)
1146 && DECL_UNINLINABLE (olddecl)
1147 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1148 {
dee15844
JM
1149 warning (OPT_Wattributes, "function %q+D redeclared as inline",
1150 newdecl);
1151 warning (OPT_Wattributes, "previous declaration of %q+D "
1152 "with attribute noinline", olddecl);
97055d5c
AO
1153 }
1154 else if (DECL_DECLARED_INLINE_P (olddecl)
1155 && DECL_UNINLINABLE (newdecl)
1156 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1157 {
dee15844
JM
1158 warning (OPT_Wattributes, "function %q+D redeclared with "
1159 "attribute noinline", newdecl);
1160 warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1161 olddecl);
97055d5c
AO
1162 }
1163 }
1164
a1c65f9f 1165 /* Check for redeclaration and other discrepancies. */
d22c8596 1166 if (TREE_CODE (olddecl) == FUNCTION_DECL
9f33663b
JM
1167 && DECL_ARTIFICIAL (olddecl))
1168 {
d63d5d0c 1169 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
9f33663b
JM
1170 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1171 {
d63d5d0c
ILT
1172 /* Avoid warnings redeclaring built-ins which have not been
1173 explicitly declared. */
0cbd7506
MS
1174 if (DECL_ANTICIPATED (olddecl))
1175 return NULL_TREE;
d52e4867 1176
9f33663b
JM
1177 /* If you declare a built-in or predefined function name as static,
1178 the old definition is overridden, but optionally warn this was a
1179 bad choice of name. */
1180 if (! TREE_PUBLIC (newdecl))
1181 {
b323323f
LM
1182 warning (OPT_Wshadow, "shadowing %s function %q#D",
1183 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1184 olddecl);
9f33663b 1185 /* Discard the old built-in function. */
b1a19c7c 1186 return NULL_TREE;
9f33663b
JM
1187 }
1188 /* If the built-in is not ansi, then programs can override
1189 it even globally without an error. */
1190 else if (! DECL_BUILT_IN (olddecl))
d4ee4d25 1191 warning (0, "library function %q#D redeclared as non-function %q#D",
0cbd7506 1192 olddecl, newdecl);
9f33663b
JM
1193 else
1194 {
2d01edd7
GDR
1195 error ("declaration of %q#D", newdecl);
1196 error ("conflicts with built-in declaration %q#D",
0cbd7506 1197 olddecl);
9f33663b 1198 }
b1a19c7c 1199 return NULL_TREE;
a4443a08 1200 }
9f33663b 1201 else if (!types_match)
8d08fdba 1202 {
d63d5d0c
ILT
1203 /* Avoid warnings redeclaring built-ins which have not been
1204 explicitly declared. */
0cbd7506 1205 if (DECL_ANTICIPATED (olddecl))
498c0f27
JJ
1206 {
1207 /* Deal with fileptr_type_node. FILE type is not known
1208 at the time we create the builtins. */
1209 tree t1, t2;
1210
1211 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1212 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1213 t1 || t2;
1214 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1215 if (!t1 || !t2)
1216 break;
1217 else if (TREE_VALUE (t2) == fileptr_type_node)
1218 {
1219 tree t = TREE_VALUE (t1);
1220
1221 if (TREE_CODE (t) == POINTER_TYPE
1222 && TYPE_NAME (TREE_TYPE (t))
1223 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1224 == get_identifier ("FILE")
1225 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1226 {
1227 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1228
1229 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1230 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1231 types_match = decls_match (newdecl, olddecl);
1232 if (types_match)
d63d5d0c
ILT
1233 return duplicate_decls (newdecl, olddecl,
1234 newdecl_is_friend);
498c0f27
JJ
1235 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1236 }
1237 }
1238 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1239 break;
1240 }
d52e4867 1241 else if ((DECL_EXTERN_C_P (newdecl)
7e99327d
MM
1242 && DECL_EXTERN_C_P (olddecl))
1243 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1244 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
a4443a08 1245 {
9f33663b
JM
1246 /* A near match; override the builtin. */
1247
1248 if (TREE_PUBLIC (newdecl))
a4443a08 1249 {
d4ee4d25
DD
1250 warning (0, "new declaration %q#D", newdecl);
1251 warning (0, "ambiguates built-in declaration %q#D",
0cbd7506 1252 olddecl);
a4443a08 1253 }
b323323f
LM
1254 else
1255 warning (OPT_Wshadow, "shadowing %s function %q#D",
0cbd7506
MS
1256 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1257 olddecl);
a4443a08 1258 }
9f33663b
JM
1259 else
1260 /* Discard the old built-in function. */
b1a19c7c 1261 return NULL_TREE;
04a9d080
RS
1262
1263 /* Replace the old RTL to avoid problems with inlining. */
84b8b0e0 1264 COPY_DECL_RTL (newdecl, olddecl);
8d08fdba 1265 }
d63d5d0c
ILT
1266 /* Even if the types match, prefer the new declarations type for
1267 built-ins which have not been explicitly declared, for
1268 exception lists, etc... */
10326855 1269 else if (DECL_ANTICIPATED (olddecl))
7072018e 1270 {
74869a85
NS
1271 tree type = TREE_TYPE (newdecl);
1272 tree attribs = (*targetm.merge_type_attributes)
1273 (TREE_TYPE (olddecl), type);
1274
e9525111 1275 type = cp_build_type_attribute_variant (type, attribs);
74869a85 1276 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
7072018e 1277 }
68642fb6 1278
62bedd31
JJ
1279 /* If a function is explicitly declared "throw ()", propagate that to
1280 the corresponding builtin. */
1281 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1282 && DECL_ANTICIPATED (olddecl)
1283 && TREE_NOTHROW (newdecl)
1284 && !TREE_NOTHROW (olddecl)
1285 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != NULL_TREE
1286 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != olddecl
1287 && types_match)
1288 TREE_NOTHROW (built_in_decls [DECL_FUNCTION_CODE (olddecl)]) = 1;
1289
7e99327d
MM
1290 /* Whether or not the builtin can throw exceptions has no
1291 bearing on this declarator. */
1292 TREE_NOTHROW (olddecl) = 0;
1293
24f30ed4
MM
1294 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1295 {
1296 /* If a builtin function is redeclared as `static', merge
1297 the declarations, but make the original one static. */
1298 DECL_THIS_STATIC (olddecl) = 1;
1299 TREE_PUBLIC (olddecl) = 0;
9bfadf57 1300
421844e7
MM
1301 /* Make the old declaration consistent with the new one so
1302 that all remnants of the builtin-ness of this function
1303 will be banished. */
5d2ed28c 1304 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
84b8b0e0 1305 COPY_DECL_RTL (newdecl, olddecl);
24f30ed4 1306 }
39211cd5
MS
1307 }
1308 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1309 {
6936461f
OW
1310 /* C++ Standard, 3.3, clause 4:
1311 "[Note: a namespace name or a class template name must be unique
1312 in its declarative region (7.3.2, clause 14). ]" */
1313 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1314 && TREE_CODE (newdecl) != NAMESPACE_DECL
1315 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1316 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1317 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1318 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
9ed182dc 1319 {
6936461f
OW
1320 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1321 && TREE_CODE (newdecl) != TYPE_DECL)
1322 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1323 && TREE_CODE (olddecl) != TYPE_DECL))
1324 {
1325 /* We do nothing special here, because C++ does such nasty
1326 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1327 get shadowed, and know that if we need to find a TYPE_DECL
1328 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1329 slot of the identifier. */
1330 return NULL_TREE;
1331 }
1332
1333 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1334 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1335 || (TREE_CODE (olddecl) == FUNCTION_DECL
1336 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1337 return NULL_TREE;
9ed182dc
JM
1338 }
1339
2d01edd7 1340 error ("%q#D redeclared as different kind of symbol", newdecl);
39211cd5
MS
1341 if (TREE_CODE (olddecl) == TREE_LIST)
1342 olddecl = TREE_VALUE (olddecl);
dee15844 1343 error ("previous declaration of %q+#D", olddecl);
39211cd5 1344
c0694c4b 1345 return error_mark_node;
8d08fdba 1346 }
8d08fdba
MS
1347 else if (!types_match)
1348 {
4f1c5b7d 1349 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
7bdbfa05
MM
1350 /* These are certainly not duplicate declarations; they're
1351 from different scopes. */
b1a19c7c 1352 return NULL_TREE;
7bdbfa05 1353
8926095f 1354 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
f0e01782
MS
1355 {
1356 /* The name of a class template may not be declared to refer to
1357 any other template, class, function, object, namespace, value,
e92cc029 1358 or type in the same scope. */
5566b478
MS
1359 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1360 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
f0e01782 1361 {
2d01edd7 1362 error ("declaration of template %q#D", newdecl);
dee15844 1363 error ("conflicts with previous declaration %q+#D", olddecl);
f0e01782 1364 }
ec255269
MS
1365 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1366 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1367 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
91063b51 1368 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
75650646 1369 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
b9201622
NS
1370 DECL_TEMPLATE_PARMS (olddecl))
1371 /* Template functions can be disambiguated by
1372 return type. */
1373 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1374 TREE_TYPE (TREE_TYPE (olddecl))))
ec255269 1375 {
2d01edd7 1376 error ("new declaration %q#D", newdecl);
dee15844 1377 error ("ambiguates old declaration %q+#D", olddecl);
ec255269 1378 }
b1a19c7c 1379 return NULL_TREE;
f0e01782 1380 }
8926095f
MS
1381 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1382 {
eb68cb58 1383 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
8926095f 1384 {
2d01edd7 1385 error ("declaration of C function %q#D conflicts with",
0cbd7506 1386 newdecl);
dee15844 1387 error ("previous declaration %q+#D here", olddecl);
8926095f 1388 }
00595019 1389 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
91063b51 1390 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
700f8a87 1391 {
2d01edd7 1392 error ("new declaration %q#D", newdecl);
dee15844 1393 error ("ambiguates old declaration %q+#D", olddecl);
492b73bd 1394 return error_mark_node;
700f8a87
MS
1395 }
1396 else
b1a19c7c 1397 return NULL_TREE;
8926095f 1398 }
58ec3cc5 1399 else
8d08fdba 1400 {
2d01edd7 1401 error ("conflicting declaration %q#D", newdecl);
dee15844 1402 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
0cbd7506 1403 return error_mark_node;
8d08fdba
MS
1404 }
1405 }
68642fb6 1406 else if (TREE_CODE (newdecl) == FUNCTION_DECL
75650646
MM
1407 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1408 && (!DECL_TEMPLATE_INFO (newdecl)
68642fb6 1409 || (DECL_TI_TEMPLATE (newdecl)
75650646
MM
1410 != DECL_TI_TEMPLATE (olddecl))))
1411 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1412 && (!DECL_TEMPLATE_INFO (olddecl)
68642fb6 1413 || (DECL_TI_TEMPLATE (olddecl)
75650646 1414 != DECL_TI_TEMPLATE (newdecl))))))
386b8a85
JM
1415 /* It's OK to have a template specialization and a non-template
1416 with the same type, or to have specializations of two
75650646
MM
1417 different templates with the same type. Note that if one is a
1418 specialization, and the other is an instantiation of the same
1419 template, that we do not exit at this point. That situation
1420 can occur if we instantiate a template class, and then
0e339752 1421 specialize one of its methods. This situation is valid, but
75650646 1422 the declarations must be merged in the usual way. */
b1a19c7c 1423 return NULL_TREE;
68642fb6
UD
1424 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1425 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
75650646
MM
1426 && !DECL_USE_TEMPLATE (newdecl))
1427 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1428 && !DECL_USE_TEMPLATE (olddecl))))
1429 /* One of the declarations is a template instantiation, and the
1430 other is not a template at all. That's OK. */
b1a19c7c 1431 return NULL_TREE;
c30b4add
MM
1432 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1433 {
1434 /* In [namespace.alias] we have:
c8094d83 1435
0cbd7506 1436 In a declarative region, a namespace-alias-definition can be
c30b4add
MM
1437 used to redefine a namespace-alias declared in that declarative
1438 region to refer only to the namespace to which it already
1439 refers.
c8094d83 1440
c30b4add
MM
1441 Therefore, if we encounter a second alias directive for the same
1442 alias, we can just ignore the second directive. */
1443 if (DECL_NAMESPACE_ALIAS (newdecl)
c8094d83 1444 && (DECL_NAMESPACE_ALIAS (newdecl)
c30b4add
MM
1445 == DECL_NAMESPACE_ALIAS (olddecl)))
1446 return olddecl;
1447 /* [namespace.alias]
1448
0cbd7506 1449 A namespace-name or namespace-alias shall not be declared as
c30b4add
MM
1450 the name of any other entity in the same declarative region.
1451 A namespace-name defined at global scope shall not be
77880ae4 1452 declared as the name of any other entity in any global scope
c30b4add 1453 of the program. */
2d01edd7 1454 error ("declaration of namespace %qD conflicts with", newdecl);
dee15844 1455 error ("previous declaration of namespace %q+D here", olddecl);
c30b4add
MM
1456 return error_mark_node;
1457 }
8d08fdba
MS
1458 else
1459 {
d8e178a0 1460 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
8251199e 1461 if (errmsg)
8d08fdba 1462 {
33bd39a2 1463 error (errmsg, newdecl);
8d08fdba 1464 if (DECL_NAME (olddecl) != NULL_TREE)
dee15844
JM
1465 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1466 ? "%q+#D previously defined here"
1467 : "%q+#D previously declared here", olddecl);
b1a19c7c 1468 return error_mark_node;
8d08fdba
MS
1469 }
1470 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1471 && DECL_INITIAL (olddecl) != NULL_TREE
1472 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1473 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1474 {
1475 /* Prototype decl follows defn w/o prototype. */
dee15844 1476 warning (0, "prototype for %q+#D", newdecl);
d4ee4d25 1477 warning (0, "%Jfollows non-prototype definition here", olddecl);
8d08fdba 1478 }
ace4831d
MM
1479 else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1480 || TREE_CODE (olddecl) == VAR_DECL)
8d08fdba 1481 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
8926095f 1482 {
ace4831d
MM
1483 /* [dcl.link]
1484 If two declarations of the same function or object
1485 specify different linkage-specifications ..., the program
1486 is ill-formed.... Except for functions with C++ linkage,
1487 a function declaration without a linkage specification
1488 shall not precede the first linkage specification for
1489 that function. A function can be declared without a
1490 linkage specification after an explicit linkage
1491 specification has been seen; the linkage explicitly
1492 specified in the earlier declaration is not affected by
1493 such a function declaration.
1494
1495 DR 563 raises the question why the restrictions on
1496 functions should not also apply to objects. Older
1497 versions of G++ silently ignore the linkage-specification
1498 for this example:
1499
1500 namespace N {
1501 extern int i;
1502 extern "C" int i;
1503 }
1504
1505 which is clearly wrong. Therefore, we now treat objects
1506 like functions. */
46ccf50a 1507 if (current_lang_depth () == 0)
ace4831d
MM
1508 {
1509 /* There is no explicit linkage-specification, so we use
1510 the linkage from the previous declaration. */
1511 if (!DECL_LANG_SPECIFIC (newdecl))
1512 retrofit_lang_decl (newdecl);
1513 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1514 }
8926095f
MS
1515 else
1516 {
dee15844
JM
1517 error ("previous declaration of %q+#D with %qL linkage",
1518 olddecl, DECL_LANGUAGE (olddecl));
2d01edd7 1519 error ("conflicts with new declaration with %qL linkage",
0cbd7506 1520 DECL_LANGUAGE (newdecl));
8926095f
MS
1521 }
1522 }
e1cd6e56 1523
a6f02587 1524 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
c32381b1
JM
1525 ;
1526 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
e1cd6e56
MS
1527 {
1528 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1529 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1530 int i = 1;
1531
1532 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1533 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
68642fb6 1534
e1cd6e56
MS
1535 for (; t1 && t1 != void_list_node;
1536 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1537 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1538 {
2507f3b5
RK
1539 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1540 TREE_PURPOSE (t2)))
e1cd6e56 1541 {
cbe5f3b3 1542 permerror (input_location, "default argument given for parameter %d of %q#D",
37ec60ed 1543 i, newdecl);
cbe5f3b3 1544 permerror (input_location, "after previous specification in %q+#D", olddecl);
e1cd6e56
MS
1545 }
1546 else
1547 {
2d01edd7 1548 error ("default argument given for parameter %d of %q#D",
0cbd7506 1549 i, newdecl);
dee15844 1550 error ("after previous specification in %q+#D",
e1cd6e56
MS
1551 olddecl);
1552 }
1553 }
1554 }
8d08fdba
MS
1555 }
1556
4782bd5b
RS
1557 /* Do not merge an implicit typedef with an explicit one. In:
1558
1559 class A;
1560 ...
1561 typedef class A A __attribute__ ((foo));
1562
1563 the attribute should apply only to the typedef. */
1564 if (TREE_CODE (olddecl) == TYPE_DECL
1565 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1566 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
b1a19c7c 1567 return NULL_TREE;
4782bd5b 1568
8d08fdba
MS
1569 /* If new decl is `static' and an `extern' was seen previously,
1570 warn about it. */
1571 warn_extern_redeclared_static (newdecl, olddecl);
1572
e92cc029 1573 /* We have committed to returning 1 at this point. */
8d08fdba
MS
1574 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1575 {
1576 /* Now that functions must hold information normally held
1577 by field decls, there is extra work to do so that
1578 declaration information does not get destroyed during
1579 definition. */
1580 if (DECL_VINDEX (olddecl))
1581 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1582 if (DECL_CONTEXT (olddecl))
1583 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
e1cd6e56
MS
1584 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1585 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
fee7654e 1586 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
864b83b9 1587 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
815951d8 1588 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
963d5758 1589 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
e0fff4b3
JM
1590 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1591 SET_OVERLOADED_OPERATOR_CODE
1592 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
0b60dfe3 1593 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
68642fb6 1594
0b60dfe3 1595 /* Optionally warn about more than one declaration for the same
0cbd7506
MS
1596 name, but don't warn about a function declaration followed by a
1597 definition. */
0b60dfe3
BK
1598 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1599 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
a1c65f9f 1600 /* Don't warn about extern decl followed by definition. */
0b60dfe3 1601 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
a1c65f9f 1602 /* Don't warn about friends, let add_friend take care of it. */
d63d5d0c 1603 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
0b60dfe3 1604 {
b323323f
LM
1605 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1606 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
0b60dfe3 1607 }
b87d79e6
JM
1608
1609 if (DECL_DELETED_FN (newdecl))
1610 {
1611 error ("deleted definition of %qD", newdecl);
1612 error ("after previous declaration %q+D", olddecl);
1613 }
8d08fdba
MS
1614 }
1615
1616 /* Deal with C++: must preserve virtual function table size. */
1617 if (TREE_CODE (olddecl) == TYPE_DECL)
1618 {
926ce8bd
KH
1619 tree newtype = TREE_TYPE (newdecl);
1620 tree oldtype = TREE_TYPE (olddecl);
8d08fdba
MS
1621
1622 if (newtype != error_mark_node && oldtype != error_mark_node
1623 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
e93ee644
MM
1624 CLASSTYPE_FRIEND_CLASSES (newtype)
1625 = CLASSTYPE_FRIEND_CLASSES (oldtype);
7df87825 1626
970d6386 1627 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
8d08fdba
MS
1628 }
1629
8d08fdba
MS
1630 /* Copy all the DECL_... slots specified in the new decl
1631 except for any that we copy here from the old type. */
91d231cb 1632 DECL_ATTRIBUTES (newdecl)
f6897b10 1633 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
8d08fdba 1634
5566b478
MS
1635 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1636 {
e1f0e7a6
MM
1637 tree old_result;
1638 tree new_result;
1639 old_result = DECL_TEMPLATE_RESULT (olddecl);
1640 new_result = DECL_TEMPLATE_RESULT (newdecl);
1641 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
68642fb6 1642 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
4d85e00e
MM
1643 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1644 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
68642fb6 1645
3a47c4e4
AO
1646 DECL_ATTRIBUTES (old_result)
1647 = (*targetm.merge_decl_attributes) (old_result, new_result);
1648
e1f0e7a6
MM
1649 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1650 {
3a47c4e4
AO
1651 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1652 && DECL_INITIAL (new_result))
1653 {
1654 if (DECL_INITIAL (old_result))
99355518 1655 DECL_UNINLINABLE (old_result) = 1;
3a47c4e4 1656 else
99355518 1657 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
3a47c4e4
AO
1658 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1659 DECL_NOT_REALLY_EXTERN (old_result)
1660 = DECL_NOT_REALLY_EXTERN (new_result);
1661 DECL_INTERFACE_KNOWN (old_result)
1662 = DECL_INTERFACE_KNOWN (new_result);
1663 DECL_DECLARED_INLINE_P (old_result)
1664 = DECL_DECLARED_INLINE_P (new_result);
1eea53df
AP
1665 DECL_DISREGARD_INLINE_LIMITS (old_result)
1666 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1667
3a47c4e4
AO
1668 }
1669 else
1670 {
3a47c4e4
AO
1671 DECL_DECLARED_INLINE_P (old_result)
1672 |= DECL_DECLARED_INLINE_P (new_result);
1eea53df
AP
1673 DECL_DISREGARD_INLINE_LIMITS (old_result)
1674 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
3a47c4e4
AO
1675 check_redeclaration_exception_specification (newdecl, olddecl);
1676 }
e1f0e7a6
MM
1677 }
1678
daa8df65 1679 /* If the new declaration is a definition, update the file and
72c4a4ca
GK
1680 line information on the declaration, and also make
1681 the old declaration the same definition. */
3a47c4e4 1682 if (DECL_INITIAL (new_result) != NULL_TREE)
daa8df65 1683 {
caf93cb0 1684 DECL_SOURCE_LOCATION (olddecl)
e1f0e7a6 1685 = DECL_SOURCE_LOCATION (old_result)
f31686a3 1686 = DECL_SOURCE_LOCATION (newdecl);
72c4a4ca 1687 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
26bcf8fc 1688 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
e1f0e7a6
MM
1689 DECL_ARGUMENTS (old_result)
1690 = DECL_ARGUMENTS (new_result);
c11889ce
MM
1691 }
1692
b1a19c7c 1693 return olddecl;
5566b478 1694 }
68642fb6 1695
8d08fdba
MS
1696 if (types_match)
1697 {
1698 /* Automatically handles default parameters. */
1699 tree oldtype = TREE_TYPE (olddecl);
e1cd6e56 1700 tree newtype;
8d08fdba 1701
e1cd6e56 1702 /* Merge the data types specified in the two decls. */
6da794e8 1703 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
e1cd6e56 1704
6da794e8 1705 /* If merge_types produces a non-typedef type, just use the old type. */
9076e292
JM
1706 if (TREE_CODE (newdecl) == TYPE_DECL
1707 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1708 newtype = oldtype;
1709
8d08fdba 1710 if (TREE_CODE (newdecl) == VAR_DECL)
17bbb839
MM
1711 {
1712 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1713 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
3db45ab5 1714 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
6c06fbce 1715 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
39703eb9
MM
1716 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1717 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1799e5d5
RH
1718
1719 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1720 if (DECL_LANG_SPECIFIC (olddecl)
1721 && CP_DECL_THREADPRIVATE_P (olddecl))
1722 {
1723 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1724 if (!DECL_LANG_SPECIFIC (newdecl))
1725 retrofit_lang_decl (newdecl);
1726
1727 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1728 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1729 }
17bbb839
MM
1730 }
1731
6da794e8 1732 /* Do this after calling `merge_types' so that default
8d08fdba 1733 parameters don't confuse us. */
e1f0e7a6
MM
1734 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1735 check_redeclaration_exception_specification (newdecl, olddecl);
8d08fdba
MS
1736 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1737
4a2f6dc0
VR
1738 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1739 check_default_args (newdecl);
1740
8d08fdba 1741 /* Lay the type out, unless already done. */
407f03b8 1742 if (! same_type_p (newtype, oldtype)
5566b478 1743 && TREE_TYPE (newdecl) != error_mark_node
5156628f 1744 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe
MS
1745 layout_type (TREE_TYPE (newdecl));
1746
5566b478
MS
1747 if ((TREE_CODE (newdecl) == VAR_DECL
1748 || TREE_CODE (newdecl) == PARM_DECL
1749 || TREE_CODE (newdecl) == RESULT_DECL
1750 || TREE_CODE (newdecl) == FIELD_DECL
1751 || TREE_CODE (newdecl) == TYPE_DECL)
5156628f 1752 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe 1753 layout_decl (newdecl, 0);
8d08fdba
MS
1754
1755 /* Merge the type qualifiers. */
1756 if (TREE_READONLY (newdecl))
1757 TREE_READONLY (olddecl) = 1;
1758 if (TREE_THIS_VOLATILE (newdecl))
1759 TREE_THIS_VOLATILE (olddecl) = 1;
5cefa0d9
JM
1760 if (TREE_NOTHROW (newdecl))
1761 TREE_NOTHROW (olddecl) = 1;
8d08fdba 1762
302a2cc5
JM
1763 /* Merge deprecatedness. */
1764 if (TREE_DEPRECATED (newdecl))
1765 TREE_DEPRECATED (olddecl) = 1;
1766
8d08fdba 1767 /* Merge the initialization information. */
8926095f
MS
1768 if (DECL_INITIAL (newdecl) == NULL_TREE
1769 && DECL_INITIAL (olddecl) != NULL_TREE)
1770 {
1771 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
f31686a3 1772 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
b0d06515
MM
1773 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1774 && DECL_LANG_SPECIFIC (newdecl)
4d85e00e 1775 && DECL_LANG_SPECIFIC (olddecl))
69ee8086
RH
1776 {
1777 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1da326c3 1778 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
69ee8086 1779 }
8926095f 1780 }
39211cd5
MS
1781
1782 /* Merge the section attribute.
0cbd7506 1783 We want to issue an error if the sections conflict but that must be
39211cd5
MS
1784 done later in decl_attributes since we are called before attributes
1785 are assigned. */
1786 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1787 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1788
a157febd
GK
1789 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1790 {
1791 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1792 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1331d16f 1793 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
220a35cc 1794 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
220a35cc 1795 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1331d16f 1796 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1ea193c2 1797 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
becfd6e5
KZ
1798 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1799 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1800 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
1801 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
c740732f
MM
1802 /* Keep the old RTL. */
1803 COPY_DECL_RTL (olddecl, newdecl);
1804 }
caf93cb0 1805 else if (TREE_CODE (newdecl) == VAR_DECL
c740732f
MM
1806 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1807 {
1808 /* Keep the old RTL. We cannot keep the old RTL if the old
1809 declaration was for an incomplete object and the new
1810 declaration is not since many attributes of the RTL will
1811 change. */
1812 COPY_DECL_RTL (olddecl, newdecl);
a157febd 1813 }
8d08fdba
MS
1814 }
1815 /* If cannot merge, then use the new type and qualifiers,
1816 and don't preserve the old rtl. */
1817 else
1818 {
1819 /* Clean out any memory we had of the old declaration. */
1820 tree oldstatic = value_member (olddecl, static_aggregates);
1821 if (oldstatic)
1822 TREE_VALUE (oldstatic) = error_mark_node;
1823
1824 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1825 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1826 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1827 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1828 }
1829
1830 /* Merge the storage class information. */
45806a3f
FS
1831 merge_weak (newdecl, olddecl);
1832
e92cc029 1833 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
794d4a61 1834 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
a9aedbc2
MS
1835 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1836 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1837 if (! DECL_EXTERNAL (olddecl))
1838 DECL_EXTERNAL (newdecl) = 0;
68642fb6 1839
50b56799 1840 new_template = NULL_TREE;
0b60dfe3 1841 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
8d08fdba 1842 {
fea10e36
AO
1843 bool new_redefines_gnu_inline = false;
1844
1845 if (new_defines_function
1846 && ((DECL_INTERFACE_KNOWN (olddecl)
1847 && TREE_CODE (olddecl) == FUNCTION_DECL)
1848 || (TREE_CODE (olddecl) == TEMPLATE_DECL
1849 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1850 == FUNCTION_DECL))))
3a47c4e4
AO
1851 {
1852 tree fn = olddecl;
1853
1854 if (TREE_CODE (fn) == TEMPLATE_DECL)
1855 fn = DECL_TEMPLATE_RESULT (olddecl);
1856
fea10e36 1857 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
3a47c4e4 1858 }
3a47c4e4 1859
fea10e36 1860 if (!new_redefines_gnu_inline)
3a47c4e4 1861 {
3a47c4e4
AO
1862 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1863 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1864 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1865 }
68642fb6 1866 DECL_TEMPLATE_INSTANTIATED (newdecl)
2b0a63a3 1867 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
c8094d83 1868
58fb06b4
NS
1869 /* If the OLDDECL is an instantiation and/or specialization,
1870 then the NEWDECL must be too. But, it may not yet be marked
1871 as such if the caller has created NEWDECL, but has not yet
1872 figured out that it is a redeclaration. */
1873 if (!DECL_USE_TEMPLATE (newdecl))
1874 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
c8094d83 1875
0b60dfe3
BK
1876 /* Don't really know how much of the language-specific
1877 values we should copy from old to new. */
1878 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
caf93cb0 1879 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
e2500fed 1880 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
0b60dfe3 1881 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
4684cd27 1882 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
50b56799
MM
1883 if (DECL_TEMPLATE_INFO (newdecl))
1884 new_template = DECL_TI_TEMPLATE (newdecl);
fbf1c34b 1885 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3febd123 1886 DECL_INITIALIZED_IN_CLASS_P (newdecl)
0cbd7506 1887 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
0b60dfe3 1888 olddecl_friend = DECL_FRIEND_P (olddecl);
d63d5d0c
ILT
1889 hidden_friend = (DECL_ANTICIPATED (olddecl)
1890 && DECL_HIDDEN_FRIEND_P (olddecl)
1891 && newdecl_is_friend);
6a629cac
MM
1892
1893 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1894 if (TREE_CODE (newdecl) == FUNCTION_DECL
1895 || DECL_FUNCTION_TEMPLATE_P (newdecl))
bb5e8a7f
MM
1896 {
1897 DECL_BEFRIENDING_CLASSES (newdecl)
1898 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1899 DECL_BEFRIENDING_CLASSES (olddecl));
ca9e1382
KL
1900 /* DECL_THUNKS is only valid for virtual functions,
1901 otherwise it is a DECL_FRIEND_CONTEXT. */
1902 if (DECL_VIRTUAL_P (newdecl))
1903 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
bb5e8a7f 1904 }
8d08fdba
MS
1905 }
1906
8d08fdba
MS
1907 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1908 {
68642fb6
UD
1909 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1910 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
75650646
MM
1911 {
1912 /* If newdecl is not a specialization, then it is not a
1913 template-related function at all. And that means that we
bf7c02dd 1914 should have exited above, returning 0. */
50bc768d 1915 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
75650646 1916
68642fb6 1917 if (TREE_USED (olddecl))
75650646 1918 /* From [temp.expl.spec]:
68642fb6 1919
75650646
MM
1920 If a template, a member template or the member of a class
1921 template is explicitly specialized then that
1922 specialization shall be declared before the first use of
1923 that specialization that would cause an implicit
1924 instantiation to take place, in every translation unit in
1925 which such a use occurs. */
9e637a26 1926 error ("explicit specialization of %qD after first use",
75650646
MM
1927 olddecl);
1928
1929 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
d03d18e8 1930
b9e75696
JM
1931 /* Don't propagate visibility from the template to the
1932 specialization here. We'll do that in determine_visibility if
1933 appropriate. */
1934 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
1935
d03d18e8
KL
1936 /* [temp.expl.spec/14] We don't inline explicit specialization
1937 just because the primary template says so. */
75650646 1938 }
3a47c4e4
AO
1939 else if (new_defines_function && DECL_INITIAL (olddecl))
1940 {
7e8b322a
JH
1941 /* Never inline re-defined extern inline functions.
1942 FIXME: this could be better handled by keeping both
1943 function as separate declarations. */
3a47c4e4
AO
1944 DECL_UNINLINABLE (newdecl) = 1;
1945 }
d03d18e8
KL
1946 else
1947 {
1948 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1949 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
faae18ab 1950
d03d18e8 1951 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
faae18ab 1952
d03d18e8
KL
1953 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1954 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
c536a6a7
RG
1955
1956 DECL_DISREGARD_INLINE_LIMITS (newdecl)
1957 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
1958 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
1959 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
d03d18e8 1960 }
97055d5c 1961
5daf7c0a
JM
1962 /* Preserve abstractness on cloned [cd]tors. */
1963 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1964
700f8a87
MS
1965 if (! types_match)
1966 {
5d2ed28c 1967 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
92643fea 1968 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
84b8b0e0 1969 COPY_DECL_RTL (newdecl, olddecl);
5566b478
MS
1970 }
1971 if (! types_match || new_defines_function)
1972 {
6f1b4c42
JM
1973 /* These need to be copied so that the names are available.
1974 Note that if the types do match, we'll preserve inline
1975 info and other bits, but if not, we won't. */
700f8a87
MS
1976 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1977 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
700f8a87 1978 }
8d08fdba
MS
1979 if (new_defines_function)
1980 /* If defining a function declared with other language
1981 linkage, use the previously declared language linkage. */
5d2ed28c 1982 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
6f1b4c42 1983 else if (types_match)
8d08fdba
MS
1984 {
1985 /* If redeclaring a builtin function, and not a definition,
1986 it stays built in. */
1987 if (DECL_BUILT_IN (olddecl))
1988 {
26db82d8 1989 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
39211cd5 1990 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
8d08fdba
MS
1991 /* If we're keeping the built-in definition, keep the rtl,
1992 regardless of declaration matches. */
84b8b0e0 1993 COPY_DECL_RTL (olddecl, newdecl);
8d08fdba 1994 }
8d08fdba
MS
1995
1996 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
8d08fdba
MS
1997 /* Don't clear out the arguments if we're redefining a function. */
1998 if (DECL_ARGUMENTS (olddecl))
1999 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2000 }
2001 }
0b1161fc
MM
2002 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2003 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
a9aedbc2 2004
8d08fdba
MS
2005 /* Now preserve various other info from the definition. */
2006 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2007 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2008 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
92643fea 2009 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
8d08fdba 2010
d7afec4b 2011 /* Warn about conflicting visibility specifications. */
c8094d83 2012 if (DECL_VISIBILITY_SPECIFIED (olddecl)
73a8adb6 2013 && DECL_VISIBILITY_SPECIFIED (newdecl)
d7afec4b
ND
2014 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2015 {
dee15844
JM
2016 warning (OPT_Wattributes, "%q+D: visibility attribute ignored "
2017 "because it", newdecl);
5c498b10
DD
2018 warning (OPT_Wattributes, "%Jconflicts with previous "
2019 "declaration here", olddecl);
d7afec4b
ND
2020 }
2021 /* Choose the declaration which specified visibility. */
2022 if (DECL_VISIBILITY_SPECIFIED (olddecl))
facef326 2023 {
facef326 2024 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
d7afec4b
ND
2025 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2026 }
3db45ab5 2027 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
820cc88f
DB
2028 so keep this behavior. */
2029 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2030 {
2031 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2032 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2033 }
facef326 2034
1d786913
MM
2035 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2036 with that from NEWDECL below. */
2037 if (DECL_LANG_SPECIFIC (olddecl))
2038 {
c8094d83 2039 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
1d786913
MM
2040 != DECL_LANG_SPECIFIC (newdecl));
2041 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2042 }
2043
e27fb29c
MLI
2044 /* Merge the USED information. */
2045 if (TREE_USED (olddecl))
2046 TREE_USED (newdecl) = 1;
2047 else if (TREE_USED (newdecl))
2048 TREE_USED (olddecl) = 1;
2049
8d08fdba
MS
2050 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2051 {
2052 int function_size;
8d08fdba 2053
820cc88f 2054 function_size = sizeof (struct tree_decl_common);
8d08fdba 2055
730e1556
KG
2056 memcpy ((char *) olddecl + sizeof (struct tree_common),
2057 (char *) newdecl + sizeof (struct tree_common),
2058 function_size - sizeof (struct tree_common));
8d08fdba 2059
820cc88f
DB
2060 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2061 (char *) newdecl + sizeof (struct tree_decl_common),
2062 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
50b56799 2063 if (new_template)
b3445994
MM
2064 /* If newdecl is a template instantiation, it is possible that
2065 the following sequence of events has occurred:
2066
2067 o A friend function was declared in a class template. The
2068 class template was instantiated.
2069
2070 o The instantiation of the friend declaration was
2071 recorded on the instantiation list, and is newdecl.
2072
2073 o Later, however, instantiate_class_template called pushdecl
2074 on the newdecl to perform name injection. But, pushdecl in
2075 turn called duplicate_decls when it discovered that another
2076 declaration of a global function with the same name already
2077 existed.
2078
2079 o Here, in duplicate_decls, we decided to clobber newdecl.
2080
2081 If we're going to do that, we'd better make sure that
2082 olddecl, and not newdecl, is on the list of
2083 instantiations so that if we try to do the instantiation
2084 again we won't get the clobbered declaration. */
caf93cb0 2085 reregister_specialization (newdecl,
50b56799 2086 new_template,
b3445994 2087 olddecl);
8d08fdba
MS
2088 }
2089 else
2090 {
820cc88f 2091 size_t size = tree_code_size (TREE_CODE (olddecl));
730e1556
KG
2092 memcpy ((char *) olddecl + sizeof (struct tree_common),
2093 (char *) newdecl + sizeof (struct tree_common),
820cc88f 2094 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
3db45ab5 2095 switch (TREE_CODE (olddecl))
820cc88f
DB
2096 {
2097 case LABEL_DECL:
2098 case VAR_DECL:
2099 case RESULT_DECL:
2100 case PARM_DECL:
2101 case FIELD_DECL:
2102 case TYPE_DECL:
2103 case CONST_DECL:
2104 {
2105 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2106 (char *) newdecl + sizeof (struct tree_decl_common),
2107 size - sizeof (struct tree_decl_common)
2108 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2109 }
2110 break;
2111 default:
2112 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2113 (char *) newdecl + sizeof (struct tree_decl_common),
2114 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2115 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2116 break;
2117 }
8d08fdba 2118 }
8d08fdba
MS
2119 DECL_UID (olddecl) = olddecl_uid;
2120 if (olddecl_friend)
2121 DECL_FRIEND_P (olddecl) = 1;
d63d5d0c
ILT
2122 if (hidden_friend)
2123 {
2124 DECL_ANTICIPATED (olddecl) = 1;
2125 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2126 }
8d08fdba 2127
d9525bec
BK
2128 /* NEWDECL contains the merged attribute lists.
2129 Update OLDDECL to be the same. */
91d231cb 2130 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
d9525bec 2131
16e31964
DS
2132 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2133 so that encode_section_info has a chance to look at the new decl
2134 flags and attributes. */
caf93cb0 2135 if (DECL_RTL_SET_P (olddecl)
16e31964
DS
2136 && (TREE_CODE (olddecl) == FUNCTION_DECL
2137 || (TREE_CODE (olddecl) == VAR_DECL
2138 && TREE_STATIC (olddecl))))
0e6df31e 2139 make_decl_rtl (olddecl);
16e31964 2140
1d786913
MM
2141 /* The NEWDECL will no longer be needed. Because every out-of-class
2142 declaration of a member results in a call to duplicate_decls,
2143 freeing these nodes represents in a significant savings. */
2144 ggc_free (newdecl);
2145
b1a19c7c 2146 return olddecl;
8d08fdba 2147}
8d08fdba 2148\f
8251199e 2149/* Return zero if the declaration NEWDECL is valid
8d08fdba
MS
2150 when the declaration OLDDECL (assumed to be for the same name)
2151 has already been seen.
2152 Otherwise return an error message format string with a %s
2153 where the identifier should go. */
2154
d8e178a0 2155static const char *
11f6b451 2156redeclaration_error_message (tree newdecl, tree olddecl)
8d08fdba
MS
2157{
2158 if (TREE_CODE (newdecl) == TYPE_DECL)
2159 {
2160 /* Because C++ can put things into name space for free,
2161 constructs like "typedef struct foo { ... } foo"
2162 would look like an erroneous redeclaration. */
3bfdc719 2163 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
6aed477a 2164 return NULL;
8d08fdba 2165 else
2d01edd7 2166 return "redefinition of %q#D";
8d08fdba
MS
2167 }
2168 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2169 {
2170 /* If this is a pure function, its olddecl will actually be
2171 the original initialization to `0' (which we force to call
2172 abort()). Don't complain about redefinition in this case. */
d1fc3bbd
AO
2173 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2174 && DECL_INITIAL (olddecl) == NULL_TREE)
6aed477a 2175 return NULL;
8d08fdba 2176
2c73f9f5 2177 /* If both functions come from different namespaces, this is not
a1c65f9f 2178 a redeclaration - this is a conflict with a used function. */
6eb3bb27 2179 if (DECL_NAMESPACE_SCOPE_P (olddecl)
713101a6
AO
2180 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2181 && ! decls_match (olddecl, newdecl))
2d01edd7 2182 return "%qD conflicts with used function";
2c73f9f5 2183
db5ae43f 2184 /* We'll complain about linkage mismatches in
0cbd7506 2185 warn_extern_redeclared_static. */
db5ae43f 2186
2c73f9f5 2187 /* Defining the same name twice is no good. */
8d08fdba 2188 if (DECL_INITIAL (olddecl) != NULL_TREE
faae18ab 2189 && DECL_INITIAL (newdecl) != NULL_TREE)
8d08fdba
MS
2190 {
2191 if (DECL_NAME (olddecl) == NULL_TREE)
2d01edd7 2192 return "%q#D not declared in class";
3a47c4e4
AO
2193 else if (!GNU_INLINE_P (olddecl)
2194 || GNU_INLINE_P (newdecl))
2d01edd7 2195 return "redefinition of %q#D";
8d08fdba 2196 }
3a47c4e4
AO
2197
2198 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2199 {
2200 bool olda = GNU_INLINE_P (olddecl);
2201 bool newa = GNU_INLINE_P (newdecl);
2202
2203 if (olda != newa)
2204 {
2205 if (newa)
2206 return "%q+D redeclared inline with %<gnu_inline%> attribute";
2207 else
2208 return "%q+D redeclared inline without %<gnu_inline%> attribute";
2209 }
2210 }
2211
6aed477a 2212 return NULL;
8d08fdba 2213 }
51c184be
MS
2214 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2215 {
5bd61841
MM
2216 tree nt, ot;
2217
2218 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2219 {
2220 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2221 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2d01edd7 2222 return "redefinition of %q#D";
5bd61841
MM
2223 return NULL;
2224 }
2225
2226 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
caf93cb0 2227 || (DECL_TEMPLATE_RESULT (newdecl)
5bd61841
MM
2228 == DECL_TEMPLATE_RESULT (olddecl)))
2229 return NULL;
2230
2231 nt = DECL_TEMPLATE_RESULT (newdecl);
2232 if (DECL_TEMPLATE_INFO (nt))
2233 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2234 ot = DECL_TEMPLATE_RESULT (olddecl);
2235 if (DECL_TEMPLATE_INFO (ot))
2236 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
3a47c4e4
AO
2237 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2238 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2d01edd7 2239 return "redefinition of %q#D";
5bd61841 2240
3a47c4e4
AO
2241 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2242 {
2243 bool olda = GNU_INLINE_P (ot);
2244 bool newa = GNU_INLINE_P (nt);
2245
2246 if (olda != newa)
2247 {
2248 if (newa)
2249 return "%q+D redeclared inline with %<gnu_inline%> attribute";
2250 else
2251 return "%q+D redeclared inline without %<gnu_inline%> attribute";
2252 }
2253 }
2254
9b7dd5e8
DG
2255 /* Core issue #226 (C++0x):
2256
2257 If a friend function template declaration specifies a
2258 default template-argument, that declaration shall be a
2259 definition and shall be the only declaration of the
2260 function template in the translation unit. */
c1ae8be5 2261 if ((cxx_dialect != cxx98)
9b7dd5e8
DG
2262 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2263 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2264 /*is_primary=*/1, /*is_partial=*/0,
2265 /*is_friend_decl=*/2))
2266 return "redeclaration of friend %q#D may not have default template arguments";
2267
5bd61841 2268 return NULL;
51c184be 2269 }
31a79236 2270 else if (TREE_CODE (newdecl) == VAR_DECL
1799e5d5
RH
2271 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2272 && (! DECL_LANG_SPECIFIC (olddecl)
2273 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2274 || DECL_THREAD_LOCAL_P (newdecl)))
31a79236
JJ
2275 {
2276 /* Only variables can be thread-local, and all declarations must
2277 agree on this property. */
2278 if (DECL_THREAD_LOCAL_P (newdecl))
2279 return "thread-local declaration of %q#D follows "
2280 "non-thread-local declaration";
2281 else
2282 return "non-thread-local declaration of %q#D follows "
2283 "thread-local declaration";
2284 }
1f51a992 2285 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
8d08fdba 2286 {
555551c2
MM
2287 /* The objects have been declared at namespace scope. If either
2288 is a member of an anonymous union, then this is an invalid
2289 redeclaration. For example:
2290
2291 int i;
2292 union { int i; };
2293
2294 is invalid. */
aedfac0e
PC
2295 if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2296 || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
555551c2
MM
2297 return "redeclaration of %q#D";
2298 /* If at least one declaration is a reference, there is no
2299 conflict. For example:
2300
2301 int i = 3;
2302 extern int i;
2303
2304 is valid. */
8d08fdba 2305 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
6aed477a 2306 return NULL;
8926095f 2307 /* Reject two definitions. */
2d01edd7 2308 return "redefinition of %q#D";
8d08fdba
MS
2309 }
2310 else
2311 {
2312 /* Objects declared with block scope: */
2313 /* Reject two definitions, and reject a definition
2314 together with an external reference. */
2315 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2d01edd7 2316 return "redeclaration of %q#D";
6aed477a 2317 return NULL;
8d08fdba
MS
2318 }
2319}
2320\f
1799e5d5
RH
2321/* Hash and equality functions for the named_label table. */
2322
2323static hashval_t
2324named_label_entry_hash (const void *data)
2325{
2326 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2327 return DECL_UID (ent->label_decl);
2328}
2329
2330static int
2331named_label_entry_eq (const void *a, const void *b)
2332{
2333 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2334 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2335 return ent_a->label_decl == ent_b->label_decl;
2336}
2337
acef433b 2338/* Create a new label, named ID. */
8d08fdba 2339
acef433b 2340static tree
11f6b451 2341make_label_decl (tree id, int local_p)
8d08fdba 2342{
1799e5d5
RH
2343 struct named_label_entry *ent;
2344 void **slot;
acef433b 2345 tree decl;
8d08fdba 2346
acef433b 2347 decl = build_decl (LABEL_DECL, id, void_type_node);
acef433b
MM
2348
2349 DECL_CONTEXT (decl) = current_function_decl;
2350 DECL_MODE (decl) = VOIDmode;
2351 C_DECLARED_LABEL_FLAG (decl) = local_p;
8d08fdba 2352
acef433b
MM
2353 /* Say where one reference is to the label, for the sake of the
2354 error if it is not defined. */
f31686a3 2355 DECL_SOURCE_LOCATION (decl) = input_location;
acef433b
MM
2356
2357 /* Record the fact that this identifier is bound to this label. */
2358 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2359
1799e5d5
RH
2360 /* Create the label htab for the function on demand. */
2361 if (!named_labels)
2362 named_labels = htab_create_ggc (13, named_label_entry_hash,
2363 named_label_entry_eq, NULL);
6625cdb5 2364
1799e5d5
RH
2365 /* Record this label on the list of labels used in this function.
2366 We do this before calling make_label_decl so that we get the
2367 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2368 ent = GGC_CNEW (struct named_label_entry);
2369 ent->label_decl = decl;
6625cdb5 2370
1799e5d5
RH
2371 slot = htab_find_slot (named_labels, ent, INSERT);
2372 gcc_assert (*slot == NULL);
2373 *slot = ent;
2374
2375 return decl;
acef433b 2376}
8d08fdba 2377
acef433b
MM
2378/* Look for a label named ID in the current function. If one cannot
2379 be found, create one. (We keep track of used, but undefined,
2380 labels, and complain about them at the end of a function.) */
8d08fdba 2381
68642fb6 2382tree
11f6b451 2383lookup_label (tree id)
acef433b
MM
2384{
2385 tree decl;
8d08fdba 2386
22ffcc6f 2387 timevar_push (TV_NAME_LOOKUP);
acef433b
MM
2388 /* You can't use labels at global scope. */
2389 if (current_function_decl == NULL_TREE)
2390 {
2d01edd7 2391 error ("label %qE referenced outside of any function", id);
22ffcc6f 2392 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
acef433b 2393 }
68642fb6 2394
acef433b
MM
2395 /* See if we've already got this label. */
2396 decl = IDENTIFIER_LABEL_VALUE (id);
2397 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
22ffcc6f 2398 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba 2399
acef433b 2400 decl = make_label_decl (id, /*local_p=*/0);
22ffcc6f 2401 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba
MS
2402}
2403
acef433b 2404/* Declare a local label named ID. */
8d08fdba
MS
2405
2406tree
11f6b451 2407declare_local_label (tree id)
8d08fdba 2408{
1799e5d5 2409 tree decl, shadow;
8d08fdba 2410
acef433b 2411 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
1799e5d5
RH
2412 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2413 shadow = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2414 current_binding_level->shadowed_labels);
2415 current_binding_level->shadowed_labels = shadow;
2416
acef433b 2417 decl = make_label_decl (id, /*local_p=*/1);
1799e5d5 2418 TREE_VALUE (shadow) = decl;
68642fb6 2419
acef433b 2420 return decl;
8d08fdba
MS
2421}
2422
6625cdb5
JM
2423/* Returns nonzero if it is ill-formed to jump past the declaration of
2424 DECL. Returns 2 if it's also a real problem. */
2425
2426static int
11f6b451 2427decl_jump_unsafe (tree decl)
6625cdb5 2428{
b88b7ced
AP
2429 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2430 || TREE_TYPE (decl) == error_mark_node)
6625cdb5
JM
2431 return 0;
2432
6c06fbce
MM
2433 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
2434 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2435 return 2;
2436
2437 if (pod_type_p (TREE_TYPE (decl)))
6625cdb5
JM
2438 return 0;
2439
6c06fbce 2440 /* The POD stuff is just pedantry; why should it matter if the class
6625cdb5 2441 contains a field of pointer to member type? */
6625cdb5
JM
2442 return 1;
2443}
2444
1799e5d5
RH
2445/* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2446
2447static void
2448identify_goto (tree decl, const location_t *locus)
2449{
2450 if (decl)
cbe5f3b3 2451 permerror (input_location, "jump to label %qD", decl);
1799e5d5 2452 else
cbe5f3b3 2453 permerror (input_location, "jump to case label");
1799e5d5 2454 if (locus)
cbe5f3b3 2455 permerror (input_location, "%H from here", locus);
1799e5d5
RH
2456}
2457
6625cdb5
JM
2458/* Check that a single previously seen jump to a newly defined label
2459 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2460 the jump context; NAMES are the names in scope in LEVEL at the jump
3db45ab5 2461 context; LOCUS is the source position of the jump or 0. Returns
1799e5d5 2462 true if all is well. */
6625cdb5 2463
1799e5d5
RH
2464static bool
2465check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2466 bool exited_omp, const location_t *locus)
2467{
2468 struct cp_binding_level *b;
2469 bool identified = false, saw_eh = false, saw_omp = false;
2470
2471 if (exited_omp)
2472 {
2473 identify_goto (decl, locus);
2474 error (" exits OpenMP structured block");
2475 identified = saw_omp = true;
2476 }
2477
2478 for (b = current_binding_level; b ; b = b->level_chain)
2479 {
2480 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2481
2482 for (new_decls = b->names; new_decls != old_decls;
6625cdb5
JM
2483 new_decls = TREE_CHAIN (new_decls))
2484 {
2485 int problem = decl_jump_unsafe (new_decls);
2486 if (! problem)
2487 continue;
2488
1799e5d5 2489 if (!identified)
6625cdb5 2490 {
1799e5d5
RH
2491 identify_goto (decl, locus);
2492 identified = true;
6625cdb5 2493 }
826840d9 2494 if (problem > 1)
dee15844 2495 error (" crosses initialization of %q+#D", new_decls);
6625cdb5 2496 else
cbe5f3b3 2497 permerror (input_location, " enters scope of non-POD %q+#D", new_decls);
6625cdb5
JM
2498 }
2499
2500 if (b == level)
2501 break;
1799e5d5 2502 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
6625cdb5 2503 {
1799e5d5 2504 if (!identified)
6625cdb5 2505 {
1799e5d5
RH
2506 identify_goto (decl, locus);
2507 identified = true;
6625cdb5 2508 }
a7e8c268 2509 if (b->kind == sk_try)
826840d9
RH
2510 error (" enters try block");
2511 else
2512 error (" enters catch block");
1799e5d5
RH
2513 saw_eh = true;
2514 }
2515 if (b->kind == sk_omp && !saw_omp)
2516 {
2517 if (!identified)
2518 {
2519 identify_goto (decl, locus);
2520 identified = true;
2521 }
2522 error (" enters OpenMP structured block");
2523 saw_omp = true;
6625cdb5
JM
2524 }
2525 }
6625cdb5 2526
1799e5d5 2527 return !identified;
6625cdb5
JM
2528}
2529
2530static void
1799e5d5 2531check_previous_goto (tree decl, struct named_label_use_entry *use)
6625cdb5 2532{
1799e5d5
RH
2533 check_previous_goto_1 (decl, use->binding_level,
2534 use->names_in_scope, use->in_omp_scope,
2535 &use->o_goto_locus);
6625cdb5
JM
2536}
2537
1799e5d5
RH
2538static bool
2539check_switch_goto (struct cp_binding_level* level)
6625cdb5 2540{
1799e5d5 2541 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
6625cdb5
JM
2542}
2543
2544/* Check that a new jump to a label DECL is OK. Called by
2545 finish_goto_stmt. */
2546
2547void
11f6b451 2548check_goto (tree decl)
6625cdb5 2549{
1799e5d5
RH
2550 struct named_label_entry *ent, dummy;
2551 bool saw_catch = false, identified = false;
6625cdb5 2552 tree bad;
6625cdb5 2553
1799e5d5
RH
2554 /* We can't know where a computed goto is jumping.
2555 So we assume that it's OK. */
2556 if (TREE_CODE (decl) != LABEL_DECL)
2557 return;
2558
2559 /* We didn't record any information about this label when we created it,
2560 and there's not much point since it's trivial to analyze as a return. */
2561 if (decl == cdtor_label)
e3cd9945
APB
2562 return;
2563
1799e5d5
RH
2564 dummy.label_decl = decl;
2565 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2566 gcc_assert (ent != NULL);
2567
6625cdb5
JM
2568 /* If the label hasn't been defined yet, defer checking. */
2569 if (! DECL_INITIAL (decl))
2570 {
1799e5d5 2571 struct named_label_use_entry *new_use;
6625cdb5 2572
1799e5d5
RH
2573 /* Don't bother creating another use if the last goto had the
2574 same data, and will therefore create the same set of errors. */
2575 if (ent->uses
2576 && ent->uses->names_in_scope == current_binding_level->names)
2577 return;
6625cdb5 2578
1799e5d5
RH
2579 new_use = GGC_NEW (struct named_label_use_entry);
2580 new_use->binding_level = current_binding_level;
2581 new_use->names_in_scope = current_binding_level->names;
2582 new_use->o_goto_locus = input_location;
2583 new_use->in_omp_scope = false;
2584
2585 new_use->next = ent->uses;
2586 ent->uses = new_use;
2587 return;
2588 }
6625cdb5 2589
1799e5d5
RH
2590 if (ent->in_try_scope || ent->in_catch_scope
2591 || ent->in_omp_scope || ent->bad_decls)
6625cdb5 2592 {
cbe5f3b3
MLI
2593 permerror (input_location, "jump to label %q+D", decl);
2594 permerror (input_location, " from here");
1799e5d5 2595 identified = true;
6625cdb5
JM
2596 }
2597
1799e5d5 2598 for (bad = ent->bad_decls; bad; bad = TREE_CHAIN (bad))
6625cdb5
JM
2599 {
2600 tree b = TREE_VALUE (bad);
2601 int u = decl_jump_unsafe (b);
2602
2603 if (u > 1 && DECL_ARTIFICIAL (b))
1799e5d5
RH
2604 {
2605 /* Can't skip init of __exception_info. */
2606 error ("%J enters catch block", b);
2607 saw_catch = true;
2608 }
6625cdb5 2609 else if (u > 1)
dee15844 2610 error (" skips initialization of %q+#D", b);
6625cdb5 2611 else
cbe5f3b3 2612 permerror (input_location, " enters scope of non-POD %q+#D", b);
6625cdb5
JM
2613 }
2614
1799e5d5 2615 if (ent->in_try_scope)
6625cdb5 2616 error (" enters try block");
1799e5d5 2617 else if (ent->in_catch_scope && !saw_catch)
826840d9 2618 error (" enters catch block");
1799e5d5
RH
2619
2620 if (ent->in_omp_scope)
2621 error (" enters OpenMP structured block");
2622 else if (flag_openmp)
2623 {
2624 struct cp_binding_level *b;
2625 for (b = current_binding_level; b ; b = b->level_chain)
2626 {
2627 if (b == ent->binding_level)
2628 break;
2629 if (b->kind == sk_omp)
2630 {
2631 if (!identified)
2632 {
cbe5f3b3
MLI
2633 permerror (input_location, "jump to label %q+D", decl);
2634 permerror (input_location, " from here");
1799e5d5
RH
2635 identified = true;
2636 }
2637 error (" exits OpenMP structured block");
2638 break;
2639 }
2640 }
2641 }
2642}
2643
2644/* Check that a return is ok wrt OpenMP structured blocks.
2645 Called by finish_return_stmt. Returns true if all is well. */
2646
2647bool
2648check_omp_return (void)
2649{
2650 struct cp_binding_level *b;
2651 for (b = current_binding_level; b ; b = b->level_chain)
2652 if (b->kind == sk_omp)
2653 {
2654 error ("invalid exit from OpenMP structured block");
2655 return false;
2656 }
2657 return true;
6625cdb5
JM
2658}
2659
8d08fdba 2660/* Define a label, specifying the location in the source file.
b9c87401 2661 Return the LABEL_DECL node for the label. */
8d08fdba
MS
2662
2663tree
5b030314 2664define_label (location_t location, tree name)
8d08fdba 2665{
1799e5d5 2666 struct named_label_entry *ent, dummy;
926ce8bd 2667 struct cp_binding_level *p;
1799e5d5 2668 tree decl;
6625cdb5 2669
22ffcc6f 2670 timevar_push (TV_NAME_LOOKUP);
1799e5d5
RH
2671
2672 decl = lookup_label (name);
2673
2674 dummy.label_decl = decl;
2675 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2676 gcc_assert (ent != NULL);
8d08fdba 2677
3dc9aec6 2678 /* After labels, make any new cleanups in the function go into their
8d08fdba 2679 own new (temporary) binding contour. */
caf93cb0
EC
2680 for (p = current_binding_level;
2681 p->kind != sk_function_parms;
a7e8c268 2682 p = p->level_chain)
3dc9aec6 2683 p->more_cleanups_ok = 0;
8d08fdba 2684
e1cd6e56 2685 if (name == get_identifier ("wchar_t"))
cbe5f3b3 2686 permerror (input_location, "label named wchar_t");
e1cd6e56 2687
8d08fdba 2688 if (DECL_INITIAL (decl) != NULL_TREE)
417fa55b
LM
2689 {
2690 error ("duplicate label %qD", decl);
2691 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
2692 }
8d08fdba
MS
2693 else
2694 {
1799e5d5
RH
2695 struct named_label_use_entry *use;
2696
8d08fdba
MS
2697 /* Mark label as having been defined. */
2698 DECL_INITIAL (decl) = error_mark_node;
2699 /* Say where in the source. */
f31686a3 2700 DECL_SOURCE_LOCATION (decl) = location;
1799e5d5
RH
2701
2702 ent->binding_level = current_binding_level;
2703 ent->names_in_scope = current_binding_level->names;
2704
2705 for (use = ent->uses; use ; use = use->next)
2706 check_previous_goto (decl, use);
2707 ent->uses = NULL;
8d08fdba 2708 }
b9c87401 2709
be99edf8 2710 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba
MS
2711}
2712
a5894242
MS
2713struct cp_switch
2714{
e2500fed 2715 struct cp_binding_level *level;
a5894242 2716 struct cp_switch *next;
56cb9733
MM
2717 /* The SWITCH_STMT being built. */
2718 tree switch_stmt;
2719 /* A splay-tree mapping the low element of a case range to the high
2720 element, or NULL_TREE if there is no high element. Used to
2721 determine whether or not a new case label duplicates an old case
2722 label. We need a tree, rather than simply a hash table, because
2723 of the GNU case range extension. */
2724 splay_tree cases;
a5894242
MS
2725};
2726
56cb9733
MM
2727/* A stack of the currently active switch statements. The innermost
2728 switch statement is on the top of the stack. There is no need to
2729 mark the stack for garbage collection because it is only active
2730 during the processing of the body of a function, and we never
2731 collect at that point. */
5362b086 2732
a5894242
MS
2733static struct cp_switch *switch_stack;
2734
56cb9733
MM
2735/* Called right after a switch-statement condition is parsed.
2736 SWITCH_STMT is the switch statement being parsed. */
2737
a5894242 2738void
11f6b451 2739push_switch (tree switch_stmt)
a5894242 2740{
0ac1b889 2741 struct cp_switch *p = XNEW (struct cp_switch);
a5894242
MS
2742 p->level = current_binding_level;
2743 p->next = switch_stack;
56cb9733
MM
2744 p->switch_stmt = switch_stmt;
2745 p->cases = splay_tree_new (case_compare, NULL, NULL);
a5894242
MS
2746 switch_stack = p;
2747}
2748
2749void
11f6b451 2750pop_switch (void)
a5894242 2751{
6de9cd9a 2752 struct cp_switch *cs = switch_stack;
fbc315db 2753 location_t switch_location;
6de9cd9a
DN
2754
2755 /* Emit warnings as needed. */
fbc315db
ILT
2756 if (EXPR_HAS_LOCATION (cs->switch_stmt))
2757 switch_location = EXPR_LOCATION (cs->switch_stmt);
2758 else
2759 switch_location = input_location;
dddf9a0a
AP
2760 if (!processing_template_decl)
2761 c_do_switch_warnings (cs->cases, switch_location,
2762 SWITCH_STMT_TYPE (cs->switch_stmt),
2763 SWITCH_STMT_COND (cs->switch_stmt));
5362b086 2764
56cb9733 2765 splay_tree_delete (cs->cases);
a5894242 2766 switch_stack = switch_stack->next;
bedda2da 2767 free (cs);
a5894242
MS
2768}
2769
b0a1da19
JM
2770/* Note that we've seen a definition of a case label, and complain if this
2771 is a bad place for one. */
e92cc029 2772
3e4d04a1 2773tree
11f6b451 2774finish_case_label (tree low_value, tree high_value)
8d08fdba 2775{
3e4d04a1 2776 tree cond, r;
926ce8bd 2777 struct cp_binding_level *p;
a5894242 2778
56cb9733
MM
2779 if (processing_template_decl)
2780 {
8f17b5c5
MM
2781 tree label;
2782
56cb9733
MM
2783 /* For templates, just add the case label; we'll do semantic
2784 analysis at instantiation-time. */
8f17b5c5 2785 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
3e4d04a1 2786 return add_stmt (build_case_label (low_value, high_value, label));
56cb9733
MM
2787 }
2788
2789 /* Find the condition on which this switch statement depends. */
ebaae582 2790 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
56cb9733
MM
2791 if (cond && TREE_CODE (cond) == TREE_LIST)
2792 cond = TREE_VALUE (cond);
56cb9733 2793
1799e5d5
RH
2794 if (!check_switch_goto (switch_stack->level))
2795 return error_mark_node;
2796
a6c0a76c
SB
2797 r = c_add_case_label (switch_stack->cases, cond, TREE_TYPE (cond),
2798 low_value, high_value);
8d08fdba 2799
3dc9aec6 2800 /* After labels, make any new cleanups in the function go into their
8d08fdba 2801 own new (temporary) binding contour. */
caf93cb0
EC
2802 for (p = current_binding_level;
2803 p->kind != sk_function_parms;
a7e8c268 2804 p = p->level_chain)
3dc9aec6 2805 p->more_cleanups_ok = 0;
3e4d04a1
RH
2806
2807 return r;
8d08fdba
MS
2808}
2809\f
7ddedda4
MM
2810/* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2811
e2500fed 2812static hashval_t
11f6b451 2813typename_hash (const void* k)
7ddedda4 2814{
e2500fed 2815 hashval_t hash;
741ac903 2816 const_tree const t = (const_tree) k;
7ddedda4 2817
7bdfd72e
KG
2818 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2819 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
7ddedda4
MM
2820
2821 return hash;
2822}
2823
fc6a28d7
MM
2824typedef struct typename_info {
2825 tree scope;
2826 tree name;
2827 tree template_id;
2828 bool enum_p;
2829 bool class_p;
2830} typename_info;
2831
06d40de8
DG
2832/* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
2833 really of type `typename_info*' */
7ddedda4 2834
e2500fed 2835static int
11f6b451 2836typename_compare (const void * k1, const void * k2)
7ddedda4 2837{
741ac903
KG
2838 const_tree const t1 = (const_tree) k1;
2839 const typename_info *const t2 = (const typename_info *) k2;
fc6a28d7
MM
2840
2841 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2842 && TYPE_CONTEXT (t1) == t2->scope
2843 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2844 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2845 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
7ddedda4
MM
2846}
2847
45869a6c 2848/* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
fc6a28d7 2849 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
c8094d83 2850
45869a6c
MM
2851 Returns the new TYPENAME_TYPE. */
2852
e2500fed
GK
2853static GTY ((param_is (union tree_node))) htab_t typename_htab;
2854
8ce33230 2855static tree
fc6a28d7
MM
2856build_typename_type (tree context, tree name, tree fullname,
2857 enum tag_types tag_type)
45869a6c
MM
2858{
2859 tree t;
2860 tree d;
fc6a28d7 2861 typename_info ti;
fad205ff 2862 void **e;
fc6a28d7 2863 hashval_t hash;
45869a6c 2864
e2500fed 2865 if (typename_htab == NULL)
fc6a28d7
MM
2866 typename_htab = htab_create_ggc (61, &typename_hash,
2867 &typename_compare, NULL);
2868
c8094d83 2869 ti.scope = FROB_CONTEXT (context);
fc6a28d7
MM
2870 ti.name = name;
2871 ti.template_id = fullname;
2872 ti.enum_p = tag_type == enum_type;
2873 ti.class_p = (tag_type == class_type
2874 || tag_type == record_type
2875 || tag_type == union_type);
2876 hash = (htab_hash_pointer (ti.scope)
2877 ^ htab_hash_pointer (ti.name));
45869a6c 2878
7ddedda4 2879 /* See if we already have this type. */
fc6a28d7 2880 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
e2500fed
GK
2881 if (*e)
2882 t = (tree) *e;
7ddedda4 2883 else
fc6a28d7
MM
2884 {
2885 /* Build the TYPENAME_TYPE. */
9e1e64ec 2886 t = cxx_make_type (TYPENAME_TYPE);
fc6a28d7
MM
2887 TYPE_CONTEXT (t) = ti.scope;
2888 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2889 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2890 TYPENAME_IS_CLASS_P (t) = ti.class_p;
c8094d83 2891
fc6a28d7
MM
2892 /* Build the corresponding TYPE_DECL. */
2893 d = build_decl (TYPE_DECL, name, t);
2894 TYPE_NAME (TREE_TYPE (d)) = d;
2895 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2896 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2897 DECL_ARTIFICIAL (d) = 1;
2898
2899 /* Store it in the hash table. */
2900 *e = t;
06d40de8
DG
2901
2902 /* TYPENAME_TYPEs must always be compared structurally, because
2903 they may or may not resolve down to another type depending on
2904 the currently open classes. */
2905 SET_TYPE_STRUCTURAL_EQUALITY (t);
fc6a28d7 2906 }
c8094d83 2907
45869a6c
MM
2908 return t;
2909}
2910
fc6a28d7
MM
2911/* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
2912 provided to name the type. Returns an appropriate type, unless an
2913 error occurs, in which case error_mark_node is returned. If we
2914 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2915 return that, rather than the _TYPE it corresponds to, in other
2916 cases we look through the type decl. If TF_ERROR is set, complain
2917 about errors, otherwise be quiet. */
3baa501d 2918
5566b478 2919tree
fc6a28d7
MM
2920make_typename_type (tree context, tree name, enum tag_types tag_type,
2921 tsubst_flags_t complain)
5566b478 2922{
b2b7d40a 2923 tree fullname;
7d3bec9d
NS
2924 tree t;
2925 bool want_template;
a80e4195 2926
5dc5d13c
KL
2927 if (name == error_mark_node
2928 || context == NULL_TREE
2929 || context == error_mark_node)
2930 return error_mark_node;
2931
2f939d94 2932 if (TYPE_P (name))
78638e24 2933 {
68642fb6
UD
2934 if (!(TYPE_LANG_SPECIFIC (name)
2935 && (CLASSTYPE_IS_TEMPLATE (name)
78638e24
MM
2936 || CLASSTYPE_USE_TEMPLATE (name))))
2937 name = TYPE_IDENTIFIER (name);
2938 else
2939 /* Create a TEMPLATE_ID_EXPR for the type. */
2940 name = build_nt (TEMPLATE_ID_EXPR,
2941 CLASSTYPE_TI_TEMPLATE (name),
2942 CLASSTYPE_TI_ARGS (name));
2943 }
653cc74a 2944 else if (TREE_CODE (name) == TYPE_DECL)
a80e4195 2945 name = DECL_NAME (name);
b2b7d40a
JM
2946
2947 fullname = name;
2948
2949 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11686454
JM
2950 {
2951 name = TREE_OPERAND (name, 0);
2952 if (TREE_CODE (name) == TEMPLATE_DECL)
2953 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
50ef2c18
MM
2954 else if (TREE_CODE (name) == OVERLOAD)
2955 {
2956 error ("%qD is not a type", name);
2957 return error_mark_node;
2958 }
11686454 2959 }
8a2b77e7
JM
2960 if (TREE_CODE (name) == TEMPLATE_DECL)
2961 {
2d01edd7 2962 error ("%qD used without template parameters", name);
8a2b77e7
JM
2963 return error_mark_node;
2964 }
50bc768d 2965 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
0c88d886 2966 gcc_assert (TYPE_P (context));
04ddee1b 2967
7d3bec9d
NS
2968 /* When the CONTEXT is a dependent type, NAME could refer to a
2969 dependent base class of CONTEXT. So we cannot peek inside it,
2970 even if CONTEXT is a currently open scope. */
2971 if (dependent_type_p (context))
2972 return build_typename_type (context, name, fullname, tag_type);
caf93cb0 2973
9e1e64ec 2974 if (!MAYBE_CLASS_TYPE_P (context))
7d3bec9d
NS
2975 {
2976 if (complain & tf_error)
2977 error ("%q#T is not a class", context);
2978 return error_mark_node;
5566b478 2979 }
7d3bec9d
NS
2980
2981 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
2982
2983 /* We should only set WANT_TYPE when we're a nested typename type.
2984 Then we can give better diagnostics if we find a non-type. */
2985 t = lookup_field (context, name, 0, /*want_type=*/true);
2986 if (!t)
11249cf0 2987 {
4f2b0fb2 2988 if (complain & tf_error)
7d3bec9d
NS
2989 error (want_template ? "no class template named %q#T in %q#T"
2990 : "no type named %q#T in %q#T", name, context);
11249cf0
MM
2991 return error_mark_node;
2992 }
7d3bec9d
NS
2993
2994 if (want_template && !DECL_CLASS_TEMPLATE_P (t))
2995 {
2996 if (complain & tf_error)
2997 error ("%<typename %T::%D%> names %q#T, which is not a class template",
2998 context, name, t);
2999 return error_mark_node;
3000 }
3001 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3002 {
3003 if (complain & tf_error)
3004 error ("%<typename %T::%D%> names %q#T, which is not a type",
3005 context, name, t);
3006 return error_mark_node;
3007 }
3008
3009 if (complain & tf_error)
02022f3a 3010 perform_or_defer_access_check (TYPE_BINFO (context), t, t);
7d3bec9d
NS
3011
3012 if (want_template)
3013 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3014 NULL_TREE, context,
3015 /*entering_scope=*/0,
3016 tf_warning_or_error | tf_user);
3017
3018 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3019 t = TREE_TYPE (t);
3020
3021 return t;
5566b478
MS
3022}
3023
b939a023 3024/* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
c8094d83 3025 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
b939a023
KL
3026 in which case error_mark_node is returned.
3027
3028 If PARM_LIST is non-NULL, also make sure that the template parameter
3029 list of TEMPLATE_DECL matches.
3030
3031 If COMPLAIN zero, don't complain about any errors that occur. */
b8c6534b
KL
3032
3033tree
b939a023
KL
3034make_unbound_class_template (tree context, tree name, tree parm_list,
3035 tsubst_flags_t complain)
b8c6534b
KL
3036{
3037 tree t;
3038 tree d;
3039
3040 if (TYPE_P (name))
3041 name = TYPE_IDENTIFIER (name);
3042 else if (DECL_P (name))
3043 name = DECL_NAME (name);
8dc2b103 3044 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
b8c6534b 3045
9579624e 3046 if (!dependent_type_p (context)
b8c6534b
KL
3047 || currently_open_class (context))
3048 {
3049 tree tmpl = NULL_TREE;
3050
9e1e64ec 3051 if (MAYBE_CLASS_TYPE_P (context))
86ac0575 3052 tmpl = lookup_field (context, name, 0, false);
b8c6534b
KL
3053
3054 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
3055 {
4f09be91 3056 if (complain & tf_error)
2d01edd7 3057 error ("no class template named %q#T in %q#T", name, context);
b8c6534b
KL
3058 return error_mark_node;
3059 }
caf93cb0 3060
b939a023
KL
3061 if (parm_list
3062 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3063 {
3064 if (complain & tf_error)
3065 {
3066 error ("template parameters do not match template");
dee15844 3067 error ("%q+D declared here", tmpl);
b939a023
KL
3068 }
3069 return error_mark_node;
3070 }
3071
2b59fc25 3072 if (complain & tf_error)
02022f3a 3073 perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
b8c6534b
KL
3074
3075 return tmpl;
3076 }
3077
3078 /* Build the UNBOUND_CLASS_TEMPLATE. */
9e1e64ec 3079 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
b8c6534b
KL
3080 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3081 TREE_TYPE (t) = NULL_TREE;
06d40de8 3082 SET_TYPE_STRUCTURAL_EQUALITY (t);
b8c6534b
KL
3083
3084 /* Build the corresponding TEMPLATE_DECL. */
3085 d = build_decl (TEMPLATE_DECL, name, t);
3086 TYPE_NAME (TREE_TYPE (d)) = d;
3087 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3088 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3089 DECL_ARTIFICIAL (d) = 1;
b939a023 3090 DECL_TEMPLATE_PARMS (d) = parm_list;
b8c6534b
KL
3091
3092 return t;
3093}
3094
8d08fdba 3095\f
47aa0df4 3096
8d08fdba 3097/* Push the declarations of builtin types into the namespace.
4b0d3cbe
MM
3098 RID_INDEX is the index of the builtin type in the array
3099 RID_POINTERS. NAME is the name used when looking up the builtin
3100 type. TYPE is the _TYPE node for the builtin type. */
8d08fdba 3101
eaa7c03f 3102void
caf93cb0 3103record_builtin_type (enum rid rid_index,
0cbd7506
MS
3104 const char* name,
3105 tree type)
8d08fdba
MS
3106{
3107 tree rname = NULL_TREE, tname = NULL_TREE;
a703fb38 3108 tree tdecl = NULL_TREE;
8d08fdba 3109
0e5921e8 3110 if ((int) rid_index < (int) RID_MAX)
8d08fdba
MS
3111 rname = ridpointers[(int) rid_index];
3112 if (name)
3113 tname = get_identifier (name);
3114
4b0d3cbe
MM
3115 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3116 eliminated. Built-in types should not be looked up name; their
3117 names are keywords that the parser can recognize. However, there
3118 is code in c-common.c that uses identifier_global_value to look
3119 up built-in types by name. */
8d08fdba
MS
3120 if (tname)
3121 {
4b0d3cbe
MM
3122 tdecl = build_decl (TYPE_DECL, tname, type);
3123 DECL_ARTIFICIAL (tdecl) = 1;
a7e8c268 3124 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
8d08fdba 3125 }
4b0d3cbe 3126 if (rname)
8d08fdba 3127 {
4b0d3cbe 3128 if (!tdecl)
8d08fdba 3129 {
4b0d3cbe
MM
3130 tdecl = build_decl (TYPE_DECL, rname, type);
3131 DECL_ARTIFICIAL (tdecl) = 1;
8d08fdba 3132 }
4b0d3cbe 3133 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
8d08fdba 3134 }
4b0d3cbe
MM
3135
3136 if (!TYPE_NAME (type))
3137 TYPE_NAME (type) = tdecl;
47aa0df4
MM
3138
3139 if (tdecl)
21d13d83 3140 debug_hooks->type_decl (tdecl, 0);
8d08fdba
MS
3141}
3142
eff71ab0 3143/* Record one of the standard Java types.
4d8a1dd6
MM
3144 * Declare it as having the given NAME.
3145 * If SIZE > 0, it is the size of one of the integral types;
3146 * otherwise it is the negative of the size of one of the other types. */
eff71ab0
PB
3147
3148static tree
11f6b451 3149record_builtin_java_type (const char* name, int size)
eff71ab0
PB
3150{
3151 tree type, decl;
3152 if (size > 0)
3153 type = make_signed_type (size);
3154 else if (size > -32)
70fef63a 3155 { /* "__java_char" or ""__java_boolean". */
eff71ab0 3156 type = make_unsigned_type (-size);
70fef63a 3157 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
eff71ab0
PB
3158 }
3159 else
a1c65f9f 3160 { /* "__java_float" or ""__java_double". */
eff71ab0
PB
3161 type = make_node (REAL_TYPE);
3162 TYPE_PRECISION (type) = - size;
3163 layout_type (type);
3164 }
0e5921e8 3165 record_builtin_type (RID_MAX, name, type);
eff71ab0 3166 decl = TYPE_NAME (type);
e229f2cd
PB
3167
3168 /* Suppress generate debug symbol entries for these types,
3169 since for normal C++ they are just clutter.
a1c65f9f 3170 However, push_lang_context undoes this if extern "Java" is seen. */
eff71ab0 3171 DECL_IGNORED_P (decl) = 1;
e229f2cd 3172
eff71ab0
PB
3173 TYPE_FOR_JAVA (type) = 1;
3174 return type;
3175}
3176
3b426391 3177/* Push a type into the namespace so that the back ends ignore it. */
036407f7
ML
3178
3179static void
11f6b451 3180record_unknown_type (tree type, const char* name)
036407f7
ML
3181{
3182 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
3183 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3184 DECL_IGNORED_P (decl) = 1;
3185 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3186 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3187 TYPE_ALIGN (type) = 1;
11cf4d18 3188 TYPE_USER_ALIGN (type) = 0;
036407f7 3189 TYPE_MODE (type) = TYPE_MODE (void_type_node);
68642fb6 3190}
036407f7 3191
13a44ee0 3192/* A string for which we should create an IDENTIFIER_NODE at
d43829f9
MM
3193 startup. */
3194
3195typedef struct predefined_identifier
3196{
3197 /* The name of the identifier. */
8b60264b 3198 const char *const name;
d43829f9 3199 /* The place where the IDENTIFIER_NODE should be stored. */
8b60264b 3200 tree *const node;
838dfd8a 3201 /* Nonzero if this is the name of a constructor or destructor. */
8b60264b 3202 const int ctor_or_dtor_p;
d43829f9
MM
3203} predefined_identifier;
3204
3205/* Create all the predefined identifiers. */
3206
3207static void
11f6b451 3208initialize_predefined_identifiers (void)
d43829f9 3209{
8b60264b 3210 const predefined_identifier *pid;
d43829f9
MM
3211
3212 /* A table of identifiers to create at startup. */
8b60264b 3213 static const predefined_identifier predefined_identifiers[] = {
298d6f60
MM
3214 { "C++", &lang_name_cplusplus, 0 },
3215 { "C", &lang_name_c, 0 },
3216 { "Java", &lang_name_java, 0 },
d6eec208
MM
3217 /* Some of these names have a trailing space so that it is
3218 impossible for them to conflict with names written by users. */
3219 { "__ct ", &ctor_identifier, 1 },
3220 { "__base_ctor ", &base_ctor_identifier, 1 },
3221 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3222 { "__dt ", &dtor_identifier, 1 },
3223 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3224 { "__base_dtor ", &base_dtor_identifier, 1 },
3225 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
298d6f60 3226 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
298d6f60
MM
3227 { "nelts", &nelts_identifier, 0 },
3228 { THIS_NAME, &this_identifier, 0 },
c4372ef4 3229 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
298d6f60 3230 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
298d6f60 3231 { "_vptr", &vptr_identifier, 0 },
3ec6bad3 3232 { "__vtt_parm", &vtt_parm_identifier, 0 },
82a2669e 3233 { "::", &global_scope_name, 0 },
1f6e1acc 3234 { "std", &std_identifier, 0 },
298d6f60 3235 { NULL, NULL, 0 }
d43829f9
MM
3236 };
3237
3238 for (pid = predefined_identifiers; pid->name; ++pid)
298d6f60
MM
3239 {
3240 *pid->node = get_identifier (pid->name);
3241 if (pid->ctor_or_dtor_p)
3242 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3243 }
d43829f9
MM
3244}
3245
8d08fdba
MS
3246/* Create the predefined scalar types of C,
3247 and some nodes representing standard constants (0, 1, (void *)0).
3248 Initialize the global binding level.
3249 Make definitions for built-in primitive functions. */
3250
3251void
11f6b451 3252cxx_init_decl_processing (void)
8d08fdba 3253{
10841285
MM
3254 tree void_ftype;
3255 tree void_ftype_ptr;
8d08fdba 3256
8c1d6d62 3257 build_common_tree_nodes (flag_signed_char, false);
6de66680 3258
d43829f9
MM
3259 /* Create all the identifiers we need. */
3260 initialize_predefined_identifiers ();
8d08fdba 3261
9cd64686
MM
3262 /* Create the global variables. */
3263 push_to_top_level ();
8012c983 3264
82a2669e 3265 current_function_decl = NULL_TREE;
1ec57cf0 3266 current_binding_level = NULL;
a1c65f9f 3267 /* Enter the global namespace. */
50bc768d 3268 gcc_assert (global_namespace == NULL_TREE);
82a2669e 3269 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
0cbd7506 3270 void_type_node);
b9e75696 3271 TREE_PUBLIC (global_namespace) = 1;
ac20c67a 3272 begin_scope (sk_namespace, global_namespace);
82a2669e 3273
30394414
JM
3274 current_lang_name = NULL_TREE;
3275
ddbfd28d
GK
3276 if (flag_visibility_ms_compat)
3277 default_visibility = VISIBILITY_HIDDEN;
3278
8d08fdba
MS
3279 /* Initially, C. */
3280 current_lang_name = lang_name_c;
3281
6bcedb4e 3282 /* Create the `std' namespace. */
1dbb6023
NS
3283 push_namespace (std_identifier);
3284 std_node = current_namespace;
3285 pop_namespace ();
5362b086 3286
eaa7c03f 3287 c_common_nodes_and_builtins ();
37c46b43 3288
4d8a1dd6
MM
3289 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3290 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3291 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3292 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3293 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3294 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3295 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3296 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
eff71ab0 3297
7d60be94
NS
3298 integer_two_node = build_int_cst (NULL_TREE, 2);
3299 integer_three_node = build_int_cst (NULL_TREE, 3);
8d08fdba 3300
255512c1 3301 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
de7df9eb
JM
3302 truthvalue_type_node = boolean_type_node;
3303 truthvalue_false_node = boolean_false_node;
3304 truthvalue_true_node = boolean_true_node;
2986ae00 3305
4cc1d462 3306 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
5fd8e536
JM
3307
3308#if 0
3e411c3f 3309 record_builtin_type (RID_MAX, NULL, string_type_node);
5fd8e536
JM
3310#endif
3311
1f84ec23
MM
3312 delta_type_node = ptrdiff_type_node;
3313 vtable_index_type = ptrdiff_type_node;
c7e266a6 3314
3ec6bad3 3315 vtt_parm_type = build_pointer_type (const_ptr_type_node);
10841285
MM
3316 void_ftype = build_function_type (void_type_node, void_list_node);
3317 void_ftype_ptr = build_function_type (void_type_node,
3318 tree_cons (NULL_TREE,
caf93cb0 3319 ptr_type_node,
10841285 3320 void_list_node));
824b9a4c 3321 void_ftype_ptr
4cc1d462 3322 = build_exception_variant (void_ftype_ptr, empty_except_spec);
8d08fdba 3323
8d08fdba
MS
3324 /* C++ extensions */
3325
3326 unknown_type_node = make_node (UNKNOWN_TYPE);
036407f7
ML
3327 record_unknown_type (unknown_type_node, "unknown type");
3328
8d08fdba
MS
3329 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3330 TREE_TYPE (unknown_type_node) = unknown_type_node;
a6967cc0 3331
a6967cc0
JM
3332 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3333 result. */
8d08fdba
MS
3334 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3335 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3336
09357846
JM
3337 init_list_type_node = make_node (UNKNOWN_TYPE);
3338 record_unknown_type (init_list_type_node, "init list");
3339
c4372ef4
NS
3340 {
3341 /* Make sure we get a unique function type, so we can give
3342 its pointer type a name. (This wins for gdb.) */
3343 tree vfunc_type = make_node (FUNCTION_TYPE);
3344 TREE_TYPE (vfunc_type) = integer_type_node;
3345 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3346 layout_type (vfunc_type);
3347
3348 vtable_entry_type = build_pointer_type (vfunc_type);
3349 }
0e5921e8 3350 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
8d08fdba 3351
8d08fdba 3352 vtbl_type_node
52bf7d5d 3353 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
8d08fdba 3354 layout_type (vtbl_type_node);
91063b51 3355 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3e411c3f 3356 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
849da744
MM
3357 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3358 layout_type (vtbl_ptr_type_node);
3e411c3f 3359 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
8d08fdba 3360
1f84ec23
MM
3361 push_namespace (get_identifier ("__cxxabiv1"));
3362 abi_node = current_namespace;
3363 pop_namespace ();
6633d636 3364
2c73f9f5 3365 global_type_node = make_node (LANG_TYPE);
036407f7 3366 record_unknown_type (global_type_node, "global type");
2c73f9f5 3367
db5ae43f
MS
3368 /* Now, C++. */
3369 current_lang_name = lang_name_cplusplus;
8d08fdba 3370
ced78d8b 3371 {
4b0d3cbe
MM
3372 tree bad_alloc_id;
3373 tree bad_alloc_type_node;
3374 tree bad_alloc_decl;
3375 tree newtype, deltype;
10841285
MM
3376 tree ptr_ftype_sizetype;
3377
1dbb6023 3378 push_namespace (std_identifier);
4b0d3cbe 3379 bad_alloc_id = get_identifier ("bad_alloc");
9e1e64ec 3380 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4b0d3cbe 3381 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
caf93cb0 3382 bad_alloc_decl
4b0d3cbe
MM
3383 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3384 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3385 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
1dbb6023 3386 pop_namespace ();
caf93cb0
EC
3387
3388 ptr_ftype_sizetype
10841285
MM
3389 = build_function_type (ptr_type_node,
3390 tree_cons (NULL_TREE,
c9f8536c 3391 size_type_node,
10841285 3392 void_list_node));
2c73f9f5 3393 newtype = build_exception_variant
0ba8a114
NS
3394 (ptr_ftype_sizetype, add_exception_specifier
3395 (NULL_TREE, bad_alloc_type_node, -1));
4cc1d462 3396 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
596ea4e5
AS
3397 push_cp_library_fn (NEW_EXPR, newtype);
3398 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3399 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3400 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
ced78d8b 3401 }
8d08fdba
MS
3402
3403 abort_fndecl
1f84ec23 3404 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
8d08fdba 3405
8d08fdba
MS
3406 /* Perform other language dependent initializations. */
3407 init_class_processing ();
db48b831 3408 init_rtti_processing ();
8d08fdba 3409
6467930b 3410 if (flag_exceptions)
8d2733ca 3411 init_exception_processing ();
9e9ff709 3412
7fcdf4c2 3413 if (! supports_one_only ())
72b7eeff 3414 flag_weak = 0;
8d08fdba 3415
2ce07e2d 3416 make_fname_decl = cp_make_fname_decl;
0ba8a114 3417 start_fname_decls ();
8d08fdba 3418
e9a25f70 3419 /* Show we use EH for cleanups. */
6de9cd9a
DN
3420 if (flag_exceptions)
3421 using_eh_for_cleanups ();
62c154ed
JM
3422}
3423
0ba8a114 3424/* Generate an initializer for a function naming variable from
bb885938 3425 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
f4f206f4 3426 filled in with the type of the init. */
0ba8a114
NS
3427
3428tree
bb885938 3429cp_fname_init (const char* name, tree *type_p)
0ba8a114
NS
3430{
3431 tree domain = NULL_TREE;
3432 tree type;
3433 tree init = NULL_TREE;
3434 size_t length = 0;
3435
3436 if (name)
3437 {
3438 length = strlen (name);
3439 domain = build_index_type (size_int (length));
3440 init = build_string (length + 1, name);
3441 }
caf93cb0 3442
0ba8a114
NS
3443 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3444 type = build_cplus_array_type (type, domain);
3445
bb885938 3446 *type_p = type;
caf93cb0 3447
0ba8a114
NS
3448 if (init)
3449 TREE_TYPE (init) = type;
3450 else
bb885938 3451 init = error_mark_node;
caf93cb0 3452
0ba8a114
NS
3453 return init;
3454}
3455
2ce07e2d
NS
3456/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3457 decl, NAME is the initialization string and TYPE_DEP indicates whether
3458 NAME depended on the type of the function. We make use of that to detect
0ba8a114 3459 __PRETTY_FUNCTION__ inside a template fn. This is being done
a692ad2e 3460 lazily at the point of first use, so we mustn't push the decl now. */
2ce07e2d
NS
3461
3462static tree
11f6b451 3463cp_make_fname_decl (tree id, int type_dep)
2ce07e2d 3464{
83182544 3465 const char *const name = (type_dep && processing_template_decl
e913996d 3466 ? NULL : fname_as_string (type_dep));
bb885938
NS
3467 tree type;
3468 tree init = cp_fname_init (name, &type);
3469 tree decl = build_decl (VAR_DECL, id, type);
2ce07e2d 3470
9e6f2e7d 3471 if (name)
b1d5455a 3472 free (CONST_CAST (char *, name));
9e6f2e7d 3473
6cce57b0 3474 /* As we're using pushdecl_with_scope, we must set the context. */
0ba8a114
NS
3475 DECL_CONTEXT (decl) = current_function_decl;
3476 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
caf93cb0 3477
2ce07e2d
NS
3478 TREE_STATIC (decl) = 1;
3479 TREE_READONLY (decl) = 1;
2ce07e2d 3480 DECL_ARTIFICIAL (decl) = 1;
caf93cb0 3481
0ba8a114 3482 TREE_USED (decl) = 1;
5362b086 3483
6cce57b0
JM
3484 if (current_function_decl)
3485 {
3486 struct cp_binding_level *b = current_binding_level;
a7e8c268 3487 while (b->level_chain->kind != sk_function_parms)
6cce57b0 3488 b = b->level_chain;
d63d5d0c 3489 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3db45ab5 3490 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
d174af6c 3491 LOOKUP_ONLYCONVERTING);
e913996d 3492 }
ad16ae7f
MM
3493 else
3494 pushdecl_top_level_and_finish (decl, init);
caf93cb0 3495
2ce07e2d
NS
3496 return decl;
3497}
3498
c79efc4d
RÁE
3499static tree
3500builtin_function_1 (tree decl, tree context)
3501{
3502 tree id = DECL_NAME (decl);
3503 const char *name = IDENTIFIER_POINTER (id);
8d08fdba 3504
c79efc4d 3505 retrofit_lang_decl (decl);
0c11ada6 3506
c79efc4d
RÁE
3507 /* All nesting of C++ functions is lexical; there is never a "static
3508 chain" in the sense of GNU C nested functions. */
3509 DECL_NO_STATIC_CHAIN (decl) = 1;
3510
3511 DECL_ARTIFICIAL (decl) = 1;
3512 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3513 SET_DECL_LANGUAGE (decl, lang_c);
3514 /* Runtime library routines are, by definition, available in an
3515 external shared object. */
3516 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3517 DECL_VISIBILITY_SPECIFIED (decl) = 1;
8d08fdba 3518
d52e4867 3519 DECL_CONTEXT (decl) = context;
12a22e76 3520
6bcedb4e 3521 pushdecl (decl);
6bcedb4e 3522
d63d5d0c
ILT
3523 /* A function in the user's namespace should have an explicit
3524 declaration before it is used. Mark the built-in function as
3525 anticipated but not actually declared. */
935d1834
ZW
3526 if (name[0] != '_' || name[1] != '_')
3527 DECL_ANTICIPATED (decl) = 1;
012c4da9
JJ
3528 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3529 {
3530 size_t len = strlen (name);
3531
3532 /* Treat __*_chk fortification functions as anticipated as well,
3533 unless they are __builtin_*. */
3534 if (len > strlen ("___chk")
3535 && memcmp (name + len - strlen ("_chk"),
3536 "_chk", strlen ("_chk") + 1) == 0)
3537 DECL_ANTICIPATED (decl) = 1;
3538 }
935d1834 3539
8d08fdba
MS
3540 return decl;
3541}
7f4edbcb 3542
d52e4867 3543tree
c79efc4d 3544cxx_builtin_function (tree decl)
d52e4867 3545{
c79efc4d
RÁE
3546 tree id = DECL_NAME (decl);
3547 const char *name = IDENTIFIER_POINTER (id);
d52e4867
RS
3548 /* All builtins that don't begin with an '_' should additionally
3549 go in the 'std' namespace. */
3550 if (name[0] != '_')
3551 {
e5b44dfb 3552 tree decl2 = copy_node(decl);
d52e4867 3553 push_namespace (std_identifier);
e5b44dfb 3554 builtin_function_1 (decl2, std_node);
d52e4867
RS
3555 pop_namespace ();
3556 }
3557
e5b44dfb 3558 return builtin_function_1 (decl, NULL_TREE);
d52e4867
RS
3559}
3560
0c11ada6
JM
3561/* Generate a FUNCTION_DECL with the typical flags for a runtime library
3562 function. Not called directly. */
3563
3564static tree
11f6b451 3565build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
0c11ada6
JM
3566{
3567 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3568 DECL_EXTERNAL (fn) = 1;
3569 TREE_PUBLIC (fn) = 1;
3570 DECL_ARTIFICIAL (fn) = 1;
596ea4e5 3571 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
5d2ed28c 3572 SET_DECL_LANGUAGE (fn, lang_c);
73a8adb6
MM
3573 /* Runtime library routines are, by definition, available in an
3574 external shared object. */
3575 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3576 DECL_VISIBILITY_SPECIFIED (fn) = 1;
0c11ada6
JM
3577 return fn;
3578}
c2a37c55 3579
0c11ada6
JM
3580/* Returns the _DECL for a library function with C linkage.
3581 We assume that such functions never throw; if this is incorrect,
3582 callers should unset TREE_NOTHROW. */
c2a37c55 3583
448083e5 3584static tree
11f6b451 3585build_library_fn (tree name, tree type)
0c11ada6 3586{
f59d2aad
RH
3587 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3588 TREE_NOTHROW (fn) = 1;
3589 return fn;
0c11ada6
JM
3590}
3591
3592/* Returns the _DECL for a library function with C++ linkage. */
3593
596ea4e5 3594static tree
11f6b451 3595build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
0c11ada6 3596{
596ea4e5 3597 tree fn = build_library_fn_1 (name, operator_code, type);
0c11ada6 3598 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6bbf1598 3599 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
5d2ed28c 3600 SET_DECL_LANGUAGE (fn, lang_cplusplus);
0c11ada6
JM
3601 return fn;
3602}
3603
3604/* Like build_library_fn, but takes a C string instead of an
3605 IDENTIFIER_NODE. */
3606
3607tree
11f6b451 3608build_library_fn_ptr (const char* name, tree type)
7f4edbcb 3609{
0c11ada6
JM
3610 return build_library_fn (get_identifier (name), type);
3611}
3612
3613/* Like build_cp_library_fn, but takes a C string instead of an
3614 IDENTIFIER_NODE. */
3615
3616tree
11f6b451 3617build_cp_library_fn_ptr (const char* name, tree type)
0c11ada6 3618{
596ea4e5 3619 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
3620}
3621
3622/* Like build_library_fn, but also pushes the function so that we will
448083e5
PC
3623 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
3624 may throw exceptions listed in RAISES. */
0c11ada6
JM
3625
3626tree
448083e5 3627push_library_fn (tree name, tree type, tree raises)
0c11ada6 3628{
448083e5
PC
3629 tree fn;
3630
3631 if (raises)
3632 type = build_exception_variant (type, raises);
3633
3634 fn = build_library_fn (name, type);
0c11ada6
JM
3635 pushdecl_top_level (fn);
3636 return fn;
3637}
3638
3639/* Like build_cp_library_fn, but also pushes the function so that it
3640 will be found by normal lookup. */
3641
596ea4e5 3642static tree
11f6b451 3643push_cp_library_fn (enum tree_code operator_code, tree type)
0c11ada6 3644{
5362b086 3645 tree fn = build_cp_library_fn (ansi_opname (operator_code),
596ea4e5
AS
3646 operator_code,
3647 type);
0c11ada6
JM
3648 pushdecl (fn);
3649 return fn;
3650}
3651
3652/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3653 a FUNCTION_TYPE. */
3654
3655tree
11f6b451 3656push_void_library_fn (tree name, tree parmtypes)
0c11ada6
JM
3657{
3658 tree type = build_function_type (void_type_node, parmtypes);
448083e5 3659 return push_library_fn (name, type, NULL_TREE);
0c11ada6
JM
3660}
3661
cf74fb86 3662/* Like push_library_fn, but also note that this function throws
0c11ada6
JM
3663 and does not return. Used for __throw_foo and the like. */
3664
3665tree
11f6b451 3666push_throw_library_fn (tree name, tree type)
0c11ada6 3667{
448083e5 3668 tree fn = push_library_fn (name, type, NULL_TREE);
0c11ada6
JM
3669 TREE_THIS_VOLATILE (fn) = 1;
3670 TREE_NOTHROW (fn) = 0;
3671 return fn;
7f4edbcb 3672}
8d08fdba 3673\f
61a127b3
MM
3674/* When we call finish_struct for an anonymous union, we create
3675 default copy constructors and such. But, an anonymous union
3676 shouldn't have such things; this function undoes the damage to the
3677 anonymous union type T.
3678
3679 (The reason that we create the synthesized methods is that we don't
3680 distinguish `union { int i; }' from `typedef union { int i; } U'.
3681 The first is an anonymous union; the second is just an ordinary
3682 union type.) */
3683
3684void
11f6b451 3685fixup_anonymous_aggr (tree t)
61a127b3
MM
3686{
3687 tree *q;
3688
f4f206f4 3689 /* Wipe out memory of synthesized methods. */
0fcedd9c 3690 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
61a127b3
MM
3691 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3692 TYPE_HAS_INIT_REF (t) = 0;
3693 TYPE_HAS_CONST_INIT_REF (t) = 0;
3694 TYPE_HAS_ASSIGN_REF (t) = 0;
61a127b3
MM
3695 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3696
3697 /* Splice the implicitly generated functions out of the TYPE_METHODS
3698 list. */
3699 q = &TYPE_METHODS (t);
3700 while (*q)
3701 {
3702 if (DECL_ARTIFICIAL (*q))
3703 *q = TREE_CHAIN (*q);
3704 else
3705 q = &TREE_CHAIN (*q);
3706 }
3707
cab1f180 3708 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
61a127b3 3709 if (TYPE_METHODS (t))
24f58e74
PC
3710 {
3711 tree decl = TYPE_MAIN_DECL (t);
3712
3713 if (TREE_CODE (t) != UNION_TYPE)
3714 error ("%Jan anonymous struct cannot have function members", decl);
3715 else
3716 error ("%Jan anonymous union cannot have function members", decl);
3717 }
a1c2b86d
JJ
3718
3719 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3720 assignment operators (because they cannot have these methods themselves).
3721 For anonymous unions this is already checked because they are not allowed
3722 in any union, otherwise we have to check it. */
3723 if (TREE_CODE (t) != UNION_TYPE)
3724 {
3725 tree field, type;
3726
3727 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3728 if (TREE_CODE (field) == FIELD_DECL)
3729 {
3730 type = TREE_TYPE (field);
3731 if (CLASS_TYPE_P (type))
3732 {
0cbd7506 3733 if (TYPE_NEEDS_CONSTRUCTING (type))
dee15844
JM
3734 error ("member %q+#D with constructor not allowed "
3735 "in anonymous aggregate", field);
a1c2b86d 3736 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
dee15844
JM
3737 error ("member %q+#D with destructor not allowed "
3738 "in anonymous aggregate", field);
a1c2b86d 3739 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
dee15844
JM
3740 error ("member %q+#D with copy assignment operator "
3741 "not allowed in anonymous aggregate", field);
a1c2b86d
JJ
3742 }
3743 }
3744 }
61a127b3
MM
3745}
3746
72a93143 3747/* Make sure that a declaration with no declarator is well-formed, i.e.
a723baf1 3748 just declares a tagged type or anonymous union.
8d08fdba 3749
a723baf1 3750 Returns the type declared; or NULL_TREE if none. */
8d08fdba 3751
72a93143 3752tree
62d1db17 3753check_tag_decl (cp_decl_specifier_seq *declspecs)
8d08fdba 3754{
62d1db17
MM
3755 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3756 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
a723baf1
MM
3757 /* If a class, struct, or enum type is declared by the DECLSPECS
3758 (i.e, if a class-specifier, enum-specifier, or non-typename
3759 elaborated-type-specifier appears in the DECLSPECS),
3760 DECLARED_TYPE is set to the corresponding type. */
3761 tree declared_type = NULL_TREE;
3762 bool error_p = false;
8d08fdba 3763
62d1db17 3764 if (declspecs->multiple_types_p)
72a93143 3765 error ("multiple types in one declaration");
62d1db17
MM
3766 else if (declspecs->redefined_builtin_type)
3767 {
3768 if (!in_system_header)
cbe5f3b3 3769 permerror (input_location, "redeclaration of C++ built-in type %qT",
37ec60ed 3770 declspecs->redefined_builtin_type);
62d1db17
MM
3771 return NULL_TREE;
3772 }
7e2067ca 3773
c827f22f
MM
3774 if (declspecs->type
3775 && TYPE_P (declspecs->type)
caf93cb0 3776 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
9e1e64ec 3777 && MAYBE_CLASS_TYPE_P (declspecs->type))
62d1db17
MM
3778 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3779 declared_type = declspecs->type;
3780 else if (declspecs->type == error_mark_node)
3781 error_p = true;
a723baf1 3782 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
cbe5f3b3 3783 permerror (input_location, "declaration does not declare anything");
1951a1b6 3784 /* Check for an anonymous union. */
9e1e64ec 3785 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
a723baf1 3786 && TYPE_ANONYMOUS_P (declared_type))
0dd3962d 3787 {
e8186ecf 3788 /* 7/3 In a simple-declaration, the optional init-declarator-list
0cbd7506
MS
3789 can be omitted only when declaring a class (clause 9) or
3790 enumeration (7.2), that is, when the decl-specifier-seq contains
3791 either a class-specifier, an elaborated-type-specifier with
3792 a class-key (9.1), or an enum-specifier. In these cases and
3793 whenever a class-specifier or enum-specifier is present in the
3794 decl-specifier-seq, the identifiers in these specifiers are among
3795 the names being declared by the declaration (as class-name,
3796 enum-names, or enumerators, depending on the syntax). In such
3797 cases, and except for the declaration of an unnamed bit-field (9.6),
3798 the decl-specifier-seq shall introduce one or more names into the
3799 program, or shall redeclare a name introduced by a previous
3800 declaration. [Example:
3801 enum { }; // ill-formed
3802 typedef class { }; // ill-formed
3803 --end example] */
e8186ecf 3804 if (saw_typedef)
0cbd7506
MS
3805 {
3806 error ("missing type-name in typedef-declaration");
3807 return NULL_TREE;
3808 }
0dd3962d 3809 /* Anonymous unions are objects, so they can have specifiers. */;
a723baf1 3810 SET_ANON_AGGR_TYPE_P (declared_type);
6bdb8141 3811
fcf73884 3812 if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
509c9d60 3813 pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
0dd3962d
JM
3814 }
3815
62d1db17 3816 else
8d08fdba 3817 {
62d1db17
MM
3818 if (declspecs->specs[(int)ds_inline]
3819 || declspecs->specs[(int)ds_virtual])
2d01edd7 3820 error ("%qs can only be specified for functions",
caf93cb0 3821 declspecs->specs[(int)ds_inline]
62d1db17
MM
3822 ? "inline" : "virtual");
3823 else if (saw_friend
caf93cb0 3824 && (!current_class_type
62d1db17 3825 || current_scope () != current_class_type))
2d01edd7 3826 error ("%<friend%> can only be specified inside a class");
62d1db17 3827 else if (declspecs->specs[(int)ds_explicit])
2d01edd7 3828 error ("%<explicit%> can only be specified for constructors");
62d1db17
MM
3829 else if (declspecs->storage_class)
3830 error ("a storage class can only be specified for objects "
3831 "and functions");
3832 else if (declspecs->specs[(int)ds_const]
3833 || declspecs->specs[(int)ds_volatile]
3834 || declspecs->specs[(int)ds_restrict]
3835 || declspecs->specs[(int)ds_thread])
3836 error ("qualifiers can only be specified for objects "
3837 "and functions");
41dc91a8
SB
3838 else if (saw_typedef)
3839 warning (0, "%<typedef%> was ignored in this declaration");
72a93143 3840 }
8d08fdba 3841
a723baf1 3842 return declared_type;
72a93143
JM
3843}
3844
3845/* Called when a declaration is seen that contains no names to declare.
3846 If its type is a reference to a structure, union or enum inherited
3847 from a containing scope, shadow that tag name for the current scope
3848 with a forward reference.
3849 If its type defines a new named structure or union
3850 or defines an enum, it is valid but we need not do anything here.
3851 Otherwise, it is an error.
3852
3853 C++: may have to grok the declspecs to learn about static,
caf93cb0 3854 complain for anonymous unions.
72a93143 3855
a723baf1
MM
3856 Returns the TYPE declared -- or NULL_TREE if none. */
3857
3858tree
62d1db17 3859shadow_tag (cp_decl_specifier_seq *declspecs)
72a93143
JM
3860{
3861 tree t = check_tag_decl (declspecs);
3862
a723baf1
MM
3863 if (!t)
3864 return NULL_TREE;
3865
3cabd8f9
MA
3866 if (declspecs->attributes)
3867 {
dee15844
JM
3868 warning (0, "attribute ignored in declaration of %q+#T", t);
3869 warning (0, "attribute for %q+#T must follow the %qs keyword",
3870 t, class_key_or_enum_as_string (t));
3cabd8f9
MA
3871
3872 }
3873
d2a8ac2c
LM
3874 if (maybe_process_partial_specialization (t) == error_mark_node)
3875 return NULL_TREE;
72a93143
JM
3876
3877 /* This is where the variables in an anonymous union are
3878 declared. An anonymous union declaration looks like:
3879 union { ... } ;
3880 because there is no declarator after the union, the parser
3881 sends that declaration here. */
a723baf1 3882 if (ANON_AGGR_TYPE_P (t))
72a93143 3883 {
6bdb8141 3884 fixup_anonymous_aggr (t);
72a93143
JM
3885
3886 if (TYPE_FIELDS (t))
3887 {
caf93cb0 3888 tree decl = grokdeclarator (/*declarator=*/NULL,
058b15c1 3889 declspecs, NORMAL, 0, NULL);
72a93143
JM
3890 finish_anon_union (decl);
3891 }
8d08fdba 3892 }
a723baf1
MM
3893
3894 return t;
8d08fdba
MS
3895}
3896\f
3897/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3898
3899tree
caf93cb0 3900groktypename (cp_decl_specifier_seq *type_specifiers,
62d1db17 3901 const cp_declarator *declarator)
8d08fdba 3902{
62d1db17 3903 tree attrs;
98884b26 3904 tree type;
62d1db17
MM
3905 attrs = type_specifiers->attributes;
3906 type_specifiers->attributes = NULL_TREE;
3907 type = grokdeclarator (declarator, type_specifiers, TYPENAME, 0, &attrs);
ba19e12f 3908 if (attrs && type != error_mark_node)
c206a697
JM
3909 {
3910 if (CLASS_TYPE_P (type))
b2a7def5
JM
3911 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
3912 "outside of definition", type);
9e1e64ec 3913 else if (MAYBE_CLASS_TYPE_P (type))
b2a7def5
JM
3914 /* A template type parameter or other dependent type. */
3915 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
3916 "type %qT without an associated declaration", type);
c206a697
JM
3917 else
3918 cplus_decl_attributes (&type, attrs, 0);
3919 }
98884b26 3920 return type;
8d08fdba
MS
3921}
3922
15896502
MM
3923/* Process a DECLARATOR for a function-scope variable declaration,
3924 namespace-scope variable declaration, or function declaration.
3925 (Function definitions go through start_function; class member
3926 declarations appearing in the body of the class go through
3927 grokfield.) The DECL corresponding to the DECLARATOR is returned.
3928 If an error occurs, the error_mark_node is returned instead.
3929
b87d79e6
JM
3930 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is 1
3931 if an explicit initializer is present, or 2 for an explicitly defaulted
3932 function, or 3 for an explicitly deleted function, but 0 if this is a
3933 variable implicitly initialized via a default constructor. ATTRIBUTES
3934 and PREFIX_ATTRIBUTES are GNU attributes associated with this
3935 declaration. *PUSHED_SCOPE_P is set to the scope entered in this
3936 function, if any; if set, the caller is responsible for calling
3937 pop_scope. */
8d08fdba 3938
8d08fdba 3939tree
caf93cb0 3940start_decl (const cp_declarator *declarator,
62d1db17 3941 cp_decl_specifier_seq *declspecs,
0cbd7506
MS
3942 int initialized,
3943 tree attributes,
3944 tree prefix_attributes,
4514aa8c 3945 tree *pushed_scope_p)
8d08fdba 3946{
59387d2e 3947 tree decl;
15896502 3948 tree type;
8d08fdba 3949 tree context;
c3b7031d 3950 bool was_public;
317c435f 3951 int flags;
8d08fdba 3952
4514aa8c 3953 *pushed_scope_p = NULL_TREE;
c8094d83 3954
e23bd218
IR
3955 /* An object declared as __attribute__((deprecated)) suppresses
3956 warnings of uses of other deprecated items. */
3957 if (lookup_attribute ("deprecated", attributes))
3958 deprecated_state = DEPRECATED_SUPPRESS;
3959
91d231cb 3960 attributes = chainon (attributes, prefix_attributes);
b17e2870 3961
c11b6f21 3962 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
91d231cb 3963 &attributes);
68642fb6 3964
e23bd218
IR
3965 deprecated_state = DEPRECATED_NORMAL;
3966
2d00b4f2
AP
3967 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
3968 || decl == error_mark_node)
44370687 3969 return error_mark_node;
8d08fdba
MS
3970
3971 type = TREE_TYPE (decl);
3972
4f1c5b7d 3973 context = DECL_CONTEXT (decl);
8d08fdba 3974
73a8adb6 3975 if (context)
4514aa8c
NS
3976 {
3977 *pushed_scope_p = push_scope (context);
c8094d83 3978
4514aa8c
NS
3979 /* We are only interested in class contexts, later. */
3980 if (TREE_CODE (context) == NAMESPACE_DECL)
3981 context = NULL_TREE;
3982 }
2c73f9f5 3983
8d08fdba
MS
3984 if (initialized)
3985 /* Is it valid for this decl to have an initializer at all?
3986 If not, set INITIALIZED to zero, which will indirectly
82580166 3987 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba
MS
3988 switch (TREE_CODE (decl))
3989 {
3990 case TYPE_DECL:
b87d79e6 3991 error ("typedef %qD is initialized (use decltype instead)", decl);
cc011e7f 3992 return error_mark_node;
8d08fdba
MS
3993
3994 case FUNCTION_DECL:
b87d79e6
JM
3995 if (initialized == 3)
3996 /* We'll handle the rest of the semantics later, but we need to
3997 set this now so it's visible to duplicate_decls. */
3998 DECL_DELETED_FN (decl) = 1;
3999 break;
8d08fdba
MS
4000
4001 default:
3e41d13b 4002 break;
8d08fdba
MS
4003 }
4004
8d08fdba
MS
4005 if (initialized)
4006 {
a9aedbc2 4007 if (! toplevel_bindings_p ()
8d08fdba 4008 && DECL_EXTERNAL (decl))
d4ee4d25 4009 warning (0, "declaration of %q#D has %<extern%> and is initialized",
0cbd7506 4010 decl);
8d08fdba 4011 DECL_EXTERNAL (decl) = 0;
5566b478 4012 if (toplevel_bindings_p ())
8d08fdba 4013 TREE_STATIC (decl) = 1;
8d08fdba
MS
4014 }
4015
317c435f
JM
4016 /* If this is a typedef that names the class for linkage purposes
4017 (7.1.3p8), apply any attributes directly to the type. */
4018 if (TREE_CODE (decl) == TYPE_DECL
4019 && TAGGED_TYPE_P (TREE_TYPE (decl))
4020 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4021 flags = ATTR_FLAG_TYPE_IN_PLACE;
4022 else
4023 flags = 0;
4024
fa20888b 4025 /* Set attributes here so if duplicate decl, will have proper attributes. */
317c435f 4026 cplus_decl_attributes (&decl, attributes, flags);
fa20888b 4027
4e2bb0a4
DS
4028 /* Dllimported symbols cannot be defined. Static data members (which
4029 can be initialized in-class and dllimported) go through grokfield,
4030 not here, so we don't need to exclude those decls when checking for
4031 a definition. */
4032 if (initialized && DECL_DLLIMPORT_P (decl))
4033 {
4034 error ("definition of %q#D is marked %<dllimport%>", decl);
4035 DECL_DLLIMPORT_P (decl) = 0;
4036 }
4037
ecb0eece 4038 /* If #pragma weak was used, mark the decl weak now. */
3693d46c 4039 maybe_apply_pragma_weak (decl);
ecb0eece 4040
97055d5c
AO
4041 if (TREE_CODE (decl) == FUNCTION_DECL
4042 && DECL_DECLARED_INLINE_P (decl)
4043 && DECL_UNINLINABLE (decl)
4044 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
dee15844 4045 warning (0, "inline function %q+D given attribute noinline", decl);
97055d5c 4046
d0f062fb 4047 if (context && COMPLETE_TYPE_P (complete_type (context)))
5b605f68
MS
4048 {
4049 if (TREE_CODE (decl) == VAR_DECL)
4050 {
86ac0575 4051 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5b605f68 4052 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
2d01edd7 4053 error ("%q#D is not a static member of %q#T", decl, context);
e349ee73
MS
4054 else
4055 {
4056 if (DECL_CONTEXT (field) != context)
f2d773a2 4057 {
a723baf1 4058 if (!same_type_p (DECL_CONTEXT (field), context))
cbe5f3b3 4059 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
37ec60ed
JW
4060 "to be defined as %<%T::%D%>",
4061 DECL_CONTEXT (field), DECL_NAME (decl),
4062 context, DECL_NAME (decl));
f2d773a2
JM
4063 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4064 }
91146169
GB
4065 if (processing_specialization
4066 && template_class_depth (context) == 0
4067 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4068 error ("template header not allowed in member definition "
4069 "of explicitly specialized class");
75650646
MM
4070 /* Static data member are tricky; an in-class initialization
4071 still doesn't provide a definition, so the in-class
4072 declaration will have DECL_EXTERNAL set, but will have an
4073 initialization. Thus, duplicate_decls won't warn
4074 about this situation, and so we check here. */
e92fb501 4075 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
9e637a26 4076 error ("duplicate initialization of %qD", decl);
d63d5d0c 4077 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
e349ee73
MS
4078 decl = field;
4079 }
5b605f68 4080 }
f30432d7
MS
4081 else
4082 {
d43f603d 4083 tree field = check_classfn (context, decl,
44021471
GB
4084 (processing_template_decl
4085 > template_class_depth (context))
4086 ? current_template_parms
4087 : NULL_TREE);
f8c3b097
PC
4088 if (field && field != error_mark_node
4089 && duplicate_decls (decl, field,
4090 /*newdecl_is_friend=*/false))
f30432d7
MS
4091 decl = field;
4092 }
4093
4094 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
dff3e828 4095 DECL_IN_AGGR_P (decl) = 0;
9267ee62
NS
4096 /* Do not mark DECL as an explicit specialization if it was not
4097 already marked as an instantiation; a declaration should
4098 never be marked as a specialization unless we know what
c8094d83 4099 template is being specialized. */
9267ee62 4100 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
84e6233f 4101 {
9267ee62 4102 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
c8094d83 4103
84e6233f
JM
4104 /* [temp.expl.spec] An explicit specialization of a static data
4105 member of a template is a definition if the declaration
4106 includes an initializer; otherwise, it is a declaration.
c8094d83 4107
84e6233f
JM
4108 We check for processing_specialization so this only applies
4109 to the new specialization syntax. */
e92fb501 4110 if (!initialized && processing_specialization)
84e6233f
JM
4111 DECL_EXTERNAL (decl) = 1;
4112 }
f30432d7 4113
b7698cf0 4114 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
cbe5f3b3 4115 permerror (input_location, "declaration of %q#D outside of class is not definition",
37ec60ed 4116 decl);
5b605f68
MS
4117 }
4118
c3b7031d
JM
4119 was_public = TREE_PUBLIC (decl);
4120
9188c363 4121 /* Enter this declaration into the symbol table. */
15896502 4122 decl = maybe_push_decl (decl);
2ee887f2 4123
5156628f 4124 if (processing_template_decl)
15896502
MM
4125 decl = push_template_decl (decl);
4126 if (decl == error_mark_node)
156fc2bb 4127 return error_mark_node;
5566b478 4128
3b426391 4129 /* Tell the back end to use or not use .common as appropriate. If we say
a50f0918
MS
4130 -fconserve-space, we want this to save .data space, at the expense of
4131 wrong semantics. If we say -fno-conserve-space, we want this to
4132 produce errors about redefs; to do this we force variables into the
4133 data segment. */
434aeebb 4134 if (flag_conserve_space
15896502
MM
4135 && TREE_CODE (decl) == VAR_DECL
4136 && TREE_PUBLIC (decl)
4137 && !DECL_THREAD_LOCAL_P (decl)
434aeebb 4138 && !have_global_bss_p ())
15896502 4139 DECL_COMMON (decl) = 1;
68642fb6 4140
15896502
MM
4141 if (TREE_CODE (decl) == VAR_DECL
4142 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4143 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
c3b7031d
JM
4144 {
4145 /* This is a const variable with implicit 'static'. Set
4146 DECL_THIS_STATIC so we can tell it from variables that are
4147 !TREE_PUBLIC because of the anonymous namespace. */
15896502
MM
4148 gcc_assert (cp_type_readonly (TREE_TYPE (decl)));
4149 DECL_THIS_STATIC (decl) = 1;
c3b7031d
JM
4150 }
4151
15896502
MM
4152 if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4153 start_decl_1 (decl, initialized);
8d08fdba 4154
15896502 4155 return decl;
8d08fdba
MS
4156}
4157
15896502
MM
4158/* Process the declaration of a variable DECL. INITIALIZED is true
4159 iff DECL is explicitly initialized. (INITIALIZED is false if the
4160 variable is initialized via an implicitly-called constructor.)
4161 This function must be called for ordinary variables (including, for
4162 example, implicit instantiations of templates), but must not be
4163 called for template declarations. */
4164
5566b478 4165void
e92fb501 4166start_decl_1 (tree decl, bool initialized)
8d08fdba 4167{
e92fb501 4168 tree type;
15896502
MM
4169 bool complete_p;
4170 bool aggregate_definition_p;
8d08fdba 4171
e92fb501
MM
4172 gcc_assert (!processing_template_decl);
4173
4174 if (error_operand_p (decl))
44689c12
ML
4175 return;
4176
e92fb501 4177 gcc_assert (TREE_CODE (decl) == VAR_DECL);
15896502 4178
e92fb501 4179 type = TREE_TYPE (decl);
15896502 4180 complete_p = COMPLETE_TYPE_P (type);
9e1e64ec 4181 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
15896502
MM
4182
4183 /* If an explicit initializer is present, or if this is a definition
4184 of an aggregate, then we need a complete type at this point.
4185 (Scalars are always complete types, so there is nothing to
4186 check.) This code just sets COMPLETE_P; errors (if necessary)
4187 are issued below. */
4188 if ((initialized || aggregate_definition_p)
4189 && !complete_p
4190 && COMPLETE_TYPE_P (complete_type (type)))
4191 {
4192 complete_p = true;
4193 /* We will not yet have set TREE_READONLY on DECL if the type
4194 was "const", but incomplete, before this point. But, now, we
4195 have a complete type, so we can try again. */
4196 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4197 }
e92fb501 4198
5566b478 4199 if (initialized)
15896502 4200 /* Is it valid for this decl to have an initializer at all? */
8d08fdba 4201 {
5566b478
MS
4202 /* Don't allow initializations for incomplete types except for
4203 arrays which might be completed by the initialization. */
15896502 4204 if (complete_p)
5566b478
MS
4205 ; /* A complete type is ok. */
4206 else if (TREE_CODE (type) != ARRAY_TYPE)
8d08fdba 4207 {
2d01edd7 4208 error ("variable %q#D has initializer but incomplete type", decl);
25eb19ff 4209 type = TREE_TYPE (decl) = error_mark_node;
5566b478 4210 }
d0f062fb 4211 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5566b478
MS
4212 {
4213 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
2d01edd7 4214 error ("elements of array %q#D have incomplete type", decl);
5566b478 4215 /* else we already gave an error in start_decl. */
8d08fdba 4216 }
8d08fdba 4217 }
15896502 4218 else if (aggregate_definition_p && !complete_p)
8d08fdba 4219 {
15896502
MM
4220 error ("aggregate %q#D has incomplete type and cannot be defined",
4221 decl);
4222 /* Change the type so that assemble_variable will give
4223 DECL an rtl we can live with: (mem (const_int 0)). */
4224 type = TREE_TYPE (decl) = error_mark_node;
5566b478
MS
4225 }
4226
c6671cbb
MM
4227 /* Create a new scope to hold this declaration if necessary.
4228 Whether or not a new scope is necessary cannot be determined
4229 until after the type has been completed; if the type is a
4230 specialization of a class template it is not until after
4231 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4232 will be set correctly. */
4233 maybe_push_cleanup_level (type);
5566b478
MS
4234}
4235
7e99327d
MM
4236/* Handle initialization of references. DECL, TYPE, and INIT have the
4237 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4238 but will be set to a new CLEANUP_STMT if a temporary is created
cd0be382 4239 that must be destroyed subsequently.
7e99327d
MM
4240
4241 Returns an initializer expression to use to initialize DECL, or
4242 NULL if the initialization can be performed statically.
e92cc029
MS
4243
4244 Quotes on semantics can be found in ARM 8.4.3. */
4245
8e4ce833 4246static tree
7e99327d 4247grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
5566b478
MS
4248{
4249 tree tmp;
4250
4251 if (init == NULL_TREE)
4252 {
4253 if ((DECL_LANG_SPECIFIC (decl) == 0
4254 || DECL_IN_AGGR_P (decl) == 0)
4255 && ! DECL_THIS_EXTERN (decl))
c4f73174 4256 error ("%qD declared as reference but not initialized", decl);
8e4ce833 4257 return NULL_TREE;
5566b478
MS
4258 }
4259
ed5511d9 4260 if (TREE_CODE (init) == CONSTRUCTOR)
5566b478 4261 {
2d01edd7 4262 error ("ISO C++ forbids use of initializer list to "
0cbd7506 4263 "initialize reference %qD", decl);
8e4ce833 4264 return NULL_TREE;
8d08fdba
MS
4265 }
4266
4267 if (TREE_CODE (init) == TREE_LIST)
c7b62f14 4268 init = build_x_compound_expr_from_list (init, "initializer");
8d08fdba
MS
4269
4270 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4271 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
0a72704b
MM
4272 /* Note: default conversion is only called in very special cases. */
4273 init = decay_conversion (init);
68642fb6 4274
24bef158
MM
4275 /* Convert INIT to the reference type TYPE. This may involve the
4276 creation of a temporary, whose lifetime must be the same as that
350fae66
RK
4277 of the reference. If so, a DECL_EXPR for the temporary will be
4278 added just after the DECL_EXPR for DECL. That's why we don't set
24bef158
MM
4279 DECL_INITIAL for local references (instead assigning to them
4280 explicitly); we need to allow the temporary to be initialized
4281 first. */
7e99327d 4282 tmp = initialize_reference (type, init, decl, cleanup);
8d08fdba 4283
a3203465 4284 if (tmp == error_mark_node)
8e4ce833
JJ
4285 return NULL_TREE;
4286 else if (tmp == NULL_TREE)
8d08fdba 4287 {
2d01edd7 4288 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
8e4ce833 4289 return NULL_TREE;
8d08fdba 4290 }
8d08fdba 4291
8e4ce833
JJ
4292 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4293 return tmp;
4294
08ac397c 4295 DECL_INITIAL (decl) = tmp;
8e4ce833
JJ
4296
4297 return NULL_TREE;
8d08fdba
MS
4298}
4299
09357846
JM
4300/* Subroutine of check_initializer. We're initializing a DECL of
4301 std::initializer_list<T> TYPE from a braced-init-list INIT, and need to
4302 extend the lifetime of the underlying array to match that of the decl,
4303 just like for reference initialization. CLEANUP is as for
4304 grok_reference_init. */
4305
4306static tree
4307build_init_list_var_init (tree decl, tree type, tree init, tree *cleanup)
4308{
4309 tree aggr_init, array, arrtype;
4310 init = perform_implicit_conversion (type, init, tf_warning_or_error);
4311 aggr_init = TARGET_EXPR_INITIAL (init);
4312 init = build2 (INIT_EXPR, type, decl, init);
4313
4314 array = AGGR_INIT_EXPR_ARG (aggr_init, 1);
4315 arrtype = TREE_TYPE (array);
4316 STRIP_NOPS (array);
4317 gcc_assert (TREE_CODE (array) == ADDR_EXPR);
4318 array = TREE_OPERAND (array, 0);
4319 /* If the array is constant, finish_compound_literal already made it a
4320 static variable and we don't need to do anything here. */
4321 if (decl && TREE_CODE (array) == TARGET_EXPR)
4322 {
4323 tree subinit;
4324 tree var = set_up_extended_ref_temp (decl, array, cleanup, &subinit);
4325 var = build_address (var);
4326 var = convert (arrtype, var);
4327 AGGR_INIT_EXPR_ARG (aggr_init, 1) = var;
4328 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
4329 }
4330 return init;
4331}
4332
76239779
MM
4333/* Designated initializers in arrays are not supported in GNU C++.
4334 The parser cannot detect this error since it does not know whether
4335 a given brace-enclosed initializer is for a class type or for an
4336 array. This function checks that CE does not use a designated
4337 initializer. If it does, an error is issued. Returns true if CE
4338 is valid, i.e., does not have a designated initializer. */
4339
4340static bool
4341check_array_designated_initializer (const constructor_elt *ce)
4342{
48c9a7f0 4343 /* Designated initializers for array elements are not supported. */
76239779
MM
4344 if (ce->index)
4345 {
4346 /* The parser only allows identifiers as designated
39a13be5 4347 initializers. */
76239779
MM
4348 gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4349 error ("name %qD used in a GNU-style designated "
4350 "initializer for an array", ce->index);
4351 return false;
4352 }
4353
4354 return true;
4355}
4356
27778b73
MM
4357/* When parsing `int a[] = {1, 2};' we don't know the size of the
4358 array until we finish parsing the initializer. If that's the
4359 situation we're in, update DECL accordingly. */
4360
4361static void
11f6b451 4362maybe_deduce_size_from_array_init (tree decl, tree init)
27778b73
MM
4363{
4364 tree type = TREE_TYPE (decl);
4365
4366 if (TREE_CODE (type) == ARRAY_TYPE
4367 && TYPE_DOMAIN (type) == NULL_TREE
4368 && TREE_CODE (decl) != TYPE_DECL)
4369 {
f2ae0c45
JM
4370 /* do_default is really a C-ism to deal with tentative definitions.
4371 But let's leave it here to ease the eventual merge. */
4372 int do_default = !DECL_EXTERNAL (decl);
27778b73 4373 tree initializer = init ? init : DECL_INITIAL (decl);
76239779 4374 int failure = 0;
27778b73 4375
76239779
MM
4376 /* Check that there are no designated initializers in INIT, as
4377 those are not supported in GNU C++, and as the middle-end
4378 will crash if presented with a non-numeric designated
4379 initializer. */
4380 if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
2b643eda 4381 {
76239779
MM
4382 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4383 constructor_elt *ce;
4384 HOST_WIDE_INT i;
4385 for (i = 0;
4386 VEC_iterate (constructor_elt, v, i, ce);
49b5e2f6 4387 ++i)
76239779
MM
4388 if (!check_array_designated_initializer (ce))
4389 failure = 1;
2b643eda 4390 }
76239779
MM
4391
4392 if (!failure)
27778b73 4393 {
76239779
MM
4394 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4395 do_default);
4396 if (failure == 1)
2b643eda 4397 {
76239779
MM
4398 error ("initializer fails to determine size of %qD", decl);
4399 TREE_TYPE (decl) = error_mark_node;
4400 }
4401 else if (failure == 2)
4402 {
4403 if (do_default)
4404 {
4405 error ("array size missing in %qD", decl);
4406 TREE_TYPE (decl) = error_mark_node;
4407 }
4408 /* If a `static' var's size isn't known, make it extern as
4409 well as static, so it does not get allocated. If it's not
4410 `static', then don't mark it extern; finish_incomplete_decl
4411 will give it a default size and it will get allocated. */
4412 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4413 DECL_EXTERNAL (decl) = 1;
4414 }
4415 else if (failure == 3)
4416 {
4417 error ("zero-size array %qD", decl);
2b643eda
MM
4418 TREE_TYPE (decl) = error_mark_node;
4419 }
2b643eda 4420 }
27778b73 4421
f23b8501
JJ
4422 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4423
27778b73
MM
4424 layout_decl (decl, 0);
4425 }
4426}
4427
4428/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
57b52417 4429 any appropriate error messages regarding the layout. */
27778b73 4430
57b52417 4431static void
11f6b451 4432layout_var_decl (tree decl)
27778b73 4433{
2b643eda
MM
4434 tree type;
4435
2b643eda
MM
4436 type = TREE_TYPE (decl);
4437 if (type == error_mark_node)
4438 return;
57b52417
MM
4439
4440 /* If we haven't already layed out this declaration, do so now.
4441 Note that we must not call complete type for an external object
4442 because it's type might involve templates that we are not
34cd5ae7 4443 supposed to instantiate yet. (And it's perfectly valid to say
57b52417
MM
4444 `extern X x' for some incomplete type `X'.) */
4445 if (!DECL_EXTERNAL (decl))
4446 complete_type (type);
caf93cb0 4447 if (!DECL_SIZE (decl)
328de7c2 4448 && TREE_TYPE (decl) != error_mark_node
7de85f7e 4449 && (COMPLETE_TYPE_P (type)
caf93cb0 4450 || (TREE_CODE (type) == ARRAY_TYPE
7de85f7e
MM
4451 && !TYPE_DOMAIN (type)
4452 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
27778b73
MM
4453 layout_decl (decl, 0);
4454
c82dbd95 4455 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
27778b73
MM
4456 {
4457 /* An automatic variable with an incomplete type: that is an error.
4458 Don't talk about array types here, since we took care of that
4459 message in grokdeclarator. */
2d01edd7 4460 error ("storage size of %qD isn't known", decl);
27778b73
MM
4461 TREE_TYPE (decl) = error_mark_node;
4462 }
ae673f14
JM
4463#if 0
4464 /* Keep this code around in case we later want to control debug info
4465 based on whether a type is "used". (jason 1999-11-11) */
4466
9e1e64ec 4467 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
27778b73
MM
4468 /* Let debugger know it should output info for this type. */
4469 note_debug_info_needed (ttype);
4470
4471 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4472 note_debug_info_needed (DECL_CONTEXT (decl));
ae673f14 4473#endif
27778b73
MM
4474
4475 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4476 && DECL_SIZE (decl) != NULL_TREE
4477 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4478 {
4479 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4480 constant_expression_warning (DECL_SIZE (decl));
4481 else
b97d8153
JJ
4482 {
4483 error ("storage size of %qD isn't constant", decl);
4484 TREE_TYPE (decl) = error_mark_node;
4485 }
27778b73
MM
4486 }
4487}
4488
27778b73
MM
4489/* If a local static variable is declared in an inline function, or if
4490 we have a weak definition, we must endeavor to create only one
4491 instance of the variable at link-time. */
4492
4493static void
11f6b451 4494maybe_commonize_var (tree decl)
27778b73
MM
4495{
4496 /* Static data in a function with comdat linkage also has comdat
4497 linkage. */
4498 if (TREE_STATIC (decl)
4499 /* Don't mess with __FUNCTION__. */
cf74fb86 4500 && ! DECL_ARTIFICIAL (decl)
0b50d7f1
MM
4501 && DECL_FUNCTION_SCOPE_P (decl)
4502 /* Unfortunately, import_export_decl has not always been called
4503 before the function is processed, so we cannot simply check
caf93cb0 4504 DECL_COMDAT. */
9e6aaf5e 4505 && (DECL_COMDAT (DECL_CONTEXT (decl))
0b50d7f1
MM
4506 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4507 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4508 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
27778b73 4509 {
0dbc5cd3 4510 if (flag_weak)
27778b73 4511 {
0dbc5cd3
MM
4512 /* With weak symbols, we simply make the variable COMDAT;
4513 that will cause copies in multiple translations units to
4514 be merged. */
4515 comdat_linkage (decl);
4516 }
4517 else
4518 {
4519 if (DECL_INITIAL (decl) == NULL_TREE
4520 || DECL_INITIAL (decl) == error_mark_node)
27778b73 4521 {
0dbc5cd3
MM
4522 /* Without weak symbols, we can use COMMON to merge
4523 uninitialized variables. */
27778b73
MM
4524 TREE_PUBLIC (decl) = 1;
4525 DECL_COMMON (decl) = 1;
4526 }
0dbc5cd3 4527 else
27778b73 4528 {
0dbc5cd3
MM
4529 /* While for initialized variables, we must use internal
4530 linkage -- which means that multiple copies will not
4531 be merged. */
4532 TREE_PUBLIC (decl) = 0;
4533 DECL_COMMON (decl) = 0;
dee15844
JM
4534 warning (0, "sorry: semantics of inline function static "
4535 "data %q+#D are wrong (you'll wind up "
4536 "with multiple copies)", decl);
d4ee4d25 4537 warning (0, "%J you can work around this by removing "
0cbd7506 4538 "the initializer",
ddd2d57e 4539 decl);
27778b73
MM
4540 }
4541 }
4542 }
4543 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4544 /* Set it up again; we might have set DECL_INITIAL since the last
4545 time. */
4546 comdat_linkage (decl);
4547}
4548
91063b51
MM
4549/* Issue an error message if DECL is an uninitialized const variable. */
4550
4551static void
11f6b451 4552check_for_uninitialized_const_var (tree decl)
91063b51
MM
4553{
4554 tree type = TREE_TYPE (decl);
4555
4556 /* ``Unless explicitly declared extern, a const object does not have
4557 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4558 7.1.6 */
4559 if (TREE_CODE (decl) == VAR_DECL
4560 && TREE_CODE (type) != REFERENCE_TYPE
4561 && CP_TYPE_CONST_P (type)
4562 && !TYPE_NEEDS_CONSTRUCTING (type)
4563 && !DECL_INITIAL (decl))
2d01edd7 4564 error ("uninitialized const %qD", decl);
91063b51
MM
4565}
4566
4038c495
GB
4567\f
4568/* Structure holding the current initializer being processed by reshape_init.
4569 CUR is a pointer to the current element being processed, END is a pointer
4570 after the last element present in the initializer. */
4571typedef struct reshape_iterator_t
4572{
4573 constructor_elt *cur;
4574 constructor_elt *end;
4575} reshape_iter;
4576
4577static tree reshape_init_r (tree, reshape_iter *, bool);
4578
8e3df2de
MM
4579/* FIELD is a FIELD_DECL or NULL. In the former case, the value
4580 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4581 initialized. If there are no more such fields, the return value
4582 will be NULL. */
4583
4584static tree
4585next_initializable_field (tree field)
4586{
4587 while (field
4588 && (TREE_CODE (field) != FIELD_DECL
4589 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4590 || DECL_ARTIFICIAL (field)))
4591 field = TREE_CHAIN (field);
4592
4593 return field;
4594}
4595
4038c495
GB
4596/* Subroutine of reshape_init_array and reshape_init_vector, which does
4597 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4598 INTEGER_CST representing the size of the array minus one (the maximum index),
4599 or NULL_TREE if the array was declared without specifying the size. D is
4600 the iterator within the constructor. */
4601
4602static tree
4603reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
3d142be2 4604{
4038c495 4605 tree new_init;
3d142be2 4606 bool sized_array_p = (max_index != NULL_TREE);
004c400a
JJ
4607 unsigned HOST_WIDE_INT max_index_cst = 0;
4608 unsigned HOST_WIDE_INT index;
3d142be2 4609
4038c495 4610 /* The initializer for an array is always a CONSTRUCTOR. */
09357846 4611 new_init = build_constructor (init_list_type_node, NULL);
4038c495 4612
3d142be2 4613 if (sized_array_p)
004c400a 4614 {
d7d93837
AH
4615 /* Minus 1 is used for zero sized arrays. */
4616 if (integer_all_onesp (max_index))
4617 return new_init;
4618
004c400a
JJ
4619 if (host_integerp (max_index, 1))
4620 max_index_cst = tree_low_cst (max_index, 1);
4621 /* sizetype is sign extended, not zero extended. */
4622 else
4623 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4624 1);
4625 }
3d142be2
GB
4626
4627 /* Loop until there are no more initializers. */
4628 for (index = 0;
4038c495 4629 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
3d142be2
GB
4630 ++index)
4631 {
4038c495
GB
4632 tree elt_init;
4633
76239779 4634 check_array_designated_initializer (d->cur);
4038c495 4635 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
07471dfb
MM
4636 if (elt_init == error_mark_node)
4637 return error_mark_node;
4038c495 4638 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
3d142be2
GB
4639 }
4640
4038c495 4641 return new_init;
3d142be2
GB
4642}
4643
4038c495
GB
4644/* Subroutine of reshape_init_r, processes the initializers for arrays.
4645 Parameters are the same of reshape_init_r. */
8e3df2de 4646
4038c495
GB
4647static tree
4648reshape_init_array (tree type, reshape_iter *d)
4649{
4650 tree max_index = NULL_TREE;
caf93cb0 4651
4038c495 4652 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
8e3df2de 4653
4038c495
GB
4654 if (TYPE_DOMAIN (type))
4655 max_index = array_type_nelts (type);
4656
4657 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4658}
4659
4660/* Subroutine of reshape_init_r, processes the initializers for vectors.
4661 Parameters are the same of reshape_init_r. */
8e3df2de
MM
4662
4663static tree
4038c495 4664reshape_init_vector (tree type, reshape_iter *d)
8e3df2de 4665{
4038c495
GB
4666 tree max_index = NULL_TREE;
4667 tree rtype;
4668
4669 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4670
3b2db49f 4671 if (COMPOUND_LITERAL_P (d->cur->value))
4038c495
GB
4672 {
4673 tree value = d->cur->value;
4674 if (!same_type_p (TREE_TYPE (value), type))
4675 {
4676 error ("invalid type %qT as initializer for a vector of type %qT",
4677 TREE_TYPE (d->cur->value), type);
3db45ab5 4678 value = error_mark_node;
4038c495
GB
4679 }
4680 ++d->cur;
4681 return value;
4682 }
4683
4684 /* For a vector, the representation type is a struct
4685 containing a single member which is an array of the
4686 appropriate size. */
4687 rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4688 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4689 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4690
4691 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4692}
4693
4694/* Subroutine of reshape_init_r, processes the initializers for classes
4695 or union. Parameters are the same of reshape_init_r. */
4696
4697static tree
4698reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4699{
4700 tree field;
8e3df2de 4701 tree new_init;
8e3df2de 4702
4038c495 4703 gcc_assert (CLASS_TYPE_P (type));
8e3df2de 4704
4038c495 4705 /* The initializer for a class is always a CONSTRUCTOR. */
09357846 4706 new_init = build_constructor (init_list_type_node, NULL);
4038c495 4707 field = next_initializable_field (TYPE_FIELDS (type));
ee7ecb29 4708
4038c495 4709 if (!field)
8e3df2de 4710 {
4038c495
GB
4711 /* [dcl.init.aggr]
4712
4713 An initializer for an aggregate member that is an
4714 empty class shall have the form of an empty
4715 initializer-list {}. */
4716 if (!first_initializer_p)
4717 {
4718 error ("initializer for %qT must be brace-enclosed", type);
4719 return error_mark_node;
4720 }
4721 return new_init;
8e3df2de 4722 }
4038c495
GB
4723
4724 /* Loop through the initializable fields, gathering initializers. */
4725 while (d->cur != d->end)
8e3df2de 4726 {
4038c495
GB
4727 tree field_init;
4728
4729 /* Handle designated initializers, as an extension. */
4730 if (d->cur->index)
4731 {
4038c495
GB
4732 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4733
4734 if (!field || TREE_CODE (field) != FIELD_DECL)
77bffd4c
SE
4735 {
4736 error ("%qT has no non-static data member named %qD", type,
4737 d->cur->index);
4738 return error_mark_node;
4739 }
4038c495
GB
4740 }
4741
4742 /* If we processed all the member of the class, we are done. */
4743 if (!field)
4744 break;
4745
4746 field_init = reshape_init_r (TREE_TYPE (field), d,
4747 /*first_initializer_p=*/false);
4748 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4749
4750 /* [dcl.init.aggr]
4751
4752 When a union is initialized with a brace-enclosed
4753 initializer, the braces shall only contain an
4754 initializer for the first member of the union. */
4755 if (TREE_CODE (type) == UNION_TYPE)
4756 break;
4757
4758 field = next_initializable_field (TREE_CHAIN (field));
8e3df2de
MM
4759 }
4760
4038c495
GB
4761 return new_init;
4762}
4763
4764/* Subroutine of reshape_init, which processes a single initializer (part of
4765 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4766 iterator within the CONSTRUCTOR which points to the initializer to process.
4767 FIRST_INITIALIZER_P is true if this is the first initializer of the
4768 CONSTRUCTOR node. */
4769
4770static tree
4771reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4772{
4773 tree init = d->cur->value;
4774
ffe79825
PC
4775 if (error_operand_p (init))
4776 return error_mark_node;
4777
8e3df2de
MM
4778 /* A non-aggregate type is always initialized with a single
4779 initializer. */
4780 if (!CP_AGGREGATE_TYPE_P (type))
4038c495
GB
4781 {
4782 /* It is invalid to initialize a non-aggregate type with a
b71836b0 4783 brace-enclosed initializer before C++0x.
4038c495
GB
4784 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4785 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4786 a CONSTRUCTOR (with a record type). */
4787 if (TREE_CODE (init) == CONSTRUCTOR
4788 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
4789 {
b71836b0
JM
4790 if (SCALAR_TYPE_P (type))
4791 {
4792 error ("braces around scalar initializer for type %qT", type);
4793 init = error_mark_node;
4794 }
4795 else
4796 maybe_warn_cpp0x ("extended initializer lists");
4038c495 4797 }
3db45ab5 4798
4038c495
GB
4799 d->cur++;
4800 return init;
4801 }
8e3df2de
MM
4802
4803 /* [dcl.init.aggr]
4804
4805 All implicit type conversions (clause _conv_) are considered when
4806 initializing the aggregate member with an initializer from an
4807 initializer-list. If the initializer can initialize a member,
4808 the member is initialized. Otherwise, if the member is itself a
4809 non-empty subaggregate, brace elision is assumed and the
4810 initializer is considered for the initialization of the first
4811 member of the subaggregate. */
4038c495 4812 if (TREE_CODE (init) != CONSTRUCTOR
30f86ec3 4813 && can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL))
8e3df2de 4814 {
4038c495
GB
4815 d->cur++;
4816 return init;
8e3df2de
MM
4817 }
4818
4038c495
GB
4819 /* [dcl.init.string]
4820
4821 A char array (whether plain char, signed char, or unsigned char)
4822 can be initialized by a string-literal (optionally enclosed in
4823 braces); a wchar_t array can be initialized by a wide
4824 string-literal (optionally enclosed in braces). */
4825 if (TREE_CODE (type) == ARRAY_TYPE
42328048 4826 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
8e3df2de 4827 {
4038c495 4828 tree str_init = init;
8e3df2de 4829
4038c495 4830 /* Strip one level of braces if and only if they enclose a single
3db45ab5 4831 element (as allowed by [dcl.init.string]). */
4038c495
GB
4832 if (!first_initializer_p
4833 && TREE_CODE (str_init) == CONSTRUCTOR
4834 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
8e3df2de 4835 {
4038c495
GB
4836 str_init = VEC_index (constructor_elt,
4837 CONSTRUCTOR_ELTS (str_init), 0)->value;
4838 }
3db45ab5 4839
4038c495 4840 /* If it's a string literal, then it's the initializer for the array
3db45ab5 4841 as a whole. Otherwise, continue with normal initialization for
4038c495
GB
4842 array types (one value per array element). */
4843 if (TREE_CODE (str_init) == STRING_CST)
4844 {
4845 d->cur++;
4846 return str_init;
4847 }
4848 }
8e3df2de 4849
4038c495
GB
4850 /* The following cases are about aggregates. If we are not within a full
4851 initializer already, and there is not a CONSTRUCTOR, it means that there
4852 is a missing set of braces (that is, we are processing the case for
4853 which reshape_init exists). */
4854 if (!first_initializer_p)
4855 {
4856 if (TREE_CODE (init) == CONSTRUCTOR)
4857 {
70ec16f7
AP
4858 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
4859 /* There is no need to reshape pointer-to-member function
4860 initializers, as they are always constructed correctly
4861 by the front end. */
4862 ;
4863 else if (COMPOUND_LITERAL_P (init))
4038c495
GB
4864 /* For a nested compound literal, there is no need to reshape since
4865 brace elision is not allowed. Even if we decided to allow it,
4866 we should add a call to reshape_init in finish_compound_literal,
4867 before calling digest_init, so changing this code would still
4868 not be necessary. */
70ec16f7
AP
4869 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
4870 else
8e3df2de 4871 {
4038c495
GB
4872 ++d->cur;
4873 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4874 return reshape_init (type, init);
8e3df2de 4875 }
8e3df2de 4876 }
f8e7a389 4877
4038c495
GB
4878 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
4879 type);
4880 }
8e3df2de 4881
4038c495
GB
4882 /* Dispatch to specialized routines. */
4883 if (CLASS_TYPE_P (type))
4884 return reshape_init_class (type, d, first_initializer_p);
4885 else if (TREE_CODE (type) == ARRAY_TYPE)
4886 return reshape_init_array (type, d);
4887 else if (TREE_CODE (type) == VECTOR_TYPE)
4888 return reshape_init_vector (type, d);
4889 else
4890 gcc_unreachable();
4891}
8e3df2de 4892
4038c495
GB
4893/* Undo the brace-elision allowed by [dcl.init.aggr] in a
4894 brace-enclosed aggregate initializer.
8e3df2de 4895
4038c495
GB
4896 INIT is the CONSTRUCTOR containing the list of initializers describing
4897 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
4898 It may not presently match the shape of the TYPE; for example:
4899
4900 struct S { int a; int b; };
4901 struct S a[] = { 1, 2, 3, 4 };
4902
4903 Here INIT will hold a VEC of four elements, rather than a
4904 VEC of two elements, each itself a VEC of two elements. This
4905 routine transforms INIT from the former form into the latter. The
4906 revised CONSTRUCTOR node is returned. */
4907
3b2db49f 4908tree
4038c495
GB
4909reshape_init (tree type, tree init)
4910{
4911 VEC(constructor_elt, gc) *v;
4912 reshape_iter d;
4913 tree new_init;
4914
4038c495
GB
4915 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4916
4917 v = CONSTRUCTOR_ELTS (init);
4918
4919 /* An empty constructor does not need reshaping, and it is always a valid
4920 initializer. */
4921 if (VEC_empty (constructor_elt, v))
4922 return init;
4923
4924 /* Recurse on this CONSTRUCTOR. */
4925 d.cur = VEC_index (constructor_elt, v, 0);
4926 d.end = d.cur + VEC_length (constructor_elt, v);
4927
4928 new_init = reshape_init_r (type, &d, true);
07471dfb
MM
4929 if (new_init == error_mark_node)
4930 return error_mark_node;
4038c495
GB
4931
4932 /* Make sure all the element of the constructor were used. Otherwise,
4933 issue an error about exceeding initializers. */
4934 if (d.cur != d.end)
4935 error ("too many initializers for %qT", type);
8e3df2de
MM
4936
4937 return new_init;
4938}
4939
23bee8f4
JJ
4940/* Verify array initializer. Returns true if errors have been reported. */
4941
4942bool
4943check_array_initializer (tree decl, tree type, tree init)
4944{
4945 tree element_type = TREE_TYPE (type);
4946
4947 /* The array type itself need not be complete, because the
4948 initializer may tell us how many elements are in the array.
4949 But, the elements of the array must be complete. */
4950 if (!COMPLETE_TYPE_P (complete_type (element_type)))
4951 {
4952 if (decl)
4953 error ("elements of array %q#D have incomplete type", decl);
4954 else
4955 error ("elements of array %q#T have incomplete type", type);
4956 return true;
4957 }
4958 /* It is not valid to initialize a VLA. */
4959 if (init
4960 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
4961 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
4962 {
4963 if (decl)
4964 error ("variable-sized object %qD may not be initialized", decl);
4965 else
4966 error ("variable-sized compound literal");
4967 return true;
4968 }
4969 return false;
4970}
4971
09357846
JM
4972/* Subroutine of check_initializer; args are passed down from that function.
4973 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
4974
4975static tree
4976build_aggr_init_full_exprs (tree decl, tree init, int flags)
4977
4978{
4979 int saved_stmts_are_full_exprs_p = 0;
4980 if (building_stmt_tree ())
4981 {
4982 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4983 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4984 }
4985 init = build_aggr_init (decl, init, flags, tf_warning_or_error);
4986 if (building_stmt_tree ())
4987 current_stmt_tree ()->stmts_are_full_exprs_p =
4988 saved_stmts_are_full_exprs_p;
4989 return init;
4990}
4991
c82dbd95 4992/* Verify INIT (the initializer for DECL), and record the
7e99327d
MM
4993 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
4994 grok_reference_init.
8e3df2de
MM
4995
4996 If the return value is non-NULL, it is an expression that must be
4997 evaluated dynamically to initialize DECL. */
27778b73 4998
c82dbd95 4999static tree
7e99327d 5000check_initializer (tree decl, tree init, int flags, tree *cleanup)
27778b73 5001{
17bbb839 5002 tree type = TREE_TYPE (decl);
25ebb82a 5003 tree init_code = NULL;
fc0e7bf5 5004
328de7c2
MM
5005 /* Things that are going to be initialized need to have complete
5006 type. */
5007 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
c82dbd95 5008
328de7c2
MM
5009 if (type == error_mark_node)
5010 /* We will have already complained. */
f724eac4
MM
5011 return NULL_TREE;
5012
5013 if (TREE_CODE (type) == ARRAY_TYPE)
328de7c2 5014 {
23bee8f4
JJ
5015 if (check_array_initializer (decl, type, init))
5016 return NULL_TREE;
328de7c2 5017 }
f724eac4 5018 else if (!COMPLETE_TYPE_P (type))
328de7c2 5019 {
2d01edd7 5020 error ("%qD has incomplete type", decl);
328de7c2 5021 TREE_TYPE (decl) = error_mark_node;
f724eac4 5022 return NULL_TREE;
27778b73 5023 }
f724eac4
MM
5024 else
5025 /* There is no way to make a variable-sized class type in GNU C++. */
5026 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
c1ae8be5
SM
5027
5028 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
f47165c9 5029 {
c1ae8be5
SM
5030 int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5031 if (SCALAR_TYPE_P (type))
5032 {
09357846
JM
5033 if (init_len == 0)
5034 {
5035 maybe_warn_cpp0x ("extended initializer lists");
5036 init = build_zero_init (type, NULL_TREE, false);
5037 }
5038 else if (init_len != 1)
c1ae8be5
SM
5039 {
5040 error ("scalar object %qD requires one element in initializer",
5041 decl);
5042 TREE_TYPE (decl) = error_mark_node;
5043 return NULL_TREE;
5044 }
5045 }
f47165c9 5046 }
27778b73
MM
5047
5048 if (TREE_CODE (decl) == CONST_DECL)
5049 {
7525db03 5050 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
27778b73
MM
5051
5052 DECL_INITIAL (decl) = init;
5053
50bc768d 5054 gcc_assert (init != NULL_TREE);
27778b73
MM
5055 init = NULL_TREE;
5056 }
c82dbd95 5057 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7e99327d 5058 init = grok_reference_init (decl, type, init, cleanup);
27778b73
MM
5059 else if (init)
5060 {
4038c495 5061 /* Do not reshape constructors of vectors (they don't need to be
3db45ab5 5062 reshaped. */
09357846 5063 if (BRACE_ENCLOSED_INITIALIZER_P (init))
a16f2357 5064 {
09357846
JM
5065 if (is_std_init_list (type))
5066 return build_init_list_var_init (decl, type, init, cleanup);
5067 else if (TYPE_NON_AGGREGATE_CLASS (type))
5068 {
5069 /* Don't reshape if the class has constructors. */
5070 if (cxx_dialect == cxx98)
5071 error ("in C++98 %qD must be initialized by constructor, "
5072 "not by %<{...}%>",
5073 decl);
5074 init = build_tree_list (NULL_TREE, init);
5075 }
5076 else if ((*targetm.vector_opaque_p) (type))
6e1b3a7c
AH
5077 {
5078 error ("opaque vector types cannot be initialized");
5079 init = error_mark_node;
5080 }
09357846
JM
5081 else
5082 init = reshape_init (type, init);
a16f2357 5083 }
8e3df2de
MM
5084
5085 /* If DECL has an array type without a specific bound, deduce the
5086 array size from the initializer. */
5087 maybe_deduce_size_from_array_init (decl, init);
5088 type = TREE_TYPE (decl);
2b643eda
MM
5089 if (type == error_mark_node)
5090 return NULL_TREE;
8e3df2de 5091
09357846
JM
5092 if (TYPE_NEEDS_CONSTRUCTING (type)
5093 || (CLASS_TYPE_P (type)
5094 && !BRACE_ENCLOSED_INITIALIZER_P (init)))
5095 return build_aggr_init_full_exprs (decl, init, flags);
5096 else if (TREE_CODE (init) != TREE_VEC)
27778b73 5097 {
09357846
JM
5098 init_code = store_init_value (decl, init);
5099 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5100 && DECL_INITIAL (decl)
5101 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5102 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5103 warning (0, "array %qD initialized by parenthesized string literal %qE",
5104 decl, DECL_INITIAL (decl));
5105 init = NULL;
27778b73 5106 }
27778b73
MM
5107 }
5108 else if (DECL_EXTERNAL (decl))
5109 ;
8e3df2de 5110 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
09357846 5111 return build_aggr_init_full_exprs (decl, init, flags);
9e1e64ec 5112 else if (MAYBE_CLASS_TYPE_P (type))
27778b73
MM
5113 {
5114 tree core_type = strip_array_types (type);
5115
8e3df2de 5116 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
2d01edd7 5117 error ("structure %qD with uninitialized const members", decl);
8e3df2de 5118 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
2d01edd7 5119 error ("structure %qD with uninitialized reference members", decl);
27778b73
MM
5120
5121 check_for_uninitialized_const_var (decl);
27778b73
MM
5122 }
5123 else
5124 check_for_uninitialized_const_var (decl);
68642fb6 5125
8e3df2de 5126 if (init && init != error_mark_node)
f293ce4b 5127 init_code = build2 (INIT_EXPR, type, decl, init);
8e3df2de 5128
25ebb82a 5129 return init_code;
27778b73
MM
5130}
5131
5132/* If DECL is not a local variable, give it RTL. */
5133
5134static void
11f6b451 5135make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
27778b73 5136{
95ee998c
MM
5137 int toplev = toplevel_bindings_p ();
5138 int defer_p;
9f12b095 5139 const char *filename;
27778b73 5140
0e6df31e
GK
5141 /* Set the DECL_ASSEMBLER_NAME for the object. */
5142 if (asmspec)
5143 {
5144 /* The `register' keyword, when used together with an
5145 asm-specification, indicates that the variable should be
5146 placed in a particular register. */
5147 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5148 {
11e3f4b6 5149 set_user_assembler_name (decl, asmspec);
0e6df31e
GK
5150 DECL_HARD_REGISTER (decl) = 1;
5151 }
5152 else
b482789c
MA
5153 {
5154 if (TREE_CODE (decl) == FUNCTION_DECL
5155 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5156 set_builtin_user_assembler_name (decl, asmspec);
5157 set_user_assembler_name (decl, asmspec);
5158 }
0e6df31e
GK
5159 }
5160
f39ee884
MM
5161 /* Handle non-variables up front. */
5162 if (TREE_CODE (decl) != VAR_DECL)
5163 {
0e6df31e 5164 rest_of_decl_compilation (decl, toplev, at_eof);
f39ee884
MM
5165 return;
5166 }
5167
95ee998c
MM
5168 /* If we see a class member here, it should be a static data
5169 member. */
5170 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5171 {
50bc768d 5172 gcc_assert (TREE_STATIC (decl));
95ee998c
MM
5173 /* An in-class declaration of a static data member should be
5174 external; it is only a declaration, and not a definition. */
5175 if (init == NULL_TREE)
dc472c59 5176 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
95ee998c
MM
5177 }
5178
95ee998c
MM
5179 /* We don't create any RTL for local variables. */
5180 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5181 return;
27778b73 5182
95ee998c 5183 /* We defer emission of local statics until the corresponding
350fae66 5184 DECL_EXPR is expanded. */
95ee998c
MM
5185 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5186
b602511f
JM
5187 /* We try to defer namespace-scope static constants so that they are
5188 not emitted into the object file unnecessarily. */
9f12b095 5189 filename = input_filename;
b602511f
JM
5190 if (!DECL_VIRTUAL_P (decl)
5191 && TREE_READONLY (decl)
5192 && DECL_INITIAL (decl) != NULL_TREE
5193 && DECL_INITIAL (decl) != error_mark_node
9f12b095 5194 && filename != NULL
b602511f
JM
5195 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5196 && toplev
5197 && !TREE_PUBLIC (decl))
5cc90635
JM
5198 {
5199 /* Fool with the linkage of static consts according to #pragma
5200 interface. */
c533e34d 5201 struct c_fileinfo *finfo = get_fileinfo (filename);
5d709b00 5202 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
27778b73 5203 {
95ee998c 5204 TREE_PUBLIC (decl) = 1;
5d709b00 5205 DECL_EXTERNAL (decl) = finfo->interface_only;
27778b73 5206 }
27778b73 5207
95ee998c 5208 defer_p = 1;
27778b73 5209 }
b602511f 5210 /* Likewise for template instantiations. */
4684cd27
MM
5211 else if (DECL_LANG_SPECIFIC (decl)
5212 && DECL_IMPLICIT_INSTANTIATION (decl))
b602511f 5213 defer_p = 1;
95ee998c 5214
95ee998c 5215 /* If we're not deferring, go ahead and assemble the variable. */
0e6df31e
GK
5216 if (!defer_p)
5217 rest_of_decl_compilation (decl, toplev, at_eof);
27778b73
MM
5218}
5219
a24549d4
JM
5220/* walk_tree helper for wrap_temporary_cleanups, below. */
5221
5222static tree
5223wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5224{
5225 if (TYPE_P (*stmt_p))
5226 {
5227 *walk_subtrees = 0;
5228 return NULL_TREE;
5229 }
5230
5231 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5232 {
5233 tree guard = (tree)data;
5234 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5235
5236 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
33b45227
JM
5237 /* Tell honor_protect_cleanup_actions to handle this as a separate
5238 cleanup. */
5239 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5240
a24549d4
JM
5241 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5242 }
5243
5244 return NULL_TREE;
5245}
5246
5247/* We're initializing a local variable which has a cleanup GUARD. If there
5248 are any temporaries used in the initializer INIT of this variable, we
5249 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
33b45227
JM
5250 variable will be cleaned up properly if one of them throws.
5251
5252 Unfortunately, there's no way to express this properly in terms of
5253 nesting, as the regions for the temporaries overlap the region for the
5254 variable itself; if there are two temporaries, the variable needs to be
5255 the first thing destroyed if either of them throws. However, we only
5256 want to run the variable's cleanup if it actually got constructed. So
5257 we need to guard the temporary cleanups with the variable's cleanup if
5258 they are run on the normal path, but not if they are run on the
5259 exceptional path. We implement this by telling
5260 honor_protect_cleanup_actions to strip the variable cleanup from the
5261 exceptional path. */
a24549d4
JM
5262
5263static void
5264wrap_temporary_cleanups (tree init, tree guard)
5265{
5266 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5267}
5268
ed5511d9 5269/* Generate code to initialize DECL (a local variable). */
27778b73 5270
8e3df2de 5271static void
11f6b451 5272initialize_local_var (tree decl, tree init)
27778b73 5273{
9ed9e79a 5274 tree type = TREE_TYPE (decl);
170b020f 5275 tree cleanup;
a24549d4 5276 int already_used;
27778b73 5277
50bc768d
NS
5278 gcc_assert (TREE_CODE (decl) == VAR_DECL
5279 || TREE_CODE (decl) == RESULT_DECL);
5280 gcc_assert (!TREE_STATIC (decl));
b7b8bcd2 5281
8e3df2de 5282 if (DECL_SIZE (decl) == NULL_TREE)
b7b8bcd2
MM
5283 {
5284 /* If we used it already as memory, it must stay in memory. */
5285 DECL_INITIAL (decl) = NULL_TREE;
5286 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
a24549d4 5287 return;
b7b8bcd2
MM
5288 }
5289
a24549d4
JM
5290 if (type == error_mark_node)
5291 return;
68642fb6 5292
a24549d4
JM
5293 /* Compute and store the initial value. */
5294 already_used = TREE_USED (decl) || TREE_USED (type);
27778b73 5295
a24549d4
JM
5296 /* Generate a cleanup, if necessary. */
5297 cleanup = cxx_maybe_build_cleanup (decl);
27778b73 5298
a24549d4
JM
5299 /* Perform the initialization. */
5300 if (init)
5301 {
5302 int saved_stmts_are_full_exprs_p;
5303
5304 /* If we're only initializing a single object, guard the destructors
5305 of any temporaries used in its initializer with its destructor.
5306 This isn't right for arrays because each element initialization is
5307 a full-expression. */
5308 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5309 wrap_temporary_cleanups (init, cleanup);
5310
5311 gcc_assert (building_stmt_tree ());
5312 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5313 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5314 finish_expr_stmt (init);
5315 current_stmt_tree ()->stmts_are_full_exprs_p =
5316 saved_stmts_are_full_exprs_p;
27778b73 5317 }
24bef158 5318
a24549d4
JM
5319 /* Set this to 0 so we can tell whether an aggregate which was
5320 initialized was ever used. Don't do this if it has a
5321 destructor, so we don't complain about the 'resource
5322 allocation is initialization' idiom. Now set
5323 attribute((unused)) on types so decls of that type will be
5324 marked used. (see TREE_USED, above.) */
5325 if (TYPE_NEEDS_CONSTRUCTING (type)
5326 && ! already_used
5327 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5328 && DECL_NAME (decl))
5329 TREE_USED (decl) = 0;
5330 else if (already_used)
5331 TREE_USED (decl) = 1;
5332
5333 if (cleanup)
170b020f 5334 finish_decl_cleanup (decl, cleanup);
24bef158
MM
5335}
5336
19c29b2f
MM
5337/* DECL is a VAR_DECL for a compiler-generated variable with static
5338 storage duration (like a virtual table) whose initializer is a
3b2db49f
MM
5339 compile-time constant. INIT must be either a TREE_LIST of values,
5340 or a CONSTRUCTOR. Initialize the variable and provide it to the
5341 back end. */
19c29b2f
MM
5342
5343void
5344initialize_artificial_var (tree decl, tree init)
5345{
d23f3d60 5346 gcc_assert (DECL_ARTIFICIAL (decl));
3b2db49f 5347 if (TREE_CODE (init) == TREE_LIST)
09357846 5348 init = build_constructor_from_list (TREE_TYPE (decl), init);
3b2db49f
MM
5349 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5350 DECL_INITIAL (decl) = init;
19c29b2f
MM
5351 DECL_INITIALIZED_P (decl) = 1;
5352 determine_visibility (decl);
5353 layout_var_decl (decl);
5354 maybe_commonize_var (decl);
5355 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5356}
5357
32a11c08
MM
5358/* INIT is the initializer for a variable, as represented by the
5359 parser. Returns true iff INIT is value-dependent. */
5360
5361static bool
5362value_dependent_init_p (tree init)
5363{
5364 if (TREE_CODE (init) == TREE_LIST)
5365 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5366 return any_value_dependent_elements_p (init);
5367 else if (TREE_CODE (init) == CONSTRUCTOR)
5368 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5369 {
5370 VEC(constructor_elt, gc) *elts;
5371 size_t nelts;
5372 size_t i;
5373
5374 elts = CONSTRUCTOR_ELTS (init);
5375 nelts = VEC_length (constructor_elt, elts);
5376 for (i = 0; i < nelts; ++i)
5377 if (value_dependent_init_p (VEC_index (constructor_elt,
5378 elts, i)->value))
5379 return true;
5380 }
5381 else
5382 /* It must be a simple expression, e.g., int i = 3; */
5383 return value_dependent_expression_p (init);
5384
5385 return false;
5386}
5387
8d08fdba
MS
5388/* Finish processing of a declaration;
5389 install its line number and initial value.
5390 If the length of an array type is not known before,
5391 it must be determined now, from the initial value, or it is an error.
5392
d174af6c
MM
5393 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
5394 true, then INIT is an integral constant expression.
8d08fdba 5395
920f9474 5396 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
f78c7bc6 5397 if the (init) syntax was used. */
8d08fdba
MS
5398
5399void
3db45ab5 5400cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
d174af6c 5401 tree asmspec_tree, int flags)
8d08fdba 5402{
7e99327d 5403 tree type;
7e99327d 5404 tree cleanup;
9c0758dd 5405 const char *asmspec = NULL;
8d08fdba 5406 int was_readonly = 0;
745d26d9 5407 bool var_definition_p = false;
2b643eda 5408 int saved_processing_template_decl;
8d08fdba 5409
11325dcd
KL
5410 if (decl == error_mark_node)
5411 return;
5412 else if (! decl)
8d08fdba
MS
5413 {
5414 if (init)
8251199e 5415 error ("assignment (not initialization) in declaration");
8d08fdba
MS
5416 return;
5417 }
5418
50bc768d 5419 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
2b643eda
MM
5420 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5421 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5422
5423 type = TREE_TYPE (decl);
5424 if (type == error_mark_node)
5425 return;
170b020f 5426
7e99327d
MM
5427 /* Assume no cleanup is required. */
5428 cleanup = NULL_TREE;
2b643eda 5429 saved_processing_template_decl = processing_template_decl;
7e99327d 5430
a4443a08 5431 /* If a name was specified, get the string. */
5f52c0e0 5432 if (global_scope_p (current_binding_level))
41c64394 5433 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4f543d15 5434 if (asmspec_tree && asmspec_tree != error_mark_node)
5cc90635 5435 asmspec = TREE_STRING_POINTER (asmspec_tree);
8d08fdba 5436
6ba89f8e 5437 if (current_class_type
4f1c5b7d 5438 && CP_DECL_CONTEXT (decl) == current_class_type
6ba89f8e
MM
5439 && TYPE_BEING_DEFINED (current_class_type)
5440 && (DECL_INITIAL (decl) || init))
3febd123 5441 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6ba89f8e 5442
5156628f 5443 if (processing_template_decl)
5566b478 5444 {
2b643eda
MM
5445 bool type_dependent_p;
5446
08ac397c 5447 /* Add this declaration to the statement-tree. */
170b020f 5448 if (at_function_scope_p ())
350fae66 5449 add_decl_expr (decl);
08ac397c 5450
2b643eda
MM
5451 type_dependent_p = dependent_type_p (type);
5452
7b3e2d46
DG
5453 if (check_for_bare_parameter_packs (init))
5454 {
5455 init = NULL_TREE;
5456 DECL_INITIAL (decl) = NULL_TREE;
5457 }
5458
2b643eda 5459 if (init && init_const_expr_p)
d174af6c 5460 {
2b643eda
MM
5461 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5462 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5463 TREE_CONSTANT (decl) = 1;
d174af6c
MM
5464 }
5465
32a11c08
MM
5466 /* Generally, initializers in templates are expanded when the
5467 template is instantiated. But, if DECL is an integral
5468 constant static data member, then it can be used in future
5469 integral constant expressions, and its value must be
5470 available. */
5471 if (!(init
5472 && DECL_CLASS_SCOPE_P (decl)
5473 && DECL_INTEGRAL_CONSTANT_VAR_P (decl)
5474 && !type_dependent_p
5475 && !value_dependent_init_p (init)))
2b643eda
MM
5476 {
5477 if (init)
5478 DECL_INITIAL (decl) = init;
5479 if (TREE_CODE (decl) == VAR_DECL
5480 && !DECL_PRETTY_FUNCTION_P (decl)
5481 && !type_dependent_p)
5482 maybe_deduce_size_from_array_init (decl, init);
5483 goto finish_end;
5484 }
c8094d83 5485
a125de0c
PC
5486 if (TREE_CODE (init) == TREE_LIST)
5487 {
5488 /* If the parenthesized-initializer form was used (e.g.,
5489 "int A<N>::i(X)"), then INIT will be a TREE_LIST of initializer
5490 arguments. (There is generally only one.) We convert them
5491 individually. */
5492 tree list = init;
5493 for (; list; list = TREE_CHAIN (list))
5494 {
5495 tree elt = TREE_VALUE (list);
5496 TREE_VALUE (list) = fold_non_dependent_expr (elt);
5497 }
5498 }
5499 else
5500 init = fold_non_dependent_expr (init);
2b643eda 5501 processing_template_decl = 0;
5566b478 5502 }
3e41d13b 5503
8d08fdba
MS
5504 /* Take care of TYPE_DECLs up front. */
5505 if (TREE_CODE (decl) == TYPE_DECL)
5506 {
a0a33927 5507 if (type != error_mark_node
9e1e64ec 5508 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
8d08fdba
MS
5509 {
5510 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
d4ee4d25 5511 warning (0, "shadowing previous type declaration of %q#D", decl);
4b0d3cbe 5512 set_identifier_type_value (DECL_NAME (decl), decl);
8d08fdba 5513 }
cffa8729
MS
5514
5515 /* If we have installed this as the canonical typedef for this
5516 type, and that type has not been defined yet, delay emitting
956d6950 5517 the debug information for it, as we will emit it later. */
d2e5ee5c 5518 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
d0f062fb 5519 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
cffa8729
MS
5520 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5521
0e6df31e
GK
5522 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5523 at_eof);
8d08fdba
MS
5524 goto finish_end;
5525 }
3e41d13b 5526
67935995 5527 /* A reference will be modified here, as it is initialized. */
c8094d83 5528 if (! DECL_EXTERNAL (decl)
67935995
MM
5529 && TREE_READONLY (decl)
5530 && TREE_CODE (type) == REFERENCE_TYPE)
8d08fdba 5531 {
8d08fdba 5532 was_readonly = 1;
67935995 5533 TREE_READONLY (decl) = 0;
8d08fdba
MS
5534 }
5535
437081d7 5536 if (TREE_CODE (decl) == VAR_DECL)
17bbb839
MM
5537 {
5538 /* Only PODs can have thread-local storage. Other types may require
5539 various kinds of non-trivial initialization. */
c2f7fa15 5540 if (DECL_THREAD_LOCAL_P (decl) && !pod_type_p (TREE_TYPE (decl)))
2d01edd7 5541 error ("%qD cannot be thread-local because it has non-POD type %qT",
17bbb839 5542 decl, TREE_TYPE (decl));
d23f3d60
MM
5543 /* If this is a local variable that will need a mangled name,
5544 register it now. We must do this before processing the
5545 initializer for the variable, since the initialization might
5546 require a guard variable, and since the mangled name of the
5547 guard variable will depend on the mangled name of this
5548 variable. */
b0eb6a8f 5549 if (DECL_FUNCTION_SCOPE_P (decl)
d23f3d60
MM
5550 && TREE_STATIC (decl)
5551 && !DECL_ARTIFICIAL (decl))
5552 push_local_name (decl);
17bbb839
MM
5553 /* Convert the initializer to the type of DECL, if we have not
5554 already initialized DECL. */
5555 if (!DECL_INITIALIZED_P (decl)
5556 /* If !DECL_EXTERNAL then DECL is being defined. In the
8e3df2de 5557 case of a static data member initialized inside the
17bbb839
MM
5558 class-specifier, there can be an initializer even if DECL
5559 is *not* defined. */
5560 && (!DECL_EXTERNAL (decl) || init))
5561 {
9e1e64ec 5562 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
360f866c
JJ
5563 {
5564 tree jclass
5565 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
5566 /* Allow libjava/prims.cc define primitive classes. */
5567 if (init != NULL_TREE
5568 || jclass == NULL_TREE
5569 || TREE_CODE (jclass) != TYPE_DECL
5570 || !POINTER_TYPE_P (TREE_TYPE (jclass))
5571 || !same_type_ignoring_top_level_qualifiers_p
5572 (type, TREE_TYPE (TREE_TYPE (jclass))))
5573 error ("Java object %qD not allocated with %<new%>", decl);
5574 init = NULL_TREE;
5575 }
6c06fbce 5576 if (init)
d174af6c
MM
5577 {
5578 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5579 if (init_const_expr_p)
5580 {
5581 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5582 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5583 TREE_CONSTANT (decl) = 1;
5584 }
5585 }
7e99327d 5586 init = check_initializer (decl, init, flags, &cleanup);
b4c20e52 5587 /* Thread-local storage cannot be dynamically initialized. */
c2f7fa15 5588 if (DECL_THREAD_LOCAL_P (decl) && init)
b4c20e52 5589 {
2d01edd7 5590 error ("%qD is thread-local and so cannot be dynamically "
b4c20e52
MM
5591 "initialized", decl);
5592 init = NULL_TREE;
5593 }
b794e321
MM
5594
5595 /* Check that the initializer for a static data member was a
1634705d 5596 constant. Although we check in the parser that the
b794e321
MM
5597 initializer is an integral constant expression, we do not
5598 simplify division-by-zero at the point at which it
5599 occurs. Therefore, in:
5600
5601 struct S { static const int i = 7 / 0; };
3db45ab5 5602
b794e321
MM
5603 we issue an error at this point. It would
5604 probably be better to forbid division by zero in
5605 integral constant expressions. */
8fe4d24b
NS
5606 if (DECL_EXTERNAL (decl) && init)
5607 {
8fe4d24b
NS
5608 error ("%qD cannot be initialized by a non-constant expression"
5609 " when being declared", decl);
5610 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5611 init = NULL_TREE;
5612 }
c8094d83 5613
17bbb839 5614 /* Handle:
caf93cb0 5615
17bbb839 5616 [dcl.init]
caf93cb0 5617
17bbb839
MM
5618 The memory occupied by any object of static storage
5619 duration is zero-initialized at program startup before
5620 any other initialization takes place.
caf93cb0 5621
17bbb839
MM
5622 We cannot create an appropriate initializer until after
5623 the type of DECL is finalized. If DECL_INITIAL is set,
5624 then the DECL is statically initialized, and any
5625 necessary zero-initialization has already been performed. */
5626 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5627 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
1cb8292f 5628 /*nelts=*/NULL_TREE,
17bbb839
MM
5629 /*static_storage_p=*/true);
5630 /* Remember that the initialization for this variable has
5631 taken place. */
5632 DECL_INITIALIZED_P (decl) = 1;
745d26d9
MM
5633 /* This declaration is the definition of this variable,
5634 unless we are initializing a static data member within
5635 the class specifier. */
5636 if (!DECL_EXTERNAL (decl))
5637 var_definition_p = true;
17bbb839 5638 }
d881ff25
MM
5639 /* If the variable has an array type, lay out the type, even if
5640 there is no initializer. It is valid to index through the
5641 array, and we must get TYPE_ALIGN set correctly on the array
5642 type. */
5643 else if (TREE_CODE (type) == ARRAY_TYPE)
5644 layout_type (type);
17bbb839 5645 }
360f866c 5646 else if (TREE_CODE (decl) == FIELD_DECL
9e1e64ec 5647 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
360f866c 5648 error ("non-static data member %qD has Java class type", decl);
3e41d13b 5649
57cf57fb 5650 /* Add this declaration to the statement-tree. This needs to happen
350fae66
RK
5651 after the call to check_initializer so that the DECL_EXPR for a
5652 reference temp is added before the DECL_EXPR for the reference itself. */
170b020f 5653 if (at_function_scope_p ())
350fae66 5654 add_decl_expr (decl);
08ac397c 5655
da71e18c
MM
5656 /* Let the middle end know about variables and functions -- but not
5657 static data members in uninstantiated class templates. */
5658 if (!saved_processing_template_decl
5659 && (TREE_CODE (decl) == VAR_DECL
5660 || TREE_CODE (decl) == FUNCTION_DECL))
8d08fdba 5661 {
27778b73 5662 if (TREE_CODE (decl) == VAR_DECL)
da71e18c
MM
5663 {
5664 layout_var_decl (decl);
5665 maybe_commonize_var (decl);
5666 }
8d08fdba 5667
4c5bae34
RS
5668 /* This needs to happen after the linkage is set. */
5669 determine_visibility (decl);
5670
b0eb6a8f
JJ
5671 if (var_definition_p && TREE_STATIC (decl))
5672 {
5673 /* If a TREE_READONLY variable needs initialization
5674 at runtime, it is no longer readonly and we need to
5675 avoid MEM_READONLY_P being set on RTL created for it. */
5676 if (init)
5677 {
5678 if (TREE_READONLY (decl))
5679 TREE_READONLY (decl) = 0;
5680 was_readonly = 0;
5681 }
5682 else if (was_readonly)
5683 TREE_READONLY (decl) = 1;
5684 }
5685
27778b73 5686 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8d08fdba 5687
7fb213d8
GB
5688 /* Check for abstractness of the type. Notice that there is no
5689 need to strip array types here since the check for those types
5690 is already done within create_array_type_for_decl. */
68642fb6 5691 if (TREE_CODE (type) == FUNCTION_TYPE
27778b73 5692 || TREE_CODE (type) == METHOD_TYPE)
7fb213d8 5693 abstract_virtuals_error (decl, TREE_TYPE (type));
68642fb6 5694 else
cfb91b67 5695 abstract_virtuals_error (decl, type);
8d08fdba 5696
b87d79e6 5697 if (TREE_TYPE (decl) == error_mark_node)
8e3df2de 5698 /* No initialization required. */
faae18ab 5699 ;
b87d79e6
JM
5700 else if (TREE_CODE (decl) == FUNCTION_DECL)
5701 {
5702 if (init)
5703 {
5704 if (init == ridpointers[(int)RID_DELETE])
5705 {
5706 /* fixme check this is 1st decl */
5707 DECL_DELETED_FN (decl) = 1;
5708 DECL_DECLARED_INLINE_P (decl) = 1;
5709 DECL_INITIAL (decl) = error_mark_node;
5710 }
5711 else if (init == ridpointers[(int)RID_DEFAULT])
5712 {
5713 if (!defaultable_fn_p (decl))
5714 error ("%qD cannot be defaulted", decl);
5715 else
5716 {
5717 /* An out-of-class default definition is defined at
5718 the point where it is explicitly defaulted. */
5719 DECL_DEFAULTED_FN (decl) = 1;
5720 if (DECL_INITIAL (decl) == error_mark_node)
5721 synthesize_method (decl);
5722 }
5723 }
5724 else
5725 error ("function %q#D is initialized like a variable", decl);
5726 }
5727 /* else no initialization required. */
5728 }
67d743fe
MS
5729 else if (DECL_EXTERNAL (decl)
5730 && ! (DECL_LANG_SPECIFIC (decl)
5731 && DECL_NOT_REALLY_EXTERN (decl)))
5566b478
MS
5732 {
5733 if (init)
5734 DECL_INITIAL (decl) = init;
5735 }
b0eb6a8f
JJ
5736 /* A variable definition. */
5737 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5738 /* Initialize the local variable. */
5739 initialize_local_var (decl, init);
5740
5741 /* If a variable is defined, and then a subsequent
5742 definition with external linkage is encountered, we will
5743 get here twice for the same variable. We want to avoid
5744 calling expand_static_init more than once. For variables
5745 that are not static data members, we can call
5746 expand_static_init only when we actually process the
5747 initializer. It is not legal to redeclare a static data
5748 member, so this issue does not arise in that case. */
5749 else if (var_definition_p && TREE_STATIC (decl))
5750 expand_static_init (decl, init);
8d08fdba
MS
5751 }
5752
7e99327d
MM
5753 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5754 reference, insert it in the statement-tree now. */
5755 if (cleanup)
325c3691 5756 push_cleanup (decl, cleanup, false);
7e99327d 5757
8d08fdba 5758 finish_end:
2b643eda 5759 processing_template_decl = saved_processing_template_decl;
8d08fdba 5760
8d08fdba
MS
5761 if (was_readonly)
5762 TREE_READONLY (decl) = 1;
d1bd0ded
GK
5763
5764 /* If this was marked 'used', be sure it will be output. */
5765 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
bb9a388d 5766 mark_decl_referenced (decl);
8d08fdba
MS
5767}
5768
f4f206f4 5769/* This is here for a midend callback from c-common.c. */
e92cc029 5770
82580166 5771void
11f6b451 5772finish_decl (tree decl, tree init, tree asmspec_tree)
82580166 5773{
d174af6c 5774 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, asmspec_tree, 0);
82580166
MS
5775}
5776
db4283a0
MM
5777/* Returns a declaration for a VAR_DECL as if:
5778
5779 extern "C" TYPE NAME;
5780
5781 had been seen. Used to create compiler-generated global
5782 variables. */
5783
993acaec 5784static tree
11f6b451 5785declare_global_var (tree name, tree type)
db4283a0
MM
5786{
5787 tree decl;
5788
5789 push_to_top_level ();
5790 decl = build_decl (VAR_DECL, name, type);
5791 TREE_PUBLIC (decl) = 1;
5792 DECL_EXTERNAL (decl) = 1;
5793 DECL_ARTIFICIAL (decl) = 1;
de3fe73c
MM
5794 /* If the user has explicitly declared this variable (perhaps
5795 because the code we are compiling is part of a low-level runtime
5796 library), then it is possible that our declaration will be merged
5797 with theirs by pushdecl. */
5798 decl = pushdecl (decl);
d174af6c 5799 finish_decl (decl, NULL_TREE, NULL_TREE);
db4283a0
MM
5800 pop_from_top_level ();
5801
5802 return decl;
5803}
5804
46a9e521
MM
5805/* Returns the type for the argument to "__cxa_atexit" (or "atexit",
5806 if "__cxa_atexit" is not being used) corresponding to the function
5807 to be called when the program exits. */
5808
5809static tree
5810get_atexit_fn_ptr_type (void)
5811{
5812 tree arg_types;
5813 tree fn_type;
5814
5815 if (!atexit_fn_ptr_type_node)
5816 {
5817 if (flag_use_cxa_atexit
5818 && !targetm.cxx.use_atexit_for_cxa_atexit ())
5819 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
5820 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5821 else
5822 /* The parameter to "atexit" is "void (*)(void)". */
5823 arg_types = void_list_node;
5824
5825 fn_type = build_function_type (void_type_node, arg_types);
5826 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
5827 }
5828
5829 return atexit_fn_ptr_type_node;
5830}
5831
db4283a0 5832/* Returns a pointer to the `atexit' function. Note that if
838dfd8a 5833 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
db4283a0
MM
5834 `__cxa_atexit' function specified in the IA64 C++ ABI. */
5835
5836static tree
11f6b451 5837get_atexit_node (void)
db4283a0
MM
5838{
5839 tree atexit_fndecl;
5840 tree arg_types;
5841 tree fn_type;
5842 tree fn_ptr_type;
5843 const char *name;
9f62c3e3 5844 bool use_aeabi_atexit;
db4283a0
MM
5845
5846 if (atexit_node)
5847 return atexit_node;
5848
97388150 5849 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
db4283a0
MM
5850 {
5851 /* The declaration for `__cxa_atexit' is:
5852
5853 int __cxa_atexit (void (*)(void *), void *, void *)
5854
5855 We build up the argument types and then then function type
5856 itself. */
68642fb6 5857
9f62c3e3 5858 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
db4283a0
MM
5859 /* First, build the pointer-to-function type for the first
5860 argument. */
46a9e521 5861 fn_ptr_type = get_atexit_fn_ptr_type ();
db4283a0
MM
5862 /* Then, build the rest of the argument types. */
5863 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
9f62c3e3
PB
5864 if (use_aeabi_atexit)
5865 {
5866 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5867 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5868 }
5869 else
5870 {
5871 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5872 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5873 }
db4283a0
MM
5874 /* And the final __cxa_atexit type. */
5875 fn_type = build_function_type (integer_type_node, arg_types);
5876 fn_ptr_type = build_pointer_type (fn_type);
9f62c3e3
PB
5877 if (use_aeabi_atexit)
5878 name = "__aeabi_atexit";
5879 else
5880 name = "__cxa_atexit";
db4283a0
MM
5881 }
5882 else
5883 {
5884 /* The declaration for `atexit' is:
68642fb6 5885
0cbd7506 5886 int atexit (void (*)());
db4283a0
MM
5887
5888 We build up the argument types and then then function type
5889 itself. */
46a9e521 5890 fn_ptr_type = get_atexit_fn_ptr_type ();
db4283a0
MM
5891 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5892 /* Build the final atexit type. */
5893 fn_type = build_function_type (integer_type_node, arg_types);
5894 name = "atexit";
5895 }
5896
5897 /* Now, build the function declaration. */
5898 push_lang_context (lang_name_c);
0c11ada6 5899 atexit_fndecl = build_library_fn_ptr (name, fn_type);
db4283a0
MM
5900 mark_used (atexit_fndecl);
5901 pop_lang_context ();
0a72704b 5902 atexit_node = decay_conversion (atexit_fndecl);
db4283a0
MM
5903
5904 return atexit_node;
5905}
5906
5907/* Returns the __dso_handle VAR_DECL. */
5908
5909static tree
11f6b451 5910get_dso_handle_node (void)
db4283a0
MM
5911{
5912 if (dso_handle_node)
5913 return dso_handle_node;
5914
5915 /* Declare the variable. */
5916 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5917 ptr_type_node);
5918
5919 return dso_handle_node;
5920}
5921
5922/* Begin a new function with internal linkage whose job will be simply
5923 to destroy some particular variable. */
5924
d192828a
GK
5925static GTY(()) int start_cleanup_cnt;
5926
db4283a0 5927static tree
11f6b451 5928start_cleanup_fn (void)
db4283a0 5929{
db4283a0 5930 char name[32];
db4283a0
MM
5931 tree fntype;
5932 tree fndecl;
97388150
DS
5933 bool use_cxa_atexit = flag_use_cxa_atexit
5934 && !targetm.cxx.use_atexit_for_cxa_atexit ();
db4283a0
MM
5935
5936 push_to_top_level ();
5937
5938 /* No need to mangle this. */
5939 push_lang_context (lang_name_c);
5940
db4283a0 5941 /* Build the name of the function. */
d192828a 5942 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
db4283a0 5943 /* Build the function declaration. */
46a9e521 5944 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
db4283a0
MM
5945 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5946 /* It's a function with internal linkage, generated by the
5947 compiler. */
5948 TREE_PUBLIC (fndecl) = 0;
5949 DECL_ARTIFICIAL (fndecl) = 1;
5a728aca
MM
5950 /* Make the function `inline' so that it is only emitted if it is
5951 actually needed. It is unlikely that it will be inlined, since
aba649ba 5952 it is only called via a function pointer, but we avoid unnecessary
5a728aca 5953 emissions this way. */
d4d1ebc1 5954 DECL_INTERFACE_KNOWN (fndecl) = 1;
db4283a0 5955 /* Build the parameter. */
97388150 5956 if (use_cxa_atexit)
db4283a0
MM
5957 {
5958 tree parmdecl;
5959
8e51619a 5960 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
db4283a0 5961 DECL_CONTEXT (parmdecl) = fndecl;
db4283a0
MM
5962 TREE_USED (parmdecl) = 1;
5963 DECL_ARGUMENTS (fndecl) = parmdecl;
5964 }
5965
09ed39ad 5966 pushdecl (fndecl);
058b15c1 5967 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
db4283a0 5968
db4283a0
MM
5969 pop_lang_context ();
5970
5971 return current_function_decl;
5972}
5973
5974/* Finish the cleanup function begun by start_cleanup_fn. */
5975
5976static void
11f6b451 5977end_cleanup_fn (void)
db4283a0 5978{
8cd2462c 5979 expand_or_defer_fn (finish_function (0));
db4283a0
MM
5980
5981 pop_from_top_level ();
5982}
5983
bf419747
MM
5984/* Generate code to handle the destruction of DECL, an object with
5985 static storage duration. */
f0105ed3 5986
40aac948 5987tree
11f6b451 5988register_dtor_fn (tree decl)
f0105ed3 5989{
db4283a0 5990 tree cleanup;
f0105ed3 5991 tree compound_stmt;
db4283a0
MM
5992 tree args;
5993 tree fcall;
46a9e521
MM
5994 tree type;
5995 bool use_dtor;
f0105ed3 5996
46a9e521
MM
5997 type = TREE_TYPE (decl);
5998 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
40aac948 5999 return void_zero_node;
bf419747 6000
46a9e521
MM
6001 /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6002 a class object, we can just pass the destructor to
6003 "__cxa_atexit"; we don't have to build a temporary function to do
6004 the cleanup. */
6005 use_dtor = (flag_use_cxa_atexit
6006 && !targetm.cxx.use_atexit_for_cxa_atexit ()
6007 && CLASS_TYPE_P (type));
6008 if (use_dtor)
6009 {
6010 int idx;
6011
6012 /* Find the destructor. */
6013 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6014 gcc_assert (idx >= 0);
6015 cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6016 /* Make sure it is accessible. */
6017 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6018 }
6019 else
6020 {
6021 /* Call build_cleanup before we enter the anonymous function so
6022 that any access checks will be done relative to the current
6023 scope, rather than the scope of the anonymous function. */
6024 build_cleanup (decl);
6025
6026 /* Now start the function. */
6027 cleanup = start_cleanup_fn ();
6028
6029 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
6030 to the original function, rather than the anonymous one. That
6031 will make the back end think that nested functions are in use,
6032 which causes confusion. */
6033 push_deferring_access_checks (dk_no_check);
6034 fcall = build_cleanup (decl);
6035 pop_deferring_access_checks ();
6036
6037 /* Create the body of the anonymous function. */
6038 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6039 finish_expr_stmt (fcall);
6040 finish_compound_stmt (compound_stmt);
6041 end_cleanup_fn ();
6042 }
f0105ed3
MM
6043
6044 /* Call atexit with the cleanup function. */
bb4f6e6b 6045 mark_used (cleanup);
46a9e521 6046 cleanup = build_address (cleanup);
97388150 6047 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
db4283a0 6048 {
46a9e521
MM
6049 tree addr;
6050
6051 if (use_dtor)
6052 {
6053 /* We must convert CLEANUP to the type that "__cxa_atexit"
6054 expects. */
6055 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6056 /* "__cxa_atexit" will pass the address of DECL to the
6057 cleanup function. */
6058 mark_used (decl);
6059 addr = build_address (decl);
6060 /* The declared type of the parameter to "__cxa_atexit" is
6061 "void *". For plain "T*", we could just let the
5ade1ed2 6062 machinery in cp_build_function_call convert it -- but if the
46a9e521
MM
6063 type is "cv-qualified T *", then we need to convert it
6064 before passing it in, to avoid spurious errors. */
6065 addr = build_nop (ptr_type_node, addr);
6066 }
6067 else
6068 /* Since the cleanup functions we build ignore the address
6069 they're given, there's no reason to pass the actual address
6070 in, and, in general, it's cheaper to pass NULL than any
6071 other value. */
6072 addr = null_pointer_node;
caf93cb0 6073 args = tree_cons (NULL_TREE,
5ade1ed2
DG
6074 cp_build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0,
6075 tf_warning_or_error),
0f268005 6076 NULL_TREE);
9f62c3e3
PB
6077 if (targetm.cxx.use_aeabi_atexit ())
6078 {
6079 args = tree_cons (NULL_TREE, cleanup, args);
46a9e521 6080 args = tree_cons (NULL_TREE, addr, args);
9f62c3e3
PB
6081 }
6082 else
6083 {
46a9e521 6084 args = tree_cons (NULL_TREE, addr, args);
9f62c3e3
PB
6085 args = tree_cons (NULL_TREE, cleanup, args);
6086 }
db4283a0
MM
6087 }
6088 else
6089 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5ade1ed2
DG
6090 return cp_build_function_call (get_atexit_node (), args,
6091 tf_warning_or_error);
f0105ed3
MM
6092}
6093
8e3df2de
MM
6094/* DECL is a VAR_DECL with static storage duration. INIT, if present,
6095 is its initializer. Generate code to handle the construction
6096 and destruction of DECL. */
6097
6098static void
11f6b451 6099expand_static_init (tree decl, tree init)
8d08fdba 6100{
50bc768d
NS
6101 gcc_assert (TREE_CODE (decl) == VAR_DECL);
6102 gcc_assert (TREE_STATIC (decl));
8e3df2de
MM
6103
6104 /* Some variables require no initialization. */
caf93cb0 6105 if (!init
8e3df2de
MM
6106 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
6107 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6108 return;
6109
eba6cfb6 6110 if (DECL_FUNCTION_SCOPE_P (decl))
8d08fdba
MS
6111 {
6112 /* Emit code to perform this initialization but once. */
445cf5eb
JM
6113 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6114 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
94a0dd7b 6115 tree guard, guard_addr;
40aac948
JM
6116 tree acquire_fn, release_fn, abort_fn;
6117 tree flag, begin;
8d08fdba 6118
2036a15c
MM
6119 /* Emit code to perform this initialization but once. This code
6120 looks like:
6121
0cbd7506
MS
6122 static <type> guard;
6123 if (!guard.first_byte) {
40aac948
JM
6124 if (__cxa_guard_acquire (&guard)) {
6125 bool flag = false;
6126 try {
0cbd7506
MS
6127 // Do initialization.
6128 flag = true; __cxa_guard_release (&guard);
6129 // Register variable for destruction at end of program.
40aac948 6130 } catch {
0cbd7506 6131 if (!flag) __cxa_guard_abort (&guard);
40aac948 6132 }
2036a15c
MM
6133 }
6134
40aac948 6135 Note that the `flag' variable is only set to 1 *after* the
2036a15c
MM
6136 initialization is complete. This ensures that an exception,
6137 thrown during the construction, will cause the variable to
6138 reinitialized when we pass through this code again, as per:
68642fb6 6139
2036a15c
MM
6140 [stmt.dcl]
6141
c8094d83 6142 If the initialization exits by throwing an exception, the
2036a15c
MM
6143 initialization is not complete, so it will be tried again
6144 the next time control enters the declaration.
6145
0cbd7506 6146 This process should be thread-safe, too; multiple threads
40aac948
JM
6147 should not be able to initialize the variable more than
6148 once. */
c395453c
MM
6149
6150 /* Create the guard variable. */
6151 guard = get_guard (decl);
2036a15c 6152
445cf5eb
JM
6153 /* This optimization isn't safe on targets with relaxed memory
6154 consistency. On such targets we force synchronization in
6155 __cxa_guard_acquire. */
6156 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6157 {
6158 /* Begin the conditional initialization. */
6159 if_stmt = begin_if_stmt ();
6160 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6161 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6162 }
40aac948
JM
6163
6164 if (flag_threadsafe_statics)
6165 {
6166 guard_addr = build_address (guard);
40aac948
JM
6167
6168 acquire_fn = get_identifier ("__cxa_guard_acquire");
6169 release_fn = get_identifier ("__cxa_guard_release");
6170 abort_fn = get_identifier ("__cxa_guard_abort");
6171 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
6172 {
6173 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
6174 void_list_node);
6175 tree vfntype = build_function_type (void_type_node, argtypes);
6176 acquire_fn = push_library_fn
448083e5
PC
6177 (acquire_fn, build_function_type (integer_type_node, argtypes),
6178 NULL_TREE);
6179 release_fn = push_library_fn (release_fn, vfntype, NULL_TREE);
6180 abort_fn = push_library_fn (abort_fn, vfntype, NULL_TREE);
40aac948
JM
6181 }
6182 else
6183 {
6184 release_fn = identifier_global_value (release_fn);
6185 abort_fn = identifier_global_value (abort_fn);
6186 }
6187
6188 inner_if_stmt = begin_if_stmt ();
94a0dd7b 6189 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
40aac948
JM
6190 inner_if_stmt);
6191
6192 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6193 begin = get_target_expr (boolean_false_node);
6194 flag = TARGET_EXPR_SLOT (begin);
6195
6196 TARGET_EXPR_CLEANUP (begin)
81eba3a8
KH
6197 = build3 (COND_EXPR, void_type_node, flag,
6198 void_zero_node,
94a0dd7b 6199 build_call_n (abort_fn, 1, guard_addr));
40aac948
JM
6200 CLEANUP_EH_ONLY (begin) = 1;
6201
6202 /* Do the initialization itself. */
6203 init = add_stmt_to_compound (begin, init);
6204 init = add_stmt_to_compound
81eba3a8 6205 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
40aac948 6206 init = add_stmt_to_compound
94a0dd7b 6207 (init, build_call_n (release_fn, 1, guard_addr));
40aac948 6208 }
f1dedc31 6209 else
40aac948 6210 init = add_stmt_to_compound (init, set_guard (guard));
72b7eeff 6211
2036a15c
MM
6212 /* Use atexit to register a function for destroying this static
6213 variable. */
40aac948
JM
6214 init = add_stmt_to_compound (init, register_dtor_fn (decl));
6215
6216 finish_expr_stmt (init);
6217
6218 if (flag_threadsafe_statics)
6219 {
6220 finish_compound_stmt (inner_then_clause);
6221 finish_then_clause (inner_if_stmt);
6222 finish_if_stmt (inner_if_stmt);
6223 }
72b7eeff 6224
445cf5eb
JM
6225 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6226 {
6227 finish_compound_stmt (then_clause);
6228 finish_then_clause (if_stmt);
6229 finish_if_stmt (if_stmt);
6230 }
8d08fdba
MS
6231 }
6232 else
bbd15aac 6233 static_aggregates = tree_cons (init, decl, static_aggregates);
8d08fdba 6234}
3c5c0849 6235
8d08fdba
MS
6236\f
6237/* Make TYPE a complete type based on INITIAL_VALUE.
6238 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
07900878
PC
6239 2 if there was no information (in which case assume 0 if DO_DEFAULT),
6240 3 if the initializer list is empty (in pedantic mode). */
8d08fdba
MS
6241
6242int
aab038d5 6243cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8d08fdba 6244{
aab038d5
RH
6245 int failure;
6246 tree type, elt_type;
68642fb6 6247
8d08fdba
MS
6248 if (initial_value)
6249 {
49b5e2f6
DG
6250 unsigned HOST_WIDE_INT i;
6251 tree value;
6252
7b019c19 6253 /* An array of character type can be initialized from a
4038c495
GB
6254 brace-enclosed string constant.
6255
6256 FIXME: this code is duplicated from reshape_init. Probably
6257 we should just call reshape_init here? */
aab038d5 6258 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7b019c19 6259 && TREE_CODE (initial_value) == CONSTRUCTOR
4038c495
GB
6260 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6261 {
6262 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6263 tree value = VEC_index (constructor_elt, v, 0)->value;
6264
6265 if (TREE_CODE (value) == STRING_CST
6266 && VEC_length (constructor_elt, v) == 1)
6267 initial_value = value;
6268 }
49b5e2f6
DG
6269
6270 /* If any of the elements are parameter packs, we can't actually
6271 complete this type now because the array size is dependent. */
6272 if (TREE_CODE (initial_value) == CONSTRUCTOR)
6273 {
6274 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
6275 i, value)
6276 {
6277 if (PACK_EXPANSION_P (value))
6278 return 0;
6279 }
6280 }
8d08fdba
MS
6281 }
6282
aab038d5 6283 failure = complete_array_type (ptype, initial_value, do_default);
8d08fdba 6284
aab038d5
RH
6285 /* We can create the array before the element type is complete, which
6286 means that we didn't have these two bits set in the original type
6287 either. In completing the type, we are expected to propagate these
6288 bits. See also complete_type which does the same thing for arrays
6289 of fixed size. */
6290 type = *ptype;
6291 if (TYPE_DOMAIN (type))
8d08fdba 6292 {
81b4398d 6293 elt_type = TREE_TYPE (type);
aab038d5 6294 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
81b4398d 6295 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
aab038d5 6296 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8d08fdba
MS
6297 }
6298
aab038d5 6299 return failure;
8d08fdba
MS
6300}
6301\f
6302/* Return zero if something is declared to be a member of type
6303 CTYPE when in the context of CUR_TYPE. STRING is the error
6304 message to print in that case. Otherwise, quietly return 1. */
e92cc029 6305
8d08fdba 6306static int
11f6b451 6307member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8d08fdba
MS
6308{
6309 if (ctype && ctype != cur_type)
6310 {
4dacf5bd 6311 if (flags == DTOR_FLAG)
2d01edd7 6312 error ("destructor for alien class %qT cannot be a member", ctype);
4dacf5bd 6313 else
2d01edd7 6314 error ("constructor for alien class %qT cannot be a member", ctype);
8d08fdba
MS
6315 return 0;
6316 }
6317 return 1;
6318}
6319\f
6320/* Subroutine of `grokdeclarator'. */
6321
6322/* Generate errors possibly applicable for a given set of specifiers.
6323 This is for ARM $7.1.2. */
e92cc029 6324
8d08fdba 6325static void
11f6b451 6326bad_specifiers (tree object,
0cbd7506
MS
6327 const char* type,
6328 int virtualp,
6329 int quals,
6330 int inlinep,
6331 int friendp,
6332 int raises)
8d08fdba
MS
6333{
6334 if (virtualp)
2d01edd7 6335 error ("%qD declared as a %<virtual%> %s", object, type);
8d08fdba 6336 if (inlinep)
2d01edd7 6337 error ("%qD declared as an %<inline%> %s", object, type);
8d08fdba 6338 if (quals)
2d01edd7 6339 error ("%<const%> and %<volatile%> function specifiers on "
0cbd7506
MS
6340 "%qD invalid in %s declaration",
6341 object, type);
8d08fdba 6342 if (friendp)
dee15844 6343 error ("%q+D declared as a friend", object);
e1be26f4
RS
6344 if (raises
6345 && (TREE_CODE (object) == TYPE_DECL
6346 || (!TYPE_PTRFN_P (TREE_TYPE (object))
742a37d5 6347 && !TYPE_REFFN_P (TREE_TYPE (object))
e1be26f4 6348 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
dee15844 6349 error ("%q+D declared with an exception specification", object);
8d08fdba
MS
6350}
6351
9c12301f
MM
6352/* DECL is a member function or static data member and is presently
6353 being defined. Check that the definition is taking place in a
6354 valid namespace. */
6355
6356static void
6357check_class_member_definition_namespace (tree decl)
6358{
6359 /* These checks only apply to member functions and static data
6360 members. */
6361 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6362 || TREE_CODE (decl) == VAR_DECL);
6363 /* We check for problems with specializations in pt.c in
6364 check_specialization_namespace, where we can issue better
6365 diagnostics. */
6366 if (processing_specialization)
6367 return;
6368 /* There are no restrictions on the placement of
6369 explicit instantiations. */
6370 if (processing_explicit_instantiation)
6371 return;
6372 /* [class.mfct]
6373
6374 A member function definition that appears outside of the
6375 class definition shall appear in a namespace scope enclosing
6376 the class definition.
6377
6378 [class.static.data]
6379
6380 The definition for a static data member shall appear in a
6381 namespace scope enclosing the member's class definition. */
6382 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
cbe5f3b3 6383 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
37ec60ed 6384 decl, DECL_CONTEXT (decl));
9c12301f
MM
6385}
6386
e2537f2c
MM
6387/* Build a PARM_DECL for the "this" parameter. TYPE is the
6388 METHOD_TYPE for a non-static member function; QUALS are the
6389 cv-qualifiers that apply to the function. */
3db45ab5 6390
e2537f2c
MM
6391tree
6392build_this_parm (tree type, cp_cv_quals quals)
6393{
6394 tree this_type;
6395 tree qual_type;
6396 tree parm;
6397 cp_cv_quals this_quals;
6398
6399 this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
6400 /* The `this' parameter is implicitly `const'; it cannot be
6401 assigned to. */
6402 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
6403 qual_type = cp_build_qualified_type (this_type, this_quals);
6404 parm = build_artificial_parm (this_identifier, qual_type);
6405 cp_apply_type_quals_to_decl (this_quals, parm);
6406 return parm;
3db45ab5 6407}
e2537f2c 6408
8d08fdba
MS
6409/* CTYPE is class type, or null if non-class.
6410 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
6411 or METHOD_TYPE.
6412 DECLARATOR is the function's name.
4546865e 6413 PARMS is a chain of PARM_DECLs for the function.
8d08fdba
MS
6414 VIRTUALP is truthvalue of whether the function is virtual or not.
6415 FLAGS are to be passed through to `grokclassfn'.
6416 QUALS are qualifiers indicating whether the function is `const'
6417 or `volatile'.
6418 RAISES is a list of exceptions that this function can raise.
6419 CHECK is 1 if we must find this method in CTYPE, 0 if we should
68642fb6 6420 not look, and -1 if we should not call `grokclassfn' at all.
3ddfb0e6 6421
27d6592c
MM
6422 SFK is the kind of special function (if any) for the new function.
6423
20496fa2 6424 Returns `NULL_TREE' if something goes wrong, after issuing
3ddfb0e6 6425 applicable error messages. */
e92cc029 6426
8d08fdba 6427static tree
caf93cb0 6428grokfndecl (tree ctype,
0cbd7506
MS
6429 tree type,
6430 tree declarator,
4546865e 6431 tree parms,
0cbd7506
MS
6432 tree orig_declarator,
6433 int virtualp,
6434 enum overload_flags flags,
3c01e5df 6435 cp_cv_quals quals,
0cbd7506
MS
6436 tree raises,
6437 int check,
6438 int friendp,
6439 int publicp,
6440 int inlinep,
27d6592c 6441 special_function_kind sfk,
357d956e 6442 bool funcdef_flag,
0cbd7506
MS
6443 int template_count,
6444 tree in_namespace,
037cc9c5 6445 tree* attrlist)
8d08fdba 6446{
1951a1b6 6447 tree decl;
8d08fdba 6448 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
42976354 6449 tree t;
8d08fdba 6450
8d08fdba 6451 if (raises)
271e6f02 6452 type = build_exception_variant (type, raises);
c11b6f21 6453
8d08fdba 6454 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
e2537f2c
MM
6455 if (TREE_CODE (type) == METHOD_TYPE)
6456 {
6457 tree parm;
6458 parm = build_this_parm (type, quals);
6459 TREE_CHAIN (parm) = parms;
6460 parms = parm;
6461 }
4546865e 6462 DECL_ARGUMENTS (decl) = parms;
a1c65f9f 6463 /* Propagate volatile out from type to decl. */
8d08fdba 6464 if (TYPE_VOLATILE (type))
893de33c 6465 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba 6466
71aea5f2
SM
6467 /* Setup decl according to sfk. */
6468 switch (sfk)
6469 {
6470 case sfk_constructor:
6471 case sfk_copy_constructor:
6472 DECL_CONSTRUCTOR_P (decl) = 1;
6473 break;
6474 case sfk_destructor:
6475 DECL_DESTRUCTOR_P (decl) = 1;
6476 break;
6477 default:
6478 break;
6479 }
6480
837edd5f
GK
6481 /* If pointers to member functions use the least significant bit to
6482 indicate whether a function is virtual, ensure a pointer
6483 to this function will have that bit clear. */
6484 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6485 && TREE_CODE (type) == METHOD_TYPE
6486 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
6487 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
6488
abc088aa
MM
6489 if (friendp
6490 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
6491 {
6492 if (funcdef_flag)
6493 error
6494 ("defining explicit specialization %qD in friend declaration",
6495 orig_declarator);
6496 else
6497 {
6498 tree fns = TREE_OPERAND (orig_declarator, 0);
6499 tree args = TREE_OPERAND (orig_declarator, 1);
6500
6501 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
6502 {
6503 /* Something like `template <class T> friend void f<T>()'. */
6504 error ("invalid use of template-id %qD in declaration "
6505 "of primary template",
6506 orig_declarator);
6507 return NULL_TREE;
6508 }
6509
6510
6511 /* A friend declaration of the form friend void f<>(). Record
6512 the information in the TEMPLATE_ID_EXPR. */
6513 SET_DECL_IMPLICIT_INSTANTIATION (decl);
6514
6515 if (TREE_CODE (fns) == COMPONENT_REF)
6516 {
6517 /* Due to bison parser ickiness, we will have already looked
6518 up an operator_name or PFUNCNAME within the current class
6519 (see template_id in parse.y). If the current class contains
6520 such a name, we'll get a COMPONENT_REF here. Undo that. */
6521
6522 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
6523 == current_class_type);
6524 fns = TREE_OPERAND (fns, 1);
6525 }
6526 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
6527 || TREE_CODE (fns) == OVERLOAD);
6528 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
6529
6530 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
6531 if (TREE_PURPOSE (t)
6532 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
6533 {
6534 error ("default arguments are not allowed in declaration "
6535 "of friend template specialization %qD",
6536 decl);
6537 return NULL_TREE;
6538 }
6539
6540 if (inlinep)
6541 {
6542 error ("%<inline%> is not allowed in declaration of friend "
6543 "template specialization %qD",
6544 decl);
6545 return NULL_TREE;
6546 }
6547 }
6548 }
6549
79c4d4b7 6550 /* If this decl has namespace scope, set that up. */
2c73f9f5 6551 if (in_namespace)
b262d64c 6552 set_decl_namespace (decl, in_namespace, friendp);
adae082f 6553 else if (!ctype)
79c4d4b7 6554 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 6555
0f8766b8
JM
6556 /* `main' and builtins have implicit 'C' linkage. */
6557 if ((MAIN_NAME_P (declarator)
6558 || (IDENTIFIER_LENGTH (declarator) > 10
6559 && IDENTIFIER_POINTER (declarator)[0] == '_'
6560 && IDENTIFIER_POINTER (declarator)[1] == '_'
6561 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
6562 && current_lang_name == lang_name_cplusplus
94706a5c 6563 && ctype == NULL_TREE
79c4d4b7
JM
6564 /* NULL_TREE means global namespace. */
6565 && DECL_CONTEXT (decl) == NULL_TREE)
5d2ed28c 6566 SET_DECL_LANGUAGE (decl, lang_c);
0f8766b8 6567
8d08fdba
MS
6568 /* Should probably propagate const out from type to decl I bet (mrs). */
6569 if (staticp)
6570 {
6571 DECL_STATIC_FUNCTION_P (decl) = 1;
6572 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
6573 }
6574
e76a2646 6575 if (ctype)
9c12301f
MM
6576 {
6577 DECL_CONTEXT (decl) = ctype;
6578 if (funcdef_flag)
6579 check_class_member_definition_namespace (decl);
6580 }
e76a2646 6581
0f8766b8 6582 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
faae18ab 6583 {
848b92e1 6584 if (processing_template_decl)
2d01edd7 6585 error ("cannot declare %<::main%> to be a template");
faae18ab 6586 if (inlinep)
2d01edd7 6587 error ("cannot declare %<::main%> to be inline");
f22967f3 6588 if (!publicp)
2d01edd7 6589 error ("cannot declare %<::main%> to be static");
faae18ab
MS
6590 inlinep = 0;
6591 publicp = 1;
6592 }
50a6dbd7 6593
59e76fc6 6594 /* Members of anonymous types and local classes have no linkage; make
9fc444cc 6595 them internal. If a typedef is made later, this will be changed. */
1951a1b6 6596 if (ctype && (TYPE_ANONYMOUS_P (ctype)
4f1c5b7d 6597 || decl_function_context (TYPE_MAIN_DECL (ctype))))
50a6dbd7
JM
6598 publicp = 0;
6599
6600 if (publicp)
6601 {
6602 /* [basic.link]: A name with no linkage (notably, the name of a class
6603 or enumeration declared in a local scope) shall not be used to
6604 declare an entity with linkage.
6605
50b97e0f 6606 Only check this for public decls for now. See core 319, 389. */
4684cd27
MM
6607 t = no_linkage_check (TREE_TYPE (decl),
6608 /*relaxed_p=*/false);
50a6dbd7
JM
6609 if (t)
6610 {
1951a1b6 6611 if (TYPE_ANONYMOUS_P (t))
7f7c930e 6612 {
eb68cb58 6613 if (DECL_EXTERN_C_P (decl))
7f7c930e
JM
6614 /* Allow this; it's pretty common in C. */;
6615 else
1951a1b6 6616 {
cbe5f3b3 6617 permerror (input_location, "non-local function %q#D uses anonymous type",
1951a1b6
JM
6618 decl);
6619 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
cbe5f3b3 6620 permerror (input_location, "%q+#D does not refer to the unqualified "
37ec60ed
JW
6621 "type, so it is not used for linkage",
6622 TYPE_NAME (t));
1951a1b6 6623 }
7f7c930e 6624 }
50a6dbd7 6625 else
cbe5f3b3 6626 permerror (input_location, "non-local function %q#D uses local type %qT", decl, t);
50a6dbd7
JM
6627 }
6628 }
6629
893de33c 6630 TREE_PUBLIC (decl) = publicp;
faae18ab 6631 if (! publicp)
893de33c
JM
6632 {
6633 DECL_INTERFACE_KNOWN (decl) = 1;
6634 DECL_NOT_REALLY_EXTERN (decl) = 1;
6635 }
faae18ab 6636
acc72c37 6637 /* If the declaration was declared inline, mark it as such. */
faae18ab 6638 if (inlinep)
acc72c37 6639 DECL_DECLARED_INLINE_P (decl) = 1;
8d08fdba
MS
6640
6641 DECL_EXTERNAL (decl) = 1;
3c01e5df 6642 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba 6643 {
e7c41c99
DM
6644 error (ctype
6645 ? G_("static member function %qD cannot have cv-qualifier")
32b1d579 6646 : G_("non-member function %qD cannot have cv-qualifier"),
e7c41c99 6647 decl);
3c01e5df 6648 quals = TYPE_UNQUALIFIED;
8d08fdba
MS
6649 }
6650
398cd199
VR
6651 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
6652 && !grok_op_properties (decl, /*complain=*/true))
6653 return NULL_TREE;
8d08fdba 6654
4f1c5b7d 6655 if (ctype && decl_function_context (decl))
893de33c 6656 DECL_NO_STATIC_CHAIN (decl) = 1;
e76a2646 6657
1eb0072d
JM
6658 if (funcdef_flag)
6659 /* Make the init_value nonzero so pushdecl knows this is not
6660 tentative. error_mark_node is replaced later with the BLOCK. */
6661 DECL_INITIAL (decl) = error_mark_node;
6662
93ca4ba7 6663 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
1660cb3a
JM
6664 TREE_NOTHROW (decl) = 1;
6665
75650646 6666 /* Caller will do the rest of this. */
8d08fdba
MS
6667 if (check < 0)
6668 return decl;
6669
74b846e0 6670 if (ctype != NULL_TREE)
71aea5f2 6671 grokclassfn (ctype, decl, flags);
74b846e0
MM
6672
6673 decl = check_explicit_specialization (orig_declarator, decl,
6674 template_count,
357d956e 6675 2 * funcdef_flag +
74b846e0
MM
6676 4 * (friendp != 0));
6677 if (decl == error_mark_node)
6678 return NULL_TREE;
98c1c668 6679
037cc9c5
FJ
6680 if (attrlist)
6681 {
6682 cplus_decl_attributes (&decl, *attrlist, 0);
6683 *attrlist = NULL_TREE;
6684 }
6685
da337784
JJ
6686 /* Check main's type after attributes have been applied. */
6687 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6688 {
6689 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
6690 integer_type_node))
6691 {
6692 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
6693 tree newtype;
6694 error ("%<::main%> must return %<int%>");
6695 newtype = build_function_type (integer_type_node, oldtypeargs);
6696 TREE_TYPE (decl) = newtype;
6697 }
4003301d
MLI
6698 if (warn_main)
6699 check_main_parameter_types (decl);
da337784
JJ
6700 }
6701
74b846e0
MM
6702 if (ctype != NULL_TREE
6703 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6704 && check)
8d08fdba 6705 {
f8c3b097
PC
6706 tree old_decl = check_classfn (ctype, decl,
6707 (processing_template_decl
6708 > template_class_depth (ctype))
6709 ? current_template_parms
6710 : NULL_TREE);
6711
6712 if (old_decl == error_mark_node)
6713 return NULL_TREE;
8d08fdba 6714
74b846e0 6715 if (old_decl)
8d08fdba 6716 {
79ae853c 6717 tree ok;
4514aa8c 6718 tree pushed_scope;
316a2456 6719
357d956e
MM
6720 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6721 /* Because grokfndecl is always supposed to return a
6722 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6723 here. We depend on our callers to figure out that its
6724 really a template that's being returned. */
6725 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6726
6727 if (DECL_STATIC_FUNCTION_P (old_decl)
6728 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6729 /* Remove the `this' parm added by grokclassfn.
6730 XXX Isn't this done in start_function, too? */
6731 revert_static_member_fn (decl);
6732 if (DECL_ARTIFICIAL (old_decl))
db160137
AP
6733 {
6734 error ("definition of implicitly-declared %qD", old_decl);
6735 return NULL_TREE;
6736 }
357d956e 6737
74b846e0
MM
6738 /* Since we've smashed OLD_DECL to its
6739 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
6740 if (TREE_CODE (decl) == TEMPLATE_DECL)
6741 decl = DECL_TEMPLATE_RESULT (decl);
6742
6743 /* Attempt to merge the declarations. This can fail, in
0e339752 6744 the case of some invalid specialization declarations. */
4514aa8c 6745 pushed_scope = push_scope (ctype);
d63d5d0c 6746 ok = duplicate_decls (decl, old_decl, friendp);
4514aa8c
NS
6747 if (pushed_scope)
6748 pop_scope (pushed_scope);
316a2456
MM
6749 if (!ok)
6750 {
2d01edd7 6751 error ("no %q#D member function declared in class %qT",
316a2456
MM
6752 decl, ctype);
6753 return NULL_TREE;
6754 }
74b846e0 6755 return old_decl;
8d08fdba
MS
6756 }
6757 }
74b846e0
MM
6758
6759 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6760 return NULL_TREE;
6761
6762 if (ctype == NULL_TREE || check)
6763 return decl;
6764
6765 if (virtualp)
cbb40945 6766 DECL_VIRTUAL_P (decl) = 1;
74b846e0 6767
8d08fdba
MS
6768 return decl;
6769}
6770
4684cd27
MM
6771/* DECL is a VAR_DECL for a static data member. Set flags to reflect
6772 the linkage that DECL will receive in the object file. */
6773
6774static void
6775set_linkage_for_static_data_member (tree decl)
6776{
6777 /* A static data member always has static storage duration and
6778 external linkage. Note that static data members are forbidden in
6779 local classes -- the only situation in which a class has
6780 non-external linkage. */
6781 TREE_PUBLIC (decl) = 1;
6782 TREE_STATIC (decl) = 1;
6783 /* For non-template classes, static data members are always put
6784 out in exactly those files where they are defined, just as
77880ae4 6785 with ordinary namespace-scope variables. */
4684cd27
MM
6786 if (!processing_template_decl)
6787 DECL_INTERFACE_KNOWN (decl) = 1;
6788}
6789
caf93cb0 6790/* Create a VAR_DECL named NAME with the indicated TYPE.
9e259dd1
MM
6791
6792 If SCOPE is non-NULL, it is the class type or namespace containing
6793 the variable. If SCOPE is NULL, the variable should is created in
6794 the innermost enclosings scope. */
6795
8d08fdba 6796static tree
11f6b451 6797grokvardecl (tree type,
0cbd7506 6798 tree name,
1ff3c076 6799 const cp_decl_specifier_seq *declspecs,
0cbd7506
MS
6800 int initialized,
6801 int constp,
6802 tree scope)
8d08fdba
MS
6803{
6804 tree decl;
5ae9ba3e 6805 tree explicit_scope;
f7da6097 6806
50bc768d 6807 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
9e259dd1 6808
5ae9ba3e
MM
6809 /* Compute the scope in which to place the variable, but remember
6810 whether or not that scope was explicitly specified by the user. */
6811 explicit_scope = scope;
9e259dd1 6812 if (!scope)
8d08fdba 6813 {
9e259dd1
MM
6814 /* An explicit "extern" specifier indicates a namespace-scope
6815 variable. */
62d1db17 6816 if (declspecs->storage_class == sc_extern)
9e259dd1
MM
6817 scope = current_namespace;
6818 else if (!at_function_scope_p ())
a5201a91 6819 scope = current_scope ();
9e259dd1
MM
6820 }
6821
6822 if (scope
6823 && (/* If the variable is a namespace-scope variable declared in a
6824 template, we need DECL_LANG_SPECIFIC. */
6825 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6826 /* Similarly for namespace-scope variables with language linkage
6827 other than C++. */
caf93cb0 6828 || (TREE_CODE (scope) == NAMESPACE_DECL
9e259dd1
MM
6829 && current_lang_name != lang_name_cplusplus)
6830 /* Similarly for static data members. */
6831 || TYPE_P (scope)))
6832 decl = build_lang_decl (VAR_DECL, name, type);
8d08fdba 6833 else
9e259dd1 6834 decl = build_decl (VAR_DECL, name, type);
79c4d4b7 6835
5ae9ba3e
MM
6836 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6837 set_decl_namespace (decl, explicit_scope, 0);
9e259dd1 6838 else
74b0d490 6839 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
6060a796 6840
62d1db17 6841 if (declspecs->storage_class == sc_extern)
8d08fdba
MS
6842 {
6843 DECL_THIS_EXTERN (decl) = 1;
6844 DECL_EXTERNAL (decl) = !initialized;
6845 }
6846
2b9dc906 6847 if (DECL_CLASS_SCOPE_P (decl))
8d08fdba 6848 {
4684cd27
MM
6849 set_linkage_for_static_data_member (decl);
6850 /* This function is only called with out-of-class definitions. */
5b605f68 6851 DECL_EXTERNAL (decl) = 0;
9c12301f 6852 check_class_member_definition_namespace (decl);
8d08fdba
MS
6853 }
6854 /* At top level, either `static' or no s.c. makes a definition
6855 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 6856 else if (toplevel_bindings_p ())
8d08fdba 6857 {
62d1db17 6858 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9fffd093 6859 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
6860 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
6861 }
6862 /* Not at top level, only `static' makes a static definition. */
6863 else
6864 {
62d1db17 6865 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
8d08fdba
MS
6866 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
6867 }
50a6dbd7 6868
62d1db17 6869 if (declspecs->specs[(int)ds_thread])
8893239d 6870 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7a1f3f5f 6871
50a6dbd7
JM
6872 if (TREE_PUBLIC (decl))
6873 {
6874 /* [basic.link]: A name with no linkage (notably, the name of a class
6875 or enumeration declared in a local scope) shall not be used to
6876 declare an entity with linkage.
6877
03fd3f84 6878 Only check this for public decls for now. */
6b211746 6879 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
50a6dbd7
JM
6880 if (t)
6881 {
1951a1b6 6882 if (TYPE_ANONYMOUS_P (t))
9fc444cc
GK
6883 {
6884 if (DECL_EXTERN_C_P (decl))
6bdb98d1
MA
6885 /* Allow this; it's pretty common in C. */
6886 ;
9fc444cc
GK
6887 else
6888 {
6b211746
AO
6889 /* DRs 132, 319 and 389 seem to indicate types with
6890 no linkage can only be used to declare extern "C"
6891 entities. Since it's not always an error in the
6892 ISO C++ 90 Standard, we only issue a warning. */
d4ee4d25 6893 warning (0, "non-local variable %q#D uses anonymous type",
9fc444cc
GK
6894 decl);
6895 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
dee15844
JM
6896 warning (0, "%q+#D does not refer to the unqualified "
6897 "type, so it is not used for linkage",
6898 TYPE_NAME (t));
9fc444cc
GK
6899 }
6900 }
50a6dbd7 6901 else
d4ee4d25 6902 warning (0, "non-local variable %q#D uses local type %qT", decl, t);
50a6dbd7
JM
6903 }
6904 }
1ceb02be
MM
6905 else
6906 DECL_INTERFACE_KNOWN (decl) = 1;
50a6dbd7 6907
8d08fdba
MS
6908 return decl;
6909}
6910
d8f8dca1
MM
6911/* Create and return a canonical pointer to member function type, for
6912 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8d08fdba
MS
6913
6914tree
11f6b451 6915build_ptrmemfunc_type (tree type)
8d08fdba 6916{
4977bab6 6917 tree field, fields;
8d08fdba 6918 tree t;
46cbda4a 6919 tree unqualified_variant = NULL_TREE;
8d08fdba 6920
d48ebde1
NS
6921 if (type == error_mark_node)
6922 return type;
d363e7bf 6923
8d08fdba
MS
6924 /* If a canonical type already exists for this type, use it. We use
6925 this method instead of type_hash_canon, because it only does a
6926 simple equality check on the list of field members. */
6927
6928 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
6929 return t;
6930
46cbda4a
MM
6931 /* Make sure that we always have the unqualified pointer-to-member
6932 type first. */
89d684bb 6933 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
68642fb6 6934 unqualified_variant
46cbda4a
MM
6935 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
6936
9e1e64ec 6937 t = make_class_type (RECORD_TYPE);
cad7e87b 6938 xref_basetypes (t, NULL_TREE);
caf93cb0 6939
3b426391 6940 /* Let the front end know this is a pointer to member function... */
db5ae43f 6941 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9e1e64ec
PC
6942 /* ... and not really a class type. */
6943 SET_CLASS_TYPE_P (t, 0);
8d08fdba 6944
4977bab6
ZW
6945 field = build_decl (FIELD_DECL, pfn_identifier, type);
6946 fields = field;
caf93cb0 6947
4977bab6
ZW
6948 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
6949 TREE_CHAIN (field) = fields;
6950 fields = field;
caf93cb0 6951
4977bab6 6952 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8d08fdba 6953
3b426391 6954 /* Zap out the name so that the back end will give us the debugging
8d08fdba
MS
6955 information for this anonymous RECORD_TYPE. */
6956 TYPE_NAME (t) = NULL_TREE;
6957
46cbda4a
MM
6958 /* If this is not the unqualified form of this pointer-to-member
6959 type, set the TYPE_MAIN_VARIANT for this type to be the
6960 unqualified type. Since they are actually RECORD_TYPEs that are
6961 not variants of each other, we must do this manually. */
89d684bb 6962 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
46cbda4a 6963 {
89d684bb 6964 t = build_qualified_type (t, cp_type_quals (type));
46cbda4a
MM
6965 TYPE_MAIN_VARIANT (t) = unqualified_variant;
6966 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
6967 TYPE_NEXT_VARIANT (unqualified_variant) = t;
0f67bdf1 6968 TREE_TYPE (TYPE_BINFO (t)) = t;
46cbda4a
MM
6969 }
6970
6971 /* Cache this pointer-to-member type so that we can find it again
6972 later. */
8d08fdba
MS
6973 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
6974
0f67bdf1
JM
6975 if (TYPE_STRUCTURAL_EQUALITY_P (type))
6976 SET_TYPE_STRUCTURAL_EQUALITY (t);
6977 else if (TYPE_CANONICAL (type) != type)
6978 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
06d40de8 6979
8d08fdba
MS
6980 return t;
6981}
6982
9e259dd1
MM
6983/* Create and return a pointer to data member type. */
6984
6985tree
6986build_ptrmem_type (tree class_type, tree member_type)
6987{
a5ac359a
MM
6988 if (TREE_CODE (member_type) == METHOD_TYPE)
6989 {
6990 tree arg_types;
6991
6992 arg_types = TYPE_ARG_TYPES (member_type);
caf93cb0 6993 class_type = (cp_build_qualified_type
a5ac359a
MM
6994 (class_type,
6995 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
caf93cb0
EC
6996 member_type
6997 = build_method_type_directly (class_type,
43dc123f
MM
6998 TREE_TYPE (member_type),
6999 TREE_CHAIN (arg_types));
a5ac359a
MM
7000 return build_ptrmemfunc_type (build_pointer_type (member_type));
7001 }
7002 else
7003 {
50bc768d 7004 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
a5ac359a
MM
7005 return build_offset_type (class_type, member_type);
7006 }
9e259dd1
MM
7007}
7008
b17e2870
JM
7009/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7010 Check to see that the definition is valid. Issue appropriate error
7011 messages. Return 1 if the definition is particularly bad, or 0
7012 otherwise. */
7013
7014int
11f6b451 7015check_static_variable_definition (tree decl, tree type)
b17e2870
JM
7016{
7017 /* Motion 10 at San Diego: If a static const integral data member is
7018 initialized with an integral constant expression, the initializer
7019 may appear either in the declaration (within the class), or in
7020 the definition, but not both. If it appears in the class, the
7021 member is a member constant. The file-scope definition is always
7022 required. */
dcba9b0f 7023 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
b17e2870 7024 {
2d01edd7 7025 error ("invalid in-class initialization of static data member "
0cbd7506 7026 "of non-integral type %qT",
dcba9b0f 7027 type);
b17e2870 7028 /* If we just return the declaration, crashes will sometimes
852dcbdd 7029 occur. We therefore return void_type_node, as if this were a
b17e2870
JM
7030 friend declaration, to cause callers to completely ignore
7031 this declaration. */
7032 return 1;
7033 }
7034 else if (!CP_TYPE_CONST_P (type))
2d01edd7 7035 error ("ISO C++ forbids in-class initialization of non-const "
0cbd7506
MS
7036 "static member %qD",
7037 decl);
fcf73884 7038 else if (!INTEGRAL_TYPE_P (type))
509c9d60 7039 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
0cbd7506 7040 "%qD of non-integral type %qT", decl, type);
b17e2870
JM
7041
7042 return 0;
7043}
7044
2848ad0f
MM
7045/* Given the SIZE (i.e., number of elements) in an array, compute an
7046 appropriate index type for the array. If non-NULL, NAME is the
7047 name of the thing being declared. */
7048
c95cd22e 7049tree
11f6b451 7050compute_array_index_type (tree name, tree size)
2848ad0f 7051{
d174af6c 7052 tree type;
2848ad0f 7053 tree itype;
06d40de8 7054 tree abi_1_itype = NULL_TREE;
2848ad0f 7055
d174af6c
MM
7056 if (error_operand_p (size))
7057 return error_mark_node;
7058
7059 type = TREE_TYPE (size);
d63b5e9f
NS
7060 /* The array bound must be an integer type. */
7061 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
2848ad0f 7062 {
d63b5e9f 7063 if (name)
2d01edd7 7064 error ("size of array %qD has non-integral type %qT", name, type);
d63b5e9f 7065 else
2d01edd7 7066 error ("size of array has non-integral type %qT", type);
d63b5e9f
NS
7067 size = integer_one_node;
7068 type = TREE_TYPE (size);
2848ad0f
MM
7069 }
7070
06d40de8
DG
7071 if (value_dependent_expression_p (size))
7072 {
7073 /* We cannot do any checking for a value-dependent SIZE. Just
7074 build the index type and mark that it requires structural
7075 equality checks. */
7076 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7077 size, integer_one_node));
7078 SET_TYPE_STRUCTURAL_EQUALITY (itype);
7079 return itype;
7080 }
7081
7082 if (!abi_version_at_least (2) && processing_template_decl)
7083 /* For abi-1, we handled all instances in templates the same way,
39a13be5 7084 even when they were non-dependent. This affects the manglings
06d40de8
DG
7085 produced. So, we do the normal checking for non-dependent
7086 sizes, but at the end we'll return the same type that abi-1
7087 would have, but with TYPE_CANONICAL set to the "right"
7088 value that the current ABI would provide. */
7089 abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7090 size, integer_one_node));
d63b5e9f 7091
a1c65f9f 7092 /* The size might be the result of a cast. */
80f5bb34
MM
7093 STRIP_TYPE_NOPS (size);
7094
7095 /* It might be a const variable or enumeration constant. */
8a784e4a 7096 size = integral_constant_value (size);
80f5bb34 7097
2848ad0f 7098 /* Normally, the array-bound will be a constant. */
2bb5d995 7099 if (TREE_CODE (size) == INTEGER_CST)
2848ad0f
MM
7100 {
7101 /* Check to see if the array bound overflowed. Make that an
7102 error, no matter how generous we're being. */
393eda6a 7103 constant_expression_error (size);
2848ad0f
MM
7104
7105 /* An array must have a positive number of elements. */
7106 if (INT_CST_LT (size, integer_zero_node))
7107 {
d67cdbc3 7108 if (name)
2d01edd7 7109 error ("size of array %qD is negative", name);
d67cdbc3 7110 else
33bd39a2 7111 error ("size of array is negative");
2848ad0f
MM
7112 size = integer_one_node;
7113 }
a8e6c82a
MM
7114 /* As an extension we allow zero-sized arrays. We always allow
7115 them in system headers because glibc uses them. */
fcf73884 7116 else if (integer_zerop (size) && !in_system_header)
d67cdbc3
JM
7117 {
7118 if (name)
509c9d60 7119 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
d67cdbc3 7120 else
509c9d60 7121 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
d67cdbc3 7122 }
2848ad0f 7123 }
2bb5d995
JM
7124 else if (TREE_CONSTANT (size))
7125 {
7126 /* `(int) &fn' is not a valid array bound. */
7127 if (name)
2d01edd7 7128 error ("size of array %qD is not an integral constant-expression",
0cbd7506 7129 name);
2bb5d995 7130 else
33bd39a2 7131 error ("size of array is not an integral constant-expression");
3aa2ddb8 7132 size = integer_one_node;
2bb5d995 7133 }
50d50fc7 7134 else if (pedantic && warn_vla != 0)
d63b5e9f
NS
7135 {
7136 if (name)
509c9d60 7137 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
d63b5e9f 7138 else
509c9d60 7139 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
50d50fc7
SP
7140 }
7141 else if (warn_vla > 0)
7142 {
7143 if (name)
7144 warning (OPT_Wvla,
7145 "variable length array %qD is used", name);
7146 else
7147 warning (OPT_Wvla,
7148 "variable length array is used");
d63b5e9f 7149 }
2848ad0f 7150
d63b5e9f
NS
7151 if (processing_template_decl && !TREE_CONSTANT (size))
7152 /* A variable sized array. */
7153 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7154 else
2848ad0f 7155 {
455f19cb
MM
7156 HOST_WIDE_INT saved_processing_template_decl;
7157
d63b5e9f 7158 /* Compute the index of the largest element in the array. It is
0cbd7506
MS
7159 one less than the number of elements in the array. We save
7160 and restore PROCESSING_TEMPLATE_DECL so that computations in
7161 cp_build_binary_op will be appropriately folded. */
455f19cb
MM
7162 saved_processing_template_decl = processing_template_decl;
7163 processing_template_decl = 0;
7164 itype = cp_build_binary_op (MINUS_EXPR,
7165 cp_convert (ssizetype, size),
5ade1ed2
DG
7166 cp_convert (ssizetype, integer_one_node),
7167 tf_warning_or_error);
455f19cb
MM
7168 itype = fold (itype);
7169 processing_template_decl = saved_processing_template_decl;
7170
d63b5e9f 7171 if (!TREE_CONSTANT (itype))
f4f206f4 7172 /* A variable sized array. */
d63b5e9f
NS
7173 itype = variable_size (itype);
7174 /* Make sure that there was no overflow when creating to a signed
0cbd7506
MS
7175 index type. (For example, on a 32-bit machine, an array with
7176 size 2^32 - 1 is too big.) */
9116d529
RS
7177 else if (TREE_CODE (itype) == INTEGER_CST
7178 && TREE_OVERFLOW (itype))
2848ad0f 7179 {
d63b5e9f
NS
7180 error ("overflow in array dimension");
7181 TREE_OVERFLOW (itype) = 0;
2848ad0f 7182 }
2848ad0f 7183 }
68642fb6 7184
2848ad0f 7185 /* Create and return the appropriate index type. */
06d40de8
DG
7186 if (abi_1_itype)
7187 {
7188 tree t = build_index_type (itype);
7189 TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
7190 return abi_1_itype;
7191 }
7192 else
7193 return build_index_type (itype);
2848ad0f
MM
7194}
7195
a723baf1
MM
7196/* Returns the scope (if any) in which the entity declared by
7197 DECLARATOR will be located. If the entity was declared with an
7198 unqualified name, NULL_TREE is returned. */
7199
7200tree
058b15c1 7201get_scope_of_declarator (const cp_declarator *declarator)
a723baf1 7202{
058b15c1
MM
7203 while (declarator && declarator->kind != cdk_id)
7204 declarator = declarator->declarator;
7205
7206 /* If the declarator-id is a SCOPE_REF, the scope in which the
7207 declaration occurs is the first operand. */
7208 if (declarator
1d786913
MM
7209 && declarator->u.id.qualifying_scope)
7210 return declarator->u.id.qualifying_scope;
058b15c1 7211
77880ae4 7212 /* Otherwise, the declarator is not a qualified name; the entity will
058b15c1
MM
7213 be declared in the current scope. */
7214 return NULL_TREE;
a723baf1
MM
7215}
7216
2848ad0f
MM
7217/* Returns an ARRAY_TYPE for an array with SIZE elements of the
7218 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
7219 with this type. */
7220
7221static tree
11f6b451 7222create_array_type_for_decl (tree name, tree type, tree size)
2848ad0f
MM
7223{
7224 tree itype = NULL_TREE;
7225 const char* error_msg;
7226
7227 /* If things have already gone awry, bail now. */
7228 if (type == error_mark_node || size == error_mark_node)
7229 return error_mark_node;
7230
7231 /* Assume that everything will go OK. */
7232 error_msg = NULL;
7233
7234 /* There are some types which cannot be array elements. */
7235 switch (TREE_CODE (type))
7236 {
7237 case VOID_TYPE:
7238 error_msg = "array of void";
7239 break;
7240
7241 case FUNCTION_TYPE:
7242 error_msg = "array of functions";
7243 break;
7244
7245 case REFERENCE_TYPE:
7246 error_msg = "array of references";
7247 break;
7248
2848ad0f
MM
7249 case METHOD_TYPE:
7250 error_msg = "array of function members";
7251 break;
7252
7253 default:
7254 break;
7255 }
7256
7257 /* If something went wrong, issue an error-message and return. */
7258 if (error_msg)
7259 {
7260 if (name)
2d01edd7 7261 error ("declaration of %qD as %s", name, error_msg);
2848ad0f 7262 else
33bd39a2 7263 error ("creating %s", error_msg);
2848ad0f
MM
7264
7265 return error_mark_node;
7266 }
7267
7268 /* [dcl.array]
68642fb6 7269
2848ad0f
MM
7270 The constant expressions that specify the bounds of the arrays
7271 can be omitted only for the first member of the sequence. */
7272 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
7273 {
b3faacfd 7274 if (name)
2d01edd7 7275 error ("declaration of %qD as multidimensional array must "
0cbd7506
MS
7276 "have bounds for all dimensions except the first",
7277 name);
b3faacfd 7278 else
2d01edd7 7279 error ("multidimensional array must have bounds for all "
0cbd7506 7280 "dimensions except the first");
2848ad0f
MM
7281
7282 return error_mark_node;
7283 }
7284
7285 /* Figure out the index type for the array. */
7286 if (size)
7287 itype = compute_array_index_type (name, size);
7288
7fb213d8
GB
7289 /* [dcl.array]
7290 T is called the array element type; this type shall not be [...] an
7291 abstract class type. */
7292 abstract_virtuals_error (name, type);
7293
2848ad0f
MM
7294 return build_cplus_array_type (type, itype);
7295}
7296
3dbc07b6
MM
7297/* Check that it's OK to declare a function with the indicated TYPE.
7298 SFK indicates the kind of special function (if any) that this
1f84ec23 7299 function is. OPTYPE is the type given in a conversion operator
44d10c10
PB
7300 declaration, or the class type for a constructor/destructor.
7301 Returns the actual return type of the function; that
3dbc07b6
MM
7302 may be different than TYPE if an error occurs, or for certain
7303 special functions. */
7304
7305static tree
11f6b451 7306check_special_function_return_type (special_function_kind sfk,
0cbd7506
MS
7307 tree type,
7308 tree optype)
3dbc07b6
MM
7309{
7310 switch (sfk)
7311 {
7312 case sfk_constructor:
7313 if (type)
33bd39a2 7314 error ("return type specification for constructor invalid");
5362b086 7315
44d10c10
PB
7316 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7317 type = build_pointer_type (optype);
7318 else
7319 type = void_type_node;
3dbc07b6
MM
7320 break;
7321
7322 case sfk_destructor:
7323 if (type)
33bd39a2 7324 error ("return type specification for destructor invalid");
44d10c10 7325 /* We can't use the proper return type here because we run into
77880ae4 7326 problems with ambiguous bases and covariant returns.
44d10c10
PB
7327 Java classes are left unchanged because (void *) isn't a valid
7328 Java type, and we don't want to change the Java ABI. */
7329 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7330 type = build_pointer_type (void_type_node);
7331 else
7332 type = void_type_node;
3dbc07b6
MM
7333 break;
7334
7335 case sfk_conversion:
caba2081
PC
7336 if (type)
7337 error ("return type specified for %<operator %T%>", optype);
3dbc07b6
MM
7338 type = optype;
7339 break;
7340
7341 default:
8dc2b103 7342 gcc_unreachable ();
3dbc07b6
MM
7343 }
7344
7345 return type;
7346}
7347
62e19030
MM
7348/* A variable or data member (whose unqualified name is IDENTIFIER)
7349 has been declared with the indicated TYPE. If the TYPE is not
7350 acceptable, issue an error message and return a type to use for
03fd3f84 7351 error-recovery purposes. */
62e19030
MM
7352
7353tree
7354check_var_type (tree identifier, tree type)
7355{
7356 if (VOID_TYPE_P (type))
7357 {
7358 if (!identifier)
7359 error ("unnamed variable or field declared void");
7360 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
7361 {
7362 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
7363 error ("variable or field %qE declared void", identifier);
7364 }
7365 else
7366 error ("variable or field declared void");
650fcd07 7367 type = error_mark_node;
62e19030 7368 }
c8094d83 7369
62e19030
MM
7370 return type;
7371}
7372
a723baf1
MM
7373/* Given declspecs and a declarator (abstract or otherwise), determine
7374 the name and type of the object declared and construct a DECL node
7375 for it.
8d08fdba 7376
5e32a5cf
GDR
7377 DECLSPECS points to the representation of declaration-specifier
7378 sequence that precedes declarator.
8d08fdba
MS
7379
7380 DECL_CONTEXT says which syntactic context this declaration is in:
7381 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7382 FUNCDEF for a function definition. Like NORMAL but a few different
7383 error messages in each case. Return value may be zero meaning
7384 this definition is too screwy to try to parse.
7385 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
7386 handle member functions (which have FIELD context).
7387 Return value may be zero meaning this definition is too screwy to
7388 try to parse.
7389 PARM for a parameter declaration (either within a function prototype
7390 or before a function body). Make a PARM_DECL, or return void_type_node.
db5ae43f 7391 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
7392 TYPENAME if for a typename (in a cast or sizeof).
7393 Don't make a DECL node; just return the ..._TYPE node.
7394 FIELD for a struct or union field; make a FIELD_DECL.
7395 BITFIELD for a field with specified width.
b87d79e6 7396 INITIALIZED is as for start_decl.
8d08fdba 7397
91d231cb
JM
7398 ATTRLIST is a pointer to the list of attributes, which may be NULL
7399 if there are none; *ATTRLIST may be modified if attributes from inside
7400 the declarator should be applied to the declaration.
b17e2870 7401
a723baf1
MM
7402 When this function is called, scoping variables (such as
7403 CURRENT_CLASS_TYPE) should reflect the scope in which the
7404 declaration occurs, not the scope in which the new declaration will
7405 be placed. For example, on:
8d08fdba 7406
a723baf1 7407 void S::f() { ... }
8d08fdba 7408
a723baf1 7409 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
344f237b
LM
7410 should not be `S'.
7411
7412 Returns a DECL (if a declarator is present), a TYPE (if there is no
7413 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
7414 error occurs. */
8d08fdba 7415
8d08fdba 7416tree
058b15c1 7417grokdeclarator (const cp_declarator *declarator,
1ff3c076 7418 const cp_decl_specifier_seq *declspecs,
0cbd7506
MS
7419 enum decl_context decl_context,
7420 int initialized,
7421 tree* attrlist)
8d08fdba 7422{
8d08fdba
MS
7423 tree type = NULL_TREE;
7424 int longlong = 0;
db5ae43f 7425 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
7426 int explicit_int = 0;
7427 int explicit_char = 0;
37c46b43 7428 int defaulted_int = 0;
d1c78882 7429 tree dependent_name = NULL_TREE;
caf93cb0 7430
8d08fdba 7431 tree typedef_decl = NULL_TREE;
058b15c1 7432 const char *name = NULL;
8d08fdba 7433 tree typedef_type = NULL_TREE;
357d956e
MM
7434 /* True if this declarator is a function definition. */
7435 bool funcdef_flag = false;
058b15c1 7436 cp_declarator_kind innermost_code = cdk_error;
8d08fdba 7437 int bitfield = 0;
6125f3be
DE
7438#if 0
7439 /* See the code below that used this. */
91d231cb 7440 tree decl_attr = NULL_TREE;
6125f3be 7441#endif
8d08fdba
MS
7442
7443 /* Keep track of what sort of function is being processed
7444 so that we can warn about default return values, or explicit
7445 return values which do not match prescribed defaults. */
3dbc07b6 7446 special_function_kind sfk = sfk_none;
8d08fdba
MS
7447
7448 tree dname = NULL_TREE;
8d08fdba
MS
7449 tree ctor_return_type = NULL_TREE;
7450 enum overload_flags flags = NO_SPECIAL;
e2537f2c
MM
7451 /* cv-qualifiers that apply to the declarator, for a declaration of
7452 a member function. */
7453 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
7454 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
7455 int type_quals;
c11b6f21 7456 tree raises = NULL_TREE;
386b8a85 7457 int template_count = 0;
91d231cb 7458 tree returned_attrs = NULL_TREE;
4546865e 7459 tree parms = NULL_TREE;
058b15c1
MM
7460 const cp_declarator *id_declarator;
7461 /* The unqualified name of the declarator; either an
7462 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
7463 tree unqualified_id;
7464 /* The class type, if any, in which this entity is located,
7465 or NULL_TREE if none. Note that this value may be different from
7466 the current class type; for example if an attempt is made to declare
7467 "A::f" inside "B", this value will be "A". */
7468 tree ctype = current_class_type;
7469 /* The NAMESPACE_DECL for the namespace in which this entity is
7470 located. If an unqualified name is used to declare the entity,
7471 this value will be NULL_TREE, even if the entity is located at
caf93cb0 7472 namespace scope. */
058b15c1 7473 tree in_namespace = NULL_TREE;
1ff3c076
MM
7474 cp_storage_class storage_class;
7475 bool unsigned_p, signed_p, short_p, long_p, thread_p;
2cfe82fe 7476 bool type_was_error_mark_node = false;
5d80a306 7477 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
1891dec4 7478 bool set_no_warning = false;
1ff3c076
MM
7479
7480 signed_p = declspecs->specs[(int)ds_signed];
7481 unsigned_p = declspecs->specs[(int)ds_unsigned];
7482 short_p = declspecs->specs[(int)ds_short];
7483 long_p = declspecs->specs[(int)ds_long];
28c84d63 7484 longlong = declspecs->specs[(int)ds_long] >= 2;
1ff3c076 7485 thread_p = declspecs->specs[(int)ds_thread];
8d08fdba 7486
8d08fdba 7487 if (decl_context == FUNCDEF)
357d956e 7488 funcdef_flag = true, decl_context = NORMAL;
8d08fdba 7489 else if (decl_context == MEMFUNCDEF)
357d956e 7490 funcdef_flag = true, decl_context = FIELD;
8d08fdba
MS
7491 else if (decl_context == BITFIELD)
7492 bitfield = 1, decl_context = FIELD;
7493
b87d79e6
JM
7494 if (initialized > 1)
7495 funcdef_flag = true;
7496
8d08fdba
MS
7497 /* Look inside a declarator for the name being declared
7498 and get it as a string, for an error message. */
caf93cb0
EC
7499 for (id_declarator = declarator;
7500 id_declarator;
058b15c1
MM
7501 id_declarator = id_declarator->declarator)
7502 {
7503 if (id_declarator->kind != cdk_id)
7504 innermost_code = id_declarator->kind;
8d08fdba 7505
058b15c1
MM
7506 switch (id_declarator->kind)
7507 {
7508 case cdk_function:
7509 if (id_declarator->declarator
7510 && id_declarator->declarator->kind == cdk_id)
8d08fdba 7511 {
058b15c1
MM
7512 sfk = id_declarator->declarator->u.id.sfk;
7513 if (sfk == sfk_destructor)
7514 flags = DTOR_FLAG;
51c184be 7515 }
058b15c1 7516 break;
be99da77 7517
058b15c1
MM
7518 case cdk_id:
7519 {
1d786913
MM
7520 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
7521 tree decl = id_declarator->u.id.unqualified_name;
058b15c1
MM
7522 if (!decl)
7523 break;
1d786913 7524 if (qualifying_scope)
8d08fdba 7525 {
2884e22c
MM
7526 if (at_function_scope_p ())
7527 {
7528 /* [dcl.meaning]
7529
7530 A declarator-id shall not be qualified except
7531 for ...
7532
7533 None of the cases are permitted in block
7534 scope. */
7535 if (qualifying_scope == global_namespace)
7536 error ("invalid use of qualified-name %<::%D%>",
7537 decl);
7538 else if (TYPE_P (qualifying_scope))
7539 error ("invalid use of qualified-name %<%T::%D%>",
7540 qualifying_scope, decl);
7541 else
7542 error ("invalid use of qualified-name %<%D::%D%>",
7543 qualifying_scope, decl);
7544 return error_mark_node;
7545 }
7546 else if (TYPE_P (qualifying_scope))
058b15c1 7547 {
1d786913 7548 ctype = qualifying_scope;
058b15c1
MM
7549 if (innermost_code != cdk_function
7550 && current_class_type
caf93cb0 7551 && !UNIQUELY_DERIVED_FROM_P (ctype,
058b15c1
MM
7552 current_class_type))
7553 {
2d01edd7 7554 error ("type %qT is not derived from type %qT",
058b15c1 7555 ctype, current_class_type);
1d786913 7556 return error_mark_node;
058b15c1 7557 }
058b15c1
MM
7558 }
7559 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
7560 in_namespace = qualifying_scope;
058b15c1 7561 }
058b15c1
MM
7562 switch (TREE_CODE (decl))
7563 {
7564 case BIT_NOT_EXPR:
be99da77 7565 {
88e95ee3
MM
7566 tree type;
7567
7568 if (innermost_code != cdk_function)
7569 {
7570 error ("declaration of %qD as non-function", decl);
7571 return error_mark_node;
7572 }
c8094d83 7573 else if (!qualifying_scope
88e95ee3
MM
7574 && !(current_class_type && at_class_scope_p ()))
7575 {
7576 error ("declaration of %qD as non-member", decl);
7577 return error_mark_node;
7578 }
c8094d83 7579
88e95ee3
MM
7580 type = TREE_OPERAND (decl, 0);
7581 name = IDENTIFIER_POINTER (constructor_name (type));
af02935e 7582 dname = decl;
058b15c1
MM
7583 }
7584 break;
633221db 7585
058b15c1
MM
7586 case TEMPLATE_ID_EXPR:
7587 {
7588 tree fns = TREE_OPERAND (decl, 0);
633221db 7589
058b15c1 7590 dname = fns;
058b15c1 7591 if (TREE_CODE (dname) != IDENTIFIER_NODE)
be99da77 7592 {
50bc768d 7593 gcc_assert (is_overloaded_fn (dname));
058b15c1 7594 dname = DECL_NAME (get_first_fn (dname));
be99da77
MS
7595 }
7596 }
058b15c1 7597 /* Fall through. */
be99da77 7598
058b15c1
MM
7599 case IDENTIFIER_NODE:
7600 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7601 dname = decl;
be99da77 7602
058b15c1
MM
7603 if (C_IS_RESERVED_WORD (dname))
7604 {
2d01edd7 7605 error ("declarator-id missing; using reserved word %qD",
058b15c1
MM
7606 dname);
7607 name = IDENTIFIER_POINTER (dname);
7608 }
7609 else if (!IDENTIFIER_TYPENAME_P (dname))
7610 name = IDENTIFIER_POINTER (dname);
7611 else
7612 {
50bc768d 7613 gcc_assert (flags == NO_SPECIAL);
058b15c1
MM
7614 flags = TYPENAME_FLAG;
7615 ctor_return_type = TREE_TYPE (dname);
7616 sfk = sfk_conversion;
7617 if (is_typename_at_global_scope (dname))
7618 name = IDENTIFIER_POINTER (dname);
7619 else
7620 name = "<invalid operator>";
7621 }
7622 break;
7623
058b15c1 7624 default:
8dc2b103 7625 gcc_unreachable ();
058b15c1 7626 }
45537677 7627 break;
b08f991d 7628 }
45537677 7629
b08f991d
SB
7630 case cdk_array:
7631 case cdk_pointer:
7632 case cdk_reference:
7633 case cdk_ptrmem:
7634 break;
2ee366b5 7635
b08f991d
SB
7636 case cdk_error:
7637 return error_mark_node;
058b15c1 7638
b08f991d
SB
7639 default:
7640 gcc_unreachable ();
058b15c1
MM
7641 }
7642 if (id_declarator->kind == cdk_id)
7643 break;
7644 }
8d08fdba 7645
fa6098f8 7646 /* [dcl.fct.edf]
3db45ab5 7647
fa6098f8
MM
7648 The declarator in a function-definition shall have the form
7649 D1 ( parameter-declaration-clause) ... */
058b15c1 7650 if (funcdef_flag && innermost_code != cdk_function)
fa6098f8
MM
7651 {
7652 error ("function definition does not declare parameters");
7653 return error_mark_node;
7654 }
8d08fdba 7655
e1cd6e56 7656 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
058b15c1 7657 && innermost_code != cdk_function
62d1db17 7658 && ! (ctype && !declspecs->any_specifiers_p))
e1cd6e56 7659 {
2d01edd7 7660 error ("declaration of %qD as non-function", dname);
943e3ede 7661 return error_mark_node;
e1cd6e56
MS
7662 }
7663
8d08fdba
MS
7664 /* Anything declared one level down from the top level
7665 must be one of the parameters of a function
7666 (because the body is at least two levels down). */
7667
7668 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7669 by not allowing C++ class definitions to specify their parameters
7670 with xdecls (must be spec.d in the parmlist).
7671
7672 Since we now wait to push a class scope until we are sure that
7673 we are in a legitimate method context, we must set oldcname
a9aedbc2
MS
7674 explicitly (since current_class_name is not yet alive).
7675
7676 We also want to avoid calling this a PARM if it is in a namespace. */
8d08fdba 7677
9188c363 7678 if (decl_context == NORMAL && !toplevel_bindings_p ())
a9aedbc2 7679 {
e2500fed 7680 struct cp_binding_level *b = current_binding_level;
ff955512 7681 current_binding_level = b->level_chain;
a9aedbc2
MS
7682 if (current_binding_level != 0 && toplevel_bindings_p ())
7683 decl_context = PARM;
ff955512 7684 current_binding_level = b;
a9aedbc2 7685 }
8d08fdba 7686
34fc957d
NS
7687 if (name == NULL)
7688 name = decl_context == PARM ? "parameter" : "type name";
68642fb6 7689
62d1db17
MM
7690 /* If there were multiple types specified in the decl-specifier-seq,
7691 issue an error message. */
7692 if (declspecs->multiple_types_p)
32273f9f
LM
7693 {
7694 error ("two or more data types in declaration of %qs", name);
7695 return error_mark_node;
7696 }
7697
9b70c6b0
PC
7698 if (declspecs->conflicting_specifiers_p)
7699 {
7700 error ("conflicting specifiers in declaration of %qs", name);
7701 return error_mark_node;
7702 }
7703
62d1db17
MM
7704 /* Extract the basic type from the decl-specifier-seq. */
7705 type = declspecs->type;
7706 if (type == error_mark_node)
2cfe82fe
ZW
7707 {
7708 type = NULL_TREE;
7709 type_was_error_mark_node = true;
7710 }
62d1db17
MM
7711 /* If the entire declaration is itself tagged as deprecated then
7712 suppress reports of deprecated items. */
7713 if (type && TREE_DEPRECATED (type)
7714 && deprecated_state != DEPRECATED_SUPPRESS)
7715 warn_deprecated_use (type);
7716 if (type && TREE_CODE (type) == TYPE_DECL)
8d08fdba 7717 {
62d1db17
MM
7718 typedef_decl = type;
7719 type = TREE_TYPE (typedef_decl);
823dd937
JM
7720 if (TREE_DEPRECATED (type)
7721 && DECL_ARTIFICIAL (typedef_decl)
7722 && deprecated_state != DEPRECATED_SUPPRESS)
7723 warn_deprecated_use (type);
62d1db17
MM
7724 }
7725 /* No type at all: default to `int', and set DEFAULTED_INT
7726 because it was not a user-defined typedef. */
1ff3c076 7727 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
62d1db17
MM
7728 {
7729 /* These imply 'int'. */
7730 type = integer_type_node;
7731 defaulted_int = 1;
7732 }
7733 /* Gather flags. */
7734 explicit_int = declspecs->explicit_int_p;
7735 explicit_char = declspecs->explicit_char_p;
7a1f3f5f 7736
8d6e459d
NS
7737#if 0
7738 /* See the code below that used this. */
7739 if (typedef_decl)
7740 decl_attr = DECL_ATTRIBUTES (typedef_decl);
7741#endif
8d08fdba
MS
7742 typedef_type = type;
7743
a3203465 7744
44d10c10
PB
7745 if (sfk != sfk_conversion)
7746 ctor_return_type = ctype;
7747
3dbc07b6
MM
7748 if (sfk != sfk_none)
7749 type = check_special_function_return_type (sfk, type,
3dbc07b6
MM
7750 ctor_return_type);
7751 else if (type == NULL_TREE)
8d08fdba 7752 {
3dbc07b6
MM
7753 int is_main;
7754
8d08fdba 7755 explicit_int = -1;
3dbc07b6 7756
0fd0b7ee
JM
7757 /* We handle `main' specially here, because 'main () { }' is so
7758 common. With no options, it is allowed. With -Wreturn-type,
7759 it is a warning. It is only an error with -pedantic-errors. */
3dbc07b6 7760 is_main = (funcdef_flag
7437519c 7761 && dname && MAIN_NAME_P (dname)
3dbc07b6
MM
7762 && ctype == NULL_TREE
7763 && in_namespace == NULL_TREE
7764 && current_namespace == global_namespace);
7765
2cfe82fe
ZW
7766 if (type_was_error_mark_node)
7767 /* We've already issued an error, don't complain more. */;
7768 else if (in_system_header || flag_ms_extensions)
3dbc07b6 7769 /* Allow it, sigh. */;
37ec60ed 7770 else if (! is_main)
cbe5f3b3 7771 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
37ec60ed 7772 else if (pedantic)
509c9d60 7773 pedwarn (input_location, OPT_pedantic,
fcf73884 7774 "ISO C++ forbids declaration of %qs with no type", name);
b10fc6f5
GDR
7775 else
7776 warning (OPT_Wreturn_type,
7777 "ISO C++ forbids declaration of %qs with no type", name);
41eff652 7778
3dbc07b6 7779 type = integer_type_node;
51c184be 7780 }
caf93cb0 7781
8d08fdba
MS
7782 ctype = NULL_TREE;
7783
7784 /* Now process the modifiers that were specified
7785 and check for invalid combinations. */
7786
7787 /* Long double is a special combination. */
3cc189f5 7788 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8d08fdba 7789 {
1ff3c076 7790 long_p = false;
68642fb6 7791 type = build_qualified_type (long_double_type_node,
89d684bb 7792 cp_type_quals (type));
8d08fdba
MS
7793 }
7794
7795 /* Check all other uses of type modifiers. */
7796
1ff3c076 7797 if (unsigned_p || signed_p || long_p || short_p)
8d08fdba
MS
7798 {
7799 int ok = 0;
7800
3cc189f5
VR
7801 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
7802 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
1ff3c076 7803 else if (signed_p && unsigned_p)
3cc189f5
VR
7804 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
7805 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
7806 error ("%<long long%> invalid for %qs", name);
7807 else if (long_p && TREE_CODE (type) == REAL_TYPE)
7808 error ("%<long%> invalid for %qs", name);
7809 else if (short_p && TREE_CODE (type) == REAL_TYPE)
7810 error ("%<short%> invalid for %qs", name);
5d48268f
VR
7811 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
7812 error ("%<long%> or %<short%> invalid for %qs", name);
3cc189f5
VR
7813 else if ((long_p || short_p) && explicit_char)
7814 error ("%<long%> or %<short%> specified with char for %qs", name);
7815 else if (long_p && short_p)
7816 error ("%<long%> and %<short%> specified together for %qs", name);
b6baa67d
KVH
7817 else if (type == char16_type_node || type == char32_type_node)
7818 {
7819 if (signed_p || unsigned_p)
7820 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7821 else if (short_p || long_p)
7822 error ("%<short%> or %<long%> invalid for %qs", name);
7823 }
8d08fdba
MS
7824 else
7825 {
7826 ok = 1;
37c46b43 7827 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8d08fdba 7828 {
509c9d60 7829 pedwarn (input_location, OPT_pedantic,
fcf73884 7830 "long, short, signed or unsigned used invalidly for %qs",
8d08fdba
MS
7831 name);
7832 if (flag_pedantic_errors)
7833 ok = 0;
7834 }
7835 }
7836
7837 /* Discard the type modifiers if they are invalid. */
7838 if (! ok)
7839 {
1ff3c076
MM
7840 unsigned_p = false;
7841 signed_p = false;
7842 long_p = false;
7843 short_p = false;
8d08fdba
MS
7844 longlong = 0;
7845 }
7846 }
7847
7848 /* Decide whether an integer type is signed or not.
7849 Optionally treat bitfields as signed by default. */
1ff3c076 7850 if (unsigned_p
b89c5a7b
MM
7851 /* [class.bit]
7852
7853 It is implementation-defined whether a plain (neither
7854 explicitly signed or unsigned) char, short, int, or long
7855 bit-field is signed or unsigned.
68642fb6 7856
b89c5a7b
MM
7857 Naturally, we extend this to long long as well. Note that
7858 this does not include wchar_t. */
7859 || (bitfield && !flag_signed_bitfields
1ff3c076 7860 && !signed_p
b89c5a7b
MM
7861 /* A typedef for plain `int' without `signed' can be
7862 controlled just like plain `int', but a typedef for
7863 `signed int' cannot be so controlled. */
68642fb6 7864 && !(typedef_decl
29bbeb1c 7865 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
b38a05d0 7866 && TREE_CODE (type) == INTEGER_TYPE
29bbeb1c 7867 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8d08fdba
MS
7868 {
7869 if (longlong)
7870 type = long_long_unsigned_type_node;
1ff3c076 7871 else if (long_p)
8d08fdba 7872 type = long_unsigned_type_node;
1ff3c076 7873 else if (short_p)
8d08fdba
MS
7874 type = short_unsigned_type_node;
7875 else if (type == char_type_node)
7876 type = unsigned_char_type_node;
7877 else if (typedef_decl)
ca5ba2a3 7878 type = unsigned_type_for (type);
8d08fdba
MS
7879 else
7880 type = unsigned_type_node;
7881 }
1ff3c076 7882 else if (signed_p && type == char_type_node)
8d08fdba
MS
7883 type = signed_char_type_node;
7884 else if (longlong)
7885 type = long_long_integer_type_node;
1ff3c076 7886 else if (long_p)
8d08fdba 7887 type = long_integer_type_node;
1ff3c076 7888 else if (short_p)
8d08fdba
MS
7889 type = short_integer_type_node;
7890
62d1db17 7891 if (declspecs->specs[(int)ds_complex])
37c46b43 7892 {
1ff3c076 7893 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
2d01edd7 7894 error ("complex invalid for %qs", name);
37c46b43
MS
7895 /* If we just have "complex", it is equivalent to
7896 "complex double", but if any modifiers at all are specified it is
7897 the complex form of TYPE. E.g, "complex short" is
7898 "complex short int". */
7899
1ff3c076
MM
7900 else if (defaulted_int && ! longlong
7901 && ! (long_p || short_p || signed_p || unsigned_p))
37c46b43
MS
7902 type = complex_double_type_node;
7903 else if (type == integer_type_node)
7904 type = complex_integer_type_node;
7905 else if (type == float_type_node)
7906 type = complex_float_type_node;
7907 else if (type == double_type_node)
7908 type = complex_double_type_node;
7909 else if (type == long_double_type_node)
7910 type = complex_long_double_type_node;
7911 else
7912 type = build_complex_type (type);
7913 }
7914
4f2b0fb2 7915 type_quals = TYPE_UNQUALIFIED;
62d1db17 7916 if (declspecs->specs[(int)ds_const])
4f2b0fb2 7917 type_quals |= TYPE_QUAL_CONST;
62d1db17 7918 if (declspecs->specs[(int)ds_volatile])
4f2b0fb2 7919 type_quals |= TYPE_QUAL_VOLATILE;
62d1db17 7920 if (declspecs->specs[(int)ds_restrict])
4f2b0fb2
NS
7921 type_quals |= TYPE_QUAL_RESTRICT;
7922 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
2d01edd7 7923 error ("qualifiers are not allowed on declaration of %<operator %T%>",
0cbd7506 7924 ctor_return_type);
3ac3d9ea 7925
c8094d83 7926 if (TREE_CODE (type) == FUNCTION_TYPE
9804209d
DG
7927 && type_quals != TYPE_UNQUALIFIED)
7928 {
7929 /* This was an error in C++98 (cv-qualifiers cannot be added to
0cbd7506
MS
7930 a function type), but DR 295 makes the code well-formed by
7931 dropping the extra qualifiers. */
9804209d 7932 if (pedantic)
0cbd7506
MS
7933 {
7934 tree bad_type = build_qualified_type (type, type_quals);
509c9d60 7935 pedwarn (input_location, OPT_pedantic,
fcf73884 7936 "ignoring %qV qualifiers added to function type %qT",
0cbd7506
MS
7937 bad_type, type);
7938 }
9804209d
DG
7939 type_quals = TYPE_UNQUALIFIED;
7940 }
4f2b0fb2
NS
7941 type_quals |= cp_type_quals (type);
7942 type = cp_build_qualified_type_real
7943 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
23fca1f5 7944 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
4f2b0fb2
NS
7945 /* We might have ignored or rejected some of the qualifiers. */
7946 type_quals = cp_type_quals (type);
caf93cb0 7947
8d08fdba 7948 staticp = 0;
62d1db17
MM
7949 inlinep = !! declspecs->specs[(int)ds_inline];
7950 virtualp = !! declspecs->specs[(int)ds_virtual];
7951 explicitp = !! declspecs->specs[(int)ds_explicit];
8d08fdba 7952
1ff3c076
MM
7953 storage_class = declspecs->storage_class;
7954 if (storage_class == sc_static)
8d08fdba
MS
7955 staticp = 1 + (decl_context == FIELD);
7956
7957 if (virtualp && staticp == 2)
7958 {
2d01edd7 7959 error ("member %qD cannot be declared both virtual and static", dname);
7e1e0765 7960 storage_class = sc_none;
8d08fdba
MS
7961 staticp = 0;
7962 }
62d1db17 7963 friendp = !! declspecs->specs[(int)ds_friend];
8d08fdba 7964
d1c78882 7965 if (dependent_name && !friendp)
d5614afb 7966 {
d1c78882 7967 error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
13dbe691 7968 return error_mark_node;
d5614afb 7969 }
8d08fdba 7970
62d1db17
MM
7971 /* Issue errors about use of storage classes for parameters. */
7972 if (decl_context == PARM)
8d08fdba 7973 {
62d1db17 7974 if (declspecs->specs[(int)ds_typedef])
709f9dcf
VR
7975 {
7976 error ("typedef declaration invalid in parameter declaration");
7977 return error_mark_node;
7978 }
1ff3c076
MM
7979 else if (storage_class == sc_static
7980 || storage_class == sc_extern
7981 || thread_p)
8251199e 7982 error ("storage class specifiers invalid in parameter declarations");
8d08fdba
MS
7983 }
7984
7985 /* Give error if `virtual' is used outside of class declaration. */
b7484fbe
MS
7986 if (virtualp
7987 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba 7988 {
bcac2b89 7989 error ("%<virtual%> outside class declaration");
8d08fdba
MS
7990 virtualp = 0;
7991 }
8d08fdba
MS
7992
7993 /* Static anonymous unions are dealt with here. */
7994 if (staticp && decl_context == TYPENAME
62d1db17
MM
7995 && declspecs->type
7996 && ANON_AGGR_TYPE_P (declspecs->type))
8d08fdba
MS
7997 decl_context = FIELD;
7998
8d08fdba
MS
7999 /* Warn about storage classes that are invalid for certain
8000 kinds of declarations (parameters, typenames, etc.). */
3e66d096
JJ
8001 if (thread_p
8002 && ((storage_class
8003 && storage_class != sc_extern
8004 && storage_class != sc_static)
8005 || declspecs->specs[(int)ds_typedef]))
8006 {
8007 error ("multiple storage classes in declaration of %qs", name);
8008 thread_p = false;
8009 }
9b70c6b0
PC
8010 if (decl_context != NORMAL
8011 && ((storage_class != sc_none
8012 && storage_class != sc_mutable)
8013 || thread_p))
8d08fdba 8014 {
db5ae43f 8015 if ((decl_context == PARM || decl_context == CATCHPARM)
1ff3c076
MM
8016 && (storage_class == sc_register
8017 || storage_class == sc_auto))
8d08fdba 8018 ;
62d1db17 8019 else if (declspecs->specs[(int)ds_typedef])
fc378698 8020 ;
8d08fdba 8021 else if (decl_context == FIELD
f4f206f4 8022 /* C++ allows static class elements. */
1ff3c076 8023 && storage_class == sc_static)
d363e7bf
AJ
8024 /* C++ also allows inlines and signed and unsigned elements,
8025 but in those cases we don't come in here. */
8d08fdba
MS
8026 ;
8027 else
8028 {
8029 if (decl_context == FIELD)
389c6c8b 8030 error ("storage class specified for %qs", name);
8d08fdba 8031 else
b9d12519
KG
8032 {
8033 if (decl_context == PARM || decl_context == CATCHPARM)
2d01edd7 8034 error ("storage class specified for parameter %qs", name);
b9d12519
KG
8035 else
8036 error ("storage class specified for typename");
8037 }
1ff3c076
MM
8038 if (storage_class == sc_register
8039 || storage_class == sc_auto
8040 || storage_class == sc_extern
8041 || thread_p)
8042 storage_class = sc_none;
8d08fdba
MS
8043 }
8044 }
1ff3c076 8045 else if (storage_class == sc_extern && funcdef_flag
a9aedbc2 8046 && ! toplevel_bindings_p ())
2d01edd7 8047 error ("nested function %qs declared %<extern%>", name);
a9aedbc2 8048 else if (toplevel_bindings_p ())
8d08fdba 8049 {
1ff3c076 8050 if (storage_class == sc_auto)
2d01edd7 8051 error ("top-level declaration of %qs specifies %<auto%>", name);
8d08fdba 8052 }
1ff3c076
MM
8053 else if (thread_p
8054 && storage_class != sc_extern
8055 && storage_class != sc_static)
7a1f3f5f 8056 {
2d01edd7 8057 error ("function-scope %qs implicitly auto and declared %<__thread%>",
7a1f3f5f 8058 name);
1ff3c076 8059 thread_p = false;
7a1f3f5f 8060 }
8d08fdba 8061
1ff3c076 8062 if (storage_class && friendp)
ff7437d0
SM
8063 {
8064 error ("storage class specifiers invalid in friend function declarations");
8065 storage_class = sc_none;
8066 staticp = 0;
8067 }
909e536a 8068
058b15c1
MM
8069 if (!id_declarator)
8070 unqualified_id = NULL_TREE;
8071 else
8d08fdba 8072 {
1d786913 8073 unqualified_id = id_declarator->u.id.unqualified_name;
058b15c1 8074 switch (TREE_CODE (unqualified_id))
8d08fdba 8075 {
058b15c1 8076 case BIT_NOT_EXPR:
caf93cb0 8077 unqualified_id
058b15c1
MM
8078 = constructor_name (TREE_OPERAND (unqualified_id, 0));
8079 break;
caf93cb0 8080
058b15c1
MM
8081 case IDENTIFIER_NODE:
8082 case TEMPLATE_ID_EXPR:
52fbc847 8083 break;
caf93cb0 8084
058b15c1 8085 default:
8dc2b103 8086 gcc_unreachable ();
058b15c1
MM
8087 }
8088 }
52fbc847 8089
058b15c1
MM
8090 /* Determine the type of the entity declared by recurring on the
8091 declarator. */
f4f18103 8092 for (; declarator; declarator = declarator->declarator)
058b15c1
MM
8093 {
8094 const cp_declarator *inner_declarator;
8095 tree attrs;
8d08fdba 8096
058b15c1
MM
8097 if (type == error_mark_node)
8098 return error_mark_node;
c1b177ec 8099
058b15c1
MM
8100 attrs = declarator->attributes;
8101 if (attrs)
8102 {
8103 int attr_flags;
caf93cb0 8104
058b15c1
MM
8105 attr_flags = 0;
8106 if (declarator == NULL || declarator->kind == cdk_id)
8107 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8108 if (declarator->kind == cdk_function)
8109 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8110 if (declarator->kind == cdk_array)
8111 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8112 returned_attrs = decl_attributes (&type,
8113 chainon (returned_attrs, attrs),
8114 attr_flags);
8115 }
8116
f4f18103
MM
8117 if (declarator->kind == cdk_id)
8118 break;
8119
8120 inner_declarator = declarator->declarator;
8121
058b15c1
MM
8122 switch (declarator->kind)
8123 {
8124 case cdk_array:
caf93cb0 8125 type = create_array_type_for_decl (dname, type,
058b15c1 8126 declarator->u.array.bounds);
8d08fdba
MS
8127 break;
8128
058b15c1 8129 case cdk_function:
8d08fdba
MS
8130 {
8131 tree arg_types;
f376e137 8132 int funcdecl_p;
8d08fdba
MS
8133
8134 /* Declaring a function type.
8135 Make sure we have a valid type for the function to return. */
8d08fdba 8136
1891dec4
DM
8137 if (type_quals != TYPE_UNQUALIFIED)
8138 {
8139 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
5db2e9ca 8140 warning (OPT_Wignored_qualifiers,
1891dec4
DM
8141 "type qualifiers ignored on function return type");
8142 /* We now know that the TYPE_QUALS don't apply to the
8143 decl, but to its return type. */
8144 type_quals = TYPE_UNQUALIFIED;
8145 set_no_warning = true;
8146 }
8d08fdba 8147
e3276457 8148 /* Error about some types functions can't return. */
8d08fdba
MS
8149
8150 if (TREE_CODE (type) == FUNCTION_TYPE)
8151 {
2d01edd7 8152 error ("%qs declared as function returning a function", name);
e3276457 8153 return error_mark_node;
8d08fdba
MS
8154 }
8155 if (TREE_CODE (type) == ARRAY_TYPE)
8156 {
2d01edd7 8157 error ("%qs declared as function returning an array", name);
e3276457 8158 return error_mark_node;
8d08fdba
MS
8159 }
8160
b7484fbe 8161 /* Pick up type qualifiers which should be applied to `this'. */
e2537f2c 8162 memfn_quals = declarator->u.function.qualifiers;
b7484fbe 8163
c11b6f21 8164 /* Pick up the exception specifications. */
058b15c1 8165 raises = declarator->u.function.exception_specification;
c11b6f21 8166
f376e137
MS
8167 /* Say it's a definition only for the CALL_EXPR
8168 closest to the identifier. */
058b15c1 8169 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
68642fb6 8170
8d08fdba
MS
8171 if (ctype == NULL_TREE
8172 && decl_context == FIELD
f376e137 8173 && funcdecl_p
8d08fdba
MS
8174 && (friendp == 0 || dname == current_class_name))
8175 ctype = current_class_type;
8176
058b15c1
MM
8177 if (ctype && (sfk == sfk_constructor
8178 || sfk == sfk_destructor))
8d08fdba
MS
8179 {
8180 /* We are within a class's scope. If our declarator name
8181 is the same as the class name, and we are defining
8182 a function, then it is a constructor/destructor, and
8183 therefore returns a void type. */
3db45ab5 8184
e2537f2c
MM
8185 /* ISO C++ 12.4/2. A destructor may not be declared
8186 const or volatile. A destructor may not be
8187 static.
3db45ab5 8188
e2537f2c
MM
8189 ISO C++ 12.1. A constructor may not be declared
8190 const or volatile. A constructor may not be
8191 virtual. A constructor may not be static. */
3db45ab5 8192 if (staticp == 2)
e2537f2c
MM
8193 error ((flags == DTOR_FLAG)
8194 ? "destructor cannot be static member function"
8195 : "constructor cannot be static member function");
8196 if (memfn_quals)
8d08fdba 8197 {
e2537f2c
MM
8198 error ((flags == DTOR_FLAG)
8199 ? "destructors may not be cv-qualified"
8200 : "constructors may not be cv-qualified");
8201 memfn_quals = TYPE_UNQUALIFIED;
8d08fdba 8202 }
e2537f2c
MM
8203
8204 if (decl_context == FIELD
8205 && !member_function_or_else (ctype,
8206 current_class_type,
8207 flags))
13dbe691 8208 return error_mark_node;
e2537f2c
MM
8209
8210 if (flags != DTOR_FLAG)
8d08fdba 8211 {
e2537f2c 8212 /* It's a constructor. */
db5ae43f
MS
8213 if (explicitp == 1)
8214 explicitp = 2;
8d08fdba
MS
8215 if (virtualp)
8216 {
cbe5f3b3 8217 permerror (input_location, "constructors cannot be declared virtual");
8d08fdba
MS
8218 virtualp = 0;
8219 }
7137605e
MM
8220 if (decl_context == FIELD
8221 && sfk != sfk_constructor)
13dbe691 8222 return error_mark_node;
8d08fdba
MS
8223 }
8224 if (decl_context == FIELD)
8225 staticp = 0;
8226 }
b7484fbe 8227 else if (friendp)
8d08fdba 8228 {
b7484fbe 8229 if (initialized)
2d01edd7 8230 error ("can't initialize friend function %qs", name);
b7484fbe
MS
8231 if (virtualp)
8232 {
8233 /* Cannot be both friend and virtual. */
8251199e 8234 error ("virtual functions cannot be friends");
b7484fbe
MS
8235 friendp = 0;
8236 }
28cbf42c 8237 if (decl_context == NORMAL)
8251199e 8238 error ("friend declaration not in class definition");
28cbf42c 8239 if (current_function_decl && funcdef_flag)
2d01edd7 8240 error ("can't define friend function %qs in a local "
0cbd7506
MS
8241 "class definition",
8242 name);
8d08fdba
MS
8243 }
8244
caf93cb0 8245 arg_types = grokparms (declarator->u.function.parameters,
058b15c1 8246 &parms);
8d08fdba 8247
058b15c1
MM
8248 if (inner_declarator
8249 && inner_declarator->kind == cdk_id
8250 && inner_declarator->u.id.sfk == sfk_destructor
8251 && arg_types != void_list_node)
8d08fdba 8252 {
058b15c1
MM
8253 error ("destructors may not have parameters");
8254 arg_types = void_list_node;
8255 parms = NULL_TREE;
8d08fdba 8256 }
caf93cb0 8257
d22c8596 8258 type = build_function_type (type, arg_types);
8d08fdba
MS
8259 }
8260 break;
8261
058b15c1
MM
8262 case cdk_pointer:
8263 case cdk_reference:
8264 case cdk_ptrmem:
8d08fdba
MS
8265 /* Filter out pointers-to-references and references-to-references.
8266 We can get these if a TYPE_DECL is used. */
8267
8268 if (TREE_CODE (type) == REFERENCE_TYPE)
8269 {
8af2fec4
RY
8270 if (declarator->kind != cdk_reference)
8271 {
8272 error ("cannot declare pointer to %q#T", type);
8273 type = TREE_TYPE (type);
8274 }
8275
8276 /* In C++0x, we allow reference to reference declarations
8277 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
8278 and template type arguments [14.3.1/4 temp.arg.type]. The
8279 check for direct reference to reference declarations, which
8280 are still forbidden, occurs below. Reasoning behind the change
8281 can be found in DR106, DR540, and the rvalue reference
8282 proposals. */
c1ae8be5 8283 else if (cxx_dialect == cxx98)
8af2fec4
RY
8284 {
8285 error ("cannot declare reference to %q#T", type);
8286 type = TREE_TYPE (type);
8287 }
a5894242 8288 }
058b15c1
MM
8289 else if (VOID_TYPE_P (type))
8290 {
8291 if (declarator->kind == cdk_reference)
2d01edd7 8292 error ("cannot declare reference to %q#T", type);
058b15c1 8293 else if (declarator->kind == cdk_ptrmem)
2d01edd7 8294 error ("cannot declare pointer to %q#T member", type);
058b15c1 8295 }
61a127b3 8296
91063b51
MM
8297 /* We now know that the TYPE_QUALS don't apply to the decl,
8298 but to the target of the pointer. */
8299 type_quals = TYPE_UNQUALIFIED;
8d08fdba 8300
058b15c1 8301 if (declarator->kind == cdk_ptrmem
1b021ff4
JJ
8302 && (TREE_CODE (type) == FUNCTION_TYPE
8303 || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
058b15c1 8304 {
e2537f2c 8305 memfn_quals |= cp_type_quals (type);
3db45ab5 8306 type = build_memfn_type (type,
e2537f2c
MM
8307 declarator->u.pointer.class_type,
8308 memfn_quals);
8309 memfn_quals = TYPE_UNQUALIFIED;
058b15c1
MM
8310 }
8311
8312 if (declarator->kind == cdk_reference)
8d08fdba 8313 {
8af2fec4
RY
8314 /* In C++0x, the type we are creating a reference to might be
8315 a typedef which is itself a reference type. In that case,
8316 we follow the reference collapsing rules in
8317 [7.1.3/8 dcl.typedef] to create the final reference type:
8318
8319 "If a typedef TD names a type that is a reference to a type
8320 T, an attempt to create the type 'lvalue reference to cv TD'
8321 creates the type 'lvalue reference to T,' while an attempt
8322 to create the type "rvalue reference to cv TD' creates the
8323 type TD."
8324 */
dd29188b 8325 if (!VOID_TYPE_P (type))
8af2fec4
RY
8326 type = cp_build_reference_type
8327 ((TREE_CODE (type) == REFERENCE_TYPE
8328 ? TREE_TYPE (type) : type),
8329 (declarator->u.reference.rvalue_ref
8330 && (TREE_CODE(type) != REFERENCE_TYPE
8331 || TYPE_REF_IS_RVALUE (type))));
8332
8333 /* In C++0x, we need this check for direct reference to
8334 reference declarations, which are forbidden by
8335 [8.3.2/5 dcl.ref]. Reference to reference declarations
8336 are only allowed indirectly through typedefs and template
8337 type arguments. Example:
8338
8339 void foo(int & &); // invalid ref-to-ref decl
8340
8341 typedef int & int_ref;
8342 void foo(int_ref &); // valid ref-to-ref decl
8343 */
8344 if (inner_declarator && inner_declarator->kind == cdk_reference)
8345 error ("cannot declare reference to %q#T, which is not "
8346 "a typedef or a template type argument", type);
8d08fdba
MS
8347 }
8348 else if (TREE_CODE (type) == METHOD_TYPE)
d8f8dca1 8349 type = build_ptrmemfunc_type (build_pointer_type (type));
058b15c1 8350 else if (declarator->kind == cdk_ptrmem)
f4ed7d21 8351 {
63c9a190
MM
8352 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
8353 != NAMESPACE_DECL);
8354 if (declarator->u.pointer.class_type == error_mark_node)
4230cec2
NS
8355 /* We will already have complained. */
8356 type = error_mark_node;
f4ed7d21
NS
8357 else
8358 type = build_ptrmem_type (declarator->u.pointer.class_type,
8359 type);
8360 }
8d08fdba
MS
8361 else
8362 type = build_pointer_type (type);
8363
8364 /* Process a list of type modifier keywords (such as
8365 const or volatile) that were given inside the `*' or `&'. */
8366
058b15c1 8367 if (declarator->u.pointer.qualifiers)
8d08fdba 8368 {
caf93cb0
EC
8369 type
8370 = cp_build_qualified_type (type,
3c01e5df 8371 declarator->u.pointer.qualifiers);
4f2b0fb2 8372 type_quals = cp_type_quals (type);
8d08fdba 8373 }
8d08fdba
MS
8374 ctype = NULL_TREE;
8375 break;
8376
058b15c1
MM
8377 case cdk_error:
8378 break;
8d08fdba 8379
058b15c1 8380 default:
8dc2b103 8381 gcc_unreachable ();
058b15c1
MM
8382 }
8383 }
caf93cb0 8384
058b15c1
MM
8385 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
8386 && TREE_CODE (type) != FUNCTION_TYPE
8387 && TREE_CODE (type) != METHOD_TYPE)
8388 {
2d01edd7 8389 error ("template-id %qD used as a declarator",
058b15c1
MM
8390 unqualified_id);
8391 unqualified_id = dname;
8392 }
386b8a85 8393
9c12301f
MM
8394 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
8395 qualified with a class-name, turn it into a METHOD_TYPE, unless
8396 we know that the function is static. We take advantage of this
8397 opportunity to do other processing that pertains to entities
8398 explicitly declared to be class members. Note that if DECLARATOR
8399 is non-NULL, we know it is a cdk_id declarator; otherwise, we
8400 would not have exited the loop above. */
caf93cb0 8401 if (declarator
1d786913
MM
8402 && declarator->u.id.qualifying_scope
8403 && TYPE_P (declarator->u.id.qualifying_scope))
058b15c1
MM
8404 {
8405 tree t;
8d08fdba 8406
1d786913
MM
8407 ctype = declarator->u.id.qualifying_scope;
8408 ctype = TYPE_MAIN_VARIANT (ctype);
058b15c1
MM
8409 t = ctype;
8410 while (t != NULL_TREE && CLASS_TYPE_P (t))
8411 {
8412 /* You're supposed to have one `template <...>' for every
8413 template class, but you don't need one for a full
8414 specialization. For example:
8d08fdba 8415
058b15c1
MM
8416 template <class T> struct S{};
8417 template <> struct S<int> { void f(); };
8418 void S<int>::f () {}
28cbf42c 8419
058b15c1
MM
8420 is correct; there shouldn't be a `template <>' for the
8421 definition of `S<int>::f'. */
f0d60e22
MM
8422 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
8423 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
8424 /* T is an explicit (not partial) specialization. All
8425 containing classes must therefore also be explicitly
8426 specialized. */
8427 break;
8428 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
058b15c1
MM
8429 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
8430 template_count += 1;
28cbf42c 8431
058b15c1
MM
8432 t = TYPE_MAIN_DECL (t);
8433 t = DECL_CONTEXT (t);
8434 }
8d08fdba 8435
058b15c1 8436 if (ctype == current_class_type)
59e7c84c
VR
8437 {
8438 if (friendp)
b46ce77f 8439 {
cbe5f3b3 8440 permerror (input_location, "member functions are implicitly friends of their class");
b46ce77f
SM
8441 friendp = 0;
8442 }
59e7c84c 8443 else
cbe5f3b3 8444 permerror (declarator->id_loc,
7e99f74b
MLI
8445 "extra qualification %<%T::%> on member %qs",
8446 ctype, name);
59e7c84c 8447 }
fa6098f8
MM
8448 else if (/* If the qualifying type is already complete, then we
8449 can skip the following checks. */
8450 !COMPLETE_TYPE_P (ctype)
cc328145
MM
8451 && (/* If the function is being defined, then
8452 qualifying type must certainly be complete. */
3db45ab5 8453 funcdef_flag
cc328145
MM
8454 /* A friend declaration of "T::f" is OK, even if
8455 "T" is a template parameter. But, if this
8456 function is not a friend, the qualifying type
8457 must be a class. */
8458 || (!friendp && !CLASS_TYPE_P (ctype))
8459 /* For a declaration, the type need not be
8460 complete, if either it is dependent (since there
8461 is no meaningful definition of complete in that
8462 case) or the qualifying class is currently being
8463 defined. */
fa6098f8
MM
8464 || !(dependent_type_p (ctype)
8465 || currently_open_class (ctype)))
9f9a713e 8466 /* Check that the qualifying type is complete. */
fa6098f8
MM
8467 && !complete_type_or_else (ctype, NULL_TREE))
8468 return error_mark_node;
058b15c1
MM
8469 else if (TREE_CODE (type) == FUNCTION_TYPE)
8470 {
1d786913 8471 tree sname = declarator->u.id.unqualified_name;
50ad9642 8472
357d956e
MM
8473 if (current_class_type
8474 && (!friendp || funcdef_flag))
8475 {
8476 error (funcdef_flag
8477 ? "cannot define member function %<%T::%s%> within %<%T%>"
8478 : "cannot declare member function %<%T::%s%> within %<%T%>",
8479 ctype, name, current_class_type);
8480 return error_mark_node;
8481 }
8482
058b15c1
MM
8483 if (TREE_CODE (sname) == IDENTIFIER_NODE
8484 && NEW_DELETE_OPNAME_P (sname))
8485 /* Overloaded operator new and operator delete
8486 are always static functions. */
8487 ;
058b15c1 8488 else
e2537f2c 8489 type = build_memfn_type (type, ctype, memfn_quals);
058b15c1 8490 }
62d1db17 8491 else if (declspecs->specs[(int)ds_typedef]
fa6098f8 8492 && current_class_type)
058b15c1 8493 {
fa6098f8
MM
8494 error ("cannot declare member %<%T::%s%> within %qT",
8495 ctype, name, current_class_type);
058b15c1 8496 return error_mark_node;
8d08fdba
MS
8497 }
8498 }
8499
9c12301f
MM
8500 /* Now TYPE has the actual type. */
8501
91d231cb 8502 if (returned_attrs)
1eab9b56 8503 {
91d231cb
JM
8504 if (attrlist)
8505 *attrlist = chainon (returned_attrs, *attrlist);
1eab9b56 8506 else
91d231cb 8507 attrlist = &returned_attrs;
1eab9b56
JM
8508 }
8509
5d80a306
DG
8510 /* Handle parameter packs. */
8511 if (parameter_pack_p)
8512 {
8513 if (decl_context == PARM)
8514 /* Turn the type into a pack expansion.*/
8515 type = make_pack_expansion (type);
8516 else
8517 error ("non-parameter %qs cannot be a parameter pack", name);
8518 }
8519
55b3d665
JM
8520 /* Did array size calculations overflow? */
8521
8522 if (TREE_CODE (type) == ARRAY_TYPE
8523 && COMPLETE_TYPE_P (type)
96ce2ac9
JW
8524 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8525 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
55b3d665 8526 {
2d01edd7 8527 error ("size of array %qs is too large", name);
aba649ba 8528 /* If we proceed with the array type as it is, we'll eventually
55b3d665
JM
8529 crash in tree_low_cst(). */
8530 type = error_mark_node;
8531 }
8532
2fff6d71 8533 if ((decl_context == FIELD || decl_context == PARM)
caf93cb0 8534 && !processing_template_decl
5377d5ba 8535 && variably_modified_type_p (type, NULL_TREE))
dac45b5c 8536 {
2fff6d71 8537 if (decl_context == FIELD)
2d01edd7 8538 error ("data member may not have variably modified type %qT", type);
2fff6d71 8539 else
2d01edd7 8540 error ("parameter may not have variably modified type %qT", type);
dac45b5c
MM
8541 type = error_mark_node;
8542 }
8543
34fc957d 8544 if (explicitp == 1 || (explicitp && friendp))
db5ae43f 8545 {
34fc957d 8546 /* [dcl.fct.spec] The explicit specifier shall only be used in
0cbd7506 8547 declarations of constructors within a class definition. */
2d01edd7 8548 error ("only declarations of constructors can be %<explicit%>");
db5ae43f
MS
8549 explicitp = 0;
8550 }
8551
1ff3c076 8552 if (storage_class == sc_mutable)
f30432d7 8553 {
4223f82f 8554 if (decl_context != FIELD || friendp)
0cbd7506 8555 {
2d01edd7 8556 error ("non-member %qs cannot be declared %<mutable%>", name);
1ff3c076 8557 storage_class = sc_none;
0cbd7506 8558 }
62d1db17 8559 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
f30432d7 8560 {
2d01edd7 8561 error ("non-object member %qs cannot be declared %<mutable%>", name);
1ff3c076 8562 storage_class = sc_none;
f30432d7 8563 }
34fc957d 8564 else if (TREE_CODE (type) == FUNCTION_TYPE
0cbd7506
MS
8565 || TREE_CODE (type) == METHOD_TYPE)
8566 {
2d01edd7 8567 error ("function %qs cannot be declared %<mutable%>", name);
1ff3c076 8568 storage_class = sc_none;
0cbd7506 8569 }
f30432d7
MS
8570 else if (staticp)
8571 {
2d01edd7 8572 error ("static %qs cannot be declared %<mutable%>", name);
1ff3c076 8573 storage_class = sc_none;
f30432d7 8574 }
34fc957d
NS
8575 else if (type_quals & TYPE_QUAL_CONST)
8576 {
2d01edd7 8577 error ("const %qs cannot be declared %<mutable%>", name);
1ff3c076 8578 storage_class = sc_none;
34fc957d 8579 }
f30432d7
MS
8580 }
8581
419c6212 8582 /* If this is declaring a typedef name, return a TYPE_DECL. */
62d1db17 8583 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
8d08fdba
MS
8584 {
8585 tree decl;
8586
8587 /* Note that the grammar rejects storage classes
8588 in typenames, fields or parameters. */
eff71ab0
PB
8589 if (current_lang_name == lang_name_java)
8590 TYPE_FOR_JAVA (type) = 1;
3db45ab5 8591
e2537f2c
MM
8592 /* This declaration:
8593
3db45ab5 8594 typedef void f(int) const;
e2537f2c 8595
3db45ab5 8596 declares a function type which is not a member of any
e2537f2c 8597 particular class, but which is cv-qualified; for
3db45ab5 8598 example "f S::*" declares a pointer to a const-qualified
e2537f2c
MM
8599 member function of S. We record the cv-qualification in the
8600 function type. */
8601 if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
771026dd
DG
8602 {
8603 type = cp_build_qualified_type (type, memfn_quals);
8604
8605 /* We have now dealt with these qualifiers. */
8606 memfn_quals = TYPE_UNQUALIFIED;
8607 }
8d08fdba 8608
d2e5ee5c 8609 if (decl_context == FIELD)
e3016344 8610 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
d2e5ee5c 8611 else
e3016344
MM
8612 decl = build_decl (TYPE_DECL, unqualified_id, type);
8613 if (id_declarator && declarator->u.id.qualifying_scope)
8614 error ("%Jtypedef name may not be a nested-name-specifier", decl);
8615
8616 if (decl_context != FIELD)
6bda7a5e 8617 {
6bda7a5e
NS
8618 if (!current_function_decl)
8619 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
1dc82a99 8620 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
c8094d83 8621 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
1dc82a99
MM
8622 (current_function_decl)))
8623 /* The TYPE_DECL is "abstract" because there will be
8624 clones of this constructor/destructor, and there will
8625 be copies of this TYPE_DECL generated in those
8626 clones. */
8627 DECL_ABSTRACT (decl) = 1;
6bda7a5e 8628 }
e3016344 8629 else if (constructor_name_p (unqualified_id, current_class_type))
cbe5f3b3 8630 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
37ec60ed
JW
8631 "as enclosing class",
8632 unqualified_id);
caf93cb0 8633
9188c363
MM
8634 /* If the user declares "typedef struct {...} foo" then the
8635 struct will have an anonymous name. Fill that name in now.
8636 Nothing can refer to it, so nothing needs know about the name
8637 change. */
8d08fdba 8638 if (type != error_mark_node
058b15c1 8639 && unqualified_id
8d08fdba
MS
8640 && TYPE_NAME (type)
8641 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1951a1b6 8642 && TYPE_ANONYMOUS_P (type)
89d684bb 8643 && cp_type_quals (type) == TYPE_UNQUALIFIED)
8d08fdba 8644 {
dcd08efc
JM
8645 tree oldname = TYPE_NAME (type);
8646 tree t;
8647
2c73f9f5 8648 /* Replace the anonymous name with the real name everywhere. */
dcd08efc
JM
8649 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
8650 if (TYPE_NAME (t) == oldname)
8651 TYPE_NAME (t) = decl;
8d08fdba
MS
8652
8653 if (TYPE_LANG_SPECIFIC (type))
8654 TYPE_WAS_ANONYMOUS (type) = 1;
8655
33964bf4
MM
8656 /* If this is a typedef within a template class, the nested
8657 type is a (non-primary) template. The name for the
8658 template needs updating as well. */
8659 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
68642fb6 8660 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
33964bf4
MM
8661 = TYPE_IDENTIFIER (type);
8662
50a6dbd7
JM
8663 /* FIXME remangle member functions; member functions of a
8664 type with external linkage have external linkage. */
fc378698 8665 }
fc378698 8666
1ff3c076 8667 if (signed_p
8d08fdba
MS
8668 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8669 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
8670
3db45ab5 8671 bad_specifiers (decl, "type", virtualp,
e2537f2c 8672 memfn_quals != TYPE_UNQUALIFIED,
c91a56d2
MS
8673 inlinep, friendp, raises != NULL_TREE);
8674
8d08fdba
MS
8675 return decl;
8676 }
8677
8678 /* Detect the case of an array type of unspecified size
8679 which came, as such, direct from a typedef name.
8d6e459d
NS
8680 We must copy the type, so that the array's domain can be
8681 individually set by the object's initializer. */
8d08fdba 8682
8d6e459d
NS
8683 if (type && typedef_type
8684 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
55b3d665 8685 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8d6e459d 8686 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
8d08fdba 8687
969fd501 8688 /* Detect where we're using a typedef of function type to declare a
4546865e 8689 function. PARMS will not be set, so we must create it now. */
caf93cb0 8690
969fd501
NS
8691 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
8692 {
8693 tree decls = NULL_TREE;
8694 tree args;
8695
8696 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
8697 {
8e51619a 8698 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
969fd501
NS
8699
8700 TREE_CHAIN (decl) = decls;
8701 decls = decl;
8702 }
caf93cb0 8703
4546865e 8704 parms = nreverse (decls);
9804209d
DG
8705
8706 if (decl_context != TYPENAME)
0cbd7506
MS
8707 {
8708 /* A cv-qualifier-seq shall only be part of the function type
8709 for a non-static member function. [8.3.5/4 dcl.fct] */
8710 if (cp_type_quals (type) != TYPE_UNQUALIFIED
8711 && (current_class_type == NULL_TREE || staticp) )
8712 {
ebbc3ce1 8713 error (staticp
f88d05c0
DM
8714 ? G_("qualified function types cannot be used to "
8715 "declare static member functions")
8716 : G_("qualified function types cannot be used to "
8717 "declare free functions"));
0cbd7506
MS
8718 type = TYPE_MAIN_VARIANT (type);
8719 }
8720
8721 /* The qualifiers on the function type become the qualifiers on
8722 the non-static member function. */
e2537f2c 8723 memfn_quals |= cp_type_quals (type);
0cbd7506 8724 }
969fd501
NS
8725 }
8726
8d08fdba
MS
8727 /* If this is a type name (such as, in a cast or sizeof),
8728 compute the type and return it now. */
8729
8730 if (decl_context == TYPENAME)
8731 {
8732 /* Note that the grammar rejects storage classes
8733 in typenames, fields or parameters. */
91063b51 8734 if (type_quals != TYPE_UNQUALIFIED)
6eabb241 8735 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
8736
8737 /* Special case: "friend class foo" looks like a TYPENAME context. */
8738 if (friendp)
8739 {
91063b51 8740 if (type_quals != TYPE_UNQUALIFIED)
b7484fbe 8741 {
33bd39a2 8742 error ("type qualifiers specified for friend class declaration");
91063b51 8743 type_quals = TYPE_UNQUALIFIED;
b7484fbe
MS
8744 }
8745 if (inlinep)
8746 {
2d01edd7 8747 error ("%<inline%> specified for friend class declaration");
b7484fbe
MS
8748 inlinep = 0;
8749 }
f2ae0c45 8750
218e0eb6 8751 if (!current_aggr)
4b054b80 8752 {
218e0eb6 8753 /* Don't allow friend declaration without a class-key. */
4b054b80 8754 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
cbe5f3b3 8755 permerror (input_location, "template parameters cannot be friends");
f2ae0c45 8756 else if (TREE_CODE (type) == TYPENAME_TYPE)
cbe5f3b3 8757 permerror (input_location, "friend declaration requires class-key, "
37ec60ed
JW
8758 "i.e. %<friend class %T::%D%>",
8759 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
4b054b80 8760 else
cbe5f3b3 8761 permerror (input_location, "friend declaration requires class-key, "
37ec60ed
JW
8762 "i.e. %<friend %#T%>",
8763 type);
4b054b80 8764 }
b7484fbe
MS
8765
8766 /* Only try to do this stuff if we didn't already give up. */
8767 if (type != integer_type_node)
8768 {
8769 /* A friendly class? */
8770 if (current_class_type)
19db77ce
KL
8771 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8772 /*complain=*/true);
b7484fbe 8773 else
2d01edd7 8774 error ("trying to make class %qT a friend of global scope",
0cbd7506 8775 type);
d363e7bf 8776
b7484fbe
MS
8777 type = void_type_node;
8778 }
8d08fdba 8779 }
e2537f2c 8780 else if (memfn_quals)
8d08fdba 8781 {
8d08fdba
MS
8782 if (ctype == NULL_TREE)
8783 {
41cbc04c 8784 if (TREE_CODE (type) != METHOD_TYPE)
0cbd7506 8785 error ("invalid qualifiers on non-member function type");
41cbc04c 8786 else
0cbd7506 8787 ctype = TYPE_METHOD_BASETYPE (type);
41cbc04c
NS
8788 }
8789 if (ctype)
e2537f2c 8790 type = build_memfn_type (type, ctype, memfn_quals);
8d08fdba
MS
8791 }
8792
8793 return type;
8794 }
058b15c1 8795 else if (unqualified_id == NULL_TREE && decl_context != PARM
db5ae43f 8796 && decl_context != CATCHPARM
8d08fdba
MS
8797 && TREE_CODE (type) != UNION_TYPE
8798 && ! bitfield)
8799 {
2d01edd7 8800 error ("abstract declarator %qT used as declaration", type);
22ab714d 8801 return error_mark_node;
8d08fdba
MS
8802 }
8803
62e19030
MM
8804 /* Only functions may be declared using an operator-function-id. */
8805 if (unqualified_id
8806 && IDENTIFIER_OPNAME_P (unqualified_id)
8807 && TREE_CODE (type) != FUNCTION_TYPE
8808 && TREE_CODE (type) != METHOD_TYPE)
8d08fdba 8809 {
62e19030
MM
8810 error ("declaration of %qD as non-function", unqualified_id);
8811 return error_mark_node;
8d08fdba
MS
8812 }
8813
62e19030
MM
8814 /* We don't check parameter types here because we can emit a better
8815 error message later. */
8816 if (decl_context != PARM)
650fcd07
LM
8817 {
8818 type = check_var_type (unqualified_id, type);
8819 if (type == error_mark_node)
8820 return error_mark_node;
8821 }
62e19030 8822
8d08fdba
MS
8823 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
8824 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
8825
14ae7e7d
JM
8826 if (decl_context == PARM || decl_context == CATCHPARM)
8827 {
8828 if (ctype || in_namespace)
2d01edd7 8829 error ("cannot use %<::%> in parameter declaration");
14ae7e7d
JM
8830
8831 /* A parameter declared as an array of T is really a pointer to T.
8832 One declared as a function is really a pointer to a function.
8833 One declared as a member is really a pointer to member. */
8834
8835 if (TREE_CODE (type) == ARRAY_TYPE)
8836 {
8837 /* Transfer const-ness of array into that of type pointed to. */
8838 type = build_pointer_type (TREE_TYPE (type));
91063b51 8839 type_quals = TYPE_UNQUALIFIED;
14ae7e7d
JM
8840 }
8841 else if (TREE_CODE (type) == FUNCTION_TYPE)
8842 type = build_pointer_type (type);
14ae7e7d 8843 }
68642fb6 8844
8d08fdba 8845 {
926ce8bd 8846 tree decl;
8d08fdba
MS
8847
8848 if (decl_context == PARM)
8849 {
058b15c1 8850 decl = cp_build_parm_decl (unqualified_id, type);
8d08fdba 8851
3db45ab5 8852 bad_specifiers (decl, "parameter", virtualp,
e2537f2c 8853 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba 8854 inlinep, friendp, raises != NULL_TREE);
8d08fdba
MS
8855 }
8856 else if (decl_context == FIELD)
8857 {
01bf0f3e
JM
8858 /* The C99 flexible array extension. */
8859 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8860 && TYPE_DOMAIN (type) == NULL_TREE)
8861 {
8862 tree itype = compute_array_index_type (dname, integer_zero_node);
8863 type = build_cplus_array_type (TREE_TYPE (type), itype);
8864 }
8865
8d08fdba
MS
8866 if (type == error_mark_node)
8867 {
8868 /* Happens when declaring arrays of sizes which
8869 are error_mark_node, for example. */
8870 decl = NULL_TREE;
8871 }
997a088c 8872 else if (in_namespace && !friendp)
05008fb9
MM
8873 {
8874 /* Something like struct S { int N::j; }; */
2d01edd7 8875 error ("invalid use of %<::%>");
9a171ca4 8876 return error_mark_node;
05008fb9 8877 }
8d08fdba
MS
8878 else if (TREE_CODE (type) == FUNCTION_TYPE)
8879 {
8880 int publicp = 0;
e1467ff2 8881 tree function_context;
8d08fdba
MS
8882
8883 if (friendp == 0)
8884 {
8885 if (ctype == NULL_TREE)
8886 ctype = current_class_type;
8887
8888 if (ctype == NULL_TREE)
8889 {
2d01edd7 8890 error ("can't make %qD into a method -- not in a class",
058b15c1 8891 unqualified_id);
13dbe691 8892 return error_mark_node;
8d08fdba
MS
8893 }
8894
8895 /* ``A union may [ ... ] not [ have ] virtual functions.''
8896 ARM 9.5 */
8897 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
8898 {
2d01edd7 8899 error ("function %qD declared virtual inside a union",
058b15c1 8900 unqualified_id);
13dbe691 8901 return error_mark_node;
8d08fdba
MS
8902 }
8903
058b15c1 8904 if (NEW_DELETE_OPNAME_P (unqualified_id))
8d08fdba
MS
8905 {
8906 if (virtualp)
8907 {
2d01edd7 8908 error ("%qD cannot be declared virtual, since it "
0cbd7506 8909 "is always static",
058b15c1 8910 unqualified_id);
8d08fdba
MS
8911 virtualp = 0;
8912 }
8913 }
8914 else if (staticp < 2)
e2537f2c 8915 type = build_memfn_type (type, ctype, memfn_quals);
8d08fdba
MS
8916 }
8917
88e95ee3 8918 /* Check that the name used for a destructor makes sense. */
6d2989e1 8919 if (sfk == sfk_destructor)
88e95ee3 8920 {
6d2989e1
VR
8921 if (!ctype)
8922 {
8923 gcc_assert (friendp);
8924 error ("expected qualified name in friend declaration "
8925 "for destructor %qD",
8926 id_declarator->u.id.unqualified_name);
8927 return error_mark_node;
8928 }
8929
8930 if (!same_type_p (TREE_OPERAND
8931 (id_declarator->u.id.unqualified_name, 0),
8932 ctype))
8933 {
8934 error ("declaration of %qD as member of %qT",
8935 id_declarator->u.id.unqualified_name, ctype);
8936 return error_mark_node;
8937 }
88e95ee3 8938 }
ac3b1156
JJ
8939 else if (sfk == sfk_constructor && friendp)
8940 {
8941 error ("expected qualified name in friend declaration "
8942 "for constructor %qD",
8943 id_declarator->u.id.unqualified_name);
8944 return error_mark_node;
8945 }
88e95ee3 8946
8d08fdba 8947 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
68642fb6 8948 function_context = (ctype != NULL_TREE) ?
4f1c5b7d 8949 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
e1467ff2
MM
8950 publicp = (! friendp || ! staticp)
8951 && function_context == NULL_TREE;
68642fb6 8952 decl = grokfndecl (ctype, type,
058b15c1
MM
8953 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8954 ? unqualified_id : dname,
4546865e 8955 parms,
058b15c1 8956 unqualified_id,
e2537f2c 8957 virtualp, flags, memfn_quals, raises,
386b8a85 8958 friendp ? -1 : 0, friendp, publicp, inlinep,
27d6592c 8959 sfk,
037cc9c5 8960 funcdef_flag, template_count, in_namespace, attrlist);
20496fa2 8961 if (decl == NULL_TREE)
ba5719d9 8962 return error_mark_node;
6125f3be
DE
8963#if 0
8964 /* This clobbers the attrs stored in `decl' from `attrlist'. */
91d231cb
JM
8965 /* The decl and setting of decl_attr is also turned off. */
8966 decl = build_decl_attribute_variant (decl, decl_attr);
6125f3be 8967#endif
f0e01782 8968
cc804e51
MM
8969 /* [class.conv.ctor]
8970
8971 A constructor declared without the function-specifier
8972 explicit that can be called with a single parameter
8973 specifies a conversion from the type of its first
8974 parameter to the type of its class. Such a constructor
8975 is called a converting constructor. */
db5ae43f
MS
8976 if (explicitp == 2)
8977 DECL_NONCONVERTING_P (decl) = 1;
cc804e51
MM
8978 else if (DECL_CONSTRUCTOR_P (decl))
8979 {
09357846 8980 /* A constructor with no parms is not a conversion.
e0fff4b3
JM
8981 Ignore any compiler-added parms. */
8982 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
cc804e51 8983
09357846 8984 if (arg_types == void_list_node)
cc804e51
MM
8985 DECL_NONCONVERTING_P (decl) = 1;
8986 }
8d08fdba
MS
8987 }
8988 else if (TREE_CODE (type) == METHOD_TYPE)
8989 {
faae18ab
MS
8990 /* We only get here for friend declarations of
8991 members of other classes. */
8d08fdba
MS
8992 /* All method decls are public, so tell grokfndecl to set
8993 TREE_PUBLIC, also. */
866eb556 8994 decl = grokfndecl (ctype, type,
058b15c1
MM
8995 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8996 ? unqualified_id : dname,
4546865e 8997 parms,
058b15c1 8998 unqualified_id,
e2537f2c 8999 virtualp, flags, memfn_quals, raises,
27d6592c 9000 friendp ? -1 : 0, friendp, 1, 0, sfk,
c8094d83
MS
9001 funcdef_flag, template_count, in_namespace,
9002 attrlist);
f0e01782 9003 if (decl == NULL_TREE)
13dbe691 9004 return error_mark_node;
8d08fdba 9005 }
a9f46cbb 9006 else if (!staticp && !dependent_type_p (type)
d0f062fb 9007 && !COMPLETE_TYPE_P (complete_type (type))
8d08fdba
MS
9008 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9009 {
058b15c1 9010 if (unqualified_id)
2d01edd7 9011 error ("field %qD has incomplete type", unqualified_id);
b7484fbe 9012 else
2d01edd7 9013 error ("name %qT has incomplete type", type);
8d08fdba
MS
9014
9015 /* If we're instantiating a template, tell them which
9016 instantiation made the field's type be incomplete. */
9017 if (current_class_type
9018 && TYPE_NAME (current_class_type)
d2e5ee5c 9019 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
62d1db17
MM
9020 && declspecs->type
9021 && declspecs->type == type)
2d01edd7 9022 error (" in instantiation of template %qT",
0cbd7506 9023 current_class_type);
db5ae43f 9024
623c65f1 9025 return error_mark_node;
8d08fdba
MS
9026 }
9027 else
9028 {
9029 if (friendp)
9030 {
2d01edd7 9031 error ("%qE is neither function nor member function; "
0cbd7506 9032 "cannot be declared friend", unqualified_id);
8d08fdba
MS
9033 friendp = 0;
9034 }
9035 decl = NULL_TREE;
9036 }
9037
9038 if (friendp)
9039 {
9040 /* Friends are treated specially. */
9041 if (ctype == current_class_type)
37ec60ed 9042 ; /* We already issued a permerror. */
0cbd7506 9043 else if (decl && DECL_NAME (decl))
8db1028e
NS
9044 {
9045 if (template_class_depth (current_class_type) == 0)
9046 {
9047 decl = check_explicit_specialization
058b15c1 9048 (unqualified_id, decl, template_count,
357d956e 9049 2 * funcdef_flag + 4);
8db1028e
NS
9050 if (decl == error_mark_node)
9051 return error_mark_node;
9052 }
caf93cb0 9053
058b15c1 9054 decl = do_friend (ctype, unqualified_id, decl,
3db45ab5 9055 *attrlist, flags,
e2537f2c 9056 funcdef_flag);
8db1028e
NS
9057 return decl;
9058 }
9059 else
13dbe691 9060 return error_mark_node;
8d08fdba
MS
9061 }
9062
f4f206f4 9063 /* Structure field. It may not be a function, except for C++. */
8d08fdba
MS
9064
9065 if (decl == NULL_TREE)
9066 {
8d08fdba
MS
9067 if (initialized)
9068 {
3ac3d9ea
MM
9069 if (!staticp)
9070 {
9071 /* An attempt is being made to initialize a non-static
9072 member. But, from [class.mem]:
68642fb6 9073
3ac3d9ea
MM
9074 4 A member-declarator can contain a
9075 constant-initializer only if it declares a static
9076 member (_class.static_) of integral or enumeration
68642fb6 9077 type, see _class.static.data_.
3ac3d9ea
MM
9078
9079 This used to be relatively common practice, but
9080 the rest of the compiler does not correctly
9081 handle the initialization unless the member is
9082 static so we make it static below. */
cbe5f3b3 9083 permerror (input_location, "ISO C++ forbids initialization of member %qD",
37ec60ed 9084 unqualified_id);
cbe5f3b3 9085 permerror (input_location, "making %qD static", unqualified_id);
3ac3d9ea
MM
9086 staticp = 1;
9087 }
9088
6ba89f8e
MM
9089 if (uses_template_parms (type))
9090 /* We'll check at instantiation time. */
9091 ;
058b15c1 9092 else if (check_static_variable_definition (unqualified_id,
6ba89f8e
MM
9093 type))
9094 /* If we just return the declaration, crashes
9095 will sometimes occur. We therefore return
72a93143
JM
9096 void_type_node, as if this was a friend
9097 declaration, to cause callers to completely
9098 ignore this declaration. */
13dbe691 9099 return error_mark_node;
8d08fdba
MS
9100 }
9101
3ac3d9ea 9102 if (staticp)
8d08fdba 9103 {
f18a14bc
MM
9104 /* C++ allows static class members. All other work
9105 for this is done by grokfield. */
058b15c1 9106 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
4684cd27
MM
9107 set_linkage_for_static_data_member (decl);
9108 /* Even if there is an in-class initialization, DECL
9109 is considered undefined until an out-of-class
9110 definition is provided. */
9111 DECL_EXTERNAL (decl) = 1;
31a79236
JJ
9112
9113 if (thread_p)
8893239d 9114 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8d08fdba
MS
9115 }
9116 else
9117 {
058b15c1 9118 decl = build_decl (FIELD_DECL, unqualified_id, type);
2bf105ab 9119 DECL_NONADDRESSABLE_P (decl) = bitfield;
ab53bae2
AO
9120 if (bitfield && !unqualified_id)
9121 TREE_NO_WARNING (decl) = 1;
9122
1ff3c076 9123 if (storage_class == sc_mutable)
8d08fdba
MS
9124 {
9125 DECL_MUTABLE_P (decl) = 1;
1ff3c076 9126 storage_class = sc_none;
8d08fdba
MS
9127 }
9128 }
9129
3db45ab5 9130 bad_specifiers (decl, "field", virtualp,
e2537f2c 9131 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba
MS
9132 inlinep, friendp, raises != NULL_TREE);
9133 }
9134 }
fd9aef9d
NS
9135 else if (TREE_CODE (type) == FUNCTION_TYPE
9136 || TREE_CODE (type) == METHOD_TYPE)
8d08fdba 9137 {
386b8a85 9138 tree original_name;
8d08fdba
MS
9139 int publicp = 0;
9140
058b15c1 9141 if (!unqualified_id)
13dbe691 9142 return error_mark_node;
8d08fdba 9143
058b15c1 9144 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
386b8a85
JM
9145 original_name = dname;
9146 else
058b15c1 9147 original_name = unqualified_id;
386b8a85 9148
1ff3c076 9149 if (storage_class == sc_auto)
2d01edd7 9150 error ("storage class %<auto%> invalid for function %qs", name);
1ff3c076 9151 else if (storage_class == sc_register)
2d01edd7 9152 error ("storage class %<register%> invalid for function %qs", name);
1ff3c076 9153 else if (thread_p)
2d01edd7 9154 error ("storage class %<__thread%> invalid for function %qs", name);
8d08fdba
MS
9155
9156 /* Function declaration not at top level.
9157 Storage classes other than `extern' are not allowed
9158 and `extern' makes no difference. */
a9aedbc2 9159 if (! toplevel_bindings_p ()
1ff3c076 9160 && (storage_class == sc_static
62d1db17 9161 || declspecs->specs[(int)ds_inline])
8d08fdba 9162 && pedantic)
8926095f 9163 {
1ff3c076 9164 if (storage_class == sc_static)
509c9d60 9165 pedwarn (input_location, OPT_pedantic,
fcf73884 9166 "%<static%> specified invalid for function %qs "
0cbd7506 9167 "declared out of global scope", name);
8926095f 9168 else
509c9d60 9169 pedwarn (input_location, OPT_pedantic,
fcf73884 9170 "%<inline%> specifier invalid for function %qs "
0cbd7506 9171 "declared out of global scope", name);
8926095f 9172 }
68642fb6 9173
8d08fdba
MS
9174 if (ctype == NULL_TREE)
9175 {
9176 if (virtualp)
9177 {
2d01edd7 9178 error ("virtual non-class function %qs", name);
8d08fdba
MS
9179 virtualp = 0;
9180 }
8d08fdba 9181 }
4546865e
MM
9182 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9183 && !NEW_DELETE_OPNAME_P (original_name))
caf93cb0 9184 type = build_method_type_directly (ctype,
43dc123f
MM
9185 TREE_TYPE (type),
9186 TYPE_ARG_TYPES (type));
8d08fdba 9187
eb66be0e 9188 /* Record presence of `static'. */
faae18ab 9189 publicp = (ctype != NULL_TREE
1ff3c076
MM
9190 || storage_class == sc_extern
9191 || storage_class != sc_static);
8d08fdba 9192
058b15c1 9193 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
e2537f2c 9194 virtualp, flags, memfn_quals, raises,
75650646 9195 1, friendp,
27d6592c 9196 publicp, inlinep, sfk, funcdef_flag,
037cc9c5 9197 template_count, in_namespace, attrlist);
f0e01782 9198 if (decl == NULL_TREE)
13dbe691 9199 return error_mark_node;
8d08fdba 9200
8d08fdba
MS
9201 if (staticp == 1)
9202 {
0e339752 9203 int invalid_static = 0;
8d08fdba
MS
9204
9205 /* Don't allow a static member function in a class, and forbid
9206 declaring main to be static. */
9207 if (TREE_CODE (type) == METHOD_TYPE)
9208 {
cbe5f3b3 9209 permerror (input_location, "cannot declare member function %qD to have "
37ec60ed 9210 "static linkage", decl);
0e339752 9211 invalid_static = 1;
8d08fdba 9212 }
8d08fdba
MS
9213 else if (current_function_decl)
9214 {
9215 /* FIXME need arm citation */
8251199e 9216 error ("cannot declare static function inside another function");
0e339752 9217 invalid_static = 1;
8d08fdba
MS
9218 }
9219
0e339752 9220 if (invalid_static)
8d08fdba
MS
9221 {
9222 staticp = 0;
1ff3c076 9223 storage_class = sc_none;
8d08fdba
MS
9224 }
9225 }
8d08fdba
MS
9226 }
9227 else
9228 {
9229 /* It's a variable. */
9230
9231 /* An uninitialized decl with `extern' is a reference. */
caf93cb0 9232 decl = grokvardecl (type, unqualified_id,
62d1db17 9233 declspecs,
68642fb6
UD
9234 initialized,
9235 (type_quals & TYPE_QUAL_CONST) != 0,
9e259dd1 9236 ctype ? ctype : in_namespace);
3db45ab5 9237 bad_specifiers (decl, "variable", virtualp,
e2537f2c 9238 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba
MS
9239 inlinep, friendp, raises != NULL_TREE);
9240
9241 if (ctype)
9242 {
f0e01782 9243 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
9244 if (staticp == 1)
9245 {
cbe5f3b3 9246 permerror (input_location, "%<static%> may not be used when defining "
37ec60ed 9247 "(as opposed to declaring) a static data member");
0cbd7506 9248 staticp = 0;
1ff3c076 9249 storage_class = sc_none;
8d08fdba 9250 }
1ff3c076 9251 if (storage_class == sc_register && TREE_STATIC (decl))
b7484fbe 9252 {
2d01edd7 9253 error ("static member %qD declared %<register%>", decl);
1ff3c076 9254 storage_class = sc_none;
b7484fbe 9255 }
1ff3c076 9256 if (storage_class == sc_extern && pedantic)
8d08fdba 9257 {
509c9d60 9258 pedwarn (input_location, OPT_pedantic,
fcf73884
MLI
9259 "cannot explicitly declare member %q#D to have "
9260 "extern linkage", decl);
1ff3c076 9261 storage_class = sc_none;
8d08fdba
MS
9262 }
9263 }
9264 }
9265
94eeabbe
DS
9266 if (storage_class == sc_extern && initialized && !funcdef_flag)
9267 {
9268 if (toplevel_bindings_p ())
9269 {
9270 /* It's common practice (and completely valid) to have a const
9271 be initialized and declared extern. */
9272 if (!(type_quals & TYPE_QUAL_CONST))
9273 warning (0, "%qs initialized and declared %<extern%>", name);
9274 }
9275 else
0450a966
PC
9276 {
9277 error ("%qs has both %<extern%> and initializer", name);
9278 return error_mark_node;
9279 }
94eeabbe
DS
9280 }
9281
8d08fdba
MS
9282 /* Record `register' declaration for warnings on &
9283 and in case doing stupid register allocation. */
9284
1ff3c076 9285 if (storage_class == sc_register)
8d08fdba 9286 DECL_REGISTER (decl) = 1;
1ff3c076 9287 else if (storage_class == sc_extern)
8926095f 9288 DECL_THIS_EXTERN (decl) = 1;
1ff3c076 9289 else if (storage_class == sc_static)
faae18ab
MS
9290 DECL_THIS_STATIC (decl) = 1;
9291
15896502
MM
9292 /* Record constancy and volatility on the DECL itself . There's
9293 no need to do this when processing a template; we'll do this
9294 for the instantiated declaration based on the type of DECL. */
adecb3f4 9295 if (!processing_template_decl)
9804209d 9296 cp_apply_type_quals_to_decl (type_quals, decl);
8d08fdba 9297
1891dec4
DM
9298 if (set_no_warning)
9299 TREE_NO_WARNING (decl) = 1;
9300
8d08fdba
MS
9301 return decl;
9302 }
9303}
9304\f
f181d4ae
MM
9305/* Subroutine of start_function. Ensure that each of the parameter
9306 types (as listed in PARMS) is complete, as is required for a
9307 function definition. */
e92cc029 9308
8d08fdba 9309static void
11f6b451 9310require_complete_types_for_parms (tree parms)
8d08fdba 9311{
07c88314 9312 for (; parms; parms = TREE_CHAIN (parms))
8d08fdba 9313 {
c9387915
GB
9314 if (dependent_type_p (TREE_TYPE (parms)))
9315 continue;
dff1b563
VR
9316 if (!VOID_TYPE_P (TREE_TYPE (parms))
9317 && complete_type_or_else (TREE_TYPE (parms), parms))
753225c1 9318 {
7523dc31 9319 relayout_decl (parms);
753225c1
JM
9320 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9321 }
dff1b563
VR
9322 else
9323 /* grokparms or complete_type_or_else will have already issued
9324 an error. */
9325 TREE_TYPE (parms) = error_mark_node;
8d08fdba
MS
9326 }
9327}
9328
838dfd8a 9329/* Returns nonzero if T is a local variable. */
297e73d8 9330
46e8c075 9331int
ac7d7749 9332local_variable_p (const_tree t)
297e73d8 9333{
68642fb6 9334 if ((TREE_CODE (t) == VAR_DECL
297e73d8
MM
9335 /* A VAR_DECL with a context that is a _TYPE is a static data
9336 member. */
9337 && !TYPE_P (CP_DECL_CONTEXT (t))
9338 /* Any other non-local variable must be at namespace scope. */
46e8c075 9339 && !DECL_NAMESPACE_SCOPE_P (t))
297e73d8 9340 || (TREE_CODE (t) == PARM_DECL))
46e8c075 9341 return 1;
297e73d8 9342
46e8c075
MM
9343 return 0;
9344}
9345
46e8c075
MM
9346/* Like local_variable_p, but suitable for use as a tree-walking
9347 function. */
9348
9349static tree
44de5aeb
RK
9350local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9351 void *data ATTRIBUTE_UNUSED)
46e8c075 9352{
44de5aeb
RK
9353 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
9354 return *tp;
9355 else if (TYPE_P (*tp))
9356 *walk_subtrees = 0;
9357
9358 return NULL_TREE;
297e73d8
MM
9359}
9360
44de5aeb 9361
297e73d8 9362/* Check that ARG, which is a default-argument expression for a
0e339752 9363 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
297e73d8
MM
9364 something goes wrong. DECL may also be a _TYPE node, rather than a
9365 DECL, if there is no DECL available. */
9366
9367tree
11f6b451 9368check_default_argument (tree decl, tree arg)
297e73d8
MM
9369{
9370 tree var;
9371 tree decl_type;
9372
9373 if (TREE_CODE (arg) == DEFAULT_ARG)
9374 /* We get a DEFAULT_ARG when looking at an in-class declaration
9375 with a default argument. Ignore the argument for now; we'll
9376 deal with it after the class is complete. */
9377 return arg;
9378
297e73d8
MM
9379 if (TYPE_P (decl))
9380 {
9381 decl_type = decl;
9382 decl = NULL_TREE;
9383 }
9384 else
9385 decl_type = TREE_TYPE (decl);
9386
68642fb6 9387 if (arg == error_mark_node
297e73d8
MM
9388 || decl == error_mark_node
9389 || TREE_TYPE (arg) == error_mark_node
9390 || decl_type == error_mark_node)
9391 /* Something already went wrong. There's no need to check
9392 further. */
9393 return error_mark_node;
9394
9395 /* [dcl.fct.default]
68642fb6 9396
297e73d8
MM
9397 A default argument expression is implicitly converted to the
9398 parameter type. */
9399 if (!TREE_TYPE (arg)
30f86ec3 9400 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
297e73d8
MM
9401 {
9402 if (decl)
2d01edd7 9403 error ("default argument for %q#D has type %qT",
0cbd7506 9404 decl, TREE_TYPE (arg));
297e73d8 9405 else
2d01edd7 9406 error ("default argument for parameter of type %qT has type %qT",
0cbd7506 9407 decl_type, TREE_TYPE (arg));
297e73d8
MM
9408
9409 return error_mark_node;
9410 }
9411
9412 /* [dcl.fct.default]
9413
9414 Local variables shall not be used in default argument
68642fb6 9415 expressions.
297e73d8
MM
9416
9417 The keyword `this' shall not be used in a default argument of a
9418 member function. */
14588106 9419 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
297e73d8
MM
9420 if (var)
9421 {
2d01edd7 9422 error ("default argument %qE uses local variable %qD", arg, var);
297e73d8
MM
9423 return error_mark_node;
9424 }
9425
9426 /* All is well. */
9427 return arg;
9428}
9429
8d08fdba
MS
9430/* Decode the list of parameter types for a function type.
9431 Given the list of things declared inside the parens,
9432 return a list of types.
9433
058b15c1
MM
9434 If this parameter does not end with an ellipsis, we append
9435 void_list_node.
5cce22b6 9436
4546865e 9437 *PARMS is set to the chain of PARM_DECLs created. */
8d08fdba
MS
9438
9439static tree
62d1db17 9440grokparms (cp_parameter_declarator *first_parm, tree *parms)
8d08fdba
MS
9441{
9442 tree result = NULL_TREE;
9443 tree decls = NULL_TREE;
058b15c1 9444 int ellipsis = !first_parm || first_parm->ellipsis_p;
62d1db17 9445 cp_parameter_declarator *parm;
5cce22b6 9446 int any_error = 0;
0d83bf5a 9447 struct pointer_set_t *unique_decls = pointer_set_create ();
8d08fdba 9448
058b15c1 9449 for (parm = first_parm; parm != NULL; parm = parm->next)
8d08fdba 9450 {
0657c69c 9451 tree type = NULL_TREE;
058b15c1 9452 tree init = parm->default_argument;
62d1db17 9453 tree attrs;
058b15c1 9454 tree decl;
8d08fdba 9455
058b15c1 9456 if (parm == no_parameters)
0cbd7506 9457 break;
8d08fdba 9458
62d1db17
MM
9459 attrs = parm->decl_specifiers.attributes;
9460 parm->decl_specifiers.attributes = NULL_TREE;
9461 decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
98884b26 9462 PARM, init != NULL_TREE, &attrs);
5cce22b6 9463 if (! decl || TREE_TYPE (decl) == error_mark_node)
0cbd7506 9464 continue;
d363e7bf 9465
98884b26
JM
9466 if (attrs)
9467 cplus_decl_attributes (&decl, attrs, 0);
9468
5cce22b6
NS
9469 type = TREE_TYPE (decl);
9470 if (VOID_TYPE_P (type))
0cbd7506
MS
9471 {
9472 if (same_type_p (type, void_type_node)
e7e53192 9473 && DECL_SELF_REFERENCE_P (type)
0cbd7506
MS
9474 && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
9475 /* this is a parmlist of `(void)', which is ok. */
9476 break;
9477 cxx_incomplete_type_error (decl, type);
0657c69c
MM
9478 /* It's not a good idea to actually create parameters of
9479 type `void'; other parts of the compiler assume that a
9480 void type terminates the parameter list. */
04f3dc2b 9481 type = error_mark_node;
0657c69c 9482 TREE_TYPE (decl) = error_mark_node;
0cbd7506 9483 }
8d08fdba 9484
360f866c
JJ
9485 if (type != error_mark_node
9486 && TYPE_FOR_JAVA (type)
9e1e64ec 9487 && MAYBE_CLASS_TYPE_P (type))
360f866c
JJ
9488 {
9489 error ("parameter %qD has Java class type", decl);
9490 type = error_mark_node;
9491 TREE_TYPE (decl) = error_mark_node;
9492 init = NULL_TREE;
9493 }
9494
d363e7bf 9495 if (type != error_mark_node)
04f3dc2b
MM
9496 {
9497 /* Top-level qualifiers on the parameters are
9498 ignored for function types. */
79a1a736 9499 type = cp_build_qualified_type (type, 0);
04f3dc2b
MM
9500 if (TREE_CODE (type) == METHOD_TYPE)
9501 {
2d01edd7 9502 error ("parameter %qD invalidly declared method type", decl);
04f3dc2b
MM
9503 type = build_pointer_type (type);
9504 TREE_TYPE (decl) = type;
9505 }
04f3dc2b 9506 else if (abstract_virtuals_error (decl, type))
a1c65f9f 9507 any_error = 1; /* Seems like a good idea. */
04f3dc2b
MM
9508 else if (POINTER_TYPE_P (type))
9509 {
9510 /* [dcl.fct]/6, parameter types cannot contain pointers
9511 (references) to arrays of unknown bound. */
98979fe0
NS
9512 tree t = TREE_TYPE (type);
9513 int ptr = TYPE_PTR_P (type);
9514
0cbd7506
MS
9515 while (1)
9516 {
9517 if (TYPE_PTR_P (t))
9518 ptr = 1;
9519 else if (TREE_CODE (t) != ARRAY_TYPE)
9520 break;
9521 else if (!TYPE_DOMAIN (t))
9522 break;
9523 t = TREE_TYPE (t);
9524 }
04f3dc2b 9525 if (TREE_CODE (t) == ARRAY_TYPE)
2d01edd7 9526 error ("parameter %qD includes %s to array of unknown "
0cbd7506
MS
9527 "bound %qT",
9528 decl, ptr ? "pointer" : "reference", t);
04f3dc2b
MM
9529 }
9530
c3ee4651 9531 if (any_error)
04f3dc2b 9532 init = NULL_TREE;
c3ee4651
NS
9533 else if (init && !processing_template_decl)
9534 init = check_default_argument (decl, init);
04f3dc2b 9535 }
8d08fdba 9536
5d80a306
DG
9537 if (TREE_CODE (decl) == PARM_DECL
9538 && FUNCTION_PARAMETER_PACK_P (decl)
9539 && parm->next)
9540 error ("parameter packs must be at the end of the parameter list");
9541
0d83bf5a
SB
9542 if (DECL_NAME (decl))
9543 {
9544 if (pointer_set_contains (unique_decls, DECL_NAME (decl)))
631ee856 9545 error ("multiple parameters named %qE", DECL_NAME (decl));
0d83bf5a
SB
9546 else
9547 pointer_set_insert (unique_decls, DECL_NAME (decl));
9548 }
9549
5cce22b6
NS
9550 TREE_CHAIN (decl) = decls;
9551 decls = decl;
0657c69c 9552 result = tree_cons (init, type, result);
8d08fdba 9553 }
5cce22b6
NS
9554 decls = nreverse (decls);
9555 result = nreverse (result);
9556 if (!ellipsis)
9557 result = chainon (result, void_list_node);
4546865e 9558 *parms = decls;
8d08fdba 9559
0d83bf5a 9560 pointer_set_destroy (unique_decls);
8d08fdba
MS
9561 return result;
9562}
42976354 9563
8d08fdba 9564\f
271e6f02
NS
9565/* D is a constructor or overloaded `operator='.
9566
9567 Let T be the class in which D is declared. Then, this function
9568 returns:
9569
9570 -1 if D's is an ill-formed constructor or copy assignment operator
9571 whose first parameter is of type `T'.
9572 0 if D is not a copy constructor or copy assignment
9573 operator.
9574 1 if D is a copy constructor or copy assignment operator whose
9575 first parameter is a reference to const qualified T.
9576 2 if D is a copy constructor or copy assignment operator whose
9577 first parameter is a reference to non-const qualified T.
9578
9579 This function can be used as a predicate. Positive values indicate
838dfd8a 9580 a copy constructor and nonzero values indicate a copy assignment
4f1c5b7d
MM
9581 operator. */
9582
c11b6f21 9583int
58f9752a 9584copy_fn_p (const_tree d)
c11b6f21 9585{
271e6f02
NS
9586 tree args;
9587 tree arg_type;
9588 int result = 1;
caf93cb0 9589
398cd199 9590 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
4f1c5b7d 9591
7137605e
MM
9592 if (TREE_CODE (d) == TEMPLATE_DECL
9593 || (DECL_TEMPLATE_INFO (d)
9594 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
271e6f02
NS
9595 /* Instantiations of template member functions are never copy
9596 functions. Note that member functions of templated classes are
9597 represented as template functions internally, and we must
9598 accept those as copy functions. */
9599 return 0;
caf93cb0 9600
271e6f02
NS
9601 args = FUNCTION_FIRST_USER_PARMTYPE (d);
9602 if (!args)
4f1c5b7d
MM
9603 return 0;
9604
271e6f02 9605 arg_type = TREE_VALUE (args);
139a78c7
VR
9606 if (arg_type == error_mark_node)
9607 return 0;
271e6f02
NS
9608
9609 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
9610 {
9611 /* Pass by value copy assignment operator. */
9612 result = -1;
9613 }
9614 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8af2fec4 9615 && !TYPE_REF_IS_RVALUE (arg_type)
271e6f02
NS
9616 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
9617 {
9618 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
9619 result = 2;
9620 }
9621 else
9622 return 0;
caf93cb0 9623
271e6f02
NS
9624 args = TREE_CHAIN (args);
9625
9626 if (args && args != void_list_node && !TREE_PURPOSE (args))
9627 /* There are more non-optional args. */
9628 return 0;
9629
9630 return result;
9631}
9632
8af2fec4
RY
9633/* D is a constructor or overloaded `operator='.
9634
9635 Let T be the class in which D is declared. Then, this function
9636 returns true when D is a move constructor or move assignment
9637 operator, false otherwise. */
9638
9639bool
58f9752a 9640move_fn_p (const_tree d)
8af2fec4
RY
9641{
9642 tree args;
9643 tree arg_type;
9644 bool result = false;
9645
9646 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9647
c1ae8be5
SM
9648 if (cxx_dialect == cxx98)
9649 /* There are no move constructors if we are in C++98 mode. */
8af2fec4
RY
9650 return false;
9651
9652 if (TREE_CODE (d) == TEMPLATE_DECL
9653 || (DECL_TEMPLATE_INFO (d)
9654 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9655 /* Instantiations of template member functions are never copy
9656 functions. Note that member functions of templated classes are
9657 represented as template functions internally, and we must
9658 accept those as copy functions. */
9659 return 0;
9660
9661 args = FUNCTION_FIRST_USER_PARMTYPE (d);
9662 if (!args)
9663 return 0;
9664
9665 arg_type = TREE_VALUE (args);
9666 if (arg_type == error_mark_node)
9667 return 0;
9668
9669 if (TREE_CODE (arg_type) == REFERENCE_TYPE
9670 && TYPE_REF_IS_RVALUE (arg_type)
9671 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
9672 DECL_CONTEXT (d)))
9673 result = true;
9674
9675 args = TREE_CHAIN (args);
9676
9677 if (args && args != void_list_node && !TREE_PURPOSE (args))
9678 /* There are more non-optional args. */
9679 return false;
9680
9681 return result;
9682}
9683
271e6f02
NS
9684/* Remember any special properties of member function DECL. */
9685
0fcedd9c
JM
9686void
9687grok_special_member_properties (tree decl)
271e6f02 9688{
7137605e
MM
9689 tree class_type;
9690
6d69fe27 9691 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
7137605e
MM
9692 return;
9693
9694 class_type = DECL_CONTEXT (decl);
9695 if (DECL_CONSTRUCTOR_P (decl))
271e6f02
NS
9696 {
9697 int ctor = copy_fn_p (decl);
caf93cb0 9698
0fcedd9c
JM
9699 if (!DECL_ARTIFICIAL (decl))
9700 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
7137605e 9701
271e6f02
NS
9702 if (ctor > 0)
9703 {
9704 /* [class.copy]
caf93cb0 9705
0cbd7506
MS
9706 A non-template constructor for class X is a copy
9707 constructor if its first parameter is of type X&, const
9708 X&, volatile X& or const volatile X&, and either there
9709 are no other parameters or else all other parameters have
9710 default arguments. */
7137605e 9711 TYPE_HAS_INIT_REF (class_type) = 1;
b87d79e6
JM
9712 if (!DECL_DEFAULTED_FN (decl))
9713 TYPE_HAS_COMPLEX_INIT_REF (class_type) = 1;
271e6f02 9714 if (ctor > 1)
7137605e 9715 TYPE_HAS_CONST_INIT_REF (class_type) = 1;
271e6f02
NS
9716 }
9717 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
7137605e 9718 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
09357846
JM
9719 else if (is_list_ctor (decl))
9720 TYPE_HAS_LIST_CTOR (class_type) = 1;
271e6f02
NS
9721 }
9722 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
9723 {
9724 /* [class.copy]
caf93cb0 9725
0cbd7506
MS
9726 A non-template assignment operator for class X is a copy
9727 assignment operator if its parameter is of type X, X&, const
9728 X&, volatile X& or const volatile X&. */
caf93cb0 9729
271e6f02 9730 int assop = copy_fn_p (decl);
caf93cb0 9731
271e6f02
NS
9732 if (assop)
9733 {
7137605e 9734 TYPE_HAS_ASSIGN_REF (class_type) = 1;
b87d79e6
JM
9735 if (!DECL_DEFAULTED_FN (decl))
9736 TYPE_HAS_COMPLEX_ASSIGN_REF (class_type) = 1;
271e6f02 9737 if (assop != 1)
7137605e 9738 TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
271e6f02
NS
9739 }
9740 }
c11b6f21
MS
9741}
9742
271e6f02
NS
9743/* Check a constructor DECL has the correct form. Complains
9744 if the class has a constructor of the form X(X). */
e92cc029 9745
a0a33927 9746int
58f9752a 9747grok_ctor_properties (const_tree ctype, const_tree decl)
8d08fdba 9748{
271e6f02
NS
9749 int ctor_parm = copy_fn_p (decl);
9750
9751 if (ctor_parm < 0)
9752 {
9753 /* [class.copy]
caf93cb0 9754
0cbd7506
MS
9755 A declaration of a constructor for a class X is ill-formed if
9756 its first parameter is of type (optionally cv-qualified) X
9757 and either there are no other parameters or else all other
9758 parameters have default arguments.
9759
9760 We *don't* complain about member template instantiations that
9761 have this form, though; they can occur as we try to decide
9762 what constructor to use during overload resolution. Since
9763 overload resolution will never prefer such a constructor to
9764 the non-template copy constructor (which is either explicitly
9765 or implicitly defined), there's no need to worry about their
9766 existence. Theoretically, they should never even be
9767 instantiated, but that's hard to forestall. */
2d01edd7 9768 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
0b41abe6 9769 ctype, ctype);
0b41abe6 9770 return 0;
8d08fdba 9771 }
caf93cb0 9772
a0a33927 9773 return 1;
8d08fdba
MS
9774}
9775
596ea4e5 9776/* An operator with this code is unary, but can also be binary. */
e92cc029 9777
a28e3c7f 9778static int
11f6b451 9779ambi_op_p (enum tree_code code)
8d08fdba 9780{
596ea4e5
AS
9781 return (code == INDIRECT_REF
9782 || code == ADDR_EXPR
392e3d51 9783 || code == UNARY_PLUS_EXPR
596ea4e5
AS
9784 || code == NEGATE_EXPR
9785 || code == PREINCREMENT_EXPR
9786 || code == PREDECREMENT_EXPR);
8d08fdba
MS
9787}
9788
9789/* An operator with this name can only be unary. */
e92cc029 9790
a28e3c7f 9791static int
11f6b451 9792unary_op_p (enum tree_code code)
8d08fdba 9793{
596ea4e5
AS
9794 return (code == TRUTH_NOT_EXPR
9795 || code == BIT_NOT_EXPR
9796 || code == COMPONENT_REF
9797 || code == TYPE_EXPR);
8d08fdba
MS
9798}
9799
f2a79152 9800/* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
4b0d3cbe 9801 errors are issued for invalid declarations. */
e92cc029 9802
398cd199 9803bool
7e45bd18 9804grok_op_properties (tree decl, bool complain)
8d08fdba
MS
9805{
9806 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
596ea4e5 9807 tree argtype;
8d08fdba
MS
9808 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
9809 tree name = DECL_NAME (decl);
596ea4e5
AS
9810 enum tree_code operator_code;
9811 int arity;
64844139 9812 bool ellipsis_p;
7e45bd18 9813 tree class_type;
596ea4e5 9814
64844139 9815 /* Count the number of arguments and check for ellipsis. */
596ea4e5
AS
9816 for (argtype = argtypes, arity = 0;
9817 argtype && argtype != void_list_node;
9818 argtype = TREE_CHAIN (argtype))
9819 ++arity;
64844139 9820 ellipsis_p = !argtype;
8d08fdba 9821
7e45bd18
MM
9822 class_type = DECL_CONTEXT (decl);
9823 if (class_type && !CLASS_TYPE_P (class_type))
9824 class_type = NULL_TREE;
8d08fdba 9825
596ea4e5
AS
9826 if (DECL_CONV_FN_P (decl))
9827 operator_code = TYPE_EXPR;
9828 else
9829 do
9830 {
0c918ce5
MM
9831#define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
9832 if (ansi_opname (CODE) == name) \
9833 { \
75ac8dec 9834 operator_code = (CODE); \
0c918ce5
MM
9835 break; \
9836 } \
9837 else if (ansi_assopname (CODE) == name) \
9838 { \
75ac8dec 9839 operator_code = (CODE); \
0c918ce5
MM
9840 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
9841 break; \
596ea4e5
AS
9842 }
9843
9844#include "operators.def"
9845#undef DEF_OPERATOR
9846
8dc2b103 9847 gcc_unreachable ();
596ea4e5
AS
9848 }
9849 while (0);
c0ed0531 9850 gcc_assert (operator_code != MAX_TREE_CODES);
596ea4e5
AS
9851 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9852
7e45bd18
MM
9853 if (class_type)
9854 switch (operator_code)
9855 {
9856 case NEW_EXPR:
9857 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
9858 break;
5362b086 9859
7e45bd18
MM
9860 case DELETE_EXPR:
9861 TYPE_GETS_DELETE (class_type) |= 1;
9862 break;
5362b086 9863
7e45bd18
MM
9864 case VEC_NEW_EXPR:
9865 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
9866 break;
5362b086 9867
7e45bd18
MM
9868 case VEC_DELETE_EXPR:
9869 TYPE_GETS_DELETE (class_type) |= 2;
9870 break;
596ea4e5 9871
7e45bd18
MM
9872 default:
9873 break;
9874 }
596ea4e5 9875
3143d517
GB
9876 /* [basic.std.dynamic.allocation]/1:
9877
9878 A program is ill-formed if an allocation function is declared
9879 in a namespace scope other than global scope or declared static
9880 in global scope.
9881
9882 The same also holds true for deallocation functions. */
9883 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
9884 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9885 {
9886 if (DECL_NAMESPACE_SCOPE_P (decl))
9887 {
9888 if (CP_DECL_CONTEXT (decl) != global_namespace)
398cd199
VR
9889 {
9890 error ("%qD may not be declared within a namespace", decl);
9891 return false;
9892 }
3143d517 9893 else if (!TREE_PUBLIC (decl))
398cd199
VR
9894 {
9895 error ("%qD may not be declared as static", decl);
9896 return false;
9897 }
3143d517
GB
9898 }
9899 }
9900
596ea4e5 9901 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
1ea193c2
ILT
9902 {
9903 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
9904 DECL_IS_OPERATOR_NEW (decl) = 1;
9905 }
596ea4e5 9906 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
4546865e 9907 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8d08fdba
MS
9908 else
9909 {
9910 /* An operator function must either be a non-static member function
9911 or have at least one parameter of a class, a reference to a class,
9912 an enumeration, or a reference to an enumeration. 13.4.0.6 */
700f8a87 9913 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba 9914 {
596ea4e5
AS
9915 if (operator_code == TYPE_EXPR
9916 || operator_code == CALL_EXPR
9917 || operator_code == COMPONENT_REF
9918 || operator_code == ARRAY_REF
9919 || operator_code == NOP_EXPR)
f2a79152
PC
9920 {
9921 error ("%qD must be a nonstatic member function", decl);
398cd199 9922 return false;
f2a79152 9923 }
8d08fdba
MS
9924 else
9925 {
4b0d3cbe 9926 tree p;
8d08fdba 9927
700f8a87 9928 if (DECL_STATIC_FUNCTION_P (decl))
f2a79152
PC
9929 {
9930 error ("%qD must be either a non-static member "
9931 "function or a non-member function", decl);
398cd199 9932 return false;
f2a79152 9933 }
700f8a87 9934
4b0d3cbe
MM
9935 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
9936 {
9937 tree arg = non_reference (TREE_VALUE (p));
85990800 9938 if (arg == error_mark_node)
398cd199 9939 return false;
85990800 9940
9e1e64ec 9941 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
4b0d3cbe
MM
9942 because these checks are performed even on
9943 template functions. */
9e1e64ec
PC
9944 if (MAYBE_CLASS_TYPE_P (arg)
9945 || TREE_CODE (arg) == ENUMERAL_TYPE)
4b0d3cbe
MM
9946 break;
9947 }
9948
9949 if (!p || p == void_list_node)
9950 {
398cd199
VR
9951 if (complain)
9952 error ("%qD must have an argument of class or "
9953 "enumerated type", decl);
9954 return false;
4b0d3cbe 9955 }
8d08fdba
MS
9956 }
9957 }
68642fb6 9958
4b0d3cbe
MM
9959 /* There are no restrictions on the arguments to an overloaded
9960 "operator ()". */
596ea4e5 9961 if (operator_code == CALL_EXPR)
398cd199 9962 return true;
8d08fdba 9963
7e45bd18 9964 /* Warn about conversion operators that will never be used. */
c8094d83 9965 if (IDENTIFIER_TYPENAME_P (name)
7e45bd18
MM
9966 && ! DECL_TEMPLATE_INFO (decl)
9967 && warn_conversion
9968 /* Warn only declaring the function; there is no need to
9969 warn again about out-of-class definitions. */
9970 && class_type == current_class_type)
a0a33927
MS
9971 {
9972 tree t = TREE_TYPE (name);
7e45bd18
MM
9973 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
9974 const char *what = 0;
5362b086 9975
7e45bd18
MM
9976 if (ref)
9977 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
a0a33927 9978
7e45bd18
MM
9979 if (TREE_CODE (t) == VOID_TYPE)
9980 what = "void";
9981 else if (class_type)
9982 {
9983 if (t == class_type)
a0a33927 9984 what = "the same type";
9a3b49ac 9985 /* Don't force t to be complete here. */
9e1e64ec 9986 else if (MAYBE_CLASS_TYPE_P (t)
d0f062fb 9987 && COMPLETE_TYPE_P (t)
7e45bd18 9988 && DERIVED_FROM_P (t, class_type))
a0a33927 9989 what = "a base class";
a0a33927 9990 }
7e45bd18
MM
9991
9992 if (what)
b323323f 9993 warning (OPT_Wconversion, "conversion to %s%s will never use a type "
7e45bd18
MM
9994 "conversion operator",
9995 ref ? "a reference to " : "", what);
a0a33927 9996 }
64844139 9997
271e6f02 9998 if (operator_code == COND_EXPR)
8d08fdba
MS
9999 {
10000 /* 13.4.0.3 */
33bd39a2 10001 error ("ISO C++ prohibits overloading operator ?:");
398cd199 10002 return false;
68642fb6 10003 }
64844139 10004 else if (ellipsis_p)
398cd199
VR
10005 {
10006 error ("%qD must not have variable number of arguments", decl);
10007 return false;
10008 }
596ea4e5 10009 else if (ambi_op_p (operator_code))
8d08fdba 10010 {
596ea4e5
AS
10011 if (arity == 1)
10012 /* We pick the one-argument operator codes by default, so
10013 we don't have to change anything. */
10014 ;
10015 else if (arity == 2)
8d08fdba 10016 {
596ea4e5
AS
10017 /* If we thought this was a unary operator, we now know
10018 it to be a binary operator. */
10019 switch (operator_code)
10020 {
10021 case INDIRECT_REF:
10022 operator_code = MULT_EXPR;
10023 break;
10024
10025 case ADDR_EXPR:
10026 operator_code = BIT_AND_EXPR;
10027 break;
10028
392e3d51 10029 case UNARY_PLUS_EXPR:
596ea4e5
AS
10030 operator_code = PLUS_EXPR;
10031 break;
10032
10033 case NEGATE_EXPR:
10034 operator_code = MINUS_EXPR;
10035 break;
10036
10037 case PREINCREMENT_EXPR:
10038 operator_code = POSTINCREMENT_EXPR;
10039 break;
10040
10041 case PREDECREMENT_EXPR:
655dc6ee 10042 operator_code = POSTDECREMENT_EXPR;
596ea4e5
AS
10043 break;
10044
10045 default:
8dc2b103 10046 gcc_unreachable ();
596ea4e5
AS
10047 }
10048
10049 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10050
10051 if ((operator_code == POSTINCREMENT_EXPR
10052 || operator_code == POSTDECREMENT_EXPR)
5156628f 10053 && ! processing_template_decl
007e5fea 10054 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8d08fdba
MS
10055 {
10056 if (methodp)
2d01edd7 10057 error ("postfix %qD must take %<int%> as its argument",
398cd199 10058 decl);
8d08fdba 10059 else
398cd199
VR
10060 error ("postfix %qD must take %<int%> as its second "
10061 "argument", decl);
10062 return false;
8d08fdba
MS
10063 }
10064 }
10065 else
10066 {
10067 if (methodp)
2d01edd7 10068 error ("%qD must take either zero or one argument", decl);
8d08fdba 10069 else
2d01edd7 10070 error ("%qD must take either one or two arguments", decl);
398cd199 10071 return false;
8d08fdba 10072 }
824b9a4c
MS
10073
10074 /* More Effective C++ rule 6. */
eb448459 10075 if (warn_ecpp
596ea4e5
AS
10076 && (operator_code == POSTINCREMENT_EXPR
10077 || operator_code == POSTDECREMENT_EXPR
10078 || operator_code == PREINCREMENT_EXPR
10079 || operator_code == PREDECREMENT_EXPR))
824b9a4c
MS
10080 {
10081 tree arg = TREE_VALUE (argtypes);
10082 tree ret = TREE_TYPE (TREE_TYPE (decl));
10083 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10084 arg = TREE_TYPE (arg);
10085 arg = TYPE_MAIN_VARIANT (arg);
596ea4e5
AS
10086 if (operator_code == PREINCREMENT_EXPR
10087 || operator_code == PREDECREMENT_EXPR)
824b9a4c
MS
10088 {
10089 if (TREE_CODE (ret) != REFERENCE_TYPE
3bfdc719
MM
10090 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10091 arg))
b323323f 10092 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
0cbd7506 10093 build_reference_type (arg));
824b9a4c
MS
10094 }
10095 else
10096 {
3bfdc719 10097 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
b323323f 10098 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
824b9a4c
MS
10099 }
10100 }
8d08fdba 10101 }
596ea4e5 10102 else if (unary_op_p (operator_code))
8d08fdba 10103 {
596ea4e5 10104 if (arity != 1)
8d08fdba
MS
10105 {
10106 if (methodp)
2d01edd7 10107 error ("%qD must take %<void%>", decl);
8d08fdba 10108 else
2d01edd7 10109 error ("%qD must take exactly one argument", decl);
398cd199 10110 return false;
8d08fdba
MS
10111 }
10112 }
596ea4e5 10113 else /* if (binary_op_p (operator_code)) */
8d08fdba 10114 {
596ea4e5 10115 if (arity != 2)
8d08fdba
MS
10116 {
10117 if (methodp)
2d01edd7 10118 error ("%qD must take exactly one argument", decl);
8d08fdba 10119 else
2d01edd7 10120 error ("%qD must take exactly two arguments", decl);
398cd199 10121 return false;
8d08fdba 10122 }
824b9a4c
MS
10123
10124 /* More Effective C++ rule 7. */
eb448459 10125 if (warn_ecpp
596ea4e5
AS
10126 && (operator_code == TRUTH_ANDIF_EXPR
10127 || operator_code == TRUTH_ORIF_EXPR
10128 || operator_code == COMPOUND_EXPR))
b323323f 10129 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
0cbd7506 10130 decl);
824b9a4c
MS
10131 }
10132
10133 /* Effective C++ rule 23. */
eb448459 10134 if (warn_ecpp
596ea4e5 10135 && arity == 2
4bd7c270 10136 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
596ea4e5
AS
10137 && (operator_code == PLUS_EXPR
10138 || operator_code == MINUS_EXPR
10139 || operator_code == TRUNC_DIV_EXPR
4bd7c270
NS
10140 || operator_code == MULT_EXPR
10141 || operator_code == TRUNC_MOD_EXPR)
824b9a4c 10142 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
b323323f 10143 warning (OPT_Weffc__, "%qD should return by value", decl);
8d08fdba 10144
271e6f02 10145 /* [over.oper]/8 */
34332678 10146 for (; argtypes && argtypes != void_list_node;
0cbd7506
MS
10147 argtypes = TREE_CHAIN (argtypes))
10148 if (TREE_PURPOSE (argtypes))
10149 {
10150 TREE_PURPOSE (argtypes) = NULL_TREE;
10151 if (operator_code == POSTINCREMENT_EXPR
596ea4e5 10152 || operator_code == POSTDECREMENT_EXPR)
0cbd7506 10153 {
509c9d60 10154 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments",
fcf73884 10155 decl);
0cbd7506
MS
10156 }
10157 else
398cd199
VR
10158 {
10159 error ("%qD cannot have default arguments", decl);
10160 return false;
10161 }
0cbd7506 10162 }
8d08fdba 10163 }
398cd199 10164 return true;
8d08fdba
MS
10165}
10166\f
0c88d886
MM
10167/* Return a string giving the keyword associate with CODE. */
10168
d8e178a0 10169static const char *
11f6b451 10170tag_name (enum tag_types code)
094fe153
JM
10171{
10172 switch (code)
10173 {
10174 case record_type:
10175 return "struct";
10176 case class_type:
10177 return "class";
10178 case union_type:
0c88d886 10179 return "union";
094fe153
JM
10180 case enum_type:
10181 return "enum";
0c88d886
MM
10182 case typename_type:
10183 return "typename";
094fe153 10184 default:
8dc2b103 10185 gcc_unreachable ();
094fe153
JM
10186 }
10187}
10188
befcd99b 10189/* Name lookup in an elaborated-type-specifier (after the keyword
4b0d3cbe 10190 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
befcd99b 10191 elaborated-type-specifier is invalid, issue a diagnostic and return
4b0d3cbe 10192 error_mark_node; otherwise, return the *_TYPE to which it referred.
cbd63935 10193 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
befcd99b 10194
560ad596 10195tree
befcd99b 10196check_elaborated_type_specifier (enum tag_types tag_code,
4b0d3cbe 10197 tree decl,
cbd63935 10198 bool allow_template_p)
befcd99b 10199{
4b0d3cbe 10200 tree type;
befcd99b 10201
4b0d3cbe
MM
10202 /* In the case of:
10203
10204 struct S { struct S *p; };
10205
10206 name lookup will find the TYPE_DECL for the implicit "S::S"
10207 typedef. Adjust for that here. */
10208 if (DECL_SELF_REFERENCE_P (decl))
10209 decl = TYPE_NAME (TREE_TYPE (decl));
10210
10211 type = TREE_TYPE (decl);
10212
461c6fce
KL
10213 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10214 is false for this case as well. */
10215 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10216 {
10217 error ("using template type parameter %qT after %qs",
10218 type, tag_name (tag_code));
10219 return error_mark_node;
10220 }
caf93cb0 10221 /* [dcl.type.elab]
4b0d3cbe
MM
10222
10223 If the identifier resolves to a typedef-name or a template
10224 type-parameter, the elaborated-type-specifier is ill-formed.
10225
10226 In other words, the only legitimate declaration to use in the
10227 elaborated type specifier is the implicit typedef created when
10228 the type is declared. */
0c88d886
MM
10229 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
10230 && tag_code != typename_type)
befcd99b 10231 {
2d01edd7 10232 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
dee15844 10233 error ("%q+D has a previous declaration here", decl);
4b0d3cbe 10234 return error_mark_node;
befcd99b 10235 }
cbd63935
KL
10236 else if (TREE_CODE (type) != RECORD_TYPE
10237 && TREE_CODE (type) != UNION_TYPE
0c88d886
MM
10238 && tag_code != enum_type
10239 && tag_code != typename_type)
cbd63935 10240 {
2d01edd7 10241 error ("%qT referred to as %qs", type, tag_name (tag_code));
dee15844 10242 error ("%q+T has a previous declaration here", type);
4b0d3cbe 10243 return error_mark_node;
cbd63935
KL
10244 }
10245 else if (TREE_CODE (type) != ENUMERAL_TYPE
4fe8db68 10246 && tag_code == enum_type)
cbd63935 10247 {
2d01edd7 10248 error ("%qT referred to as enum", type);
dee15844 10249 error ("%q+T has a previous declaration here", type);
4b0d3cbe 10250 return error_mark_node;
cbd63935
KL
10251 }
10252 else if (!allow_template_p
10253 && TREE_CODE (type) == RECORD_TYPE
10254 && CLASSTYPE_IS_TEMPLATE (type))
10255 {
10256 /* If a class template appears as elaborated type specifier
10257 without a template header such as:
10258
10259 template <class T> class C {};
10260 void f(class C); // No template header here
10261
10262 then the required template argument is missing. */
2d01edd7 10263 error ("template argument required for %<%s %T%>",
cbd63935
KL
10264 tag_name (tag_code),
10265 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
4b0d3cbe 10266 return error_mark_node;
cbd63935 10267 }
befcd99b 10268
4b0d3cbe 10269 return type;
befcd99b
MM
10270}
10271
461c6fce 10272/* Lookup NAME in elaborate type specifier in scope according to
29ef83de 10273 SCOPE and issue diagnostics if necessary.
461c6fce
KL
10274 Return *_TYPE node upon success, NULL_TREE when the NAME is not
10275 found, and ERROR_MARK_NODE for type error. */
10276
10277static tree
10278lookup_and_check_tag (enum tag_types tag_code, tree name,
29ef83de 10279 tag_scope scope, bool template_header_p)
461c6fce
KL
10280{
10281 tree t;
10282 tree decl;
29ef83de 10283 if (scope == ts_global)
bd3d082e
KL
10284 {
10285 /* First try ordinary name lookup, ignoring hidden class name
10286 injected via friend declaration. */
10e6657a 10287 decl = lookup_name_prefer_type (name, 2);
bd3d082e
KL
10288 /* If that fails, the name will be placed in the smallest
10289 non-class, non-function-prototype scope according to 3.3.1/5.
10290 We may already have a hidden name declared as friend in this
105d72c5 10291 scope. So lookup again but not ignoring hidden names.
bd3d082e
KL
10292 If we find one, that name will be made visible rather than
10293 creating a new tag. */
10294 if (!decl)
10295 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10296 }
461c6fce 10297 else
29ef83de 10298 decl = lookup_type_scope (name, scope);
461c6fce
KL
10299
10300 if (decl && DECL_CLASS_TEMPLATE_P (decl))
10301 decl = DECL_TEMPLATE_RESULT (decl);
10302
10303 if (decl && TREE_CODE (decl) == TYPE_DECL)
10304 {
4104f0f4
KL
10305 /* Look for invalid nested type:
10306 class C {
10307 class C {};
10308 }; */
10309 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
10310 {
10311 error ("%qD has the same name as the class in which it is "
10312 "declared",
10313 decl);
10314 return error_mark_node;
10315 }
10316
461c6fce
KL
10317 /* Two cases we need to consider when deciding if a class
10318 template is allowed as an elaborated type specifier:
10319 1. It is a self reference to its own class.
10320 2. It comes with a template header.
10321
10322 For example:
10323
10324 template <class T> class C {
10325 class C *c1; // DECL_SELF_REFERENCE_P is true
10326 class D;
10327 };
10328 template <class U> class C; // template_header_p is true
10329 template <class T> class C<T>::D {
10330 class C *c2; // DECL_SELF_REFERENCE_P is true
10331 }; */
10332
10333 t = check_elaborated_type_specifier (tag_code,
10334 decl,
10335 template_header_p
10336 | DECL_SELF_REFERENCE_P (decl));
10337 return t;
10338 }
af92ab36
OW
10339 else if (decl && TREE_CODE (decl) == TREE_LIST)
10340 {
10341 error ("reference to %qD is ambiguous", name);
10342 print_candidates (decl);
10343 return error_mark_node;
10344 }
461c6fce
KL
10345 else
10346 return NULL_TREE;
10347}
10348
cbd63935 10349/* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
8d08fdba
MS
10350 Define the tag as a forward-reference if it is not defined.
10351
cbd63935 10352 If a declaration is given, process it here, and report an error if
38b305d0 10353 multiple declarations are not identical.
8d08fdba 10354
29ef83de 10355 SCOPE is TS_CURRENT when this is also a definition. Only look in
8d08fdba 10356 the current frame for the name (since C++ allows new names in any
29ef83de
KL
10357 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
10358 declaration. Only look beginning from the current scope outward up
10359 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
cbd63935
KL
10360
10361 TEMPLATE_HEADER_P is true when this declaration is preceded by
10362 a set of template parameters. */
8d08fdba 10363
8d08fdba 10364tree
38b305d0 10365xref_tag (enum tag_types tag_code, tree name,
29ef83de 10366 tag_scope scope, bool template_header_p)
8d08fdba 10367{
8d08fdba 10368 enum tree_code code;
926ce8bd 10369 tree t;
25aab5d0 10370 tree context = NULL_TREE;
dc8263bc 10371
22ffcc6f 10372 timevar_push (TV_NAME_LOOKUP);
cbd63935 10373
50bc768d 10374 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
cbd63935 10375
8d08fdba
MS
10376 switch (tag_code)
10377 {
10378 case record_type:
10379 case class_type:
8d08fdba 10380 code = RECORD_TYPE;
8d08fdba
MS
10381 break;
10382 case union_type:
10383 code = UNION_TYPE;
8d08fdba
MS
10384 break;
10385 case enum_type:
10386 code = ENUMERAL_TYPE;
10387 break;
10388 default:
8dc2b103 10389 gcc_unreachable ();
8d08fdba
MS
10390 }
10391
461c6fce
KL
10392 /* In case of anonymous name, xref_tag is only called to
10393 make type node and push name. Name lookup is not required. */
10394 if (ANON_AGGRNAME_P (name))
10395 t = NULL_TREE;
8d08fdba 10396 else
461c6fce 10397 t = lookup_and_check_tag (tag_code, name,
29ef83de 10398 scope, template_header_p);
cbd63935 10399
461c6fce
KL
10400 if (t == error_mark_node)
10401 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
68642fb6 10402
29ef83de 10403 if (scope != ts_current && t && current_class_type
461c6fce
KL
10404 && template_class_depth (current_class_type)
10405 && template_header_p)
10406 {
29ef83de 10407 /* Since SCOPE is not TS_CURRENT, we are not looking at a
461c6fce
KL
10408 definition of this tag. Since, in addition, we are currently
10409 processing a (member) template declaration of a template
10410 class, we must be very careful; consider:
25aab5d0 10411
461c6fce
KL
10412 template <class X>
10413 struct S1
25aab5d0 10414
461c6fce
KL
10415 template <class U>
10416 struct S2
10417 { template <class V>
10418 friend struct S1; };
25aab5d0 10419
461c6fce
KL
10420 Here, the S2::S1 declaration should not be confused with the
10421 outer declaration. In particular, the inner version should
10422 have a template parameter of level 2, not level 1. This
10423 would be particularly important if the member declaration
10424 were instead:
25aab5d0 10425
461c6fce 10426 template <class V = U> friend struct S1;
25aab5d0 10427
461c6fce
KL
10428 say, when we should tsubst into `U' when instantiating
10429 S2. On the other hand, when presented with:
25aab5d0 10430
461c6fce
KL
10431 template <class T>
10432 struct S1 {
10433 template <class U>
10434 struct S2 {};
10435 template <class U>
10436 friend struct S2;
10437 };
25aab5d0 10438
461c6fce
KL
10439 we must find the inner binding eventually. We
10440 accomplish this by making sure that the new type we
10441 create to represent this declaration has the right
10442 TYPE_CONTEXT. */
10443 context = TYPE_CONTEXT (t);
10444 t = NULL_TREE;
8d08fdba
MS
10445 }
10446
cbd63935 10447 if (! t)
8d08fdba
MS
10448 {
10449 /* If no such tag is yet defined, create a forward-reference node
10450 and record it as the "definition".
10451 When a real declaration of this type is found,
10452 the forward-reference will be altered into a real type. */
8d08fdba
MS
10453 if (code == ENUMERAL_TYPE)
10454 {
2d01edd7 10455 error ("use of enum %q#D without previous declaration", name);
30fc3df7 10456 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
8d08fdba 10457 }
8d08fdba
MS
10458 else
10459 {
9e1e64ec 10460 t = make_class_type (code);
cbd63935 10461 TYPE_CONTEXT (t) = context;
bd3d082e 10462 t = pushtag (name, t, scope);
8d08fdba
MS
10463 }
10464 }
10465 else
10466 {
9e1e64ec 10467 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
60feef2c
LM
10468 {
10469 if (!redeclare_class_template (t, current_template_parms))
10470 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10471 }
caf93cb0 10472 else if (!processing_template_decl
9ce1594a
MM
10473 && CLASS_TYPE_P (t)
10474 && CLASSTYPE_IS_TEMPLATE (t))
10475 {
2d01edd7 10476 error ("redeclaration of %qT as a non-template", t);
b646edb8
VR
10477 error ("previous declaration %q+D", t);
10478 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9ce1594a 10479 }
bd3d082e
KL
10480
10481 /* Make injected friend class visible. */
10482 if (scope != ts_within_enclosing_non_class
10483 && hidden_name_p (TYPE_NAME (t)))
10484 {
10485 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
10486 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
10487
10488 if (TYPE_TEMPLATE_INFO (t))
10489 {
10490 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
10491 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
10492 }
0cbd7506 10493 }
8d08fdba
MS
10494 }
10495
cbd63935 10496 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
8d08fdba 10497}
8ccc31eb 10498
fc378698 10499tree
29ef83de 10500xref_tag_from_type (tree old, tree id, tag_scope scope)
fc378698 10501{
88e5899c 10502 enum tag_types tag_kind;
fc378698
MS
10503
10504 if (TREE_CODE (old) == RECORD_TYPE)
88e5899c 10505 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
fc378698 10506 else
88e5899c 10507 tag_kind = union_type;
fc378698
MS
10508
10509 if (id == NULL_TREE)
10510 id = TYPE_IDENTIFIER (old);
10511
29ef83de 10512 return xref_tag (tag_kind, id, scope, false);
fc378698
MS
10513}
10514
48b45647
NS
10515/* Create the binfo hierarchy for REF with (possibly NULL) base list
10516 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
10517 access_* node, and the TREE_VALUE is the type of the base-class.
72f8fc59
LM
10518 Non-NULL TREE_TYPE indicates virtual inheritance.
10519
bd6f7848 10520 Returns true if the binfo hierarchy was successfully created,
72f8fc59 10521 false if an error was detected. */
3fd71a52 10522
72f8fc59 10523bool
dbbf88d1 10524xref_basetypes (tree ref, tree base_list)
8ccc31eb 10525{
8fbc5ae7 10526 tree *basep;
fa743e8c 10527 tree binfo, base_binfo;
03fd3f84 10528 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
77880ae4 10529 unsigned max_bases = 0; /* Maximum direct bases. */
8fbc5ae7 10530 int i;
48b45647
NS
10531 tree default_access;
10532 tree igo_prev; /* Track Inheritance Graph Order. */
a5d7c4a3 10533
bef89e9e 10534 if (ref == error_mark_node)
72f8fc59 10535 return false;
bef89e9e 10536
48b45647
NS
10537 /* The base of a derived class is private by default, all others are
10538 public. */
10539 default_access = (TREE_CODE (ref) == RECORD_TYPE
10540 && CLASSTYPE_DECLARED_CLASS (ref)
10541 ? access_private_node : access_public_node);
da15dae6 10542
d6479fe7
MM
10543 /* First, make sure that any templates in base-classes are
10544 instantiated. This ensures that if we call ourselves recursively
10545 we do not get confused about which classes are marked and which
10546 are not. */
caf93cb0
EC
10547 basep = &base_list;
10548 while (*basep)
8fbc5ae7
MM
10549 {
10550 tree basetype = TREE_VALUE (*basep);
caf93cb0 10551
8fbc5ae7
MM
10552 if (!(processing_template_decl && uses_template_parms (basetype))
10553 && !complete_type_or_else (basetype, NULL))
dbbf88d1 10554 /* An incomplete type. Remove it from the list. */
8fbc5ae7
MM
10555 *basep = TREE_CHAIN (*basep);
10556 else
48b45647
NS
10557 {
10558 max_bases++;
10559 if (TREE_TYPE (*basep))
10560 max_vbases++;
10561 if (CLASS_TYPE_P (basetype))
10562 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
10563 basep = &TREE_CHAIN (*basep);
10564 }
8fbc5ae7 10565 }
d6479fe7 10566
3543e114 10567 TYPE_MARKED_P (ref) = 1;
48b45647 10568
cad7e87b
NS
10569 /* The binfo slot should be empty, unless this is an (ill-formed)
10570 redefinition. */
50bc768d
NS
10571 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
10572 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
caf93cb0 10573
fa743e8c 10574 binfo = make_tree_binfo (max_bases);
caf93cb0 10575
48b45647
NS
10576 TYPE_BINFO (ref) = binfo;
10577 BINFO_OFFSET (binfo) = size_zero_node;
10578 BINFO_TYPE (binfo) = ref;
caf93cb0 10579
48b45647
NS
10580 if (max_bases)
10581 {
d4e6fecb 10582 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
48b45647
NS
10583 /* An aggregate cannot have baseclasses. */
10584 CLASSTYPE_NON_AGGREGATE (ref) = 1;
caf93cb0 10585
48b45647 10586 if (TREE_CODE (ref) == UNION_TYPE)
72f8fc59
LM
10587 {
10588 error ("derived union %qT invalid", ref);
10589 return false;
10590 }
48b45647 10591 }
caf93cb0 10592
48b45647 10593 if (max_bases > 1)
dbbf88d1 10594 {
48b45647 10595 if (TYPE_FOR_JAVA (ref))
72f8fc59
LM
10596 {
10597 error ("Java class %qT cannot have multiple bases", ref);
10598 return false;
10599 }
48b45647 10600 }
caf93cb0 10601
48b45647
NS
10602 if (max_vbases)
10603 {
d4e6fecb 10604 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
caf93cb0 10605
48b45647 10606 if (TYPE_FOR_JAVA (ref))
72f8fc59
LM
10607 {
10608 error ("Java class %qT cannot have virtual bases", ref);
10609 return false;
10610 }
48b45647 10611 }
cad7e87b 10612
48b45647
NS
10613 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
10614 {
10615 tree access = TREE_PURPOSE (base_list);
10616 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
10617 tree basetype = TREE_VALUE (base_list);
caf93cb0 10618
48b45647
NS
10619 if (access == access_default_node)
10620 access = default_access;
caf93cb0 10621
5d80a306
DG
10622 if (PACK_EXPANSION_P (basetype))
10623 basetype = PACK_EXPANSION_PATTERN (basetype);
48b45647
NS
10624 if (TREE_CODE (basetype) == TYPE_DECL)
10625 basetype = TREE_TYPE (basetype);
76871f0f 10626 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
48b45647 10627 {
2d01edd7 10628 error ("base type %qT fails to be a struct or class type",
48b45647 10629 basetype);
72f8fc59 10630 return false;
8ccc31eb 10631 }
caf93cb0 10632
48b45647
NS
10633 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
10634 TYPE_FOR_JAVA (ref) = 1;
10635
fa743e8c 10636 base_binfo = NULL_TREE;
48b45647 10637 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
dbbf88d1 10638 {
48b45647 10639 base_binfo = TYPE_BINFO (basetype);
77880ae4 10640 /* The original basetype could have been a typedef'd type. */
48b45647 10641 basetype = BINFO_TYPE (base_binfo);
caf93cb0 10642
48b45647
NS
10643 /* Inherit flags from the base. */
10644 TYPE_HAS_NEW_OPERATOR (ref)
10645 |= TYPE_HAS_NEW_OPERATOR (basetype);
10646 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
10647 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
10648 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
48b45647 10649 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
3543e114
NS
10650 CLASSTYPE_DIAMOND_SHAPED_P (ref)
10651 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
10652 CLASSTYPE_REPEATED_BASE_P (ref)
10653 |= CLASSTYPE_REPEATED_BASE_P (basetype);
8fbc5ae7 10654 }
c8094d83 10655
98d6e9af
NS
10656 /* We must do this test after we've seen through a typedef
10657 type. */
10658 if (TYPE_MARKED_P (basetype))
10659 {
10660 if (basetype == ref)
2d01edd7 10661 error ("recursive type %qT undefined", basetype);
98d6e9af 10662 else
2d01edd7 10663 error ("duplicate base type %qT invalid", basetype);
72f8fc59 10664 return false;
98d6e9af 10665 }
5d80a306
DG
10666
10667 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
10668 /* Regenerate the pack expansion for the bases. */
10669 basetype = make_pack_expansion (basetype);
10670
98d6e9af 10671 TYPE_MARKED_P (basetype) = 1;
caf93cb0 10672
48b45647
NS
10673 base_binfo = copy_binfo (base_binfo, basetype, ref,
10674 &igo_prev, via_virtual);
10675 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
10676 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
f5c28a15 10677
fa743e8c 10678 BINFO_BASE_APPEND (binfo, base_binfo);
63d1c7b3 10679 BINFO_BASE_ACCESS_APPEND (binfo, access);
cad7e87b
NS
10680 }
10681
3543e114
NS
10682 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
10683 /* If we have space in the vbase vector, we must have shared at
10684 least one of them, and are therefore diamond shaped. */
10685 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
10686
dbbf88d1 10687 /* Unmark all the types. */
fa743e8c 10688 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
3543e114
NS
10689 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10690 TYPE_MARKED_P (ref) = 0;
10691
10692 /* Now see if we have a repeated base type. */
10693 if (!CLASSTYPE_REPEATED_BASE_P (ref))
10694 {
10695 for (base_binfo = binfo; base_binfo;
10696 base_binfo = TREE_CHAIN (base_binfo))
10697 {
10698 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10699 {
10700 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
10701 break;
10702 }
10703 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
10704 }
10705 for (base_binfo = binfo; base_binfo;
10706 base_binfo = TREE_CHAIN (base_binfo))
10707 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10708 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10709 else
10710 break;
10711 }
72f8fc59
LM
10712
10713 return true;
8ccc31eb 10714}
68642fb6 10715
8d08fdba 10716\f
8d08fdba 10717/* Begin compiling the definition of an enumeration type.
adf2edec
DG
10718 NAME is its name,
10719
10720 UNDERLYING_TYPE is the type that will be used as the storage for
10721 the enumeration type. This should be NULL_TREE if no storage type
10722 was specified.
10723
10724 SCOPED_ENUM_P is true if this is a scoped enumeration type.
10725
8d08fdba
MS
10726 Returns the type object, as yet incomplete.
10727 Also records info about it so that build_enumerator
10728 may be used to declare the individual values as they are read. */
10729
10730tree
adf2edec 10731start_enum (tree name, tree underlying_type, bool scoped_enum_p)
8d08fdba 10732{
29ef83de
KL
10733 tree enumtype;
10734
10735 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
8d08fdba
MS
10736
10737 /* If this is the real definition for a previous forward reference,
10738 fill in the contents in the same object that used to be the
10739 forward reference. */
10740
29ef83de
KL
10741 enumtype = lookup_and_check_tag (enum_type, name,
10742 /*tag_scope=*/ts_current,
10743 /*template_header_p=*/false);
8d08fdba
MS
10744
10745 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
30ff8252 10746 {
2d01edd7 10747 error ("multiple definition of %q#T", enumtype);
ddd2d57e 10748 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
58595203
MM
10749 /* Clear out TYPE_VALUES, and start again. */
10750 TYPE_VALUES (enumtype) = NULL_TREE;
30ff8252 10751 }
8d08fdba
MS
10752 else
10753 {
29ef83de
KL
10754 /* In case of error, make a dummy enum to allow parsing to
10755 continue. */
10756 if (enumtype == error_mark_node)
10757 name = make_anon_name ();
10758
8d08fdba 10759 enumtype = make_node (ENUMERAL_TYPE);
bd3d082e 10760 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
8d08fdba
MS
10761 }
10762
adf2edec
DG
10763 if (scoped_enum_p)
10764 {
10765 SET_SCOPED_ENUM_P (enumtype, 1);
10766 begin_scope (sk_scoped_enum, enumtype);
10767
10768 /* [C++0x dcl.enum]p5:
10769
10770 If not explicitly specified, the underlying type of a scoped
10771 enumeration type is int. */
10772 if (!underlying_type)
10773 underlying_type = integer_type_node;
10774 }
10775
10776 if (underlying_type)
10777 {
10778 if (CP_INTEGRAL_TYPE_P (underlying_type))
10779 {
10780 TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (underlying_type);
10781 TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (underlying_type);
10782 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
10783 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
10784 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
10785 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
10786 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
10787 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
10788 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
10789 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
10790 }
10791 else
10792 error ("underlying type %<%T%> of %<%T%> must be an integral type",
10793 underlying_type, enumtype);
10794 }
10795
8d08fdba
MS
10796 return enumtype;
10797}
10798
10799/* After processing and defining all the values of an enumeration type,
10800 install their decls in the enumeration type and finish it off.
968b956a 10801 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
8d08fdba 10802
968b956a 10803void
11f6b451 10804finish_enum (tree enumtype)
8d08fdba 10805{
7b6d72fc
MM
10806 tree values;
10807 tree decl;
968b956a
MM
10808 tree minnode;
10809 tree maxnode;
adf2edec 10810 tree value;
968b956a
MM
10811 tree t;
10812 bool unsignedp;
f6af9a15 10813 bool use_short_enum;
968b956a 10814 int lowprec;
caf93cb0 10815 int highprec;
968b956a 10816 int precision;
7b6d72fc 10817 integer_type_kind itk;
ad96995b 10818 tree underlying_type = NULL_TREE;
adf2edec
DG
10819 bool fixed_underlying_type_p
10820 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
968b956a
MM
10821
10822 /* We built up the VALUES in reverse order. */
10823 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
10824
f5d70cc0
JM
10825 /* For an enum defined in a template, just set the type of the values;
10826 all further processing is postponed until the template is
10827 instantiated. We need to set the type so that tsubst of a CONST_DECL
10828 works. */
968b956a
MM
10829 if (processing_template_decl)
10830 {
caf93cb0
EC
10831 for (values = TYPE_VALUES (enumtype);
10832 values;
7b6d72fc
MM
10833 values = TREE_CHAIN (values))
10834 TREE_TYPE (TREE_VALUE (values)) = enumtype;
5f261ba9 10835 if (at_function_scope_p ())
968b956a 10836 add_stmt (build_min (TAG_DEFN, enumtype));
968b956a
MM
10837 return;
10838 }
10839
7b6d72fc 10840 /* Determine the minimum and maximum values of the enumerators. */
968b956a 10841 if (TYPE_VALUES (enumtype))
8d08fdba 10842 {
968b956a 10843 minnode = maxnode = NULL_TREE;
5566b478 10844
caf93cb0 10845 for (values = TYPE_VALUES (enumtype);
adf2edec
DG
10846 values;
10847 values = TREE_CHAIN (values))
10848 {
10849 decl = TREE_VALUE (values);
10850
10851 /* [dcl.enum]: Following the closing brace of an enum-specifier,
10852 each enumerator has the type of its enumeration. Prior to the
10853 closing brace, the type of each enumerator is the type of its
10854 initializing value. */
10855 TREE_TYPE (decl) = enumtype;
10856
10857 /* Update the minimum and maximum values, if appropriate. */
10858 value = DECL_INITIAL (decl);
10859 if (value == error_mark_node)
10860 value = integer_zero_node;
10861 /* Figure out what the minimum and maximum values of the
10862 enumerators are. */
10863 if (!minnode)
10864 minnode = maxnode = value;
10865 else if (tree_int_cst_lt (maxnode, value))
10866 maxnode = value;
10867 else if (tree_int_cst_lt (value, minnode))
10868 minnode = value;
10869 }
8d08fdba 10870 }
f376e137 10871 else
7b6d72fc 10872 /* [dcl.enum]
adf2edec 10873
7b6d72fc
MM
10874 If the enumerator-list is empty, the underlying type is as if
10875 the enumeration had a single enumerator with value 0. */
968b956a
MM
10876 minnode = maxnode = integer_zero_node;
10877
10878 /* Compute the number of bits require to represent all values of the
10879 enumeration. We must do this before the type of MINNODE and
10880 MAXNODE are transformed, since min_precision relies on the
10881 TREE_TYPE of the value it is passed. */
10882 unsignedp = tree_int_cst_sgn (minnode) >= 0;
10883 lowprec = min_precision (minnode, unsignedp);
10884 highprec = min_precision (maxnode, unsignedp);
10885 precision = MAX (lowprec, highprec);
10886
adf2edec
DG
10887 if (!fixed_underlying_type_p)
10888 {
10889 /* Determine the underlying type of the enumeration.
7b6d72fc 10890
adf2edec 10891 [dcl.enum]
7b6d72fc 10892
adf2edec
DG
10893 The underlying type of an enumeration is an integral type that
10894 can represent all the enumerator values defined in the
10895 enumeration. It is implementation-defined which integral type is
10896 used as the underlying type for an enumeration except that the
10897 underlying type shall not be larger than int unless the value of
10898 an enumerator cannot fit in an int or unsigned int.
7b6d72fc 10899
adf2edec
DG
10900 We use "int" or an "unsigned int" as the underlying type, even if
10901 a smaller integral type would work, unless the user has
10902 explicitly requested that we use the smallest possible type. The
10903 user can request that for all enumerations with a command line
10904 flag, or for just one enumeration with an attribute. */
f6af9a15 10905
adf2edec
DG
10906 use_short_enum = flag_short_enums
10907 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
f6af9a15 10908
adf2edec
DG
10909 for (itk = (use_short_enum ? itk_char : itk_int);
10910 itk != itk_none;
10911 itk++)
10912 {
10913 underlying_type = integer_types[itk];
10914 if (TYPE_PRECISION (underlying_type) >= precision
10915 && TYPE_UNSIGNED (underlying_type) == unsignedp)
10916 break;
10917 }
10918 if (itk == itk_none)
10919 {
10920 /* DR 377
10921
10922 IF no integral type can represent all the enumerator values, the
10923 enumeration is ill-formed. */
10924 error ("no integral type can represent all of the enumerator values "
10925 "for %qT", enumtype);
10926 precision = TYPE_PRECISION (long_long_integer_type_node);
10927 underlying_type = integer_types[itk_unsigned_long_long];
10928 }
7b6d72fc 10929
adf2edec
DG
10930 /* [dcl.enum]
10931
10932 The value of sizeof() applied to an enumeration type, an object
10933 of an enumeration type, or an enumerator, is the value of sizeof()
10934 applied to the underlying type. */
10935 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
10936 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
10937 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
10938 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
10939 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
10940 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
10941
10942 /* Set the underlying type of the enumeration type to the
10943 computed enumeration type, restricted to the enumerator
10944 values. */
10945 ENUM_UNDERLYING_TYPE (enumtype) = copy_node (underlying_type);
10946 set_min_and_max_values_for_integral_type
10947 (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
e455bc27 10948 }
adf2edec
DG
10949 else
10950 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
e455bc27 10951
39a13be5 10952 /* Compute the minimum and maximum values for the type.
8d08fdba 10953
7b6d72fc
MM
10954 [dcl.enum]
10955
10956 For an enumeration where emin is the smallest enumerator and emax
10957 is the largest, the values of the enumeration are the values of the
10958 underlying type in the range bmin to bmax, where bmin and bmax are,
10959 respectively, the smallest and largest values of the smallest bit-
10960 field that can store emin and emax. */
adf2edec 10961
d0c5c9b1
RS
10962 /* The middle-end currently assumes that types with TYPE_PRECISION
10963 narrower than their underlying type are suitably zero or sign
10964 extended to fill their mode. g++ doesn't make these guarantees.
10965 Until the middle-end can represent such paradoxical types, we
77880ae4 10966 set the TYPE_PRECISION to the width of the underlying type. */
d0c5c9b1 10967 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
adf2edec 10968
7b6d72fc 10969 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
adf2edec 10970
7b6d72fc
MM
10971 /* Convert each of the enumerators to the type of the underlying
10972 type of the enumeration. */
10973 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
10974 {
3c955a04
MM
10975 location_t saved_location;
10976
7b6d72fc 10977 decl = TREE_VALUE (values);
3c955a04
MM
10978 saved_location = input_location;
10979 input_location = DECL_SOURCE_LOCATION (decl);
adf2edec
DG
10980 if (fixed_underlying_type_p)
10981 /* If the enumeration type has a fixed underlying type, we
10982 already checked all of the enumerator values. */
10983 value = DECL_INITIAL (decl);
10984 else
10985 value = perform_implicit_conversion (underlying_type,
10986 DECL_INITIAL (decl),
10987 tf_warning_or_error);
3c955a04 10988 input_location = saved_location;
89b0433e
NS
10989
10990 /* Do not clobber shared ints. */
10991 value = copy_node (value);
c8094d83 10992
7b6d72fc
MM
10993 TREE_TYPE (value) = enumtype;
10994 DECL_INITIAL (decl) = value;
e455bc27 10995 }
8d08fdba 10996
968b956a
MM
10997 /* Fix up all variant types of this enum type. */
10998 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
10999 {
11000 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
11001 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
11002 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
11003 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
11004 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
11005 TYPE_MODE (t) = TYPE_MODE (enumtype);
11006 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
11007 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
11008 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
8df83eae 11009 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
adf2edec 11010 ENUM_UNDERLYING_TYPE (t) = ENUM_UNDERLYING_TYPE (enumtype);
cbf882af
MM
11011 }
11012
adf2edec
DG
11013 /* Finish up the scope of a scoped enumeration. */
11014 if (SCOPED_ENUM_P (enumtype))
11015 finish_scope ();
11016
968b956a
MM
11017 /* Finish debugging output for this type. */
11018 rest_of_type_compilation (enumtype, namespace_bindings_p ());
8d08fdba
MS
11019}
11020
079e1098 11021/* Build and install a CONST_DECL for an enumeration constant of the
58595203 11022 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
8d08fdba
MS
11023 Assignment of sequential values by default is handled here. */
11024
58595203 11025void
11f6b451 11026build_enumerator (tree name, tree value, tree enumtype)
8d08fdba 11027{
58595203 11028 tree decl;
e8bd800e 11029 tree context;
58595203 11030 tree type;
8d08fdba 11031
93678513
MM
11032 /* If the VALUE was erroneous, pretend it wasn't there; that will
11033 result in the enum being assigned the next value in sequence. */
11034 if (value == error_mark_node)
11035 value = NULL_TREE;
11036
8d08fdba
MS
11037 /* Remove no-op casts from the value. */
11038 if (value)
11039 STRIP_TYPE_NOPS (value);
11040
58595203
MM
11041 if (! processing_template_decl)
11042 {
11043 /* Validate and default VALUE. */
11044 if (value != NULL_TREE)
11045 {
8a784e4a 11046 value = integral_constant_value (value);
58595203
MM
11047
11048 if (TREE_CODE (value) == INTEGER_CST)
11049 {
0a72704b 11050 value = perform_integral_promotions (value);
58595203
MM
11051 constant_expression_warning (value);
11052 }
11053 else
11054 {
253e0d15 11055 error ("enumerator value for %qD is not an integer constant", name);
58595203
MM
11056 value = NULL_TREE;
11057 }
11058 }
11059
11060 /* Default based on previous value. */
6a540f3c 11061 if (value == NULL_TREE)
58595203 11062 {
58595203
MM
11063 if (TYPE_VALUES (enumtype))
11064 {
ff4eb0b5
ZW
11065 HOST_WIDE_INT hi;
11066 unsigned HOST_WIDE_INT lo;
11067 tree prev_value;
11068 bool overflowed;
11069
11070 /* The next value is the previous value plus one. We can
0cbd7506 11071 safely assume that the previous value is an INTEGER_CST.
ff4eb0b5
ZW
11072 add_double doesn't know the type of the target expression,
11073 so we must check with int_fits_type_p as well. */
58595203 11074 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
ff4eb0b5
ZW
11075 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
11076 TREE_INT_CST_HIGH (prev_value),
11077 1, 0, &lo, &hi);
11078 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
11079 overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
68642fb6 11080
ff4eb0b5 11081 if (overflowed)
3c955a04
MM
11082 {
11083 error ("overflow in enumeration values at %qD", name);
11084 value = error_mark_node;
11085 }
58595203
MM
11086 }
11087 else
11088 value = integer_zero_node;
11089 }
11090
11091 /* Remove no-op casts from the value. */
f5d70cc0 11092 STRIP_TYPE_NOPS (value);
adf2edec
DG
11093
11094 /* If the underlying type of the enum is fixed, check whether
11095 the enumerator values fits in the underlying type. If it
11096 does not fit, the program is ill-formed [C++0x dcl.enum]. */
11097 if (ENUM_UNDERLYING_TYPE (enumtype)
11098 && value
11099 && TREE_CODE (value) == INTEGER_CST
11100 && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
11101 {
11102 error ("enumerator value %E is too large for underlying type %<%T%>",
11103 value, ENUM_UNDERLYING_TYPE (enumtype));
11104
11105 /* Silently convert the value so that we can continue. */
11106 value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
11107 value, tf_none);
11108 if (value == error_mark_node)
11109 value = NULL_TREE;
11110 }
58595203 11111 }
8d08fdba 11112
8d08fdba 11113 /* C++ associates enums with global, function, or class declarations. */
58595203
MM
11114 context = current_scope ();
11115
11116 /* Build the actual enumeration constant. Note that the enumeration
adf2edec
DG
11117 constants have the underlying type of the enum (if it is fixed)
11118 or the type of their initializer (if the underlying type of the
11119 enum is not fixed):
11120
11121 [ C++0x dcl.enum ]
11122
11123 If the underlying type is fixed, the type of each enumerator
11124 prior to the closing brace is the underlying type; if the
11125 initializing value of an enumerator cannot be represented by
11126 the underlying type, the program is ill-formed. If the
11127 underlying type is not fixed, the type of each enumerator is
11128 the type of its initializing value.
11129
11130 If the underlying type is not fixed, it will be computed by
11131 finish_enum and we will reset the type of this enumerator. Of
11132 course, if we're processing a template, there may be no value. */
58595203
MM
11133 type = value ? TREE_TYPE (value) : NULL_TREE;
11134
11135 if (context && context == current_class_type)
11136 /* This enum declaration is local to the class. We need the full
8f17b5c5 11137 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
58595203
MM
11138 decl = build_lang_decl (CONST_DECL, name, type);
11139 else
11140 /* It's a global enum, or it's local to a function. (Note local to
e8bd800e 11141 a function could mean local to a class method. */
58595203 11142 decl = build_decl (CONST_DECL, name, type);
e8bd800e 11143
58595203 11144 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
6de9cd9a 11145 TREE_CONSTANT (decl) = 1;
6de9cd9a 11146 TREE_READONLY (decl) = 1;
58595203 11147 DECL_INITIAL (decl) = value;
e8bd800e 11148
58595203
MM
11149 if (context && context == current_class_type)
11150 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
7b6d72fc
MM
11151 on the TYPE_FIELDS list for `S'. (That's so that you can say
11152 things like `S::i' later.) */
58595203
MM
11153 finish_member_declaration (decl);
11154 else
9780c24f 11155 pushdecl (decl);
58595203
MM
11156
11157 /* Add this enumeration constant to the list for this type. */
11158 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
8d08fdba
MS
11159}
11160
adf2edec
DG
11161/* Look for an enumerator with the given NAME within the enumeration
11162 type ENUMTYPE. This routine is used primarily for qualified name
11163 lookup into an enumerator in C++0x, e.g.,
11164
11165 enum class Color { Red, Green, Blue };
11166
11167 Color color = Color::Red;
11168
11169 Returns the value corresponding to the enumerator, or
11170 NULL_TREE if no such enumerator was found. */
11171tree
11172lookup_enumerator (tree enumtype, tree name)
11173{
11174 tree e;
11175 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
11176
11177 e = purpose_member (name, TYPE_VALUES (enumtype));
11178 return e? TREE_VALUE (e) : NULL_TREE;
11179}
11180
8d08fdba 11181\f
a8f73d4b
MM
11182/* We're defining DECL. Make sure that it's type is OK. */
11183
11184static void
11f6b451 11185check_function_type (tree decl, tree current_function_parms)
a8f73d4b
MM
11186{
11187 tree fntype = TREE_TYPE (decl);
d0f062fb 11188 tree return_type = complete_type (TREE_TYPE (fntype));
a8f73d4b
MM
11189
11190 /* In a function definition, arg types must be complete. */
11191 require_complete_types_for_parms (current_function_parms);
11192
c9387915
GB
11193 if (dependent_type_p (return_type))
11194 return;
360f866c 11195 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
9e1e64ec 11196 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
a8f73d4b 11197 {
51b15ede 11198 tree args = TYPE_ARG_TYPES (fntype);
3db45ab5 11199
360f866c
JJ
11200 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
11201 error ("return type %q#T is incomplete", return_type);
11202 else
11203 error ("return type has Java class type %q#T", return_type);
a8f73d4b 11204
51b15ede 11205 /* Make it return void instead. */
a8f73d4b 11206 if (TREE_CODE (fntype) == METHOD_TYPE)
51b15ede
NS
11207 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
11208 void_type_node,
11209 TREE_CHAIN (args));
a8f73d4b 11210 else
51b15ede 11211 fntype = build_function_type (void_type_node, args);
68642fb6 11212 TREE_TYPE (decl)
a8f73d4b 11213 = build_exception_variant (fntype,
51b15ede 11214 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
a8f73d4b
MM
11215 }
11216 else
11217 abstract_virtuals_error (decl, TREE_TYPE (fntype));
11218}
11219
8d08fdba
MS
11220/* Create the FUNCTION_DECL for a function definition.
11221 DECLSPECS and DECLARATOR are the parts of the declaration;
11222 they describe the function's name and the type it returns,
11223 but twisted together in a fashion that parallels the syntax of C.
11224
a8f73d4b
MM
11225 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
11226 DECLARATOR is really the DECL for the function we are about to
11227 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
f444e36b 11228 indicating that the function is an inline defined in-class.
68642fb6 11229
8d08fdba
MS
11230 This function creates a binding context for the function body
11231 as well as setting up the FUNCTION_DECL in current_function_decl.
11232
8d08fdba
MS
11233 For C++, we must first check whether that datum makes any sense.
11234 For example, "class A local_a(1,2);" means that variable local_a
11235 is an aggregate of type A, which should have a constructor
72c4a4ca
GK
11236 applied to it with the argument list [1, 2].
11237
11238 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
11239 or may be a BLOCK if the function has been defined previously
11240 in this translation unit. On exit, DECL_INITIAL (decl1) will be
11241 error_mark_node if the function has never been defined, or
11242 a BLOCK if the function has been defined somewhere. */
8d08fdba 11243
058b15c1
MM
11244void
11245start_preparsed_function (tree decl1, tree attrs, int flags)
8d08fdba 11246{
8d08fdba
MS
11247 tree ctype = NULL_TREE;
11248 tree fntype;
11249 tree restype;
8d08fdba 11250 int doing_friend = 0;
e2500fed 11251 struct cp_binding_level *bl;
f444e36b 11252 tree current_function_parms;
3e3935a9 11253 struct c_fileinfo *finfo
c533e34d 11254 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
1ef0df47 11255 bool honor_interface;
8d08fdba 11256
8d08fdba 11257 /* Sanity check. */
50bc768d
NS
11258 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
11259 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
8d08fdba 11260
058b15c1
MM
11261 fntype = TREE_TYPE (decl1);
11262 if (TREE_CODE (fntype) == METHOD_TYPE)
11263 ctype = TYPE_METHOD_BASETYPE (fntype);
caf93cb0 11264
058b15c1
MM
11265 /* ISO C++ 11.4/5. A friend function defined in a class is in
11266 the (lexical) scope of the class in which it is defined. */
11267 if (!ctype && DECL_FRIEND_P (decl1))
8d08fdba 11268 {
058b15c1 11269 ctype = DECL_FRIEND_CONTEXT (decl1);
caf93cb0 11270
058b15c1
MM
11271 /* CTYPE could be null here if we're dealing with a template;
11272 for example, `inline friend float foo()' inside a template
11273 will have no CTYPE set. */
11274 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11275 ctype = NULL_TREE;
11276 else
11277 doing_friend = 1;
8d08fdba 11278 }
68642fb6 11279
97055d5c
AO
11280 if (DECL_DECLARED_INLINE_P (decl1)
11281 && lookup_attribute ("noinline", attrs))
dee15844 11282 warning (0, "inline function %q+D given attribute noinline", decl1);
97055d5c 11283
3a47c4e4
AO
11284 /* Handle gnu_inline attribute. */
11285 if (GNU_INLINE_P (decl1))
11286 {
11287 DECL_EXTERNAL (decl1) = 1;
11288 DECL_NOT_REALLY_EXTERN (decl1) = 0;
11289 DECL_INTERFACE_KNOWN (decl1) = 1;
12cdc4fa 11290 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
3a47c4e4
AO
11291 }
11292
5f6eeeb3
NS
11293 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
11294 /* This is a constructor, we must ensure that any default args
11295 introduced by this definition are propagated to the clones
11296 now. The clones are used directly in overload resolution. */
11297 adjust_clone_args (decl1);
11298
b35d4555
MM
11299 /* Sometimes we don't notice that a function is a static member, and
11300 build a METHOD_TYPE for it. Fix that up now. */
11301 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
11302 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
11303 {
3afb32a4 11304 revert_static_member_fn (decl1);
b35d4555
MM
11305 ctype = NULL_TREE;
11306 }
8d08fdba 11307
f181d4ae
MM
11308 /* Set up current_class_type, and enter the scope of the class, if
11309 appropriate. */
11310 if (ctype)
14d22dd6 11311 push_nested_class (ctype);
f181d4ae 11312 else if (DECL_STATIC_FUNCTION_P (decl1))
14d22dd6 11313 push_nested_class (DECL_CONTEXT (decl1));
f181d4ae
MM
11314
11315 /* Now that we have entered the scope of the class, we must restore
11316 the bindings for any template parameters surrounding DECL1, if it
11317 is an inline member template. (Order is important; consider the
11318 case where a template parameter has the same name as a field of
11319 the class.) It is not until after this point that
11320 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
a8f73d4b 11321 if (flags & SF_INCLASS_INLINE)
f181d4ae
MM
11322 maybe_begin_member_template_processing (decl1);
11323
56cb9733 11324 /* Effective C++ rule 15. */
9188c363 11325 if (warn_ecpp
596ea4e5 11326 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9188c363 11327 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
b323323f 11328 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
9188c363
MM
11329
11330 /* Make the init_value nonzero so pushdecl knows this is not tentative.
11331 error_mark_node is replaced below (in poplevel) with the BLOCK. */
b35d4555
MM
11332 if (!DECL_INITIAL (decl1))
11333 DECL_INITIAL (decl1) = error_mark_node;
9188c363 11334
9188c363
MM
11335 /* This function exists in static storage.
11336 (This does not mean `static' in the C sense!) */
11337 TREE_STATIC (decl1) = 1;
11338
11339 /* We must call push_template_decl after current_class_type is set
11340 up. (If we are processing inline definitions after exiting a
11341 class scope, current_class_type will be NULL_TREE until set above
11342 by push_nested_class.) */
11343 if (processing_template_decl)
11e97737
VR
11344 {
11345 /* FIXME: Handle error_mark_node more gracefully. */
11346 tree newdecl1 = push_template_decl (decl1);
11347 if (newdecl1 != error_mark_node)
0cbd7506 11348 decl1 = newdecl1;
11e97737 11349 }
9188c363 11350
f181d4ae 11351 /* We are now in the scope of the function being defined. */
8d08fdba 11352 current_function_decl = decl1;
f181d4ae 11353
5566b478
MS
11354 /* Save the parm names or decls from this function's declarator
11355 where store_parm_decls will find them. */
4546865e 11356 current_function_parms = DECL_ARGUMENTS (decl1);
8d08fdba 11357
a8f73d4b
MM
11358 /* Make sure the parameter and return types are reasonable. When
11359 you declare a function, these types can be incomplete, but they
11360 must be complete when you define the function. */
c9387915 11361 check_function_type (decl1, current_function_parms);
f181d4ae 11362
a8f73d4b
MM
11363 /* Build the return declaration for the function. */
11364 restype = TREE_TYPE (fntype);
e89a6075 11365 if (DECL_RESULT (decl1) == NULL_TREE)
a8f73d4b 11366 {
b785f485
RH
11367 tree resdecl;
11368
11369 resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
11370 DECL_ARTIFICIAL (resdecl) = 1;
11371 DECL_IGNORED_P (resdecl) = 1;
11372 DECL_RESULT (decl1) = resdecl;
11373
9804209d 11374 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
5566b478 11375 }
a8f73d4b 11376
a8f73d4b 11377 /* Let the user know we're compiling this function. */
ea11ca7e 11378 announce_function (decl1);
b7484fbe 11379
878cd289
MS
11380 /* Record the decl so that the function name is defined.
11381 If we already have a decl for this name, and it is a FUNCTION_DECL,
11382 use the old decl. */
a8f73d4b 11383 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
878cd289 11384 {
75650646 11385 /* A specialization is not used to guide overload resolution. */
18f5be99 11386 if (!DECL_FUNCTION_MEMBER_P (decl1)
caf93cb0 11387 && !(DECL_USE_TEMPLATE (decl1) &&
18f5be99 11388 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
b1a19c7c
MM
11389 {
11390 tree olddecl = pushdecl (decl1);
11391
11392 if (olddecl == error_mark_node)
11393 /* If something went wrong when registering the declaration,
11394 use DECL1; we have to have a FUNCTION_DECL to use when
11395 parsing the body of the function. */
11396 ;
11397 else
dfdec7a7
ILT
11398 {
11399 /* Otherwise, OLDDECL is either a previous declaration
11400 of the same function or DECL1 itself. */
11401
11402 if (warn_missing_declarations
11403 && olddecl == decl1
11404 && !DECL_MAIN_P (decl1)
11405 && TREE_PUBLIC (decl1)
11406 && !DECL_DECLARED_INLINE_P (decl1))
11407 {
11408 tree context;
11409
11410 /* Check whether DECL1 is in an anonymous
11411 namespace. */
11412 for (context = DECL_CONTEXT (decl1);
11413 context;
11414 context = DECL_CONTEXT (context))
11415 {
11416 if (TREE_CODE (context) == NAMESPACE_DECL
11417 && DECL_NAME (context) == NULL_TREE)
11418 break;
11419 }
11420
11421 if (context == NULL)
11422 warning (OPT_Wmissing_declarations,
11423 "no previous declaration for %q+D", decl1);
11424 }
11425
11426 decl1 = olddecl;
11427 }
b1a19c7c 11428 }
2c73f9f5 11429 else
b7698cf0 11430 {
a1c65f9f 11431 /* We need to set the DECL_CONTEXT. */
b7698cf0
JM
11432 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
11433 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
b7698cf0 11434 }
878cd289 11435 fntype = TREE_TYPE (decl1);
2ef06beb
MM
11436
11437 /* If #pragma weak applies, mark the decl appropriately now.
11438 The pragma only applies to global functions. Because
11439 determining whether or not the #pragma applies involves
11440 computing the mangled name for the declaration, we cannot
11441 apply the pragma until after we have merged this declaration
11442 with any previous declarations; if the original declaration
11443 has a linkage specification, that specification applies to
11444 the definition as well, and may affect the mangled name. */
11445 if (!DECL_CONTEXT (decl1))
11446 maybe_apply_pragma_weak (decl1);
878cd289 11447 }
5566b478 11448
72c4a4ca 11449 /* Reset this in case the call to pushdecl changed it. */
5566b478 11450 current_function_decl = decl1;
72c4a4ca
GK
11451
11452 gcc_assert (DECL_INITIAL (decl1));
11453
11454 /* This function may already have been parsed, in which case just
11455 return; our caller will skip over the body without parsing. */
11456 if (DECL_INITIAL (decl1) != error_mark_node)
11457 return;
11458
11459 /* Initialize RTL machinery. We cannot do this until
11460 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
11461 even when processing a template; this is how we get
11462 CFUN set up, and our per-function variables initialized.
11463 FIXME factor out the non-RTL stuff. */
11464 bl = current_binding_level;
182e0d71 11465 allocate_struct_function (decl1, processing_template_decl);
e8924938
PB
11466
11467 /* Initialize the language data structures. Whenever we start
11468 a new function, we destroy temporaries in the usual way. */
11469 cfun->language = GGC_CNEW (struct language_function);
11470 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
72c4a4ca
GK
11471 current_binding_level = bl;
11472
11473 /* Even though we're inside a function body, we still don't want to
11474 call expand_expr to calculate the size of a variable-sized array.
11475 We haven't necessarily assigned RTL to all variables yet, so it's
11476 not safe to try to expand expressions involving them. */
e3b5732b 11477 cfun->dont_save_pending_sizes_p = 1;
72c4a4ca
GK
11478
11479 /* Start the statement-tree, start the tree now. */
11480 DECL_SAVED_TREE (decl1) = push_stmt_list ();
878cd289 11481
78c120b5
MM
11482 /* If we are (erroneously) defining a function that we have already
11483 defined before, wipe out what we knew before. */
e2500fed
GK
11484 if (!DECL_PENDING_INLINE_P (decl1))
11485 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
b35d4555 11486
f444e36b 11487 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
b35d4555
MM
11488 {
11489 /* We know that this was set up by `grokclassfn'. We do not
11490 wait until `store_parm_decls', since evil parse errors may
11491 never get us to that point. Here we keep the consistency
11492 between `current_class_type' and `current_class_ptr'. */
11493 tree t = DECL_ARGUMENTS (decl1);
68642fb6 11494
50bc768d
NS
11495 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
11496 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
68642fb6
UD
11497
11498 cp_function_chain->x_current_class_ref
5ade1ed2 11499 = cp_build_indirect_ref (t, NULL, tf_warning_or_error);
b35d4555
MM
11500 cp_function_chain->x_current_class_ptr = t;
11501
018fc244
MM
11502 /* Constructors and destructors need to know whether they're "in
11503 charge" of initializing virtual base classes. */
e0fff4b3 11504 t = TREE_CHAIN (t);
454fa7a7 11505 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
e0fff4b3
JM
11506 {
11507 current_in_charge_parm = t;
11508 t = TREE_CHAIN (t);
11509 }
11510 if (DECL_HAS_VTT_PARM_P (decl1))
11511 {
8dc2b103 11512 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
e0fff4b3
JM
11513 current_vtt_parm = t;
11514 }
b35d4555
MM
11515 }
11516
1ef0df47
MM
11517 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
11518 /* Implicitly-defined methods (like the
11519 destructor for a class in which no destructor
11520 is explicitly declared) must not be defined
11521 until their definition is needed. So, we
11522 ignore interface specifications for
11523 compiler-generated functions. */
11524 && !DECL_ARTIFICIAL (decl1));
3db45ab5 11525
db5ae43f 11526 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 11527 {
4f1c5b7d 11528 tree ctx = decl_function_context (decl1);
86052cc3 11529
faae18ab
MS
11530 if (DECL_NOT_REALLY_EXTERN (decl1))
11531 DECL_EXTERNAL (decl1) = 0;
86052cc3 11532
79065db2 11533 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
86052cc3
JM
11534 && TREE_PUBLIC (ctx))
11535 /* This is a function in a local class in an extern inline
11536 function. */
11537 comdat_linkage (decl1);
faae18ab 11538 }
8d08fdba
MS
11539 /* If this function belongs to an interface, it is public.
11540 If it belongs to someone else's interface, it is also external.
1f901793 11541 This only affects inlines and template instantiations. */
1ef0df47 11542 else if (!finfo->interface_unknown && honor_interface)
8d08fdba 11543 {
caf93cb0 11544 if (DECL_DECLARED_INLINE_P (decl1)
79065db2 11545 || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 11546 || processing_template_decl)
1f901793
JM
11547 {
11548 DECL_EXTERNAL (decl1)
5d709b00 11549 = (finfo->interface_only
caf93cb0 11550 || (DECL_DECLARED_INLINE_P (decl1)
79065db2 11551 && ! flag_implement_inlines
9c73ec84 11552 && !DECL_VINDEX (decl1)));
1f901793
JM
11553
11554 /* For WIN32 we also want to put these in linkonce sections. */
11555 maybe_make_one_only (decl1);
11556 }
db5ae43f 11557 else
893de33c 11558 DECL_EXTERNAL (decl1) = 0;
db5ae43f 11559 DECL_INTERFACE_KNOWN (decl1) = 1;
4684cd27 11560 /* If this function is in an interface implemented in this file,
3b426391 11561 make sure that the back end knows to emit this function
4684cd27
MM
11562 here. */
11563 if (!DECL_EXTERNAL (decl1))
11564 mark_needed (decl1);
8d08fdba 11565 }
5d709b00 11566 else if (finfo->interface_unknown && finfo->interface_only
1ef0df47 11567 && honor_interface)
c16c47fb
JM
11568 {
11569 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
5d709b00
ZW
11570 interface, we will have both finfo->interface_unknown and
11571 finfo->interface_only set. In that case, we don't want to
11572 use the normal heuristics because someone will supply a
11573 #pragma implementation elsewhere, and deducing it here would
11574 produce a conflict. */
c16c47fb
JM
11575 comdat_linkage (decl1);
11576 DECL_EXTERNAL (decl1) = 0;
11577 DECL_INTERFACE_KNOWN (decl1) = 1;
11578 DECL_DEFER_OUTPUT (decl1) = 1;
11579 }
8d08fdba 11580 else
a0a33927
MS
11581 {
11582 /* This is a definition, not a reference.
3a47c4e4
AO
11583 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
11584 if (!GNU_INLINE_P (decl1))
11585 DECL_EXTERNAL (decl1) = 0;
faae18ab 11586
caf93cb0 11587 if ((DECL_DECLARED_INLINE_P (decl1)
79065db2 11588 || DECL_TEMPLATE_INSTANTIATION (decl1))
5566b478
MS
11589 && ! DECL_INTERFACE_KNOWN (decl1)
11590 /* Don't try to defer nested functions for now. */
4f1c5b7d 11591 && ! decl_function_context (decl1))
878cd289
MS
11592 DECL_DEFER_OUTPUT (decl1) = 1;
11593 else
893de33c 11594 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 11595 }
a9aedbc2 11596
0ed5edac
JM
11597 /* Determine the ELF visibility attribute for the function. We must not
11598 do this before calling "pushdecl", as we must allow "duplicate_decls"
11599 to merge any attributes appropriately. We also need to wait until
11600 linkage is set. */
11601 if (!DECL_CLONED_FUNCTION_P (decl1))
11602 determine_visibility (decl1);
11603
ac20c67a 11604 begin_scope (sk_function_parms, decl1);
8d08fdba 11605
5566b478
MS
11606 ++function_depth;
11607
44d10c10
PB
11608 if (DECL_DESTRUCTOR_P (decl1)
11609 || (DECL_CONSTRUCTOR_P (decl1)
11610 && targetm.cxx.cdtor_returns_this ()))
46e8c075 11611 {
44d10c10
PB
11612 cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
11613 DECL_CONTEXT (cdtor_label) = current_function_decl;
46e8c075 11614 }
8d08fdba 11615
0ba8a114 11616 start_fname_decls ();
caf93cb0 11617
f444e36b 11618 store_parm_decls (current_function_parms);
058b15c1
MM
11619}
11620
11621
11622/* Like start_preparsed_function, except that instead of a
11623 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
11624
11625 Returns 1 on success. If the DECLARATOR is not suitable for a function
11626 (it defines a datum instead), we return 0, which tells
11627 yyparse to report a parse error. */
11628
11629int
caf93cb0 11630start_function (cp_decl_specifier_seq *declspecs,
62d1db17 11631 const cp_declarator *declarator,
058b15c1
MM
11632 tree attrs)
11633{
11634 tree decl1;
11635
058b15c1
MM
11636 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
11637 /* If the declarator is not suitable for a function definition,
11638 cause a syntax error. */
11639 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
11640 return 0;
caf93cb0 11641
058b15c1 11642 if (DECL_MAIN_P (decl1))
2cfe82fe
ZW
11643 /* main must return int. grokfndecl should have corrected it
11644 (and issued a diagnostic) if the user got it wrong. */
11645 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
11646 integer_type_node));
058b15c1
MM
11647
11648 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
f444e36b 11649
8d08fdba
MS
11650 return 1;
11651}
11652\f
68d04c67
MM
11653/* Returns true iff an EH_SPEC_BLOCK should be created in the body of
11654 FN. */
11655
11656static bool
11657use_eh_spec_block (tree fn)
11658{
11659 return (flag_exceptions && flag_enforce_eh_specs
11660 && !processing_template_decl
11661 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
11662 /* We insert the EH_SPEC_BLOCK only in the original
11663 function; then, it is copied automatically to the
11664 clones. */
11665 && !DECL_CLONED_FUNCTION_P (fn)
11666 /* Implicitly-generated constructors and destructors have
11667 exception specifications. However, those specifications
11668 are the union of the possible exceptions specified by the
11669 constructors/destructors for bases and members, so no
11670 unallowed exception will ever reach this function. By
11671 not creating the EH_SPEC_BLOCK we save a little memory,
11672 and we avoid spurious warnings about unreachable
11673 code. */
11674 && !DECL_ARTIFICIAL (fn));
11675}
11676
8d08fdba
MS
11677/* Store the parameter declarations into the current function declaration.
11678 This is called after parsing the parameter declarations, before
11679 digesting the body of the function.
11680
11681 Also install to binding contour return value identifier, if any. */
11682
f444e36b 11683static void
11f6b451 11684store_parm_decls (tree current_function_parms)
8d08fdba 11685{
926ce8bd
KH
11686 tree fndecl = current_function_decl;
11687 tree parm;
8d08fdba 11688
8d08fdba
MS
11689 /* This is a chain of any other decls that came in among the parm
11690 declarations. If a parm is declared with enum {foo, bar} x;
11691 then CONST_DECLs for foo and bar are put here. */
11692 tree nonparms = NULL_TREE;
11693
b35d4555 11694 if (current_function_parms)
8d08fdba
MS
11695 {
11696 /* This case is when the function was defined with an ANSI prototype.
11697 The parms already have decls, so we need not do anything here
11698 except record them as in effect
11699 and complain if any redundant old-style parm decls were written. */
11700
b35d4555
MM
11701 tree specparms = current_function_parms;
11702 tree next;
11703
f444e36b 11704 /* Must clear this because it might contain TYPE_DECLs declared
b35d4555 11705 at class level. */
00e8de68 11706 current_binding_level->names = NULL;
8d08fdba 11707
f444e36b 11708 /* If we're doing semantic analysis, then we'll call pushdecl
b35d4555
MM
11709 for each of these. We must do them in reverse order so that
11710 they end in the correct forward order. */
f444e36b 11711 specparms = nreverse (specparms);
5566b478 11712
b35d4555 11713 for (parm = specparms; parm; parm = next)
8d08fdba
MS
11714 {
11715 next = TREE_CHAIN (parm);
11716 if (TREE_CODE (parm) == PARM_DECL)
11717 {
f444e36b
MM
11718 if (DECL_NAME (parm) == NULL_TREE
11719 || TREE_CODE (parm) != VOID_TYPE)
11720 pushdecl (parm);
11721 else
2d01edd7 11722 error ("parameter %qD declared void", parm);
8d08fdba
MS
11723 }
11724 else
11725 {
11726 /* If we find an enum constant or a type tag,
11727 put it aside for the moment. */
11728 TREE_CHAIN (parm) = NULL_TREE;
11729 nonparms = chainon (nonparms, parm);
11730 }
11731 }
11732
f444e36b
MM
11733 /* Get the decls in their original chain order and record in the
11734 function. This is all and only the PARM_DECLs that were
11735 pushed into scope by the loop above. */
11736 DECL_ARGUMENTS (fndecl) = getdecls ();
8d08fdba
MS
11737 }
11738 else
11739 DECL_ARGUMENTS (fndecl) = NULL_TREE;
11740
11741 /* Now store the final chain of decls for the arguments
11742 as the decl-chain of the current lexical scope.
11743 Put the enumerators in as well, at the front so that
11744 DECL_ARGUMENTS is not modified. */
00e8de68 11745 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
eb448459 11746
68d04c67
MM
11747 if (use_eh_spec_block (current_function_decl))
11748 current_eh_spec_block = begin_eh_spec_block ();
8d08fdba
MS
11749}
11750
8d08fdba 11751\f
59026e79
MM
11752/* We have finished doing semantic analysis on DECL, but have not yet
11753 generated RTL for its body. Save away our current state, so that
11754 when we want to generate RTL later we know what to do. */
11755
11756static void
11f6b451 11757save_function_data (tree decl)
59026e79 11758{
e2500fed 11759 struct language_function *f;
59026e79
MM
11760
11761 /* Save the language-specific per-function data so that we can
11762 get it back when we really expand this function. */
50bc768d 11763 gcc_assert (!DECL_PENDING_INLINE_P (decl));
68642fb6 11764
59026e79 11765 /* Make a copy. */
99dd239f 11766 f = GGC_NEW (struct language_function);
e2500fed 11767 memcpy (f, cp_function_chain, sizeof (struct language_function));
59026e79
MM
11768 DECL_SAVED_FUNCTION_DATA (decl) = f;
11769
11770 /* Clear out the bits we don't need. */
325c3691 11771 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
59026e79 11772 f->bindings = NULL;
8e4ce833 11773 f->x_local_names = NULL;
59026e79
MM
11774}
11775
cdd2559c 11776
44d10c10 11777/* Set the return value of the constructor (if present). */
efee38a9
MM
11778
11779static void
11f6b451 11780finish_constructor_body (void)
efee38a9 11781{
44d10c10
PB
11782 tree val;
11783 tree exprstmt;
11784
298b7d2b
AH
11785 if (targetm.cxx.cdtor_returns_this ()
11786 && (! TYPE_FOR_JAVA (current_class_type)))
44d10c10
PB
11787 {
11788 /* Any return from a constructor will end up here. */
11789 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
11790
11791 val = DECL_ARGUMENTS (current_function_decl);
f293ce4b
RS
11792 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
11793 DECL_RESULT (current_function_decl), val);
44d10c10
PB
11794 /* Return the address of the object. */
11795 exprstmt = build_stmt (RETURN_EXPR, val);
11796 add_stmt (exprstmt);
11797 }
efee38a9
MM
11798}
11799
cdd2559c
JM
11800/* Do all the processing for the beginning of a destructor; set up the
11801 vtable pointers and cleanups for bases and members. */
11802
11803static void
11f6b451 11804begin_destructor_body (void)
cdd2559c 11805{
cdd2559c
JM
11806 tree compound_stmt;
11807
0e686aa6
MM
11808 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
11809 issued an error message. We still want to try to process the
11810 body of the function, but initialize_vtbl_ptrs will crash if
11811 TYPE_BINFO is NULL. */
11812 if (COMPLETE_TYPE_P (current_class_type))
11813 {
11814 compound_stmt = begin_compound_stmt (0);
11815 /* Make all virtual function table pointers in non-virtual base
11816 classes point to CURRENT_CLASS_TYPE's virtual function
11817 tables. */
11818 initialize_vtbl_ptrs (current_class_ptr);
11819 finish_compound_stmt (compound_stmt);
3db45ab5 11820
0e686aa6
MM
11821 /* And insert cleanups for our bases and members so that they
11822 will be properly destroyed if we throw. */
11823 push_base_cleanups ();
11824 }
cdd2559c
JM
11825}
11826
ade3dc07
JM
11827/* At the end of every destructor we generate code to delete the object if
11828 necessary. Do that now. */
9bfadf57
MM
11829
11830static void
11f6b451 11831finish_destructor_body (void)
9bfadf57 11832{
9bfadf57
MM
11833 tree exprstmt;
11834
5633b37c
MM
11835 /* Any return from a destructor will end up here; that way all base
11836 and member cleanups will be run when the function returns. */
44d10c10 11837 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
5633b37c 11838
52682a1b
MM
11839 /* In a virtual destructor, we must call delete. */
11840 if (DECL_VIRTUAL_P (current_function_decl))
11841 {
11842 tree if_stmt;
fa72b064 11843 tree virtual_size = cxx_sizeof (current_class_type);
68642fb6 11844
52682a1b 11845 /* [class.dtor]
68642fb6 11846
ade3dc07
JM
11847 At the point of definition of a virtual destructor (including
11848 an implicit definition), non-placement operator delete shall
11849 be looked up in the scope of the destructor's class and if
11850 found shall be accessible and unambiguous. */
3db45ab5 11851 exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
63c9a190 11852 virtual_size,
3db45ab5
MS
11853 /*global_p=*/false,
11854 /*placement=*/NULL_TREE,
63c9a190 11855 /*alloc_fn=*/NULL_TREE);
298d6f60 11856
52682a1b 11857 if_stmt = begin_if_stmt ();
f293ce4b
RS
11858 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
11859 current_in_charge_parm,
11860 integer_one_node),
52682a1b
MM
11861 if_stmt);
11862 finish_expr_stmt (exprstmt);
11863 finish_then_clause (if_stmt);
325c3691 11864 finish_if_stmt (if_stmt);
52682a1b 11865 }
44d10c10
PB
11866
11867 if (targetm.cxx.cdtor_returns_this ())
11868 {
11869 tree val;
11870
11871 val = DECL_ARGUMENTS (current_function_decl);
f293ce4b
RS
11872 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
11873 DECL_RESULT (current_function_decl), val);
44d10c10
PB
11874 /* Return the address of the object. */
11875 exprstmt = build_stmt (RETURN_EXPR, val);
11876 add_stmt (exprstmt);
11877 }
ade3dc07 11878}
9bfadf57 11879
ade3dc07
JM
11880/* Do the necessary processing for the beginning of a function body, which
11881 in this case includes member-initializers, but not the catch clauses of
11882 a function-try-block. Currently, this means opening a binding level
86ad3aa9 11883 for the member-initializers (in a ctor) and member cleanups (in a dtor). */
ade3dc07
JM
11884
11885tree
11f6b451 11886begin_function_body (void)
ade3dc07 11887{
cdd2559c
JM
11888 tree stmt;
11889
86ad3aa9
JM
11890 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
11891 return NULL_TREE;
11892
b5856475
JM
11893 if (processing_template_decl)
11894 /* Do nothing now. */;
11895 else
11896 /* Always keep the BLOCK node associated with the outermost pair of
11897 curly braces of a function. These are needed for correct
11898 operation of dwarfout.c. */
ac20c67a 11899 keep_next_level (true);
b5856475 11900
325c3691 11901 stmt = begin_compound_stmt (BCS_FN_BODY);
cdd2559c
JM
11902
11903 if (processing_template_decl)
11904 /* Do nothing now. */;
cdd2559c
JM
11905 else if (DECL_DESTRUCTOR_P (current_function_decl))
11906 begin_destructor_body ();
11907
ade3dc07 11908 return stmt;
9bfadf57
MM
11909}
11910
ade3dc07
JM
11911/* Do the processing for the end of a function body. Currently, this means
11912 closing out the cleanups for fully-constructed bases and members, and in
11913 the case of the destructor, deleting the object if desired. Again, this
11914 is only meaningful for [cd]tors, since they are the only functions where
11915 there is a significant distinction between the main body and any
11916 function catch clauses. Handling, say, main() return semantics here
11917 would be wrong, as flowing off the end of a function catch clause for
11918 main() would also need to return 0. */
11919
11920void
11f6b451 11921finish_function_body (tree compstmt)
ade3dc07 11922{
86ad3aa9
JM
11923 if (compstmt == NULL_TREE)
11924 return;
3db45ab5 11925
5633b37c 11926 /* Close the block. */
7a3397c7 11927 finish_compound_stmt (compstmt);
ade3dc07
JM
11928
11929 if (processing_template_decl)
11930 /* Do nothing now. */;
11931 else if (DECL_CONSTRUCTOR_P (current_function_decl))
11932 finish_constructor_body ();
11933 else if (DECL_DESTRUCTOR_P (current_function_decl))
11934 finish_destructor_body ();
caf93cb0 11935}
ade3dc07 11936
86ad3aa9
JM
11937/* Given a function, returns the BLOCK corresponding to the outermost level
11938 of curly braces, skipping the artificial block created for constructor
11939 initializers. */
11940
a68ab351 11941tree
86ad3aa9
JM
11942outer_curly_brace_block (tree fndecl)
11943{
11944 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
11945 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
11946 /* Skip the artificial function body block. */
11947 block = BLOCK_SUBBLOCKS (block);
11948 return block;
11949}
11950
8d08fdba
MS
11951/* Finish up a function declaration and compile that function
11952 all the way to assembler language output. The free the storage
11953 for the function definition.
11954
68642fb6 11955 FLAGS is a bitwise or of the following values:
f181d4ae
MM
11956 2 - INCLASS_INLINE
11957 We just finished processing the body of an in-class inline
11958 function definition. (This processing will have taken place
87e3dbc9 11959 after the class definition is complete.) */
8d08fdba 11960
4d6abc1c 11961tree
11f6b451 11962finish_function (int flags)
8d08fdba 11963{
926ce8bd 11964 tree fndecl = current_function_decl;
8d08fdba 11965 tree fntype, ctype = NULL_TREE;
f181d4ae 11966 int inclass_inline = (flags & 2) != 0;
87e3dbc9 11967 int nested;
8d08fdba
MS
11968
11969 /* When we get some parse errors, we can end up without a
11970 current_function_decl, so cope. */
11971 if (fndecl == NULL_TREE)
4d6abc1c 11972 return error_mark_node;
8d08fdba 11973
9aad8f83
MA
11974 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
11975 && DECL_VIRTUAL_P (fndecl)
11976 && !processing_template_decl)
11977 {
11978 tree fnclass = DECL_CONTEXT (fndecl);
11979 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
11980 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
11981 }
11982
87e3dbc9 11983 nested = function_depth > 1;
8d08fdba
MS
11984 fntype = TREE_TYPE (fndecl);
11985
9bfadf57
MM
11986 /* TREE_READONLY (fndecl) = 1;
11987 This caused &foo to be of type ptr-to-const-function
11988 which then got a warning when stored in a ptr-to-function variable. */
8d08fdba 11989
50bc768d 11990 gcc_assert (building_stmt_tree ());
72c4a4ca
GK
11991 /* The current function is being defined, so its DECL_INITIAL should
11992 be set, and unless there's a multiple definition, it should be
11993 error_mark_node. */
11994 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
caf93cb0 11995
db9b2174
MM
11996 /* For a cloned function, we've already got all the code we need;
11997 there's no need to add any extra bits. */
f444e36b 11998 if (!DECL_CLONED_FUNCTION_P (fndecl))
8d08fdba 11999 {
ade3dc07 12000 if (DECL_MAIN_P (current_function_decl))
efee38a9 12001 {
43e05e45
SB
12002 tree stmt;
12003
12004 /* Make it so that `main' always returns 0 by default (or
12005 1 for VMS). */
08c7ae5a 12006#if VMS_TARGET
43e05e45 12007 stmt = finish_return_stmt (integer_one_node);
efee38a9 12008#else
43e05e45 12009 stmt = finish_return_stmt (integer_zero_node);
efee38a9 12010#endif
43e05e45
SB
12011 /* Hack. We don't want the middle-end to warn that this
12012 return is unreachable, so put the statement on the
12013 special line 0. */
5ffeb913
TT
12014 {
12015 location_t linezero = linemap_line_start (line_table, 0, 1);
12016 SET_EXPR_LOCATION (stmt, linezero);
12017 }
efee38a9 12018 }
87e3dbc9 12019
68d04c67 12020 if (use_eh_spec_block (current_function_decl))
52a11cbf
RH
12021 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
12022 (TREE_TYPE (current_function_decl)),
12023 current_eh_spec_block);
5566b478 12024 }
68642fb6 12025
558475f0 12026 /* If we're saving up tree structure, tie off the function now. */
325c3691
RH
12027 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
12028
12029 finish_fname_decls ();
8d2733ca 12030
b2dd096b
MM
12031 /* If this function can't throw any exceptions, remember that. */
12032 if (!processing_template_decl
12033 && !cp_function_chain->can_throw
be0436d7 12034 && !flag_non_call_exceptions
56fd65c7 12035 && !DECL_REPLACEABLE_P (fndecl))
b2dd096b
MM
12036 TREE_NOTHROW (fndecl) = 1;
12037
8d08fdba
MS
12038 /* This must come after expand_function_end because cleanups might
12039 have declarations (from inline functions) that need to go into
12040 this function's blocks. */
caf93cb0 12041
7437519c
ZW
12042 /* If the current binding level isn't the outermost binding level
12043 for this function, either there is a bug, or we have experienced
12044 syntax errors and the statement tree is malformed. */
a7e8c268 12045 if (current_binding_level->kind != sk_function_parms)
7437519c
ZW
12046 {
12047 /* Make sure we have already experienced errors. */
8dc2b103 12048 gcc_assert (errorcount);
7437519c
ZW
12049
12050 /* Throw away the broken statement tree and extra binding
0cbd7506 12051 levels. */
5882f0f3 12052 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
7437519c 12053
a7e8c268 12054 while (current_binding_level->kind != sk_function_parms)
7437519c 12055 {
a7e8c268 12056 if (current_binding_level->kind == sk_class)
7437519c
ZW
12057 pop_nested_class ();
12058 else
12059 poplevel (0, 0, 0);
12060 }
12061 }
f444e36b 12062 poplevel (1, 0, 1);
8d08fdba 12063
4985cde3
RH
12064 /* Statements should always be full-expressions at the outermost set
12065 of curly braces for a function. */
50bc768d 12066 gcc_assert (stmts_are_full_exprs_p ());
4985cde3 12067
6de9cd9a 12068 /* Set up the named return value optimization, if we can. Candidate
59fe9274 12069 variables are selected in check_return_expr. */
07b2f2fd
JM
12070 if (current_function_return_value)
12071 {
12072 tree r = current_function_return_value;
35e939ae
JM
12073 tree outer;
12074
07b2f2fd 12075 if (r != error_mark_node
35e939ae
JM
12076 /* This is only worth doing for fns that return in memory--and
12077 simpler, since we don't have to worry about promoted modes. */
61f71b34 12078 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
35e939ae
JM
12079 /* Only allow this for variables declared in the outer scope of
12080 the function so we know that their lifetime always ends with a
12081 return; see g++.dg/opt/nrv6.C. We could be more flexible if
12082 we were to do this optimization in tree-ssa. */
86ad3aa9 12083 && (outer = outer_curly_brace_block (fndecl))
325c3691 12084 && chain_member (r, BLOCK_VARS (outer)))
6de9cd9a
DN
12085 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
12086
12087 current_function_return_value = NULL_TREE;
07b2f2fd
JM
12088 }
12089
a8f73d4b 12090 /* Remember that we were in class scope. */
db5ae43f 12091 if (current_class_name)
a8f73d4b 12092 ctype = current_class_type;
db5ae43f 12093
1caa11d3
MM
12094 /* Must mark the RESULT_DECL as being in this function. */
12095 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12096
12097 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12098 to the FUNCTION_DECL node itself. */
12099 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12100
59026e79 12101 /* Save away current state, if appropriate. */
f444e36b 12102 if (!processing_template_decl)
59026e79
MM
12103 save_function_data (fndecl);
12104
efe49da0 12105 /* Complain if there's just no return statement. */
46cfb101 12106 if (warn_return_type
efe49da0 12107 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
c1b83cc9 12108 && !dependent_type_p (TREE_TYPE (fntype))
57d5032b 12109 && !current_function_returns_value && !current_function_returns_null
efe49da0
JM
12110 /* Don't complain if we abort or throw. */
12111 && !current_function_returns_abnormally
55e99d52 12112 && !DECL_NAME (DECL_RESULT (fndecl))
4847609e 12113 && !TREE_NO_WARNING (fndecl)
44d10c10
PB
12114 /* Structor return values (if any) are set by the compiler. */
12115 && !DECL_CONSTRUCTOR_P (fndecl)
12116 && !DECL_DESTRUCTOR_P (fndecl))
4847609e
JH
12117 {
12118 warning (OPT_Wreturn_type,
12119 "no return statement in function returning non-void");
12120 TREE_NO_WARNING (fndecl) = 1;
12121 }
4985cde3 12122
6de9cd9a
DN
12123 /* Store the end of the function, so that we get good line number
12124 info for the epilogue. */
12125 cfun->function_end_locus = input_location;
12126
12127 /* Genericize before inlining. */
12128 if (!processing_template_decl)
12129 {
37e6d6fe 12130 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
5a508662 12131 cp_genericize (fndecl);
37e6d6fe
JH
12132 /* Clear out the bits we don't need. */
12133 f->x_current_class_ptr = NULL;
12134 f->x_current_class_ref = NULL;
12135 f->x_eh_spec_block = NULL;
12136 f->x_in_charge_parm = NULL;
12137 f->x_vtt_parm = NULL;
12138 f->x_return_value = NULL;
12139 f->bindings = NULL;
10827cd8 12140 f->extern_decl_map = NULL;
6de9cd9a
DN
12141
12142 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
726a989a 12143 c_warn_unused_result (gimple_body (fndecl));
6de9cd9a 12144 }
37e6d6fe
JH
12145 /* Clear out the bits we don't need. */
12146 local_names = NULL;
6de9cd9a
DN
12147
12148 /* We're leaving the context of this function, so zap cfun. It's still in
12149 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
db2960f4 12150 set_cfun (NULL);
c1f927e8 12151 current_function_decl = NULL;
a8f73d4b 12152
27631dae 12153 /* If this is an in-class inline definition, we may have to pop the
a8f73d4b
MM
12154 bindings for the template parameters that we added in
12155 maybe_begin_member_template_processing when start_function was
12156 called. */
12157 if (inclass_inline)
12158 maybe_end_member_template_processing ();
12159
12160 /* Leave the scope of the class. */
12161 if (ctype)
12162 pop_nested_class ();
5566b478
MS
12163
12164 --function_depth;
8d08fdba 12165
4d6abc1c 12166 /* Clean up. */
28cbf42c 12167 if (! nested)
1f8f4a0b
MM
12168 /* Let the error reporting routines know that we're outside a
12169 function. For a nested function, this value is used in
b03e38e1 12170 cxx_pop_function_context and then reset via pop_function_context. */
1f8f4a0b 12171 current_function_decl = NULL_TREE;
4d6abc1c
MM
12172
12173 return fndecl;
8d08fdba
MS
12174}
12175\f
12176/* Create the FUNCTION_DECL for a function definition.
8d08fdba
MS
12177 DECLSPECS and DECLARATOR are the parts of the declaration;
12178 they describe the return type and the name of the function,
12179 but twisted together in a fashion that parallels the syntax of C.
12180
12181 This function creates a binding context for the function body
12182 as well as setting up the FUNCTION_DECL in current_function_decl.
12183
12184 Returns a FUNCTION_DECL on success.
12185
12186 If the DECLARATOR is not suitable for a function (it defines a datum
12187 instead), we return 0, which tells yyparse to report a parse error.
12188
12189 May return void_type_node indicating that this method is actually
12190 a friend. See grokfield for more details.
12191
12192 Came here with a `.pushlevel' .
12193
12194 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
12195 CHANGES TO CODE IN `grokfield'. */
e92cc029 12196
8d08fdba 12197tree
caf93cb0 12198start_method (cp_decl_specifier_seq *declspecs,
0cbd7506 12199 const cp_declarator *declarator, tree attrlist)
8d08fdba 12200{
c11b6f21 12201 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
91d231cb 12202 &attrlist);
8d08fdba 12203
a723baf1
MM
12204 if (fndecl == error_mark_node)
12205 return error_mark_node;
12206
12207 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
12208 {
12209 error ("invalid member function declaration");
12210 return error_mark_node;
12211 }
8d08fdba 12212
195a5def
IR
12213 if (attrlist)
12214 cplus_decl_attributes (&fndecl, attrlist, 0);
12215
8d08fdba 12216 /* Pass friends other than inline friend functions back. */
a1774733 12217 if (fndecl == void_type_node)
8d08fdba
MS
12218 return fndecl;
12219
8d08fdba
MS
12220 if (DECL_IN_AGGR_P (fndecl))
12221 {
58ec3cc5 12222 if (DECL_CONTEXT (fndecl)
6d69fe27 12223 && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
2d01edd7 12224 error ("%qD is already defined in class %qT", fndecl,
58ec3cc5 12225 DECL_CONTEXT (fndecl));
8ca4bf25 12226 return error_mark_node;
8d08fdba
MS
12227 }
12228
f3400fe2
JM
12229 check_template_shadow (fndecl);
12230
79065db2 12231 DECL_DECLARED_INLINE_P (fndecl) = 1;
8d08fdba 12232
36a117a5
MM
12233 /* We process method specializations in finish_struct_1. */
12234 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
4b0d3cbe
MM
12235 {
12236 fndecl = push_template_decl (fndecl);
12237 if (fndecl == error_mark_node)
12238 return fndecl;
12239 }
a0a33927 12240
8d08fdba
MS
12241 if (! DECL_FRIEND_P (fndecl))
12242 {
8d08fdba
MS
12243 if (TREE_CHAIN (fndecl))
12244 {
12245 fndecl = copy_node (fndecl);
12246 TREE_CHAIN (fndecl) = NULL_TREE;
12247 }
8d08fdba
MS
12248 }
12249
d174af6c 12250 finish_decl (fndecl, NULL_TREE, NULL_TREE);
8d08fdba 12251
f4f206f4 12252 /* Make a place for the parms. */
ac20c67a 12253 begin_scope (sk_function_parms, fndecl);
68642fb6 12254
8d08fdba
MS
12255 DECL_IN_AGGR_P (fndecl) = 1;
12256 return fndecl;
12257}
12258
12259/* Go through the motions of finishing a function definition.
12260 We don't compile this method until after the whole class has
12261 been processed.
12262
12263 FINISH_METHOD must return something that looks as though it
12264 came from GROKFIELD (since we are defining a method, after all).
12265
12266 This is called after parsing the body of the function definition.
12267 STMTS is the chain of statements that makes up the function body.
12268
12269 DECL is the ..._DECL that `start_method' provided. */
12270
12271tree
11f6b451 12272finish_method (tree decl)
8d08fdba 12273{
926ce8bd 12274 tree fndecl = decl;
8d08fdba 12275 tree old_initial;
8d08fdba 12276
926ce8bd 12277 tree link;
8d08fdba 12278
a1774733 12279 if (decl == void_type_node)
8d08fdba
MS
12280 return decl;
12281
12282 old_initial = DECL_INITIAL (fndecl);
12283
12284 /* Undo the level for the parms (from start_method).
12285 This is like poplevel, but it causes nothing to be
12286 saved. Saving information here confuses symbol-table
12287 output routines. Besides, this information will
12288 be correctly output when this method is actually
12289 compiled. */
12290
12291 /* Clear out the meanings of the local variables of this level;
12292 also record in each decl which block it belongs to. */
12293
12294 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
12295 {
12296 if (DECL_NAME (link) != NULL_TREE)
d8f8dca1 12297 pop_binding (DECL_NAME (link), link);
50bc768d 12298 gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
8d08fdba
MS
12299 DECL_CONTEXT (link) = NULL_TREE;
12300 }
12301
8d08fdba
MS
12302 poplevel (0, 0, 0);
12303
12304 DECL_INITIAL (fndecl) = old_initial;
12305
12306 /* We used to check if the context of FNDECL was different from
12307 current_class_type as another way to get inside here. This didn't work
12308 for String.cc in libg++. */
12309 if (DECL_FRIEND_P (fndecl))
12310 {
d4e6fecb 12311 VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
585b44d3 12312 fndecl);
8d08fdba
MS
12313 decl = void_type_node;
12314 }
12315
12316 return decl;
12317}
12318\f
0154eaa8
MM
12319
12320/* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
12321 we can lay it out later, when and if its type becomes complete. */
8d08fdba
MS
12322
12323void
11f6b451 12324maybe_register_incomplete_var (tree var)
8d08fdba 12325{
50bc768d 12326 gcc_assert (TREE_CODE (var) == VAR_DECL);
8d08fdba 12327
0154eaa8 12328 /* Keep track of variables with incomplete types. */
caf93cb0 12329 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
0154eaa8 12330 && DECL_EXTERNAL (var))
70adf8a9 12331 {
0154eaa8 12332 tree inner_type = TREE_TYPE (var);
caf93cb0 12333
0154eaa8
MM
12334 while (TREE_CODE (inner_type) == ARRAY_TYPE)
12335 inner_type = TREE_TYPE (inner_type);
12336 inner_type = TYPE_MAIN_VARIANT (inner_type);
caf93cb0 12337
0154eaa8
MM
12338 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
12339 /* RTTI TD entries are created while defining the type_info. */
12340 || (TYPE_LANG_SPECIFIC (inner_type)
12341 && TYPE_BEING_DEFINED (inner_type)))
12342 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
70adf8a9 12343 }
0154eaa8 12344}
70adf8a9 12345
0154eaa8 12346/* Called when a class type (given by TYPE) is defined. If there are
39a13be5 12347 any existing VAR_DECLs whose type has been completed by this
0154eaa8 12348 declaration, update them now. */
70adf8a9 12349
0154eaa8 12350void
11f6b451 12351complete_vars (tree type)
0154eaa8
MM
12352{
12353 tree *list = &incomplete_vars;
12354
50bc768d 12355 gcc_assert (CLASS_TYPE_P (type));
caf93cb0 12356 while (*list)
0154eaa8
MM
12357 {
12358 if (same_type_p (type, TREE_PURPOSE (*list)))
70adf8a9 12359 {
0154eaa8 12360 tree var = TREE_VALUE (*list);
67935995 12361 tree type = TREE_TYPE (var);
c740732f
MM
12362 /* Complete the type of the variable. The VAR_DECL itself
12363 will be laid out in expand_expr. */
67935995
MM
12364 complete_type (type);
12365 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
0154eaa8
MM
12366 /* Remove this entry from the list. */
12367 *list = TREE_CHAIN (*list);
f30432d7
MS
12368 }
12369 else
0154eaa8 12370 list = &TREE_CHAIN (*list);
f30432d7 12371 }
7fb213d8
GB
12372
12373 /* Check for pending declarations which may have abstract type. */
12374 complete_type_check_abstract (type);
8d08fdba
MS
12375}
12376
5c113154
MM
12377/* If DECL is of a type which needs a cleanup, build and return an
12378 expression to perform that cleanup here. Return NULL_TREE if no
12379 cleanup need be done. */
e92cc029 12380
86f45d2c 12381tree
11f6b451 12382cxx_maybe_build_cleanup (tree decl)
8d08fdba 12383{
5c113154
MM
12384 tree type;
12385 tree attr;
12386 tree cleanup;
12387
12388 /* Assume no cleanup is required. */
12389 cleanup = NULL_TREE;
86f45d2c 12390
5c113154
MM
12391 if (error_operand_p (decl))
12392 return cleanup;
12393
12394 /* Handle "__attribute__((cleanup))". We run the cleanup function
12395 before the destructor since the destructor is what actually
12396 terminates the lifetime of the object. */
12397 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
12398 if (attr)
12399 {
12400 tree id;
12401 tree fn;
12402 tree arg;
12403
12404 /* Get the name specified by the user for the cleanup function. */
12405 id = TREE_VALUE (TREE_VALUE (attr));
12406 /* Look up the name to find the cleanup function to call. It is
12407 important to use lookup_name here because that is what is
12408 used in c-common.c:handle_cleanup_attribute when performing
12409 initial checks on the attribute. Note that those checks
12410 include ensuring that the function found is not an overloaded
12411 function, or an object with an overloaded call operator,
39a13be5 12412 etc.; we can rely on the fact that the function found is an
5c113154
MM
12413 ordinary FUNCTION_DECL. */
12414 fn = lookup_name (id);
12415 arg = build_address (decl);
12416 mark_used (decl);
5ade1ed2
DG
12417 cleanup = cp_build_function_call (fn, build_tree_list (NULL_TREE,
12418 arg),
12419 tf_warning_or_error);
5c113154
MM
12420 }
12421 /* Handle ordinary C++ destructors. */
12422 type = TREE_TYPE (decl);
12423 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8d08fdba 12424 {
80048418 12425 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
5775a06a
NS
12426 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
12427 && CLASSTYPE_VBASECLASSES (type));
5c113154
MM
12428 tree addr;
12429 tree call;
8d08fdba 12430
8d08fdba 12431 if (TREE_CODE (type) == ARRAY_TYPE)
5c113154 12432 addr = decl;
8d08fdba 12433 else
5818c8e4 12434 addr = build_address (decl);
8d08fdba
MS
12435
12436 /* Optimize for space over speed here. */
5775a06a 12437 if (!has_vbases || flag_expensive_optimizations)
8d08fdba
MS
12438 flags |= LOOKUP_NONVIRTUAL;
12439
5c113154 12440 call = build_delete (TREE_TYPE (addr), addr,
86f45d2c 12441 sfk_complete_destructor, flags, 0);
5c113154 12442 if (cleanup)
525521b6 12443 cleanup = build_compound_expr (cleanup, call);
5c113154
MM
12444 else
12445 cleanup = call;
8d08fdba 12446 }
5c113154
MM
12447
12448 return cleanup;
8d08fdba
MS
12449}
12450\f
558475f0 12451/* When a stmt has been parsed, this function is called. */
8d08fdba
MS
12452
12453void
11f6b451 12454finish_stmt (void)
8d08fdba 12455{
8d08fdba
MS
12456}
12457
3afb32a4
MM
12458/* DECL was originally constructed as a non-static member function,
12459 but turned out to be static. Update it accordingly. */
700f8a87 12460
8857f91e 12461void
11f6b451 12462revert_static_member_fn (tree decl)
8d08fdba 12463{
700f8a87 12464 tree tmp;
3afb32a4
MM
12465 tree function = TREE_TYPE (decl);
12466 tree args = TYPE_ARG_TYPES (function);
8d08fdba 12467
89d684bb 12468 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
91063b51 12469 != TYPE_UNQUALIFIED)
c4f73174 12470 error ("static member function %q#D declared with type qualifiers", decl);
f30432d7 12471
700f8a87
MS
12472 args = TREE_CHAIN (args);
12473 tmp = build_function_type (TREE_TYPE (function), args);
89d684bb 12474 tmp = build_qualified_type (tmp, cp_type_quals (function));
f30432d7 12475 tmp = build_exception_variant (tmp,
8d08fdba 12476 TYPE_RAISES_EXCEPTIONS (function));
3afb32a4
MM
12477 TREE_TYPE (decl) = tmp;
12478 if (DECL_ARGUMENTS (decl))
12479 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
12480 DECL_STATIC_FUNCTION_P (decl) = 1;
8d08fdba 12481}
a4443a08 12482
e2500fed
GK
12483/* Return which tree structure is used by T, or TS_CP_GENERIC if T is
12484 one of the language-independent trees. */
4519c0a8 12485
e2500fed 12486enum cp_tree_node_structure_enum
11f6b451 12487cp_tree_node_structure (union lang_tree_node * t)
4519c0a8 12488{
e2500fed 12489 switch (TREE_CODE (&t->generic))
4519c0a8 12490 {
a723baf1 12491 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
e2500fed 12492 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
e2500fed
GK
12493 case OVERLOAD: return TS_CP_OVERLOAD;
12494 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
12495 case PTRMEM_CST: return TS_CP_PTRMEM;
0cbd7506 12496 case BASELINK: return TS_CP_BASELINK;
54e67af0 12497 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
5d80a306 12498 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
cb68ec50 12499 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
e2500fed 12500 default: return TS_CP_GENERIC;
4519c0a8
MM
12501 }
12502}
5fd8e536 12503
eaa7c03f
JM
12504/* Build the void_list_node (void_type_node having been created). */
12505tree
11f6b451 12506build_void_list_node (void)
eaa7c03f
JM
12507{
12508 tree t = build_tree_list (NULL_TREE, void_type_node);
eaa7c03f
JM
12509 return t;
12510}
12511
6de9cd9a 12512bool
11f6b451 12513cp_missing_noreturn_ok_p (tree decl)
d363e7bf
AJ
12514{
12515 /* A missing noreturn is ok for the `main' function. */
92643fea 12516 return DECL_MAIN_P (decl);
d363e7bf 12517}
e2500fed 12518
c18a5b6c
MM
12519/* Return the COMDAT group into which DECL should be placed. */
12520
12521const char *
12522cxx_comdat_group (tree decl)
12523{
12524 tree name;
12525
12526 /* Virtual tables, construction virtual tables, and virtual table
12527 tables all go in a single COMDAT group, named after the primary
12528 virtual table. */
12529 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
12530 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
12531 /* For all other DECLs, the COMDAT group is the mangled name of the
12532 declaration itself. */
12533 else
5591e5f9
JJ
12534 {
12535 while (DECL_THUNK_P (decl))
12536 {
12537 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
12538 into the same section as the target function. In that case
12539 we must return target's name. */
12540 tree target = THUNK_TARGET (decl);
12541 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
12542 && DECL_SECTION_NAME (target) != NULL
12543 && DECL_ONE_ONLY (target))
12544 decl = target;
12545 else
12546 break;
12547 }
12548 name = DECL_ASSEMBLER_NAME (decl);
12549 }
c18a5b6c
MM
12550
12551 return IDENTIFIER_POINTER (name);
12552}
12553
e2500fed 12554#include "gt-cp-decl.h"
This page took 8.894451 seconds and 5 git commands to generate.