]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/decl.c
gcc/java/
[thirdparty/gcc.git] / gcc / cp / decl.c
CommitLineData
af86cc06 1/* Process declarations and variables for C++ compiler.
20c01ba9 2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
2ec31349 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
68d6de5b 4 Free Software Foundation, Inc.
997d68fe 5 Contributed by Michael Tiemann (tiemann@cygnus.com)
471086d6 6
510c8531 7This file is part of GCC.
471086d6 8
510c8531 9GCC is free software; you can redistribute it and/or modify
471086d6 10it under the terms of the GNU General Public License as published by
aa139c3f 11the Free Software Foundation; either version 3, or (at your option)
471086d6 12any later version.
13
510c8531 14GCC is distributed in the hope that it will be useful,
471086d6 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
aa139c3f 20along with GCC; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>. */
471086d6 22
23
510c8531 24/* Process declarations and symbol lookup for C++ front end.
471086d6 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
471086d6 31#include "config.h"
b3ef7553 32#include "system.h"
805e22b2 33#include "coretypes.h"
34#include "tm.h"
471086d6 35#include "tree.h"
36#include "rtl.h"
f7c44134 37#include "expr.h"
471086d6 38#include "flags.h"
39#include "cp-tree.h"
1e3b023c 40#include "tree-inline.h"
471086d6 41#include "decl.h"
71ccdfff 42#include "output.h"
43#include "except.h"
2a4e40b0 44#include "toplev.h"
1f3233d1 45#include "hashtab.h"
aed0bd19 46#include "tm_p.h"
a767736d 47#include "target.h"
5f3cead1 48#include "c-common.h"
5626f4cd 49#include "c-pragma.h"
6cd31fa5 50#include "diagnostic.h"
82cae756 51#include "intl.h"
1f3233d1 52#include "debug.h"
851fe51a 53#include "timevar.h"
4ee9c684 54#include "tree-flow.h"
02a689ae 55#include "pointer-set.h"
9227b6fc 56#include "plugin.h"
471086d6 57
34eac767 58static tree grokparms (tree parmlist, tree *);
1b72315d 59static const char *redeclaration_error_message (tree, tree);
60
1b72315d 61static int decl_jump_unsafe (tree);
1b72315d 62static void require_complete_types_for_parms (tree);
63static int ambi_op_p (enum tree_code);
64static int unary_op_p (enum tree_code);
1b72315d 65static void push_local_name (tree);
d7d79557 66static tree grok_reference_init (tree, tree, tree, tree *);
491e04ef 67static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
6493c502 68 int, int, tree);
1b72315d 69static void record_unknown_type (tree, const char *);
24470055 70static tree builtin_function_1 (tree, tree, bool);
1b72315d 71static tree build_library_fn_1 (tree, enum tree_code, tree);
72static int member_function_or_else (tree, tree, enum overload_flags);
73static void bad_specifiers (tree, const char *, int, int, int, int,
74 int);
1b72315d 75static void check_for_uninitialized_const_var (tree);
76static hashval_t typename_hash (const void *);
77static int typename_compare (const void *, const void *);
1b72315d 78static tree local_variable_p_walkfn (tree *, int *, void *);
1b72315d 79static tree record_builtin_java_type (const char *, int);
e1316b34 80static const char *tag_name (enum tag_types);
1fadf2c8 81static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
1b72315d 82static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
1b72315d 83static void maybe_deduce_size_from_array_init (tree, tree);
84static void layout_var_decl (tree);
d7d79557 85static tree check_initializer (tree, tree, int, tree *);
1b72315d 86static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
87static void save_function_data (tree);
88static void check_function_type (tree, tree);
1b72315d 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);
e60a6f7b 97static tree cp_make_fname_decl (location_t, tree, int);
1b72315d 98static void initialize_predefined_identifiers (void);
491e04ef 99static tree check_special_function_return_type
1b72315d 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);
2437a99c 104static void initialize_local_var (tree, tree);
105static void expand_static_init (tree, tree);
106static tree next_initializable_field (tree);
471086d6 107
72040e7e 108/* The following symbols are subsumed in the cp_global_trees array, and
980877d7 109 listed here individually for documentation purposes.
471086d6 110
72040e7e 111 C++ extensions
112 tree wchar_decl_node;
c4a8ac95 113
72040e7e 114 tree vtable_entry_type;
115 tree delta_type_node;
72040e7e 116 tree __t_desc_type_node;
471086d6 117
38253b86 118 tree class_type_node;
72040e7e 119 tree unknown_type_node;
471086d6 120
72040e7e 121 Array type `vtable_entry_type[]'
471086d6 122
72040e7e 123 tree vtbl_type_node;
124 tree vtbl_ptr_type_node;
471086d6 125
13d8774b 126 Namespaces,
471086d6 127
72040e7e 128 tree std_node;
13d8774b 129 tree abi_node;
471086d6 130
72040e7e 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.
471086d6 134
72040e7e 135 tree abort_fndecl;
471086d6 136
72040e7e 137 The FUNCTION_DECL for the default `::operator delete'.
bb0726a1 138
72040e7e 139 tree global_delete_fndecl;
471086d6 140
72040e7e 141 Used by RTTI
442fd60a 142 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
074ab442 143 tree tinfo_var_id; */
471086d6 144
72040e7e 145tree cp_global_trees[CPTI_MAX];
471086d6 146
8417823c 147/* Indicates that there is a type value in some namespace, although
72040e7e 148 that is not necessarily in scope at the moment. */
8417823c 149
836495aa 150tree global_type_node;
8417823c 151
7bfd46d1 152/* The node that holds the "name" of the global scope. */
836495aa 153tree global_scope_name;
7bfd46d1 154
e6393a02 155#define local_names cp_function_chain->x_local_names
156
471086d6 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
471086d6 163/* -- end of C++ */
164
775e7cc0 165/* A node for the integer constants 2, and 3. */
2739960c 166
775e7cc0 167tree integer_two_node, integer_three_node;
471086d6 168
8487df40 169/* Used only for jumps to as-yet undefined labels, since jumps to
170 defined labels can have their validity checked immediately. */
171
fb1e4f4a 172struct GTY(()) named_label_use_entry {
8487df40 173 struct named_label_use_entry *next;
174 /* The binding level to which this entry is *currently* attached.
175 This is initially the binding level in which the goto appeared,
176 but is modified as scopes are closed. */
177 struct cp_binding_level *binding_level;
178 /* The head of the names list that was current when the goto appeared,
179 or the inner scope popped. These are the decls that will *not* be
180 skipped when jumping to the label. */
181 tree names_in_scope;
182 /* The location of the goto, for error reporting. */
183 location_t o_goto_locus;
184 /* True if an OpenMP structured block scope has been closed since
185 the goto appeared. This means that the branch from the label will
186 illegally exit an OpenMP scope. */
187 bool in_omp_scope;
188};
189
c48d6aec 190/* A list of all LABEL_DECLs in the function that have names. Here so
191 we can clear out their names' definitions at the end of the
192 function, and so we can check the validity of jumps to these labels. */
193
fb1e4f4a 194struct GTY(()) named_label_entry {
8487df40 195 /* The decl itself. */
196 tree label_decl;
197
198 /* The binding level to which the label is *currently* attached.
199 This is initially set to the binding level in which the label
200 is defined, but is modified as scopes are closed. */
1f3233d1 201 struct cp_binding_level *binding_level;
074ab442 202 /* The head of the names list that was current when the label was
8487df40 203 defined, or the inner scope popped. These are the decls that will
204 be skipped when jumping to the label. */
c48d6aec 205 tree names_in_scope;
8487df40 206 /* A tree list of all decls from all binding levels that would be
207 crossed by a backward branch to the label. */
c48d6aec 208 tree bad_decls;
8487df40 209
210 /* A list of uses of the label, before the label is defined. */
211 struct named_label_use_entry *uses;
212
213 /* The following bits are set after the label is defined, and are
214 updated as scopes are popped. They indicate that a backward jump
b4f2a576 215 to the label will illegally enter a scope of the given flavor. */
8487df40 216 bool in_try_scope;
217 bool in_catch_scope;
218 bool in_omp_scope;
c48d6aec 219};
471086d6 220
1e463950 221#define named_labels cp_function_chain->x_named_labels
471086d6 222\f
3563027c 223/* The number of function bodies which we are currently processing.
224 (Zero if we are at namespace scope, one inside the body of a
225 function, two inside the body of a function in a local class, etc.) */
226int function_depth;
88da234d 227
038849b3 228/* To avoid unwanted recursion, finish_function defers all mark_used calls
229 encountered during its execution until it finishes. */
230bool defer_mark_used_calls;
231VEC(tree, gc) *deferred_mark_used_calls;
232
88da234d 233/* States indicating how grokdeclarator() should handle declspecs marked
234 with __attribute__((deprecated)). An object declared as
235 __attribute__((deprecated)) suppresses warnings of uses of other
236 deprecated items. */
34eac767 237enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
88da234d 238
471086d6 239\f
242fc35c 240/* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
241 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
242 time the VAR_DECL was declared, the type was incomplete. */
243
1f3233d1 244static GTY(()) tree incomplete_vars;
471086d6 245\f
3467e461 246/* Returns the kind of template specialization we are currently
247 processing, given that it's declaration contained N_CLASS_SCOPES
248 explicit scope qualifications. */
249
250tmpl_spec_kind
1b72315d 251current_tmpl_spec_kind (int n_class_scopes)
3467e461 252{
253 int n_template_parm_scopes = 0;
254 int seen_specialization_p = 0;
255 int innermost_specialization_p = 0;
1f3233d1 256 struct cp_binding_level *b;
3467e461 257
258 /* Scan through the template parameter scopes. */
491e04ef 259 for (b = current_binding_level;
260 b->kind == sk_template_parms;
37b9a732 261 b = b->level_chain)
3467e461 262 {
263 /* If we see a specialization scope inside a parameter scope,
264 then something is wrong. That corresponds to a declaration
265 like:
266
267 template <class T> template <> ...
268
6c0cc2cd 269 which is always invalid since [temp.expl.spec] forbids the
3467e461 270 specialization of a class member template if the enclosing
271 class templates are not explicitly specialized as well. */
37b9a732 272 if (b->explicit_spec_p)
3467e461 273 {
274 if (n_template_parm_scopes == 0)
275 innermost_specialization_p = 1;
276 else
277 seen_specialization_p = 1;
278 }
279 else if (seen_specialization_p == 1)
280 return tsk_invalid_member_spec;
281
282 ++n_template_parm_scopes;
283 }
284
285 /* Handle explicit instantiations. */
286 if (processing_explicit_instantiation)
287 {
288 if (n_template_parm_scopes != 0)
289 /* We've seen a template parameter list during an explicit
290 instantiation. For example:
291
292 template <class T> template void f(int);
293
294 This is erroneous. */
295 return tsk_invalid_expl_inst;
296 else
297 return tsk_expl_inst;
298 }
299
300 if (n_template_parm_scopes < n_class_scopes)
301 /* We've not seen enough template headers to match all the
302 specialized classes present. For example:
303
653e5405 304 template <class T> void R<T>::S<T>::f(int);
3467e461 305
6c0cc2cd 306 This is invalid; there needs to be one set of template
3467e461 307 parameters for each class. */
308 return tsk_insufficient_parms;
309 else if (n_template_parm_scopes == n_class_scopes)
310 /* We're processing a non-template declaration (even though it may
311 be a member of a template class.) For example:
312
653e5405 313 template <class T> void S<T>::f(int);
3467e461 314
08cc44e7 315 The `class T' matches the `S<T>', leaving no template headers
3467e461 316 corresponding to the `f'. */
317 return tsk_none;
318 else if (n_template_parm_scopes > n_class_scopes + 1)
319 /* We've got too many template headers. For example:
320
653e5405 321 template <> template <class T> void f (T);
3467e461 322
323 There need to be more enclosing classes. */
324 return tsk_excessive_parms;
325 else
326 /* This must be a template. It's of the form:
327
653e5405 328 template <class T> template <class U> void S<T>::f(U);
3467e461 329
330 This is a specialization if the innermost level was a
331 specialization; otherwise it's just a definition of the
332 template. */
333 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
471086d6 334}
335
3467e461 336/* Exit the current scope. */
337
338void
1b72315d 339finish_scope (void)
3467e461 340{
341 poplevel (0, 0, 0);
342}
343
2d46e540 344/* When a label goes out of scope, check to see if that label was used
345 in a valid manner, and issue any appropriate warnings or errors. */
346
347static void
1b72315d 348pop_label (tree label, tree old_value)
2d46e540 349{
37b9a732 350 if (!processing_template_decl)
2d46e540 351 {
149a6627 352 if (DECL_INITIAL (label) == NULL_TREE)
353 {
92ddaf90 354 location_t location;
355
3cf8b391 356 error ("label %q+D used but not defined", label);
357f7efa 357 location = input_location; /* FIXME want (input_filename, (line)0) */
149a6627 358 /* Avoid crashing later. */
92ddaf90 359 define_label (location, DECL_NAME (label));
149a6627 360 }
92fccaaa 361 else
362 warn_for_unused_label (label);
2d46e540 363 }
2d46e540 364
c48d6aec 365 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
2d46e540 366}
367
9594b69d 368/* At the end of a function, all labels declared within the function
980877d7 369 go out of scope. BLOCK is the top-level block for the
2d46e540 370 function. */
371
8487df40 372static int
373pop_labels_1 (void **slot, void *data)
374{
375 struct named_label_entry *ent = (struct named_label_entry *) *slot;
376 tree block = (tree) data;
377
378 pop_label (ent->label_decl, NULL_TREE);
379
380 /* Put the labels into the "variables" of the top-level block,
381 so debugger can see them. */
382 TREE_CHAIN (ent->label_decl) = BLOCK_VARS (block);
383 BLOCK_VARS (block) = ent->label_decl;
384
385 htab_clear_slot (named_labels, slot);
386
387 return 1;
388}
389
2d46e540 390static void
1b72315d 391pop_labels (tree block)
2d46e540 392{
8487df40 393 if (named_labels)
2d46e540 394 {
8487df40 395 htab_traverse (named_labels, pop_labels_1, block);
396 named_labels = NULL;
2d46e540 397 }
8487df40 398}
399
400/* At the end of a block with local labels, restore the outer definition. */
2d46e540 401
8487df40 402static void
403pop_local_label (tree label, tree old_value)
404{
405 struct named_label_entry dummy;
406 void **slot;
407
408 pop_label (label, old_value);
409
410 dummy.label_decl = label;
411 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
412 htab_clear_slot (named_labels, slot);
2d46e540 413}
414
abf1c5d5 415/* The following two routines are used to interface to Objective-C++.
416 The binding level is purposely treated as an opaque type. */
417
418void *
419objc_get_current_scope (void)
420{
421 return current_binding_level;
422}
423
424/* The following routine is used by the NeXT-style SJLJ exceptions;
425 variables get marked 'volatile' so as to not be clobbered by
ed904873 426 _setjmp()/_longjmp() calls. All variables in the current scope,
427 as well as parent scopes up to (but not including) ENCLOSING_BLK
428 shall be thusly marked. */
abf1c5d5 429
430void
431objc_mark_locals_volatile (void *enclosing_blk)
432{
433 struct cp_binding_level *scope;
434
435 for (scope = current_binding_level;
7a4e126b 436 scope && scope != enclosing_blk;
abf1c5d5 437 scope = scope->level_chain)
438 {
439 tree decl;
440
441 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
aa796005 442 objc_volatilize_decl (decl);
7a4e126b 443
444 /* Do not climb up past the current function. */
445 if (scope->kind == sk_function_parms)
446 break;
abf1c5d5 447 }
448}
449
8487df40 450/* Update data for defined and undefined labels when leaving a scope. */
451
452static int
453poplevel_named_label_1 (void **slot, void *data)
454{
455 struct named_label_entry *ent = (struct named_label_entry *) *slot;
456 struct cp_binding_level *bl = (struct cp_binding_level *) data;
457 struct cp_binding_level *obl = bl->level_chain;
458
459 if (ent->binding_level == bl)
460 {
461 tree decl;
462
463 for (decl = ent->names_in_scope; decl; decl = TREE_CHAIN (decl))
464 if (decl_jump_unsafe (decl))
465 ent->bad_decls = tree_cons (NULL, decl, ent->bad_decls);
466
467 ent->binding_level = obl;
468 ent->names_in_scope = obl->names;
469 switch (bl->kind)
470 {
471 case sk_try:
472 ent->in_try_scope = true;
473 break;
474 case sk_catch:
475 ent->in_catch_scope = true;
476 break;
477 case sk_omp:
478 ent->in_omp_scope = true;
479 break;
480 default:
481 break;
482 }
483 }
484 else if (ent->uses)
485 {
486 struct named_label_use_entry *use;
487
488 for (use = ent->uses; use ; use = use->next)
489 if (use->binding_level == bl)
490 {
491 use->binding_level = obl;
492 use->names_in_scope = obl->names;
493 if (bl->kind == sk_omp)
494 use->in_omp_scope = true;
495 }
496 }
497
498 return 1;
499}
500
471086d6 501/* Exit a binding level.
502 Pop the level off, and restore the state of the identifier-decl mappings
503 that were in effect when this level was entered.
504
505 If KEEP == 1, this level had explicit declarations, so
506 and create a "block" (a BLOCK node) for the level
507 to record its declarations and subblocks for symbol table output.
508
471086d6 509 If FUNCTIONBODY is nonzero, this level is the body of a function,
510 so create a block as if KEEP were set and also clear out all
511 label names.
512
513 If REVERSE is nonzero, reverse the order of decls before putting
514 them into the BLOCK. */
515
516tree
1b72315d 517poplevel (int keep, int reverse, int functionbody)
471086d6 518{
cd16867a 519 tree link;
471086d6 520 /* The chain of decls was accumulated in reverse order.
521 Put it into forward order, just for cleanliness. */
522 tree decls;
523 int tmp = functionbody;
e0e489c4 524 int real_functionbody;
e0e489c4 525 tree subblocks;
2363ef00 526 tree block;
471086d6 527 tree decl;
53137e6a 528 int leaving_for_scope;
e880f232 529 scope_kind kind;
53137e6a 530
851fe51a 531 timevar_push (TV_NAME_LOOKUP);
2363ef00 532 restart:
533
534 block = NULL_TREE;
e0e489c4 535
b4df430b 536 gcc_assert (current_binding_level->kind != sk_class);
8fc54128 537
e880f232 538 real_functionbody = (current_binding_level->kind == sk_cleanup
e0e489c4 539 ? ((functionbody = 0), tmp) : functionbody);
e0e489c4 540 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
541
b4df430b 542 gcc_assert (!VEC_length(cp_class_binding,
543 current_binding_level->class_shadowed));
471086d6 544
ef3eb7cc 545 /* We used to use KEEP == 2 to indicate that the new block should go
546 at the beginning of the list of blocks at this binding level,
547 rather than the end. This hack is no longer used. */
b4df430b 548 gcc_assert (keep == 0 || keep == 1);
ef3eb7cc 549
e880f232 550 if (current_binding_level->keep)
471086d6 551 keep = 1;
552
c48d6aec 553 /* Any uses of undefined labels, and any defined labels, now operate
554 under constraints of next binding contour. */
8487df40 555 if (cfun && !functionbody && named_labels)
556 htab_traverse (named_labels, poplevel_named_label_1,
557 current_binding_level);
c48d6aec 558
471086d6 559 /* Get the decls in the order they were written.
560 Usually current_binding_level->names is in reverse order.
561 But parameter decls were previously put in forward order. */
562
563 if (reverse)
564 current_binding_level->names
565 = decls = nreverse (current_binding_level->names);
566 else
567 decls = current_binding_level->names;
568
471086d6 569 /* If there were any declarations or structure tags in that level,
570 or if this level is a function body,
571 create a BLOCK to record them for the life of this function. */
471086d6 572 block = NULL_TREE;
6528331d 573 if (keep == 1 || functionbody)
471086d6 574 block = make_node (BLOCK);
575 if (block != NULL_TREE)
576 {
6528331d 577 BLOCK_VARS (block) = decls;
578 BLOCK_SUBBLOCKS (block) = subblocks;
471086d6 579 }
580
581 /* In each subblock, record that this is its superior. */
471086d6 582 if (keep >= 0)
93110716 583 for (link = subblocks; link; link = BLOCK_CHAIN (link))
471086d6 584 BLOCK_SUPERCONTEXT (link) = block;
585
53137e6a 586 /* We still support the old for-scope rules, whereby the variables
587 in a for-init statement were in scope after the for-statement
6e9029b4 588 ended. We only use the new rules if flag_new_for_scope is
53137e6a 589 nonzero. */
980877d7 590 leaving_for_scope
37b9a732 591 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
53137e6a 592
491e04ef 593 /* Before we remove the declarations first check for unused variables. */
594 if (warn_unused_variable
595 && !processing_template_decl)
596 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
597 if (TREE_CODE (decl) == VAR_DECL
598 && ! TREE_USED (decl)
599 && ! DECL_IN_SYSTEM_HEADER (decl)
600 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
ced7c954 601 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
491e04ef 602
53137e6a 603 /* Remove declarations for all the DECLs in this level. */
604 for (link = decls; link; link = TREE_CHAIN (link))
605 {
7108eaab 606 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
653e5405 607 && DECL_NAME (link))
53137e6a 608 {
d09ae6d5 609 tree name = DECL_NAME (link);
610 cxx_binding *ob;
53137e6a 611 tree ns_binding;
612
d09ae6d5 613 ob = outer_binding (name,
614 IDENTIFIER_BINDING (name),
615 /*class_p=*/true);
616 if (!ob)
617 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
ac63fdff 618 else
619 ns_binding = NULL_TREE;
620
d09ae6d5 621 if (ob && ob->scope == current_binding_level->level_chain)
53137e6a 622 /* We have something like:
980877d7 623
653e5405 624 int i;
625 for (int i; ;);
980877d7 626
53137e6a 627 and we are leaving the `for' scope. There's no reason to
628 keep the binding of the inner `i' in this case. */
d09ae6d5 629 pop_binding (name, link);
630 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
76608a37 631 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
53137e6a 632 /* Here, we have something like:
633
634 typedef int I;
635
636 void f () {
637 for (int I; ;);
638 }
639
640 We must pop the for-scope binding so we know what's a
641 type and what isn't. */
d09ae6d5 642 pop_binding (name, link);
e4ce2dc4 643 else
e4ce2dc4 644 {
53137e6a 645 /* Mark this VAR_DECL as dead so that we can tell we left it
646 there only for backward compatibility. */
647 DECL_DEAD_FOR_LOCAL (link) = 1;
980877d7 648
b8afbea5 649 /* Keep track of what should have happened when we
53137e6a 650 popped the binding. */
d09ae6d5 651 if (ob && ob->value)
5ded8c6f 652 {
653 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
654 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
655 }
53137e6a 656
657 /* Add it to the list of dead variables in the next
658 outermost binding to that we can remove these when we
659 leave that binding. */
660 current_binding_level->level_chain->dead_vars_from_for
661 = tree_cons (NULL_TREE, link,
662 current_binding_level->level_chain->
663 dead_vars_from_for);
664
771cf831 665 /* Although we don't pop the cxx_binding, we do clear
76608a37 666 its SCOPE since the scope is going away now. */
491e04ef 667 IDENTIFIER_BINDING (name)->scope
d09ae6d5 668 = current_binding_level->level_chain;
e4ce2dc4 669 }
de9554eb 670 }
980877d7 671 else
0a4a126e 672 {
092b1d6f 673 tree name;
9031d10b 674
53137e6a 675 /* Remove the binding. */
2da051b5 676 decl = link;
491e04ef 677
2da051b5 678 if (TREE_CODE (decl) == TREE_LIST)
679 decl = TREE_VALUE (decl);
092b1d6f 680 name = decl;
9031d10b 681
092b1d6f 682 if (TREE_CODE (name) == OVERLOAD)
683 name = OVL_FUNCTION (name);
491e04ef 684
092b1d6f 685 gcc_assert (DECL_P (name));
686 pop_binding (DECL_NAME (name), decl);
471086d6 687 }
53137e6a 688 }
471086d6 689
53137e6a 690 /* Remove declarations for any `for' variables from inner scopes
691 that we kept around. */
692 for (link = current_binding_level->dead_vars_from_for;
693 link; link = TREE_CHAIN (link))
2b77484d 694 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
de9554eb 695
53137e6a 696 /* Restore the IDENTIFIER_TYPE_VALUEs. */
697 for (link = current_binding_level->type_shadowed;
698 link; link = TREE_CHAIN (link))
699 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
2d46e540 700
701 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
702 for (link = current_binding_level->shadowed_labels;
980877d7 703 link;
2d46e540 704 link = TREE_CHAIN (link))
8487df40 705 pop_local_label (TREE_VALUE (link), TREE_PURPOSE (link));
2d46e540 706
53137e6a 707 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
708 list if a `using' declaration put them there. The debugging
a17c2a3a 709 back ends won't understand OVERLOAD, so we remove them here.
53137e6a 710 Because the BLOCK_VARS are (temporarily) shared with
711 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
712 popped all the bindings. */
713 if (block)
714 {
715 tree* d;
0a4a126e 716
02e19191 717 for (d = &BLOCK_VARS (block); *d; )
718 {
719 if (TREE_CODE (*d) == TREE_LIST)
720 *d = TREE_CHAIN (*d);
721 else
722 d = &TREE_CHAIN (*d);
723 }
0a4a126e 724 }
471086d6 725
726 /* If the level being exited is the top level of a function,
727 check over all the labels. */
471086d6 728 if (functionbody)
729 {
2d46e540 730 /* Since this is the top level block of a function, the vars are
731 the function's parameters. Don't leave them in the BLOCK
732 because they are found in the FUNCTION_DECL instead. */
471086d6 733 BLOCK_VARS (block) = 0;
2d46e540 734 pop_labels (block);
471086d6 735 }
736
e880f232 737 kind = current_binding_level->kind;
2363ef00 738 if (kind == sk_cleanup)
739 {
740 tree stmt;
741
742 /* If this is a temporary binding created for a cleanup, then we'll
743 have pushed a statement list level. Pop that, create a new
744 BIND_EXPR for the block, and insert it into the stream. */
745 stmt = pop_stmt_list (current_binding_level->statement_list);
e60a6f7b 746 stmt = c_build_bind_expr (input_location, block, stmt);
2363ef00 747 add_stmt (stmt);
748 }
471086d6 749
e2b8a7ee 750 leave_scope ();
471086d6 751 if (functionbody)
ddb7a3b0 752 {
753 /* The current function is being defined, so its DECL_INITIAL
754 should be error_mark_node. */
755 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
756 DECL_INITIAL (current_function_decl) = block;
757 }
471086d6 758 else if (block)
6528331d 759 current_binding_level->blocks
760 = chainon (current_binding_level->blocks, block);
761
471086d6 762 /* If we did not make a block for the level just exited,
763 any blocks made for inner levels
764 (since they cannot be recorded as subblocks in that level)
765 must be carried forward so they will later become subblocks
766 of something else. */
767 else if (subblocks)
ef3eb7cc 768 current_binding_level->blocks
769 = chainon (current_binding_level->blocks, subblocks);
471086d6 770
1ec2510f 771 /* Each and every BLOCK node created here in `poplevel' is important
772 (e.g. for proper debugging information) so if we created one
773 earlier, mark it as "used". */
774 if (block)
775 TREE_USED (block) = 1;
776
2363ef00 777 /* All temporary bindings created for cleanups are popped silently. */
e880f232 778 if (kind == sk_cleanup)
2363ef00 779 goto restart;
471086d6 780
851fe51a 781 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
471086d6 782}
783
cec1f6a6 784/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
785 itself, calling F for each. The DATA is passed to F as well. */
786
836495aa 787static int
607a5d68 788walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
836495aa 789{
790 int result = 0;
607a5d68 791 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
471086d6 792
607a5d68 793 result |= (*f) (name_space, data);
471086d6 794
836495aa 795 for (; current; current = TREE_CHAIN (current))
796 result |= walk_namespaces_r (current, f, data);
a35129cf 797
836495aa 798 return result;
e857e9c7 799}
800
836495aa 801/* Walk all the namespaces, calling F for each. The DATA is passed to
802 F as well. */
803
804int
805walk_namespaces (walk_namespaces_fn f, void* data)
e857e9c7 806{
836495aa 807 return walk_namespaces_r (global_namespace, f, data);
471086d6 808}
809
836495aa 810/* Call wrapup_globals_declarations for the globals in NAMESPACE. If
811 DATA is non-NULL, this is the last time we will call
812 wrapup_global_declarations for this NAMESPACE. */
63e8563c 813
836495aa 814int
607a5d68 815wrapup_globals_for_namespace (tree name_space, void* data)
63e8563c 816{
607a5d68 817 struct cp_binding_level *level = NAMESPACE_LEVEL (name_space);
1ae02380 818 VEC(tree,gc) *statics = level->static_decls;
819 tree *vec = VEC_address (tree, statics);
820 int len = VEC_length (tree, statics);
836495aa 821 int last_time = (data != 0);
980877d7 822
836495aa 823 if (last_time)
63e8563c 824 {
836495aa 825 check_global_declarations (vec, len);
c131e678 826 emit_debug_global_declarations (vec, len);
836495aa 827 return 0;
63e8563c 828 }
829
836495aa 830 /* Write out any globals that need to be output. */
831 return wrapup_global_declarations (vec, len);
63e8563c 832}
833
836495aa 834\f
70a658bd 835/* In C++, you don't have to write `struct S' to refer to `S'; you
836 can just use `S'. We accomplish this by creating a TYPE_DECL as
837 if the user had written `typedef struct S S'. Create and return
838 the TYPE_DECL for TYPE. */
839
840tree
1b72315d 841create_implicit_typedef (tree name, tree type)
70a658bd 842{
843 tree decl;
844
e60a6f7b 845 decl = build_decl (input_location, TYPE_DECL, name, type);
ecdd3d84 846 DECL_ARTIFICIAL (decl) = 1;
70a658bd 847 /* There are other implicit type declarations, like the one *within*
848 a class that allows you to write `S::S'. We must distinguish
849 amongst these. */
850 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
851 TYPE_NAME (type) = decl;
852
853 return decl;
854}
855
e6393a02 856/* Remember a local name for name-mangling purposes. */
857
858static void
1b72315d 859push_local_name (tree decl)
e6393a02 860{
861 size_t i, nelts;
862 tree t, name;
863
851fe51a 864 timevar_push (TV_NAME_LOOKUP);
e6393a02 865
866 name = DECL_NAME (decl);
867
f5b3a903 868 nelts = VEC_length (tree, local_names);
e6393a02 869 for (i = 0; i < nelts; i++)
870 {
f5b3a903 871 t = VEC_index (tree, local_names, i);
e6393a02 872 if (DECL_NAME (t) == name)
873 {
874 if (!DECL_LANG_SPECIFIC (decl))
875 retrofit_lang_decl (decl);
1f3233d1 876 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
e6393a02 877 if (DECL_LANG_SPECIFIC (t))
878 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
879 else
880 DECL_DISCRIMINATOR (decl) = 1;
881
f5b3a903 882 VEC_replace (tree, local_names, i, decl);
4fa0b096 883 timevar_pop (TV_NAME_LOOKUP);
884 return;
e6393a02 885 }
886 }
887
f5b3a903 888 VEC_safe_push (tree, gc, local_names, decl);
851fe51a 889 timevar_pop (TV_NAME_LOOKUP);
e6393a02 890}
471086d6 891\f
892/* Subroutine of duplicate_decls: return truthvalue of whether
893 or not types of these decls match.
894
895 For C++, we must compare the parameter list so that `int' can match
896 `int&' in a parameter position, but `int&' is not confused with
897 `const int&'. */
96624a9e 898
a74e8896 899int
1b72315d 900decls_match (tree newdecl, tree olddecl)
471086d6 901{
902 int types_match;
903
42085533 904 if (newdecl == olddecl)
905 return 1;
906
5b35cb67 907 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
908 /* If the two DECLs are not even the same kind of thing, we're not
909 interested in their types. */
910 return 0;
911
912 if (TREE_CODE (newdecl) == FUNCTION_DECL)
471086d6 913 {
914 tree f1 = TREE_TYPE (newdecl);
915 tree f2 = TREE_TYPE (olddecl);
916 tree p1 = TYPE_ARG_TYPES (f1);
917 tree p2 = TYPE_ARG_TYPES (f2);
918
9ba4048d 919 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
a2697ab6 920 && ! (DECL_EXTERN_C_P (newdecl)
921 && DECL_EXTERN_C_P (olddecl)))
510e8b9c 922 return 0;
923
471086d6 924 if (TREE_CODE (f1) != TREE_CODE (f2))
653e5405 925 return 0;
471086d6 926
daf9ff67 927 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
0543e7a9 928 {
0f497990 929 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
930 && (DECL_BUILT_IN (olddecl)
931#ifndef NO_IMPLICIT_EXTERN_C
653e5405 932 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
933 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
0f497990 934#endif
935 ))
e581f478 936 {
937 types_match = self_promoting_args_p (p1);
938 if (p1 == void_list_node)
939 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
940 }
0f497990 941#ifndef NO_IMPLICIT_EXTERN_C
942 else if (p1 == NULL_TREE
943 && (DECL_EXTERN_C_P (olddecl)
653e5405 944 && DECL_IN_SYSTEM_HEADER (olddecl)
945 && !DECL_CLASS_SCOPE_P (olddecl))
0f497990 946 && (DECL_EXTERN_C_P (newdecl)
653e5405 947 && DECL_IN_SYSTEM_HEADER (newdecl)
948 && !DECL_CLASS_SCOPE_P (newdecl)))
e581f478 949 {
950 types_match = self_promoting_args_p (p2);
951 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
952 }
0f497990 953#endif
0543e7a9 954 else
3e04bd45 955 types_match = compparms (p1, p2);
0543e7a9 956 }
471086d6 957 else
958 types_match = 0;
959 }
5b35cb67 960 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
ac9386a0 961 {
f9b9bf39 962 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
963 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
964 return 0;
965
c0b419db 966 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
967 DECL_TEMPLATE_PARMS (olddecl)))
968 return 0;
969
f3110581 970 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
c0b419db 971 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
972 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
f3110581 973 else
974 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
975 DECL_TEMPLATE_RESULT (newdecl));
ac9386a0 976 }
471086d6 977 else
978 {
364ab5fb 979 /* Need to check scope for variable declaration (VAR_DECL).
980 For typedef (TYPE_DECL), scope is ignored. */
981 if (TREE_CODE (newdecl) == VAR_DECL
bcb76c70 982 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
983 /* [dcl.link]
984 Two declarations for an object with C language linkage
985 with the same name (ignoring the namespace that qualify
986 it) that appear in different namespace scopes refer to
987 the same object. */
988 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
364ab5fb 989 return 0;
990
471086d6 991 if (TREE_TYPE (newdecl) == error_mark_node)
992 types_match = TREE_TYPE (olddecl) == error_mark_node;
993 else if (TREE_TYPE (olddecl) == NULL_TREE)
994 types_match = TREE_TYPE (newdecl) == NULL_TREE;
ddb9bca7 995 else if (TREE_TYPE (newdecl) == NULL_TREE)
996 types_match = 0;
471086d6 997 else
a09db423 998 types_match = comptypes (TREE_TYPE (newdecl),
999 TREE_TYPE (olddecl),
1000 COMPARE_REDECLARATION);
471086d6 1001 }
1002
1003 return types_match;
1004}
1005
1006/* If NEWDECL is `static' and an `extern' was seen previously,
dcbe7838 1007 warn about it. OLDDECL is the previous declaration.
471086d6 1008
1009 Note that this does not apply to the C++ case of declaring
1010 a variable `extern const' and then later `const'.
1011
471086d6 1012 Don't complain about built-in functions, since they are beyond
1013 the user's control. */
1014
9a49d46b 1015void
1b72315d 1016warn_extern_redeclared_static (tree newdecl, tree olddecl)
471086d6 1017{
dcbe7838 1018 tree name;
1019
980877d7 1020 if (TREE_CODE (newdecl) == TYPE_DECL
b81be439 1021 || TREE_CODE (newdecl) == TEMPLATE_DECL
2a9d763b 1022 || TREE_CODE (newdecl) == CONST_DECL
1023 || TREE_CODE (newdecl) == NAMESPACE_DECL)
471086d6 1024 return;
980877d7 1025
8a4bf740 1026 /* Don't get confused by static member functions; that's a different
1027 use of `static'. */
1028 if (TREE_CODE (newdecl) == FUNCTION_DECL
1029 && DECL_STATIC_FUNCTION_P (newdecl))
1030 return;
471086d6 1031
dcbe7838 1032 /* If the old declaration was `static', or the new one isn't, then
1033 then everything is OK. */
1034 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1035 return;
1036
1037 /* It's OK to declare a builtin function as `static'. */
1038 if (TREE_CODE (olddecl) == FUNCTION_DECL
1039 && DECL_ARTIFICIAL (olddecl))
1040 return;
1041
471086d6 1042 name = DECL_ASSEMBLER_NAME (newdecl);
2b9e3597 1043 permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1044 permerror (input_location, "previous declaration of %q+D", olddecl);
471086d6 1045}
1046
4f7b3f58 1047/* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1048 function templates. If their exception specifications do not
82174b40 1049 match, issue a diagnostic. */
4f7b3f58 1050
1051static void
1052check_redeclaration_exception_specification (tree new_decl,
1053 tree old_decl)
1054{
1055 tree new_type;
1056 tree old_type;
1057 tree new_exceptions;
1058 tree old_exceptions;
1059
1060 new_type = TREE_TYPE (new_decl);
1061 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1062 old_type = TREE_TYPE (old_decl);
1063 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1064
1065 /* [except.spec]
1066
1067 If any declaration of a function has an exception-specification,
1068 all declarations, including the definition and an explicit
1069 specialization, of that function shall have an
1070 exception-specification with the same set of type-ids. */
1071 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1072 && ! DECL_IS_BUILTIN (old_decl)
1073 && flag_exceptions
074ab442 1074 && !comp_except_specs (new_exceptions, old_exceptions,
4f7b3f58 1075 /*exact=*/true))
1076 {
1077 error ("declaration of %qF throws different exceptions", new_decl);
1078 error ("from previous declaration %q+F", old_decl);
1079 }
1080}
1081
db577900 1082#define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1083 && lookup_attribute ("gnu_inline", \
1084 DECL_ATTRIBUTES (fn)))
1085
947f430b 1086/* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1087 If the redeclaration is invalid, a diagnostic is issued, and the
1088 error_mark_node is returned. Otherwise, OLDDECL is returned.
471086d6 1089
947f430b 1090 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
c1d4295f 1091 returned.
1092
1093 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
471086d6 1094
947f430b 1095tree
c1d4295f 1096duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
471086d6 1097{
471086d6 1098 unsigned olddecl_uid = DECL_UID (olddecl);
c1d4295f 1099 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
3340d527 1100 int new_defines_function = 0;
50bd3262 1101 tree new_template;
e857e9c7 1102
1103 if (newdecl == olddecl)
947f430b 1104 return olddecl;
471086d6 1105
0543e7a9 1106 types_match = decls_match (newdecl, olddecl);
471086d6 1107
471086d6 1108 /* If either the type of the new decl or the type of the old decl is an
1109 error_mark_node, then that implies that we have already issued an
1110 error (earlier) for some bogus type specification, and in that case,
1111 it is rather pointless to harass the user with yet more error message
3340d527 1112 about the same declaration, so just pretend the types match here. */
b465397d 1113 if (TREE_TYPE (newdecl) == error_mark_node
1114 || TREE_TYPE (olddecl) == error_mark_node)
d39bc398 1115 return error_mark_node;
980877d7 1116
5955c361 1117 if (DECL_P (olddecl)
1118 && TREE_CODE (newdecl) == FUNCTION_DECL
1119 && TREE_CODE (olddecl) == FUNCTION_DECL
1120 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1121 {
1122 if (DECL_DECLARED_INLINE_P (newdecl)
1123 && DECL_UNINLINABLE (newdecl)
1124 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1125 /* Already warned elsewhere. */;
1126 else if (DECL_DECLARED_INLINE_P (olddecl)
1127 && DECL_UNINLINABLE (olddecl)
1128 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1129 /* Already warned. */;
1130 else if (DECL_DECLARED_INLINE_P (newdecl)
1131 && DECL_UNINLINABLE (olddecl)
1132 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1133 {
3cf8b391 1134 warning (OPT_Wattributes, "function %q+D redeclared as inline",
1135 newdecl);
1136 warning (OPT_Wattributes, "previous declaration of %q+D "
1137 "with attribute noinline", olddecl);
5955c361 1138 }
1139 else if (DECL_DECLARED_INLINE_P (olddecl)
1140 && DECL_UNINLINABLE (newdecl)
1141 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1142 {
3cf8b391 1143 warning (OPT_Wattributes, "function %q+D redeclared with "
1144 "attribute noinline", newdecl);
1145 warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1146 olddecl);
5955c361 1147 }
1148 }
1149
a109dc3b 1150 /* Check for redeclaration and other discrepancies. */
48ec80c8 1151 if (TREE_CODE (olddecl) == FUNCTION_DECL
175a96e8 1152 && DECL_ARTIFICIAL (olddecl))
1153 {
c1d4295f 1154 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
175a96e8 1155 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1156 {
c1d4295f 1157 /* Avoid warnings redeclaring built-ins which have not been
1158 explicitly declared. */
653e5405 1159 if (DECL_ANTICIPATED (olddecl))
1160 return NULL_TREE;
ae8cbbc8 1161
175a96e8 1162 /* If you declare a built-in or predefined function name as static,
1163 the old definition is overridden, but optionally warn this was a
1164 bad choice of name. */
1165 if (! TREE_PUBLIC (newdecl))
1166 {
ced7c954 1167 warning (OPT_Wshadow, "shadowing %s function %q#D",
1168 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1169 olddecl);
175a96e8 1170 /* Discard the old built-in function. */
947f430b 1171 return NULL_TREE;
175a96e8 1172 }
1173 /* If the built-in is not ansi, then programs can override
1174 it even globally without an error. */
1175 else if (! DECL_BUILT_IN (olddecl))
c3ceba8e 1176 warning (0, "library function %q#D redeclared as non-function %q#D",
653e5405 1177 olddecl, newdecl);
175a96e8 1178 else
1179 {
3ce479a6 1180 error ("declaration of %q#D", newdecl);
1181 error ("conflicts with built-in declaration %q#D",
653e5405 1182 olddecl);
175a96e8 1183 }
947f430b 1184 return NULL_TREE;
d81e00a4 1185 }
175a96e8 1186 else if (!types_match)
471086d6 1187 {
c1d4295f 1188 /* Avoid warnings redeclaring built-ins which have not been
1189 explicitly declared. */
653e5405 1190 if (DECL_ANTICIPATED (olddecl))
e256d445 1191 {
1192 /* Deal with fileptr_type_node. FILE type is not known
1193 at the time we create the builtins. */
1194 tree t1, t2;
1195
1196 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1197 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1198 t1 || t2;
1199 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1200 if (!t1 || !t2)
1201 break;
1202 else if (TREE_VALUE (t2) == fileptr_type_node)
1203 {
1204 tree t = TREE_VALUE (t1);
1205
1206 if (TREE_CODE (t) == POINTER_TYPE
1207 && TYPE_NAME (TREE_TYPE (t))
1208 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1209 == get_identifier ("FILE")
1210 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1211 {
1212 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1213
1214 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1215 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1216 types_match = decls_match (newdecl, olddecl);
1217 if (types_match)
c1d4295f 1218 return duplicate_decls (newdecl, olddecl,
1219 newdecl_is_friend);
e256d445 1220 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1221 }
1222 }
1223 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1224 break;
1225 }
ae8cbbc8 1226 else if ((DECL_EXTERN_C_P (newdecl)
d7d79557 1227 && DECL_EXTERN_C_P (olddecl))
1228 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1229 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
d81e00a4 1230 {
175a96e8 1231 /* A near match; override the builtin. */
1232
1233 if (TREE_PUBLIC (newdecl))
d81e00a4 1234 {
c3ceba8e 1235 warning (0, "new declaration %q#D", newdecl);
1236 warning (0, "ambiguates built-in declaration %q#D",
653e5405 1237 olddecl);
d81e00a4 1238 }
ced7c954 1239 else
1240 warning (OPT_Wshadow, "shadowing %s function %q#D",
653e5405 1241 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1242 olddecl);
d81e00a4 1243 }
175a96e8 1244 else
1245 /* Discard the old built-in function. */
947f430b 1246 return NULL_TREE;
70e907c2 1247
1248 /* Replace the old RTL to avoid problems with inlining. */
146c1b4f 1249 COPY_DECL_RTL (newdecl, olddecl);
471086d6 1250 }
c1d4295f 1251 /* Even if the types match, prefer the new declarations type for
1252 built-ins which have not been explicitly declared, for
1253 exception lists, etc... */
88d394b3 1254 else if (DECL_ANTICIPATED (olddecl))
8a6f9fad 1255 {
f5af39bc 1256 tree type = TREE_TYPE (newdecl);
1257 tree attribs = (*targetm.merge_type_attributes)
1258 (TREE_TYPE (olddecl), type);
1259
b3beaf30 1260 type = cp_build_type_attribute_variant (type, attribs);
f5af39bc 1261 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
8a6f9fad 1262 }
980877d7 1263
28fcbe05 1264 /* If a function is explicitly declared "throw ()", propagate that to
1265 the corresponding builtin. */
1266 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1267 && DECL_ANTICIPATED (olddecl)
1268 && TREE_NOTHROW (newdecl)
1269 && !TREE_NOTHROW (olddecl)
1270 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != NULL_TREE
1271 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != olddecl
1272 && types_match)
1273 TREE_NOTHROW (built_in_decls [DECL_FUNCTION_CODE (olddecl)]) = 1;
1274
d7d79557 1275 /* Whether or not the builtin can throw exceptions has no
1276 bearing on this declarator. */
1277 TREE_NOTHROW (olddecl) = 0;
1278
dcbe7838 1279 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1280 {
1281 /* If a builtin function is redeclared as `static', merge
1282 the declarations, but make the original one static. */
1283 DECL_THIS_STATIC (olddecl) = 1;
1284 TREE_PUBLIC (olddecl) = 0;
3da16ddc 1285
f0edcca6 1286 /* Make the old declaration consistent with the new one so
1287 that all remnants of the builtin-ness of this function
1288 will be banished. */
4b1984f5 1289 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
146c1b4f 1290 COPY_DECL_RTL (newdecl, olddecl);
dcbe7838 1291 }
bc3887cf 1292 }
1293 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1294 {
0e37e3f0 1295 /* C++ Standard, 3.3, clause 4:
1296 "[Note: a namespace name or a class template name must be unique
1297 in its declarative region (7.3.2, clause 14). ]" */
1298 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1299 && TREE_CODE (newdecl) != NAMESPACE_DECL
1300 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1301 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1302 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1303 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
f826d4f9 1304 {
0e37e3f0 1305 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1306 && TREE_CODE (newdecl) != TYPE_DECL)
1307 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1308 && TREE_CODE (olddecl) != TYPE_DECL))
1309 {
1310 /* We do nothing special here, because C++ does such nasty
1311 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1312 get shadowed, and know that if we need to find a TYPE_DECL
1313 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1314 slot of the identifier. */
1315 return NULL_TREE;
1316 }
1317
1318 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1319 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1320 || (TREE_CODE (olddecl) == FUNCTION_DECL
1321 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1322 return NULL_TREE;
f826d4f9 1323 }
1324
3ce479a6 1325 error ("%q#D redeclared as different kind of symbol", newdecl);
bc3887cf 1326 if (TREE_CODE (olddecl) == TREE_LIST)
1327 olddecl = TREE_VALUE (olddecl);
3cf8b391 1328 error ("previous declaration of %q+#D", olddecl);
bc3887cf 1329
1940f978 1330 return error_mark_node;
471086d6 1331 }
471086d6 1332 else if (!types_match)
1333 {
9ba4048d 1334 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
91bbfe2a 1335 /* These are certainly not duplicate declarations; they're
1336 from different scopes. */
947f430b 1337 return NULL_TREE;
91bbfe2a 1338
0543e7a9 1339 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
617abf06 1340 {
1341 /* The name of a class template may not be declared to refer to
1342 any other template, class, function, object, namespace, value,
96624a9e 1343 or type in the same scope. */
e857e9c7 1344 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1345 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
617abf06 1346 {
3ce479a6 1347 error ("declaration of template %q#D", newdecl);
3cf8b391 1348 error ("conflicts with previous declaration %q+#D", olddecl);
617abf06 1349 }
dbdf67c6 1350 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1351 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1352 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3e04bd45 1353 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
668ae905 1354 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
a81e6834 1355 DECL_TEMPLATE_PARMS (olddecl))
1356 /* Template functions can be disambiguated by
1357 return type. */
1358 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1359 TREE_TYPE (TREE_TYPE (olddecl))))
dbdf67c6 1360 {
3ce479a6 1361 error ("new declaration %q#D", newdecl);
3cf8b391 1362 error ("ambiguates old declaration %q+#D", olddecl);
dbdf67c6 1363 }
947f430b 1364 return NULL_TREE;
617abf06 1365 }
0543e7a9 1366 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1367 {
a2697ab6 1368 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
0543e7a9 1369 {
3ce479a6 1370 error ("declaration of C function %q#D conflicts with",
653e5405 1371 newdecl);
3cf8b391 1372 error ("previous declaration %q+#D here", olddecl);
0543e7a9 1373 }
6495357a 1374 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3e04bd45 1375 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
94f3b32d 1376 {
3ce479a6 1377 error ("new declaration %q#D", newdecl);
3cf8b391 1378 error ("ambiguates old declaration %q+#D", olddecl);
52341212 1379 return error_mark_node;
94f3b32d 1380 }
1381 else
947f430b 1382 return NULL_TREE;
0543e7a9 1383 }
28bbd27a 1384 else
471086d6 1385 {
3ce479a6 1386 error ("conflicting declaration %q#D", newdecl);
3cf8b391 1387 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
653e5405 1388 return error_mark_node;
471086d6 1389 }
1390 }
980877d7 1391 else if (TREE_CODE (newdecl) == FUNCTION_DECL
668ae905 1392 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1393 && (!DECL_TEMPLATE_INFO (newdecl)
980877d7 1394 || (DECL_TI_TEMPLATE (newdecl)
668ae905 1395 != DECL_TI_TEMPLATE (olddecl))))
1396 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1397 && (!DECL_TEMPLATE_INFO (olddecl)
980877d7 1398 || (DECL_TI_TEMPLATE (olddecl)
668ae905 1399 != DECL_TI_TEMPLATE (newdecl))))))
b1cfe2be 1400 /* It's OK to have a template specialization and a non-template
1401 with the same type, or to have specializations of two
668ae905 1402 different templates with the same type. Note that if one is a
1403 specialization, and the other is an instantiation of the same
1404 template, that we do not exit at this point. That situation
1405 can occur if we instantiate a template class, and then
6c0cc2cd 1406 specialize one of its methods. This situation is valid, but
668ae905 1407 the declarations must be merged in the usual way. */
947f430b 1408 return NULL_TREE;
980877d7 1409 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1410 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
668ae905 1411 && !DECL_USE_TEMPLATE (newdecl))
1412 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1413 && !DECL_USE_TEMPLATE (olddecl))))
1414 /* One of the declarations is a template instantiation, and the
1415 other is not a template at all. That's OK. */
947f430b 1416 return NULL_TREE;
5575ae2d 1417 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1418 {
1419 /* In [namespace.alias] we have:
9031d10b 1420
653e5405 1421 In a declarative region, a namespace-alias-definition can be
5575ae2d 1422 used to redefine a namespace-alias declared in that declarative
1423 region to refer only to the namespace to which it already
1424 refers.
9031d10b 1425
5575ae2d 1426 Therefore, if we encounter a second alias directive for the same
1427 alias, we can just ignore the second directive. */
1428 if (DECL_NAMESPACE_ALIAS (newdecl)
9031d10b 1429 && (DECL_NAMESPACE_ALIAS (newdecl)
5575ae2d 1430 == DECL_NAMESPACE_ALIAS (olddecl)))
1431 return olddecl;
1432 /* [namespace.alias]
1433
653e5405 1434 A namespace-name or namespace-alias shall not be declared as
5575ae2d 1435 the name of any other entity in the same declarative region.
1436 A namespace-name defined at global scope shall not be
4a44ba29 1437 declared as the name of any other entity in any global scope
5575ae2d 1438 of the program. */
3ce479a6 1439 error ("declaration of namespace %qD conflicts with", newdecl);
3cf8b391 1440 error ("previous declaration of namespace %q+D here", olddecl);
5575ae2d 1441 return error_mark_node;
1442 }
471086d6 1443 else
1444 {
e1721763 1445 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
905d4035 1446 if (errmsg)
471086d6 1447 {
d19f0a18 1448 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
471086d6 1449 if (DECL_NAME (olddecl) != NULL_TREE)
3cf8b391 1450 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1451 ? "%q+#D previously defined here"
1452 : "%q+#D previously declared here", olddecl);
947f430b 1453 return error_mark_node;
471086d6 1454 }
1455 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1456 && DECL_INITIAL (olddecl) != NULL_TREE
1457 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1458 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1459 {
1460 /* Prototype decl follows defn w/o prototype. */
3cf8b391 1461 warning (0, "prototype for %q+#D", newdecl);
c3ceba8e 1462 warning (0, "%Jfollows non-prototype definition here", olddecl);
471086d6 1463 }
bcb76c70 1464 else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1465 || TREE_CODE (olddecl) == VAR_DECL)
471086d6 1466 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
0543e7a9 1467 {
bcb76c70 1468 /* [dcl.link]
1469 If two declarations of the same function or object
1470 specify different linkage-specifications ..., the program
1471 is ill-formed.... Except for functions with C++ linkage,
1472 a function declaration without a linkage specification
1473 shall not precede the first linkage specification for
1474 that function. A function can be declared without a
1475 linkage specification after an explicit linkage
1476 specification has been seen; the linkage explicitly
1477 specified in the earlier declaration is not affected by
1478 such a function declaration.
1479
1480 DR 563 raises the question why the restrictions on
1481 functions should not also apply to objects. Older
1482 versions of G++ silently ignore the linkage-specification
1483 for this example:
1484
1485 namespace N {
1486 extern int i;
1487 extern "C" int i;
1488 }
1489
1490 which is clearly wrong. Therefore, we now treat objects
1491 like functions. */
b53db2b0 1492 if (current_lang_depth () == 0)
bcb76c70 1493 {
1494 /* There is no explicit linkage-specification, so we use
1495 the linkage from the previous declaration. */
1496 if (!DECL_LANG_SPECIFIC (newdecl))
1497 retrofit_lang_decl (newdecl);
1498 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1499 }
0543e7a9 1500 else
1501 {
3cf8b391 1502 error ("previous declaration of %q+#D with %qL linkage",
1503 olddecl, DECL_LANGUAGE (olddecl));
3ce479a6 1504 error ("conflicts with new declaration with %qL linkage",
653e5405 1505 DECL_LANGUAGE (newdecl));
0543e7a9 1506 }
1507 }
bcf789d7 1508
2329ce7e 1509 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
a5a4ff77 1510 ;
1511 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
bcf789d7 1512 {
1513 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1514 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1515 int i = 1;
1516
1517 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1518 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
980877d7 1519
bcf789d7 1520 for (; t1 && t1 != void_list_node;
1521 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1522 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1523 {
8953e390 1524 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1525 TREE_PURPOSE (t2)))
bcf789d7 1526 {
2b9e3597 1527 permerror (input_location, "default argument given for parameter %d of %q#D",
561fec9d 1528 i, newdecl);
2b9e3597 1529 permerror (input_location, "after previous specification in %q+#D", olddecl);
bcf789d7 1530 }
1531 else
1532 {
3ce479a6 1533 error ("default argument given for parameter %d of %q#D",
653e5405 1534 i, newdecl);
3cf8b391 1535 error ("after previous specification in %q+#D",
bcf789d7 1536 olddecl);
1537 }
1538 }
1539 }
471086d6 1540 }
1541
c498fbee 1542 /* Do not merge an implicit typedef with an explicit one. In:
1543
1544 class A;
1545 ...
1546 typedef class A A __attribute__ ((foo));
1547
1548 the attribute should apply only to the typedef. */
1549 if (TREE_CODE (olddecl) == TYPE_DECL
1550 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1551 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
947f430b 1552 return NULL_TREE;
c498fbee 1553
471086d6 1554 /* If new decl is `static' and an `extern' was seen previously,
1555 warn about it. */
1556 warn_extern_redeclared_static (newdecl, olddecl);
1557
96624a9e 1558 /* We have committed to returning 1 at this point. */
471086d6 1559 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1560 {
1561 /* Now that functions must hold information normally held
1562 by field decls, there is extra work to do so that
1563 declaration information does not get destroyed during
1564 definition. */
1565 if (DECL_VINDEX (olddecl))
1566 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1567 if (DECL_CONTEXT (olddecl))
1568 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
bcf789d7 1569 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1570 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
a98fd0a1 1571 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
8cb67d5d 1572 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
324392c5 1573 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
8a4bf740 1574 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
dcbeb3ef 1575 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1576 SET_OVERLOADED_OPERATOR_CODE
1577 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
3340d527 1578 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
980877d7 1579
3340d527 1580 /* Optionally warn about more than one declaration for the same
653e5405 1581 name, but don't warn about a function declaration followed by a
1582 definition. */
3340d527 1583 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1584 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
a109dc3b 1585 /* Don't warn about extern decl followed by definition. */
3340d527 1586 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
a109dc3b 1587 /* Don't warn about friends, let add_friend take care of it. */
c1d4295f 1588 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
3340d527 1589 {
ced7c954 1590 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1591 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
3340d527 1592 }
2336da2a 1593
1594 if (DECL_DELETED_FN (newdecl))
1595 {
1596 error ("deleted definition of %qD", newdecl);
1597 error ("after previous declaration %q+D", olddecl);
1598 }
471086d6 1599 }
1600
1601 /* Deal with C++: must preserve virtual function table size. */
1602 if (TREE_CODE (olddecl) == TYPE_DECL)
1603 {
cd16867a 1604 tree newtype = TREE_TYPE (newdecl);
1605 tree oldtype = TREE_TYPE (olddecl);
471086d6 1606
1607 if (newtype != error_mark_node && oldtype != error_mark_node
1608 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
c83788c9 1609 CLASSTYPE_FRIEND_CLASSES (newtype)
1610 = CLASSTYPE_FRIEND_CLASSES (oldtype);
4df55fce 1611
33f7d3d2 1612 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
471086d6 1613 }
1614
471086d6 1615 /* Copy all the DECL_... slots specified in the new decl
1616 except for any that we copy here from the old type. */
e3c541f0 1617 DECL_ATTRIBUTES (newdecl)
57e4bbfb 1618 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
471086d6 1619
e857e9c7 1620 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1621 {
4f7b3f58 1622 tree old_result;
1623 tree new_result;
1624 old_result = DECL_TEMPLATE_RESULT (olddecl);
1625 new_result = DECL_TEMPLATE_RESULT (newdecl);
1626 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
980877d7 1627 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
a072266a 1628 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1629 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
980877d7 1630
db577900 1631 DECL_ATTRIBUTES (old_result)
1632 = (*targetm.merge_decl_attributes) (old_result, new_result);
1633
4f7b3f58 1634 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1635 {
db577900 1636 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1637 && DECL_INITIAL (new_result))
1638 {
1639 if (DECL_INITIAL (old_result))
1306a30f 1640 DECL_UNINLINABLE (old_result) = 1;
db577900 1641 else
1306a30f 1642 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
db577900 1643 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1644 DECL_NOT_REALLY_EXTERN (old_result)
1645 = DECL_NOT_REALLY_EXTERN (new_result);
1646 DECL_INTERFACE_KNOWN (old_result)
1647 = DECL_INTERFACE_KNOWN (new_result);
1648 DECL_DECLARED_INLINE_P (old_result)
1649 = DECL_DECLARED_INLINE_P (new_result);
54d2aac6 1650 DECL_DISREGARD_INLINE_LIMITS (old_result)
1651 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1652
db577900 1653 }
1654 else
1655 {
db577900 1656 DECL_DECLARED_INLINE_P (old_result)
1657 |= DECL_DECLARED_INLINE_P (new_result);
54d2aac6 1658 DECL_DISREGARD_INLINE_LIMITS (old_result)
1659 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
db577900 1660 check_redeclaration_exception_specification (newdecl, olddecl);
1661 }
4f7b3f58 1662 }
1663
6ac91b4a 1664 /* If the new declaration is a definition, update the file and
ddb7a3b0 1665 line information on the declaration, and also make
1666 the old declaration the same definition. */
db577900 1667 if (DECL_INITIAL (new_result) != NULL_TREE)
6ac91b4a 1668 {
491e04ef 1669 DECL_SOURCE_LOCATION (olddecl)
4f7b3f58 1670 = DECL_SOURCE_LOCATION (old_result)
346064d9 1671 = DECL_SOURCE_LOCATION (newdecl);
ddb7a3b0 1672 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
d45cef9b 1673 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
e92154af 1674 {
1675 tree parm;
1676 DECL_ARGUMENTS (old_result)
1677 = DECL_ARGUMENTS (new_result);
1678 for (parm = DECL_ARGUMENTS (old_result); parm;
1679 parm = TREE_CHAIN (parm))
1680 DECL_CONTEXT (parm) = old_result;
1681 }
3b67dbda 1682 }
1683
947f430b 1684 return olddecl;
e857e9c7 1685 }
980877d7 1686
471086d6 1687 if (types_match)
1688 {
1689 /* Automatically handles default parameters. */
1690 tree oldtype = TREE_TYPE (olddecl);
bcf789d7 1691 tree newtype;
471086d6 1692
bcf789d7 1693 /* Merge the data types specified in the two decls. */
be94aed9 1694 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
bcf789d7 1695
be94aed9 1696 /* If merge_types produces a non-typedef type, just use the old type. */
1459abb8 1697 if (TREE_CODE (newdecl) == TYPE_DECL
1698 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1699 newtype = oldtype;
1700
471086d6 1701 if (TREE_CODE (newdecl) == VAR_DECL)
23ed74d8 1702 {
1703 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1704 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
074ab442 1705 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
a6b4af6d 1706 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
878870b4 1707 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1708 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
8487df40 1709
1710 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1711 if (DECL_LANG_SPECIFIC (olddecl)
1712 && CP_DECL_THREADPRIVATE_P (olddecl))
1713 {
1714 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1715 if (!DECL_LANG_SPECIFIC (newdecl))
1716 retrofit_lang_decl (newdecl);
1717
1718 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1719 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1720 }
23ed74d8 1721 }
1722
be94aed9 1723 /* Do this after calling `merge_types' so that default
471086d6 1724 parameters don't confuse us. */
4f7b3f58 1725 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1726 check_redeclaration_exception_specification (newdecl, olddecl);
471086d6 1727 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1728
334ba6ae 1729 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1730 check_default_args (newdecl);
1731
471086d6 1732 /* Lay the type out, unless already done. */
4d9c8e11 1733 if (! same_type_p (newtype, oldtype)
e857e9c7 1734 && TREE_TYPE (newdecl) != error_mark_node
3cc0b4b9 1735 && !(processing_template_decl && uses_template_parms (newdecl)))
1e66592c 1736 layout_type (TREE_TYPE (newdecl));
1737
e857e9c7 1738 if ((TREE_CODE (newdecl) == VAR_DECL
1739 || TREE_CODE (newdecl) == PARM_DECL
1740 || TREE_CODE (newdecl) == RESULT_DECL
1741 || TREE_CODE (newdecl) == FIELD_DECL
1742 || TREE_CODE (newdecl) == TYPE_DECL)
3cc0b4b9 1743 && !(processing_template_decl && uses_template_parms (newdecl)))
1e66592c 1744 layout_decl (newdecl, 0);
471086d6 1745
1746 /* Merge the type qualifiers. */
1747 if (TREE_READONLY (newdecl))
1748 TREE_READONLY (olddecl) = 1;
1749 if (TREE_THIS_VOLATILE (newdecl))
1750 TREE_THIS_VOLATILE (olddecl) = 1;
4fb4ab91 1751 if (TREE_NOTHROW (newdecl))
1752 TREE_NOTHROW (olddecl) = 1;
471086d6 1753
df4d0ece 1754 /* Merge deprecatedness. */
1755 if (TREE_DEPRECATED (newdecl))
1756 TREE_DEPRECATED (olddecl) = 1;
1757
24470055 1758 /* Preserve function specific target and optimization options */
1759 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1760 {
1761 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1762 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1763 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1764 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1765
1766 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1767 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1768 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1769 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1770 }
1771
471086d6 1772 /* Merge the initialization information. */
0543e7a9 1773 if (DECL_INITIAL (newdecl) == NULL_TREE
1774 && DECL_INITIAL (olddecl) != NULL_TREE)
1775 {
1776 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
346064d9 1777 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
c6138f2d 1778 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1779 && DECL_LANG_SPECIFIC (newdecl)
a072266a 1780 && DECL_LANG_SPECIFIC (olddecl))
acd77abe 1781 {
1782 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
cbc44df5 1783 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
acd77abe 1784 }
0543e7a9 1785 }
bc3887cf 1786
1787 /* Merge the section attribute.
653e5405 1788 We want to issue an error if the sections conflict but that must be
bc3887cf 1789 done later in decl_attributes since we are called before attributes
1790 are assigned. */
1791 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1792 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1793
8f8ac140 1794 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1795 {
1796 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1797 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
32ef1cd2 1798 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
f2f6bdab 1799 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
f2f6bdab 1800 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
32ef1cd2 1801 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
68d6de5b 1802 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
9c2a0c05 1803 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1804 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1805 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
1806 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
b3609646 1807 /* Keep the old RTL. */
1808 COPY_DECL_RTL (olddecl, newdecl);
1809 }
491e04ef 1810 else if (TREE_CODE (newdecl) == VAR_DECL
b3609646 1811 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1812 {
1813 /* Keep the old RTL. We cannot keep the old RTL if the old
1814 declaration was for an incomplete object and the new
1815 declaration is not since many attributes of the RTL will
1816 change. */
1817 COPY_DECL_RTL (olddecl, newdecl);
8f8ac140 1818 }
471086d6 1819 }
1820 /* If cannot merge, then use the new type and qualifiers,
1821 and don't preserve the old rtl. */
1822 else
1823 {
1824 /* Clean out any memory we had of the old declaration. */
1825 tree oldstatic = value_member (olddecl, static_aggregates);
1826 if (oldstatic)
1827 TREE_VALUE (oldstatic) = error_mark_node;
1828
1829 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1830 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1831 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1832 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1833 }
1834
1835 /* Merge the storage class information. */
296c463e 1836 merge_weak (newdecl, olddecl);
1837
96624a9e 1838 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
73aad9b9 1839 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
d0622bdf 1840 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1841 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1842 if (! DECL_EXTERNAL (olddecl))
1843 DECL_EXTERNAL (newdecl) = 0;
980877d7 1844
50bd3262 1845 new_template = NULL_TREE;
3340d527 1846 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
471086d6 1847 {
0b7780cd 1848 bool new_redefines_gnu_inline = false;
1849
1850 if (new_defines_function
1851 && ((DECL_INTERFACE_KNOWN (olddecl)
1852 && TREE_CODE (olddecl) == FUNCTION_DECL)
1853 || (TREE_CODE (olddecl) == TEMPLATE_DECL
1854 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1855 == FUNCTION_DECL))))
db577900 1856 {
1857 tree fn = olddecl;
1858
1859 if (TREE_CODE (fn) == TEMPLATE_DECL)
1860 fn = DECL_TEMPLATE_RESULT (olddecl);
1861
0b7780cd 1862 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
db577900 1863 }
db577900 1864
0b7780cd 1865 if (!new_redefines_gnu_inline)
db577900 1866 {
db577900 1867 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1868 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1869 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1870 }
980877d7 1871 DECL_TEMPLATE_INSTANTIATED (newdecl)
2699dcee 1872 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
9031d10b 1873
8a61cf30 1874 /* If the OLDDECL is an instantiation and/or specialization,
1875 then the NEWDECL must be too. But, it may not yet be marked
1876 as such if the caller has created NEWDECL, but has not yet
1877 figured out that it is a redeclaration. */
1878 if (!DECL_USE_TEMPLATE (newdecl))
1879 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
9031d10b 1880
3340d527 1881 /* Don't really know how much of the language-specific
1882 values we should copy from old to new. */
1883 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
491e04ef 1884 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
1f3233d1 1885 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
3340d527 1886 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
caa6fdce 1887 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
50bd3262 1888 if (DECL_TEMPLATE_INFO (newdecl))
1889 new_template = DECL_TI_TEMPLATE (newdecl);
4012c20a 1890 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
c792eccc 1891 DECL_INITIALIZED_IN_CLASS_P (newdecl)
653e5405 1892 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
3340d527 1893 olddecl_friend = DECL_FRIEND_P (olddecl);
c1d4295f 1894 hidden_friend = (DECL_ANTICIPATED (olddecl)
1895 && DECL_HIDDEN_FRIEND_P (olddecl)
1896 && newdecl_is_friend);
a731c87f 1897
1898 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1899 if (TREE_CODE (newdecl) == FUNCTION_DECL
1900 || DECL_FUNCTION_TEMPLATE_P (newdecl))
641985fa 1901 {
1902 DECL_BEFRIENDING_CLASSES (newdecl)
1903 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1904 DECL_BEFRIENDING_CLASSES (olddecl));
fb6e00c5 1905 /* DECL_THUNKS is only valid for virtual functions,
1906 otherwise it is a DECL_FRIEND_CONTEXT. */
1907 if (DECL_VIRTUAL_P (newdecl))
1908 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
641985fa 1909 }
471086d6 1910 }
1911
471086d6 1912 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1913 {
e92154af 1914 tree parm;
1915
ec084b66 1916 /* Merge parameter attributes. */
1917 tree oldarg, newarg;
1918 for (oldarg = DECL_ARGUMENTS(olddecl),
1919 newarg = DECL_ARGUMENTS(newdecl);
1920 oldarg && newarg;
1921 oldarg = TREE_CHAIN(oldarg), newarg = TREE_CHAIN(newarg)) {
1922 DECL_ATTRIBUTES (newarg)
1923 = (*targetm.merge_decl_attributes) (oldarg, newarg);
1924 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
1925 }
1926
980877d7 1927 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1928 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
668ae905 1929 {
1930 /* If newdecl is not a specialization, then it is not a
1931 template-related function at all. And that means that we
c465b94a 1932 should have exited above, returning 0. */
b4df430b 1933 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
668ae905 1934
980877d7 1935 if (TREE_USED (olddecl))
668ae905 1936 /* From [temp.expl.spec]:
980877d7 1937
668ae905 1938 If a template, a member template or the member of a class
1939 template is explicitly specialized then that
1940 specialization shall be declared before the first use of
1941 that specialization that would cause an implicit
1942 instantiation to take place, in every translation unit in
1943 which such a use occurs. */
1e5fcbe2 1944 error ("explicit specialization of %qD after first use",
668ae905 1945 olddecl);
1946
1947 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
1d1c6a54 1948
4a2849cb 1949 /* Don't propagate visibility from the template to the
1950 specialization here. We'll do that in determine_visibility if
1951 appropriate. */
1952 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
1953
1d1c6a54 1954 /* [temp.expl.spec/14] We don't inline explicit specialization
1955 just because the primary template says so. */
668ae905 1956 }
db577900 1957 else if (new_defines_function && DECL_INITIAL (olddecl))
1958 {
6329636b 1959 /* Never inline re-defined extern inline functions.
1960 FIXME: this could be better handled by keeping both
1961 function as separate declarations. */
db577900 1962 DECL_UNINLINABLE (newdecl) = 1;
1963 }
1d1c6a54 1964 else
1965 {
1966 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1967 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
bb09dca5 1968
1d1c6a54 1969 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
bb09dca5 1970
1d1c6a54 1971 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1972 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
ebb7d626 1973
1974 DECL_DISREGARD_INLINE_LIMITS (newdecl)
1975 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
1976 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
1977 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
1d1c6a54 1978 }
5955c361 1979
8f80e66d 1980 /* Preserve abstractness on cloned [cd]tors. */
1981 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1982
e92154af 1983 /* Update newdecl's parms to point at olddecl. */
1984 for (parm = DECL_ARGUMENTS (newdecl); parm;
1985 parm = TREE_CHAIN (parm))
1986 DECL_CONTEXT (parm) = olddecl;
1987
94f3b32d 1988 if (! types_match)
1989 {
4b1984f5 1990 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
7e64c604 1991 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
146c1b4f 1992 COPY_DECL_RTL (newdecl, olddecl);
e857e9c7 1993 }
1994 if (! types_match || new_defines_function)
1995 {
8036fa43 1996 /* These need to be copied so that the names are available.
1997 Note that if the types do match, we'll preserve inline
1998 info and other bits, but if not, we won't. */
94f3b32d 1999 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2000 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
94f3b32d 2001 }
471086d6 2002 if (new_defines_function)
2003 /* If defining a function declared with other language
2004 linkage, use the previously declared language linkage. */
4b1984f5 2005 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
8036fa43 2006 else if (types_match)
471086d6 2007 {
2008 /* If redeclaring a builtin function, and not a definition,
2009 it stays built in. */
2010 if (DECL_BUILT_IN (olddecl))
2011 {
8305149e 2012 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
bc3887cf 2013 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
471086d6 2014 /* If we're keeping the built-in definition, keep the rtl,
2015 regardless of declaration matches. */
146c1b4f 2016 COPY_DECL_RTL (olddecl, newdecl);
471086d6 2017 }
471086d6 2018
2019 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
e92154af 2020 /* Don't clear out the arguments if we're just redeclaring a
2021 function. */
471086d6 2022 if (DECL_ARGUMENTS (olddecl))
2023 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2024 }
2025 }
6146c0d9 2026 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2027 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
d0622bdf 2028
471086d6 2029 /* Now preserve various other info from the definition. */
2030 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2031 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2032 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
7e64c604 2033 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
471086d6 2034
b212f378 2035 /* Warn about conflicting visibility specifications. */
9031d10b 2036 if (DECL_VISIBILITY_SPECIFIED (olddecl)
91caa6ca 2037 && DECL_VISIBILITY_SPECIFIED (newdecl)
b212f378 2038 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2039 {
3cf8b391 2040 warning (OPT_Wattributes, "%q+D: visibility attribute ignored "
2041 "because it", newdecl);
9b2d6d13 2042 warning (OPT_Wattributes, "%Jconflicts with previous "
2043 "declaration here", olddecl);
b212f378 2044 }
2045 /* Choose the declaration which specified visibility. */
2046 if (DECL_VISIBILITY_SPECIFIED (olddecl))
50333348 2047 {
50333348 2048 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
b212f378 2049 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2050 }
074ab442 2051 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
5ded8c6f 2052 so keep this behavior. */
2053 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2054 {
2055 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2056 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2057 }
50333348 2058
2ded3667 2059 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2060 with that from NEWDECL below. */
2061 if (DECL_LANG_SPECIFIC (olddecl))
2062 {
9031d10b 2063 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2ded3667 2064 != DECL_LANG_SPECIFIC (newdecl));
2065 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2066 }
2067
f901d289 2068 /* Merge the USED information. */
2069 if (TREE_USED (olddecl))
2070 TREE_USED (newdecl) = 1;
2071 else if (TREE_USED (newdecl))
2072 TREE_USED (olddecl) = 1;
2073
471086d6 2074 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2075 {
2076 int function_size;
471086d6 2077
5ded8c6f 2078 function_size = sizeof (struct tree_decl_common);
471086d6 2079
f702522a 2080 memcpy ((char *) olddecl + sizeof (struct tree_common),
2081 (char *) newdecl + sizeof (struct tree_common),
2082 function_size - sizeof (struct tree_common));
471086d6 2083
5ded8c6f 2084 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2085 (char *) newdecl + sizeof (struct tree_decl_common),
2086 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
50bd3262 2087 if (new_template)
0886adbc 2088 /* If newdecl is a template instantiation, it is possible that
2089 the following sequence of events has occurred:
2090
2091 o A friend function was declared in a class template. The
2092 class template was instantiated.
2093
2094 o The instantiation of the friend declaration was
2095 recorded on the instantiation list, and is newdecl.
2096
2097 o Later, however, instantiate_class_template called pushdecl
2098 on the newdecl to perform name injection. But, pushdecl in
2099 turn called duplicate_decls when it discovered that another
2100 declaration of a global function with the same name already
2101 existed.
2102
2103 o Here, in duplicate_decls, we decided to clobber newdecl.
2104
2105 If we're going to do that, we'd better make sure that
2106 olddecl, and not newdecl, is on the list of
2107 instantiations so that if we try to do the instantiation
2108 again we won't get the clobbered declaration. */
491e04ef 2109 reregister_specialization (newdecl,
50bd3262 2110 new_template,
0886adbc 2111 olddecl);
471086d6 2112 }
2113 else
2114 {
5ded8c6f 2115 size_t size = tree_code_size (TREE_CODE (olddecl));
f702522a 2116 memcpy ((char *) olddecl + sizeof (struct tree_common),
2117 (char *) newdecl + sizeof (struct tree_common),
5ded8c6f 2118 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
074ab442 2119 switch (TREE_CODE (olddecl))
5ded8c6f 2120 {
2121 case LABEL_DECL:
2122 case VAR_DECL:
2123 case RESULT_DECL:
2124 case PARM_DECL:
2125 case FIELD_DECL:
2126 case TYPE_DECL:
2127 case CONST_DECL:
2128 {
2129 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2130 (char *) newdecl + sizeof (struct tree_decl_common),
2131 size - sizeof (struct tree_decl_common)
2132 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2133 }
2134 break;
2135 default:
2136 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2137 (char *) newdecl + sizeof (struct tree_decl_common),
2138 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2139 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2140 break;
2141 }
471086d6 2142 }
471086d6 2143 DECL_UID (olddecl) = olddecl_uid;
2144 if (olddecl_friend)
2145 DECL_FRIEND_P (olddecl) = 1;
c1d4295f 2146 if (hidden_friend)
2147 {
2148 DECL_ANTICIPATED (olddecl) = 1;
2149 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2150 }
471086d6 2151
0bf60c2b 2152 /* NEWDECL contains the merged attribute lists.
2153 Update OLDDECL to be the same. */
e3c541f0 2154 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
0bf60c2b 2155
f8ed00ce 2156 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2157 so that encode_section_info has a chance to look at the new decl
2158 flags and attributes. */
491e04ef 2159 if (DECL_RTL_SET_P (olddecl)
f8ed00ce 2160 && (TREE_CODE (olddecl) == FUNCTION_DECL
2161 || (TREE_CODE (olddecl) == VAR_DECL
2162 && TREE_STATIC (olddecl))))
b2c4af5e 2163 make_decl_rtl (olddecl);
f8ed00ce 2164
2ded3667 2165 /* The NEWDECL will no longer be needed. Because every out-of-class
2166 declaration of a member results in a call to duplicate_decls,
2167 freeing these nodes represents in a significant savings. */
2168 ggc_free (newdecl);
2169
947f430b 2170 return olddecl;
471086d6 2171}
471086d6 2172\f
905d4035 2173/* Return zero if the declaration NEWDECL is valid
471086d6 2174 when the declaration OLDDECL (assumed to be for the same name)
2175 has already been seen.
2176 Otherwise return an error message format string with a %s
2177 where the identifier should go. */
2178
e1721763 2179static const char *
1b72315d 2180redeclaration_error_message (tree newdecl, tree olddecl)
471086d6 2181{
2182 if (TREE_CODE (newdecl) == TYPE_DECL)
2183 {
2184 /* Because C++ can put things into name space for free,
2185 constructs like "typedef struct foo { ... } foo"
2186 would look like an erroneous redeclaration. */
daf9ff67 2187 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
d26312d0 2188 return NULL;
471086d6 2189 else
3ce479a6 2190 return "redefinition of %q#D";
471086d6 2191 }
2192 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2193 {
2194 /* If this is a pure function, its olddecl will actually be
2195 the original initialization to `0' (which we force to call
2196 abort()). Don't complain about redefinition in this case. */
a1212c35 2197 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2198 && DECL_INITIAL (olddecl) == NULL_TREE)
d26312d0 2199 return NULL;
471086d6 2200
8417823c 2201 /* If both functions come from different namespaces, this is not
a109dc3b 2202 a redeclaration - this is a conflict with a used function. */
ddb39453 2203 if (DECL_NAMESPACE_SCOPE_P (olddecl)
9a931ab2 2204 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2205 && ! decls_match (olddecl, newdecl))
3ce479a6 2206 return "%qD conflicts with used function";
8417823c 2207
c25194fd 2208 /* We'll complain about linkage mismatches in
653e5405 2209 warn_extern_redeclared_static. */
c25194fd 2210
8417823c 2211 /* Defining the same name twice is no good. */
471086d6 2212 if (DECL_INITIAL (olddecl) != NULL_TREE
bb09dca5 2213 && DECL_INITIAL (newdecl) != NULL_TREE)
471086d6 2214 {
2215 if (DECL_NAME (olddecl) == NULL_TREE)
3ce479a6 2216 return "%q#D not declared in class";
db577900 2217 else if (!GNU_INLINE_P (olddecl)
2218 || GNU_INLINE_P (newdecl))
3ce479a6 2219 return "redefinition of %q#D";
471086d6 2220 }
db577900 2221
2222 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2223 {
2224 bool olda = GNU_INLINE_P (olddecl);
2225 bool newa = GNU_INLINE_P (newdecl);
2226
2227 if (olda != newa)
2228 {
2229 if (newa)
2230 return "%q+D redeclared inline with %<gnu_inline%> attribute";
2231 else
2232 return "%q+D redeclared inline without %<gnu_inline%> attribute";
2233 }
2234 }
2235
d26312d0 2236 return NULL;
471086d6 2237 }
ac9386a0 2238 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2239 {
1611df57 2240 tree nt, ot;
2241
2242 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2243 {
2244 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2245 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
3ce479a6 2246 return "redefinition of %q#D";
1611df57 2247 return NULL;
2248 }
2249
2250 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
491e04ef 2251 || (DECL_TEMPLATE_RESULT (newdecl)
1611df57 2252 == DECL_TEMPLATE_RESULT (olddecl)))
2253 return NULL;
2254
2255 nt = DECL_TEMPLATE_RESULT (newdecl);
2256 if (DECL_TEMPLATE_INFO (nt))
2257 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2258 ot = DECL_TEMPLATE_RESULT (olddecl);
2259 if (DECL_TEMPLATE_INFO (ot))
2260 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
db577900 2261 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2262 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
3ce479a6 2263 return "redefinition of %q#D";
1611df57 2264
db577900 2265 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2266 {
2267 bool olda = GNU_INLINE_P (ot);
2268 bool newa = GNU_INLINE_P (nt);
2269
2270 if (olda != newa)
2271 {
2272 if (newa)
2273 return "%q+D redeclared inline with %<gnu_inline%> attribute";
2274 else
2275 return "%q+D redeclared inline without %<gnu_inline%> attribute";
2276 }
2277 }
2278
82d31768 2279 /* Core issue #226 (C++0x):
2280
2281 If a friend function template declaration specifies a
2282 default template-argument, that declaration shall be a
2283 definition and shall be the only declaration of the
2284 function template in the translation unit. */
6dcdb5de 2285 if ((cxx_dialect != cxx98)
82d31768 2286 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2287 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2288 /*is_primary=*/1, /*is_partial=*/0,
2289 /*is_friend_decl=*/2))
2290 return "redeclaration of friend %q#D may not have default template arguments";
2291
1611df57 2292 return NULL;
ac9386a0 2293 }
2bf7bc7f 2294 else if (TREE_CODE (newdecl) == VAR_DECL
8487df40 2295 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2296 && (! DECL_LANG_SPECIFIC (olddecl)
2297 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2298 || DECL_THREAD_LOCAL_P (newdecl)))
2bf7bc7f 2299 {
2300 /* Only variables can be thread-local, and all declarations must
2301 agree on this property. */
2302 if (DECL_THREAD_LOCAL_P (newdecl))
2303 return "thread-local declaration of %q#D follows "
2304 "non-thread-local declaration";
2305 else
2306 return "non-thread-local declaration of %q#D follows "
2307 "thread-local declaration";
2308 }
e238c961 2309 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
471086d6 2310 {
8b2afb7a 2311 /* The objects have been declared at namespace scope. If either
2312 is a member of an anonymous union, then this is an invalid
2313 redeclaration. For example:
2314
2315 int i;
2316 union { int i; };
2317
2318 is invalid. */
7a1eab9a 2319 if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2320 || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
8b2afb7a 2321 return "redeclaration of %q#D";
2322 /* If at least one declaration is a reference, there is no
2323 conflict. For example:
2324
2325 int i = 3;
2326 extern int i;
2327
2328 is valid. */
471086d6 2329 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
d26312d0 2330 return NULL;
0543e7a9 2331 /* Reject two definitions. */
3ce479a6 2332 return "redefinition of %q#D";
471086d6 2333 }
2334 else
2335 {
2336 /* Objects declared with block scope: */
2337 /* Reject two definitions, and reject a definition
2338 together with an external reference. */
2339 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
3ce479a6 2340 return "redeclaration of %q#D";
d26312d0 2341 return NULL;
471086d6 2342 }
2343}
2344\f
8487df40 2345/* Hash and equality functions for the named_label table. */
2346
2347static hashval_t
2348named_label_entry_hash (const void *data)
2349{
2350 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2351 return DECL_UID (ent->label_decl);
2352}
2353
2354static int
2355named_label_entry_eq (const void *a, const void *b)
2356{
2357 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2358 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2359 return ent_a->label_decl == ent_b->label_decl;
2360}
2361
2d46e540 2362/* Create a new label, named ID. */
471086d6 2363
2d46e540 2364static tree
1b72315d 2365make_label_decl (tree id, int local_p)
471086d6 2366{
8487df40 2367 struct named_label_entry *ent;
2368 void **slot;
2d46e540 2369 tree decl;
471086d6 2370
e60a6f7b 2371 decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2d46e540 2372
2373 DECL_CONTEXT (decl) = current_function_decl;
2374 DECL_MODE (decl) = VOIDmode;
2375 C_DECLARED_LABEL_FLAG (decl) = local_p;
471086d6 2376
2d46e540 2377 /* Say where one reference is to the label, for the sake of the
2378 error if it is not defined. */
346064d9 2379 DECL_SOURCE_LOCATION (decl) = input_location;
2d46e540 2380
2381 /* Record the fact that this identifier is bound to this label. */
2382 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2383
8487df40 2384 /* Create the label htab for the function on demand. */
2385 if (!named_labels)
2386 named_labels = htab_create_ggc (13, named_label_entry_hash,
2387 named_label_entry_eq, NULL);
c48d6aec 2388
8487df40 2389 /* Record this label on the list of labels used in this function.
2390 We do this before calling make_label_decl so that we get the
2391 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2392 ent = GGC_CNEW (struct named_label_entry);
2393 ent->label_decl = decl;
c48d6aec 2394
8487df40 2395 slot = htab_find_slot (named_labels, ent, INSERT);
2396 gcc_assert (*slot == NULL);
2397 *slot = ent;
2398
2399 return decl;
2d46e540 2400}
471086d6 2401
2d46e540 2402/* Look for a label named ID in the current function. If one cannot
2403 be found, create one. (We keep track of used, but undefined,
2404 labels, and complain about them at the end of a function.) */
471086d6 2405
980877d7 2406tree
1b72315d 2407lookup_label (tree id)
2d46e540 2408{
2409 tree decl;
471086d6 2410
851fe51a 2411 timevar_push (TV_NAME_LOOKUP);
2d46e540 2412 /* You can't use labels at global scope. */
2413 if (current_function_decl == NULL_TREE)
2414 {
3ce479a6 2415 error ("label %qE referenced outside of any function", id);
851fe51a 2416 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2d46e540 2417 }
980877d7 2418
2d46e540 2419 /* See if we've already got this label. */
2420 decl = IDENTIFIER_LABEL_VALUE (id);
2421 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
851fe51a 2422 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
471086d6 2423
2d46e540 2424 decl = make_label_decl (id, /*local_p=*/0);
851fe51a 2425 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
471086d6 2426}
2427
2d46e540 2428/* Declare a local label named ID. */
471086d6 2429
2430tree
1b72315d 2431declare_local_label (tree id)
471086d6 2432{
8487df40 2433 tree decl, shadow;
471086d6 2434
2d46e540 2435 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
8487df40 2436 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2437 shadow = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2438 current_binding_level->shadowed_labels);
2439 current_binding_level->shadowed_labels = shadow;
2440
2d46e540 2441 decl = make_label_decl (id, /*local_p=*/1);
8487df40 2442 TREE_VALUE (shadow) = decl;
980877d7 2443
2d46e540 2444 return decl;
471086d6 2445}
2446
c48d6aec 2447/* Returns nonzero if it is ill-formed to jump past the declaration of
2448 DECL. Returns 2 if it's also a real problem. */
2449
2450static int
1b72315d 2451decl_jump_unsafe (tree decl)
c48d6aec 2452{
66ce73bb 2453 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2454 || TREE_TYPE (decl) == error_mark_node)
c48d6aec 2455 return 0;
2456
a6b4af6d 2457 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
2458 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2459 return 2;
2460
2461 if (pod_type_p (TREE_TYPE (decl)))
c48d6aec 2462 return 0;
2463
a6b4af6d 2464 /* The POD stuff is just pedantry; why should it matter if the class
c48d6aec 2465 contains a field of pointer to member type? */
c48d6aec 2466 return 1;
2467}
2468
8487df40 2469/* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2470
2471static void
2472identify_goto (tree decl, const location_t *locus)
2473{
2474 if (decl)
2b9e3597 2475 permerror (input_location, "jump to label %qD", decl);
8487df40 2476 else
2b9e3597 2477 permerror (input_location, "jump to case label");
8487df40 2478 if (locus)
2b9e3597 2479 permerror (input_location, "%H from here", locus);
8487df40 2480}
2481
c48d6aec 2482/* Check that a single previously seen jump to a newly defined label
2483 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2484 the jump context; NAMES are the names in scope in LEVEL at the jump
074ab442 2485 context; LOCUS is the source position of the jump or 0. Returns
8487df40 2486 true if all is well. */
c48d6aec 2487
8487df40 2488static bool
2489check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2490 bool exited_omp, const location_t *locus)
2491{
2492 struct cp_binding_level *b;
2493 bool identified = false, saw_eh = false, saw_omp = false;
2494
2495 if (exited_omp)
2496 {
2497 identify_goto (decl, locus);
2498 error (" exits OpenMP structured block");
2499 identified = saw_omp = true;
2500 }
2501
2502 for (b = current_binding_level; b ; b = b->level_chain)
2503 {
2504 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2505
2506 for (new_decls = b->names; new_decls != old_decls;
c48d6aec 2507 new_decls = TREE_CHAIN (new_decls))
2508 {
2509 int problem = decl_jump_unsafe (new_decls);
2510 if (! problem)
2511 continue;
2512
8487df40 2513 if (!identified)
c48d6aec 2514 {
8487df40 2515 identify_goto (decl, locus);
2516 identified = true;
c48d6aec 2517 }
65750829 2518 if (problem > 1)
3cf8b391 2519 error (" crosses initialization of %q+#D", new_decls);
c48d6aec 2520 else
2b9e3597 2521 permerror (input_location, " enters scope of non-POD %q+#D", new_decls);
c48d6aec 2522 }
2523
2524 if (b == level)
2525 break;
8487df40 2526 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
c48d6aec 2527 {
8487df40 2528 if (!identified)
c48d6aec 2529 {
8487df40 2530 identify_goto (decl, locus);
2531 identified = true;
c48d6aec 2532 }
37b9a732 2533 if (b->kind == sk_try)
65750829 2534 error (" enters try block");
2535 else
2536 error (" enters catch block");
8487df40 2537 saw_eh = true;
2538 }
2539 if (b->kind == sk_omp && !saw_omp)
2540 {
2541 if (!identified)
2542 {
2543 identify_goto (decl, locus);
2544 identified = true;
2545 }
2546 error (" enters OpenMP structured block");
2547 saw_omp = true;
c48d6aec 2548 }
2549 }
c48d6aec 2550
8487df40 2551 return !identified;
c48d6aec 2552}
2553
2554static void
8487df40 2555check_previous_goto (tree decl, struct named_label_use_entry *use)
c48d6aec 2556{
8487df40 2557 check_previous_goto_1 (decl, use->binding_level,
2558 use->names_in_scope, use->in_omp_scope,
2559 &use->o_goto_locus);
c48d6aec 2560}
2561
8487df40 2562static bool
2563check_switch_goto (struct cp_binding_level* level)
c48d6aec 2564{
8487df40 2565 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
c48d6aec 2566}
2567
2568/* Check that a new jump to a label DECL is OK. Called by
2569 finish_goto_stmt. */
2570
2571void
1b72315d 2572check_goto (tree decl)
c48d6aec 2573{
8487df40 2574 struct named_label_entry *ent, dummy;
2575 bool saw_catch = false, identified = false;
c48d6aec 2576 tree bad;
c48d6aec 2577
8487df40 2578 /* We can't know where a computed goto is jumping.
2579 So we assume that it's OK. */
2580 if (TREE_CODE (decl) != LABEL_DECL)
2581 return;
2582
2583 /* We didn't record any information about this label when we created it,
2584 and there's not much point since it's trivial to analyze as a return. */
2585 if (decl == cdtor_label)
5ba7b7e9 2586 return;
2587
8487df40 2588 dummy.label_decl = decl;
2589 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2590 gcc_assert (ent != NULL);
2591
c48d6aec 2592 /* If the label hasn't been defined yet, defer checking. */
2593 if (! DECL_INITIAL (decl))
2594 {
8487df40 2595 struct named_label_use_entry *new_use;
c48d6aec 2596
8487df40 2597 /* Don't bother creating another use if the last goto had the
2598 same data, and will therefore create the same set of errors. */
2599 if (ent->uses
2600 && ent->uses->names_in_scope == current_binding_level->names)
2601 return;
c48d6aec 2602
8487df40 2603 new_use = GGC_NEW (struct named_label_use_entry);
2604 new_use->binding_level = current_binding_level;
2605 new_use->names_in_scope = current_binding_level->names;
2606 new_use->o_goto_locus = input_location;
2607 new_use->in_omp_scope = false;
2608
2609 new_use->next = ent->uses;
2610 ent->uses = new_use;
2611 return;
2612 }
c48d6aec 2613
8487df40 2614 if (ent->in_try_scope || ent->in_catch_scope
2615 || ent->in_omp_scope || ent->bad_decls)
c48d6aec 2616 {
2b9e3597 2617 permerror (input_location, "jump to label %q+D", decl);
2618 permerror (input_location, " from here");
8487df40 2619 identified = true;
c48d6aec 2620 }
2621
8487df40 2622 for (bad = ent->bad_decls; bad; bad = TREE_CHAIN (bad))
c48d6aec 2623 {
2624 tree b = TREE_VALUE (bad);
2625 int u = decl_jump_unsafe (b);
2626
2627 if (u > 1 && DECL_ARTIFICIAL (b))
8487df40 2628 {
2629 /* Can't skip init of __exception_info. */
2630 error ("%J enters catch block", b);
2631 saw_catch = true;
2632 }
c48d6aec 2633 else if (u > 1)
3cf8b391 2634 error (" skips initialization of %q+#D", b);
c48d6aec 2635 else
2b9e3597 2636 permerror (input_location, " enters scope of non-POD %q+#D", b);
c48d6aec 2637 }
2638
8487df40 2639 if (ent->in_try_scope)
c48d6aec 2640 error (" enters try block");
8487df40 2641 else if (ent->in_catch_scope && !saw_catch)
65750829 2642 error (" enters catch block");
8487df40 2643
2644 if (ent->in_omp_scope)
2645 error (" enters OpenMP structured block");
2646 else if (flag_openmp)
2647 {
2648 struct cp_binding_level *b;
2649 for (b = current_binding_level; b ; b = b->level_chain)
2650 {
2651 if (b == ent->binding_level)
2652 break;
2653 if (b->kind == sk_omp)
2654 {
2655 if (!identified)
2656 {
2b9e3597 2657 permerror (input_location, "jump to label %q+D", decl);
2658 permerror (input_location, " from here");
8487df40 2659 identified = true;
2660 }
2661 error (" exits OpenMP structured block");
2662 break;
2663 }
2664 }
2665 }
2666}
2667
2668/* Check that a return is ok wrt OpenMP structured blocks.
2669 Called by finish_return_stmt. Returns true if all is well. */
2670
2671bool
2672check_omp_return (void)
2673{
2674 struct cp_binding_level *b;
2675 for (b = current_binding_level; b ; b = b->level_chain)
2676 if (b->kind == sk_omp)
2677 {
2678 error ("invalid exit from OpenMP structured block");
2679 return false;
2680 }
2681 return true;
c48d6aec 2682}
2683
471086d6 2684/* Define a label, specifying the location in the source file.
91a39dda 2685 Return the LABEL_DECL node for the label. */
471086d6 2686
2687tree
92ddaf90 2688define_label (location_t location, tree name)
471086d6 2689{
8487df40 2690 struct named_label_entry *ent, dummy;
cd16867a 2691 struct cp_binding_level *p;
8487df40 2692 tree decl;
c48d6aec 2693
851fe51a 2694 timevar_push (TV_NAME_LOOKUP);
8487df40 2695
2696 decl = lookup_label (name);
2697
2698 dummy.label_decl = decl;
2699 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2700 gcc_assert (ent != NULL);
471086d6 2701
886deab8 2702 /* After labels, make any new cleanups in the function go into their
471086d6 2703 own new (temporary) binding contour. */
491e04ef 2704 for (p = current_binding_level;
2705 p->kind != sk_function_parms;
37b9a732 2706 p = p->level_chain)
886deab8 2707 p->more_cleanups_ok = 0;
471086d6 2708
bcf789d7 2709 if (name == get_identifier ("wchar_t"))
2b9e3597 2710 permerror (input_location, "label named wchar_t");
bcf789d7 2711
471086d6 2712 if (DECL_INITIAL (decl) != NULL_TREE)
b34664af 2713 {
2714 error ("duplicate label %qD", decl);
2715 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
2716 }
471086d6 2717 else
2718 {
8487df40 2719 struct named_label_use_entry *use;
2720
471086d6 2721 /* Mark label as having been defined. */
2722 DECL_INITIAL (decl) = error_mark_node;
2723 /* Say where in the source. */
346064d9 2724 DECL_SOURCE_LOCATION (decl) = location;
8487df40 2725
2726 ent->binding_level = current_binding_level;
2727 ent->names_in_scope = current_binding_level->names;
2728
2729 for (use = ent->uses; use ; use = use->next)
2730 check_previous_goto (decl, use);
2731 ent->uses = NULL;
471086d6 2732 }
91a39dda 2733
0b60e50b 2734 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
471086d6 2735}
2736
127a1cd0 2737struct cp_switch
2738{
1f3233d1 2739 struct cp_binding_level *level;
127a1cd0 2740 struct cp_switch *next;
225ec6aa 2741 /* The SWITCH_STMT being built. */
2742 tree switch_stmt;
2743 /* A splay-tree mapping the low element of a case range to the high
2744 element, or NULL_TREE if there is no high element. Used to
2745 determine whether or not a new case label duplicates an old case
2746 label. We need a tree, rather than simply a hash table, because
2747 of the GNU case range extension. */
2748 splay_tree cases;
127a1cd0 2749};
2750
225ec6aa 2751/* A stack of the currently active switch statements. The innermost
2752 switch statement is on the top of the stack. There is no need to
2753 mark the stack for garbage collection because it is only active
2754 during the processing of the body of a function, and we never
2755 collect at that point. */
3c3beda6 2756
127a1cd0 2757static struct cp_switch *switch_stack;
2758
225ec6aa 2759/* Called right after a switch-statement condition is parsed.
2760 SWITCH_STMT is the switch statement being parsed. */
2761
127a1cd0 2762void
1b72315d 2763push_switch (tree switch_stmt)
127a1cd0 2764{
56e60747 2765 struct cp_switch *p = XNEW (struct cp_switch);
127a1cd0 2766 p->level = current_binding_level;
2767 p->next = switch_stack;
225ec6aa 2768 p->switch_stmt = switch_stmt;
2769 p->cases = splay_tree_new (case_compare, NULL, NULL);
127a1cd0 2770 switch_stack = p;
2771}
2772
2773void
1b72315d 2774pop_switch (void)
127a1cd0 2775{
4ee9c684 2776 struct cp_switch *cs = switch_stack;
e7911019 2777 location_t switch_location;
4ee9c684 2778
2779 /* Emit warnings as needed. */
e7911019 2780 if (EXPR_HAS_LOCATION (cs->switch_stmt))
2781 switch_location = EXPR_LOCATION (cs->switch_stmt);
2782 else
2783 switch_location = input_location;
ca4d58e1 2784 if (!processing_template_decl)
2785 c_do_switch_warnings (cs->cases, switch_location,
2786 SWITCH_STMT_TYPE (cs->switch_stmt),
2787 SWITCH_STMT_COND (cs->switch_stmt));
3c3beda6 2788
225ec6aa 2789 splay_tree_delete (cs->cases);
127a1cd0 2790 switch_stack = switch_stack->next;
769177ac 2791 free (cs);
127a1cd0 2792}
2793
c2af356c 2794/* Note that we've seen a definition of a case label, and complain if this
2795 is a bad place for one. */
96624a9e 2796
4aa0811f 2797tree
e60a6f7b 2798finish_case_label (location_t loc, tree low_value, tree high_value)
471086d6 2799{
4aa0811f 2800 tree cond, r;
cd16867a 2801 struct cp_binding_level *p;
127a1cd0 2802
225ec6aa 2803 if (processing_template_decl)
2804 {
e41f0d80 2805 tree label;
2806
225ec6aa 2807 /* For templates, just add the case label; we'll do semantic
2808 analysis at instantiation-time. */
e60a6f7b 2809 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
2810 return add_stmt (build_case_label (loc, low_value, high_value, label));
225ec6aa 2811 }
2812
2813 /* Find the condition on which this switch statement depends. */
ffc8e524 2814 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
225ec6aa 2815 if (cond && TREE_CODE (cond) == TREE_LIST)
2816 cond = TREE_VALUE (cond);
225ec6aa 2817
8487df40 2818 if (!check_switch_goto (switch_stack->level))
2819 return error_mark_node;
2820
e60a6f7b 2821 r = c_add_case_label (loc, switch_stack->cases, cond,
5007a698 2822 SWITCH_STMT_TYPE (switch_stack->switch_stmt),
2ca392fd 2823 low_value, high_value);
471086d6 2824
886deab8 2825 /* After labels, make any new cleanups in the function go into their
471086d6 2826 own new (temporary) binding contour. */
491e04ef 2827 for (p = current_binding_level;
2828 p->kind != sk_function_parms;
37b9a732 2829 p = p->level_chain)
886deab8 2830 p->more_cleanups_ok = 0;
4aa0811f 2831
2832 return r;
471086d6 2833}
2834\f
e4e283ec 2835/* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2836
1f3233d1 2837static hashval_t
1b72315d 2838typename_hash (const void* k)
e4e283ec 2839{
1f3233d1 2840 hashval_t hash;
aae87fc3 2841 const_tree const t = (const_tree) k;
e4e283ec 2842
957b210f 2843 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2844 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
e4e283ec 2845
2846 return hash;
2847}
2848
e2ae55f2 2849typedef struct typename_info {
2850 tree scope;
2851 tree name;
2852 tree template_id;
2853 bool enum_p;
2854 bool class_p;
2855} typename_info;
2856
6753bca0 2857/* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
2858 really of type `typename_info*' */
e4e283ec 2859
1f3233d1 2860static int
1b72315d 2861typename_compare (const void * k1, const void * k2)
e4e283ec 2862{
aae87fc3 2863 const_tree const t1 = (const_tree) k1;
2864 const typename_info *const t2 = (const typename_info *) k2;
e2ae55f2 2865
2866 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2867 && TYPE_CONTEXT (t1) == t2->scope
2868 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2869 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2870 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
e4e283ec 2871}
2872
871d88e7 2873/* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
e2ae55f2 2874 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
9031d10b 2875
871d88e7 2876 Returns the new TYPENAME_TYPE. */
2877
1f3233d1 2878static GTY ((param_is (union tree_node))) htab_t typename_htab;
2879
9140e457 2880static tree
e2ae55f2 2881build_typename_type (tree context, tree name, tree fullname,
2882 enum tag_types tag_type)
871d88e7 2883{
2884 tree t;
2885 tree d;
e2ae55f2 2886 typename_info ti;
b9a7cc69 2887 void **e;
e2ae55f2 2888 hashval_t hash;
871d88e7 2889
1f3233d1 2890 if (typename_htab == NULL)
e2ae55f2 2891 typename_htab = htab_create_ggc (61, &typename_hash,
2892 &typename_compare, NULL);
2893
9031d10b 2894 ti.scope = FROB_CONTEXT (context);
e2ae55f2 2895 ti.name = name;
2896 ti.template_id = fullname;
2897 ti.enum_p = tag_type == enum_type;
2898 ti.class_p = (tag_type == class_type
2899 || tag_type == record_type
2900 || tag_type == union_type);
2901 hash = (htab_hash_pointer (ti.scope)
2902 ^ htab_hash_pointer (ti.name));
871d88e7 2903
e4e283ec 2904 /* See if we already have this type. */
e2ae55f2 2905 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
1f3233d1 2906 if (*e)
2907 t = (tree) *e;
e4e283ec 2908 else
e2ae55f2 2909 {
2910 /* Build the TYPENAME_TYPE. */
95397ff9 2911 t = cxx_make_type (TYPENAME_TYPE);
e2ae55f2 2912 TYPE_CONTEXT (t) = ti.scope;
2913 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2914 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2915 TYPENAME_IS_CLASS_P (t) = ti.class_p;
9031d10b 2916
e2ae55f2 2917 /* Build the corresponding TYPE_DECL. */
e60a6f7b 2918 d = build_decl (input_location, TYPE_DECL, name, t);
e2ae55f2 2919 TYPE_NAME (TREE_TYPE (d)) = d;
2920 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2921 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2922 DECL_ARTIFICIAL (d) = 1;
2923
2924 /* Store it in the hash table. */
2925 *e = t;
6753bca0 2926
2927 /* TYPENAME_TYPEs must always be compared structurally, because
2928 they may or may not resolve down to another type depending on
2929 the currently open classes. */
2930 SET_TYPE_STRUCTURAL_EQUALITY (t);
e2ae55f2 2931 }
9031d10b 2932
871d88e7 2933 return t;
2934}
2935
e2ae55f2 2936/* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
2937 provided to name the type. Returns an appropriate type, unless an
2938 error occurs, in which case error_mark_node is returned. If we
2939 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2940 return that, rather than the _TYPE it corresponds to, in other
2941 cases we look through the type decl. If TF_ERROR is set, complain
2942 about errors, otherwise be quiet. */
97dbca2f 2943
e857e9c7 2944tree
e2ae55f2 2945make_typename_type (tree context, tree name, enum tag_types tag_type,
2946 tsubst_flags_t complain)
e857e9c7 2947{
15ba7646 2948 tree fullname;
e2423a3d 2949 tree t;
2950 bool want_template;
bccffb3a 2951
50a06544 2952 if (name == error_mark_node
2953 || context == NULL_TREE
2954 || context == error_mark_node)
2955 return error_mark_node;
2956
9308e976 2957 if (TYPE_P (name))
91fa7c70 2958 {
980877d7 2959 if (!(TYPE_LANG_SPECIFIC (name)
2960 && (CLASSTYPE_IS_TEMPLATE (name)
91fa7c70 2961 || CLASSTYPE_USE_TEMPLATE (name))))
2962 name = TYPE_IDENTIFIER (name);
2963 else
2964 /* Create a TEMPLATE_ID_EXPR for the type. */
2965 name = build_nt (TEMPLATE_ID_EXPR,
2966 CLASSTYPE_TI_TEMPLATE (name),
2967 CLASSTYPE_TI_ARGS (name));
2968 }
9dc9e65f 2969 else if (TREE_CODE (name) == TYPE_DECL)
bccffb3a 2970 name = DECL_NAME (name);
15ba7646 2971
2972 fullname = name;
2973
2974 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
eab00fbe 2975 {
2976 name = TREE_OPERAND (name, 0);
2977 if (TREE_CODE (name) == TEMPLATE_DECL)
2978 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
b8a07692 2979 else if (TREE_CODE (name) == OVERLOAD)
2980 {
2981 error ("%qD is not a type", name);
2982 return error_mark_node;
2983 }
eab00fbe 2984 }
69773da0 2985 if (TREE_CODE (name) == TEMPLATE_DECL)
2986 {
3ce479a6 2987 error ("%qD used without template parameters", name);
69773da0 2988 return error_mark_node;
2989 }
b4df430b 2990 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
d9da0685 2991 gcc_assert (TYPE_P (context));
aba12bf8 2992
95397ff9 2993 if (!MAYBE_CLASS_TYPE_P (context))
e2423a3d 2994 {
2995 if (complain & tf_error)
2996 error ("%q#T is not a class", context);
2997 return error_mark_node;
e857e9c7 2998 }
e2423a3d 2999
05f701e2 3000 /* When the CONTEXT is a dependent type, NAME could refer to a
3001 dependent base class of CONTEXT. But look inside it anyway
3002 if CONTEXT is a currently open scope, in case it refers to a
3003 member of the current instantiation or a non-dependent base;
3004 lookup will stop when we hit a dependent base. */
3005 if (!dependent_scope_p (context))
3006 /* We should only set WANT_TYPE when we're a nested typename type.
3007 Then we can give better diagnostics if we find a non-type. */
3008 t = lookup_field (context, name, 0, /*want_type=*/true);
3009 else
3010 t = NULL_TREE;
3011
3012 if (!t && dependent_type_p (context))
3013 return build_typename_type (context, name, fullname, tag_type);
3014
e2423a3d 3015 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3016
e2423a3d 3017 if (!t)
06a748d7 3018 {
9edbac04 3019 if (complain & tf_error)
e2423a3d 3020 error (want_template ? "no class template named %q#T in %q#T"
3021 : "no type named %q#T in %q#T", name, context);
06a748d7 3022 return error_mark_node;
3023 }
e2423a3d 3024
3025 if (want_template && !DECL_CLASS_TEMPLATE_P (t))
3026 {
3027 if (complain & tf_error)
3028 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3029 context, name, t);
3030 return error_mark_node;
3031 }
3032 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3033 {
3034 if (complain & tf_error)
3035 error ("%<typename %T::%D%> names %q#T, which is not a type",
3036 context, name, t);
3037 return error_mark_node;
3038 }
3039
3040 if (complain & tf_error)
579bb663 3041 perform_or_defer_access_check (TYPE_BINFO (context), t, t);
e2423a3d 3042
3043 if (want_template)
3044 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3045 NULL_TREE, context,
3046 /*entering_scope=*/0,
3047 tf_warning_or_error | tf_user);
3048
3049 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3050 t = TREE_TYPE (t);
3051
3052 return t;
e857e9c7 3053}
3054
f95fba26 3055/* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
9031d10b 3056 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
f95fba26 3057 in which case error_mark_node is returned.
3058
3059 If PARM_LIST is non-NULL, also make sure that the template parameter
3060 list of TEMPLATE_DECL matches.
3061
3062 If COMPLAIN zero, don't complain about any errors that occur. */
47d727d4 3063
3064tree
f95fba26 3065make_unbound_class_template (tree context, tree name, tree parm_list,
3066 tsubst_flags_t complain)
47d727d4 3067{
3068 tree t;
3069 tree d;
3070
3071 if (TYPE_P (name))
3072 name = TYPE_IDENTIFIER (name);
3073 else if (DECL_P (name))
3074 name = DECL_NAME (name);
092b1d6f 3075 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
47d727d4 3076
c04baa53 3077 if (!dependent_type_p (context)
47d727d4 3078 || currently_open_class (context))
3079 {
3080 tree tmpl = NULL_TREE;
3081
95397ff9 3082 if (MAYBE_CLASS_TYPE_P (context))
b330805e 3083 tmpl = lookup_field (context, name, 0, false);
47d727d4 3084
3085 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
3086 {
b9a2c51c 3087 if (complain & tf_error)
3ce479a6 3088 error ("no class template named %q#T in %q#T", name, context);
47d727d4 3089 return error_mark_node;
3090 }
491e04ef 3091
f95fba26 3092 if (parm_list
3093 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3094 {
3095 if (complain & tf_error)
3096 {
3097 error ("template parameters do not match template");
3cf8b391 3098 error ("%q+D declared here", tmpl);
f95fba26 3099 }
3100 return error_mark_node;
3101 }
3102
7a468236 3103 if (complain & tf_error)
579bb663 3104 perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
47d727d4 3105
3106 return tmpl;
3107 }
3108
3109 /* Build the UNBOUND_CLASS_TEMPLATE. */
95397ff9 3110 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
47d727d4 3111 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3112 TREE_TYPE (t) = NULL_TREE;
6753bca0 3113 SET_TYPE_STRUCTURAL_EQUALITY (t);
47d727d4 3114
3115 /* Build the corresponding TEMPLATE_DECL. */
e60a6f7b 3116 d = build_decl (input_location, TEMPLATE_DECL, name, t);
47d727d4 3117 TYPE_NAME (TREE_TYPE (d)) = d;
3118 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3119 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3120 DECL_ARTIFICIAL (d) = 1;
f95fba26 3121 DECL_TEMPLATE_PARMS (d) = parm_list;
47d727d4 3122
3123 return t;
3124}
3125
471086d6 3126\f
54bd1509 3127
471086d6 3128/* Push the declarations of builtin types into the namespace.
b7d1e8ea 3129 RID_INDEX is the index of the builtin type in the array
3130 RID_POINTERS. NAME is the name used when looking up the builtin
3131 type. TYPE is the _TYPE node for the builtin type. */
471086d6 3132
174fcc61 3133void
491e04ef 3134record_builtin_type (enum rid rid_index,
653e5405 3135 const char* name,
3136 tree type)
471086d6 3137{
3138 tree rname = NULL_TREE, tname = NULL_TREE;
034b484a 3139 tree tdecl = NULL_TREE;
471086d6 3140
518796ad 3141 if ((int) rid_index < (int) RID_MAX)
471086d6 3142 rname = ridpointers[(int) rid_index];
3143 if (name)
3144 tname = get_identifier (name);
3145
b7d1e8ea 3146 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3147 eliminated. Built-in types should not be looked up name; their
3148 names are keywords that the parser can recognize. However, there
3149 is code in c-common.c that uses identifier_global_value to look
3150 up built-in types by name. */
471086d6 3151 if (tname)
3152 {
e60a6f7b 3153 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
b7d1e8ea 3154 DECL_ARTIFICIAL (tdecl) = 1;
37b9a732 3155 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
471086d6 3156 }
b7d1e8ea 3157 if (rname)
471086d6 3158 {
b7d1e8ea 3159 if (!tdecl)
471086d6 3160 {
e60a6f7b 3161 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
b7d1e8ea 3162 DECL_ARTIFICIAL (tdecl) = 1;
471086d6 3163 }
b7d1e8ea 3164 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
471086d6 3165 }
b7d1e8ea 3166
3167 if (!TYPE_NAME (type))
3168 TYPE_NAME (type) = tdecl;
54bd1509 3169
3170 if (tdecl)
73ae3ef7 3171 debug_hooks->type_decl (tdecl, 0);
471086d6 3172}
3173
7d53e30d 3174/* Record one of the standard Java types.
84ea6a1d 3175 * Declare it as having the given NAME.
3176 * If SIZE > 0, it is the size of one of the integral types;
3177 * otherwise it is the negative of the size of one of the other types. */
7d53e30d 3178
3179static tree
1b72315d 3180record_builtin_java_type (const char* name, int size)
7d53e30d 3181{
3182 tree type, decl;
3183 if (size > 0)
da748ee5 3184 type = build_nonstandard_integer_type (size, 0);
7d53e30d 3185 else if (size > -32)
da748ee5 3186 {
3187 tree stype;
3188 /* "__java_char" or ""__java_boolean". */
3189 type = build_nonstandard_integer_type (-size, 1);
3190 /* Get the signed type cached and attached to the unsigned type,
3191 so it doesn't get garbage-collected at "random" times,
3192 causing potential codegen differences out of different UIDs
3193 and different alias set numbers. */
3194 stype = build_nonstandard_integer_type (-size, 0);
3195 TREE_CHAIN (type) = stype;
01b7f6cd 3196 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
7d53e30d 3197 }
3198 else
a109dc3b 3199 { /* "__java_float" or ""__java_double". */
7d53e30d 3200 type = make_node (REAL_TYPE);
3201 TYPE_PRECISION (type) = - size;
3202 layout_type (type);
3203 }
518796ad 3204 record_builtin_type (RID_MAX, name, type);
7d53e30d 3205 decl = TYPE_NAME (type);
47b15141 3206
3207 /* Suppress generate debug symbol entries for these types,
3208 since for normal C++ they are just clutter.
a109dc3b 3209 However, push_lang_context undoes this if extern "Java" is seen. */
7d53e30d 3210 DECL_IGNORED_P (decl) = 1;
47b15141 3211
7d53e30d 3212 TYPE_FOR_JAVA (type) = 1;
3213 return type;
3214}
3215
a17c2a3a 3216/* Push a type into the namespace so that the back ends ignore it. */
2100d3e8 3217
3218static void
1b72315d 3219record_unknown_type (tree type, const char* name)
2100d3e8 3220{
e60a6f7b 3221 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3222 TYPE_DECL, get_identifier (name), type));
2100d3e8 3223 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3224 DECL_IGNORED_P (decl) = 1;
3225 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3226 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3227 TYPE_ALIGN (type) = 1;
aca14577 3228 TYPE_USER_ALIGN (type) = 0;
342ad2d6 3229 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
980877d7 3230}
2100d3e8 3231
cd7043f9 3232/* A string for which we should create an IDENTIFIER_NODE at
8eadd521 3233 startup. */
3234
3235typedef struct predefined_identifier
3236{
3237 /* The name of the identifier. */
e99c3a1d 3238 const char *const name;
8eadd521 3239 /* The place where the IDENTIFIER_NODE should be stored. */
e99c3a1d 3240 tree *const node;
3160db1d 3241 /* Nonzero if this is the name of a constructor or destructor. */
e99c3a1d 3242 const int ctor_or_dtor_p;
8eadd521 3243} predefined_identifier;
3244
3245/* Create all the predefined identifiers. */
3246
3247static void
1b72315d 3248initialize_predefined_identifiers (void)
8eadd521 3249{
e99c3a1d 3250 const predefined_identifier *pid;
8eadd521 3251
3252 /* A table of identifiers to create at startup. */
e99c3a1d 3253 static const predefined_identifier predefined_identifiers[] = {
f04596da 3254 { "C++", &lang_name_cplusplus, 0 },
3255 { "C", &lang_name_c, 0 },
3256 { "Java", &lang_name_java, 0 },
b11a98c8 3257 /* Some of these names have a trailing space so that it is
3258 impossible for them to conflict with names written by users. */
3259 { "__ct ", &ctor_identifier, 1 },
3260 { "__base_ctor ", &base_ctor_identifier, 1 },
3261 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3262 { "__dt ", &dtor_identifier, 1 },
3263 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3264 { "__base_dtor ", &base_dtor_identifier, 1 },
3265 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
f04596da 3266 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
f04596da 3267 { "nelts", &nelts_identifier, 0 },
3268 { THIS_NAME, &this_identifier, 0 },
dc9b5a48 3269 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
f04596da 3270 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
f04596da 3271 { "_vptr", &vptr_identifier, 0 },
0ce25b06 3272 { "__vtt_parm", &vtt_parm_identifier, 0 },
7bfd46d1 3273 { "::", &global_scope_name, 0 },
98eaf693 3274 { "std", &std_identifier, 0 },
f04596da 3275 { NULL, NULL, 0 }
8eadd521 3276 };
3277
3278 for (pid = predefined_identifiers; pid->name; ++pid)
f04596da 3279 {
3280 *pid->node = get_identifier (pid->name);
3281 if (pid->ctor_or_dtor_p)
3282 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3283 }
8eadd521 3284}
3285
471086d6 3286/* Create the predefined scalar types of C,
3287 and some nodes representing standard constants (0, 1, (void *)0).
3288 Initialize the global binding level.
3289 Make definitions for built-in primitive functions. */
3290
3291void
1b72315d 3292cxx_init_decl_processing (void)
471086d6 3293{
d2d4bdde 3294 tree void_ftype;
3295 tree void_ftype_ptr;
471086d6 3296
1561d3cd 3297 build_common_tree_nodes (flag_signed_char, false);
0366834b 3298
8eadd521 3299 /* Create all the identifiers we need. */
3300 initialize_predefined_identifiers ();
471086d6 3301
1e4853c2 3302 /* Create the global variables. */
3303 push_to_top_level ();
509cd7a7 3304
7bfd46d1 3305 current_function_decl = NULL_TREE;
66115136 3306 current_binding_level = NULL;
a109dc3b 3307 /* Enter the global namespace. */
b4df430b 3308 gcc_assert (global_namespace == NULL_TREE);
7bfd46d1 3309 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
653e5405 3310 void_type_node);
4a2849cb 3311 TREE_PUBLIC (global_namespace) = 1;
e880f232 3312 begin_scope (sk_namespace, global_namespace);
7bfd46d1 3313
18e99d00 3314 current_lang_name = NULL_TREE;
3315
54f1c2a2 3316 if (flag_visibility_ms_compat)
3317 default_visibility = VISIBILITY_HIDDEN;
3318
471086d6 3319 /* Initially, C. */
3320 current_lang_name = lang_name_c;
3321
0270ae90 3322 /* Create the `std' namespace. */
eaf45f93 3323 push_namespace (std_identifier);
3324 std_node = current_namespace;
3325 pop_namespace ();
3c3beda6 3326
174fcc61 3327 c_common_nodes_and_builtins ();
c4a8ac95 3328
84ea6a1d 3329 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3330 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3331 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3332 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3333 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3334 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3335 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3336 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
7d53e30d 3337
7016c612 3338 integer_two_node = build_int_cst (NULL_TREE, 2);
3339 integer_three_node = build_int_cst (NULL_TREE, 3);
471086d6 3340
ca2be8b5 3341 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3c2239cf 3342 truthvalue_type_node = boolean_type_node;
3343 truthvalue_false_node = boolean_false_node;
3344 truthvalue_true_node = boolean_true_node;
bb0726a1 3345
316b7a44 3346 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6bf5ed8d 3347
3348#if 0
4d698345 3349 record_builtin_type (RID_MAX, NULL, string_type_node);
6bf5ed8d 3350#endif
3351
606b494c 3352 delta_type_node = ptrdiff_type_node;
3353 vtable_index_type = ptrdiff_type_node;
63a6a423 3354
0ce25b06 3355 vtt_parm_type = build_pointer_type (const_ptr_type_node);
d2d4bdde 3356 void_ftype = build_function_type (void_type_node, void_list_node);
3357 void_ftype_ptr = build_function_type (void_type_node,
3358 tree_cons (NULL_TREE,
491e04ef 3359 ptr_type_node,
d2d4bdde 3360 void_list_node));
02d7f858 3361 void_ftype_ptr
316b7a44 3362 = build_exception_variant (void_ftype_ptr, empty_except_spec);
471086d6 3363
471086d6 3364 /* C++ extensions */
3365
3366 unknown_type_node = make_node (UNKNOWN_TYPE);
2100d3e8 3367 record_unknown_type (unknown_type_node, "unknown type");
3368
471086d6 3369 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3370 TREE_TYPE (unknown_type_node) = unknown_type_node;
c4d89d79 3371
c4d89d79 3372 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3373 result. */
471086d6 3374 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3375 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3376
f82f1250 3377 init_list_type_node = make_node (UNKNOWN_TYPE);
3378 record_unknown_type (init_list_type_node, "init list");
3379
dc9b5a48 3380 {
3381 /* Make sure we get a unique function type, so we can give
3382 its pointer type a name. (This wins for gdb.) */
3383 tree vfunc_type = make_node (FUNCTION_TYPE);
3384 TREE_TYPE (vfunc_type) = integer_type_node;
3385 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3386 layout_type (vfunc_type);
3387
3388 vtable_entry_type = build_pointer_type (vfunc_type);
3389 }
518796ad 3390 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
471086d6 3391
471086d6 3392 vtbl_type_node
457b74c8 3393 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
471086d6 3394 layout_type (vtbl_type_node);
3e04bd45 3395 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4d698345 3396 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
8ec060ec 3397 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3398 layout_type (vtbl_ptr_type_node);
4d698345 3399 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
471086d6 3400
606b494c 3401 push_namespace (get_identifier ("__cxxabiv1"));
3402 abi_node = current_namespace;
3403 pop_namespace ();
6686e84d 3404
8417823c 3405 global_type_node = make_node (LANG_TYPE);
2100d3e8 3406 record_unknown_type (global_type_node, "global type");
8417823c 3407
c25194fd 3408 /* Now, C++. */
3409 current_lang_name = lang_name_cplusplus;
471086d6 3410
4b7a79e2 3411 {
b7d1e8ea 3412 tree bad_alloc_id;
3413 tree bad_alloc_type_node;
3414 tree bad_alloc_decl;
3415 tree newtype, deltype;
d2d4bdde 3416 tree ptr_ftype_sizetype;
3417
eaf45f93 3418 push_namespace (std_identifier);
b7d1e8ea 3419 bad_alloc_id = get_identifier ("bad_alloc");
95397ff9 3420 bad_alloc_type_node = make_class_type (RECORD_TYPE);
b7d1e8ea 3421 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
491e04ef 3422 bad_alloc_decl
b7d1e8ea 3423 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3424 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3425 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
eaf45f93 3426 pop_namespace ();
491e04ef 3427
3428 ptr_ftype_sizetype
d2d4bdde 3429 = build_function_type (ptr_type_node,
3430 tree_cons (NULL_TREE,
654ef926 3431 size_type_node,
d2d4bdde 3432 void_list_node));
8417823c 3433 newtype = build_exception_variant
65b7f83f 3434 (ptr_ftype_sizetype, add_exception_specifier
3435 (NULL_TREE, bad_alloc_type_node, -1));
316b7a44 3436 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
97cc4539 3437 push_cp_library_fn (NEW_EXPR, newtype);
3438 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3439 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3440 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
4b7a79e2 3441 }
471086d6 3442
3443 abort_fndecl
606b494c 3444 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
471086d6 3445
471086d6 3446 /* Perform other language dependent initializations. */
3447 init_class_processing ();
1ca0e0c0 3448 init_rtti_processing ();
471086d6 3449
596c0ae6 3450 if (flag_exceptions)
f96b25bb 3451 init_exception_processing ();
63b1d638 3452
d200dc92 3453 if (! supports_one_only ())
3d4e092a 3454 flag_weak = 0;
471086d6 3455
9e5a737d 3456 make_fname_decl = cp_make_fname_decl;
65b7f83f 3457 start_fname_decls ();
471086d6 3458
0dbd1c74 3459 /* Show we use EH for cleanups. */
4ee9c684 3460 if (flag_exceptions)
3461 using_eh_for_cleanups ();
fce73460 3462}
3463
65b7f83f 3464/* Generate an initializer for a function naming variable from
4880ab99 3465 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
331bc0ad 3466 filled in with the type of the init. */
65b7f83f 3467
3468tree
4880ab99 3469cp_fname_init (const char* name, tree *type_p)
65b7f83f 3470{
3471 tree domain = NULL_TREE;
3472 tree type;
3473 tree init = NULL_TREE;
3474 size_t length = 0;
3475
3476 if (name)
3477 {
3478 length = strlen (name);
3479 domain = build_index_type (size_int (length));
3480 init = build_string (length + 1, name);
3481 }
491e04ef 3482
65b7f83f 3483 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3484 type = build_cplus_array_type (type, domain);
3485
4880ab99 3486 *type_p = type;
491e04ef 3487
65b7f83f 3488 if (init)
3489 TREE_TYPE (init) = type;
3490 else
4880ab99 3491 init = error_mark_node;
491e04ef 3492
65b7f83f 3493 return init;
3494}
3495
e60a6f7b 3496/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3497 the decl, LOC is the location to give the decl, NAME is the
3498 initialization string and TYPE_DEP indicates whether NAME depended
3499 on the type of the function. We make use of that to detect
3500 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3501 at the point of first use, so we mustn't push the decl now. */
9e5a737d 3502
3503static tree
e60a6f7b 3504cp_make_fname_decl (location_t loc, tree id, int type_dep)
9e5a737d 3505{
0d95286f 3506 const char *const name = (type_dep && processing_template_decl
d148dc28 3507 ? NULL : fname_as_string (type_dep));
4880ab99 3508 tree type;
3509 tree init = cp_fname_init (name, &type);
e60a6f7b 3510 tree decl = build_decl (loc, VAR_DECL, id, type);
9e5a737d 3511
15c4b973 3512 if (name)
e47a6f81 3513 free (CONST_CAST (char *, name));
15c4b973 3514
81010c97 3515 /* As we're using pushdecl_with_scope, we must set the context. */
65b7f83f 3516 DECL_CONTEXT (decl) = current_function_decl;
3517 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
491e04ef 3518
9e5a737d 3519 TREE_STATIC (decl) = 1;
3520 TREE_READONLY (decl) = 1;
9e5a737d 3521 DECL_ARTIFICIAL (decl) = 1;
491e04ef 3522
65b7f83f 3523 TREE_USED (decl) = 1;
3c3beda6 3524
81010c97 3525 if (current_function_decl)
3526 {
3527 struct cp_binding_level *b = current_binding_level;
37b9a732 3528 while (b->level_chain->kind != sk_function_parms)
81010c97 3529 b = b->level_chain;
c1d4295f 3530 pushdecl_with_scope (decl, b, /*is_friend=*/false);
074ab442 3531 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
d91303a6 3532 LOOKUP_ONLYCONVERTING);
d148dc28 3533 }
2f24a61c 3534 else
3535 pushdecl_top_level_and_finish (decl, init);
491e04ef 3536
9e5a737d 3537 return decl;
3538}
3539
54be5d7e 3540static tree
24470055 3541builtin_function_1 (tree decl, tree context, bool is_global)
54be5d7e 3542{
3543 tree id = DECL_NAME (decl);
3544 const char *name = IDENTIFIER_POINTER (id);
471086d6 3545
54be5d7e 3546 retrofit_lang_decl (decl);
d267eaf5 3547
54be5d7e 3548 /* All nesting of C++ functions is lexical; there is never a "static
3549 chain" in the sense of GNU C nested functions. */
3550 DECL_NO_STATIC_CHAIN (decl) = 1;
3551
3552 DECL_ARTIFICIAL (decl) = 1;
3553 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3554 SET_DECL_LANGUAGE (decl, lang_c);
3555 /* Runtime library routines are, by definition, available in an
3556 external shared object. */
3557 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3558 DECL_VISIBILITY_SPECIFIED (decl) = 1;
471086d6 3559
ae8cbbc8 3560 DECL_CONTEXT (decl) = context;
00dd2e9e 3561
24470055 3562 if (is_global)
3563 pushdecl_top_level (decl);
3564 else
3565 pushdecl (decl);
0270ae90 3566
c1d4295f 3567 /* A function in the user's namespace should have an explicit
3568 declaration before it is used. Mark the built-in function as
3569 anticipated but not actually declared. */
c324ed63 3570 if (name[0] != '_' || name[1] != '_')
3571 DECL_ANTICIPATED (decl) = 1;
a3558ba3 3572 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3573 {
3574 size_t len = strlen (name);
3575
3576 /* Treat __*_chk fortification functions as anticipated as well,
3577 unless they are __builtin_*. */
3578 if (len > strlen ("___chk")
3579 && memcmp (name + len - strlen ("_chk"),
3580 "_chk", strlen ("_chk") + 1) == 0)
3581 DECL_ANTICIPATED (decl) = 1;
3582 }
c324ed63 3583
471086d6 3584 return decl;
3585}
72040e7e 3586
ae8cbbc8 3587tree
54be5d7e 3588cxx_builtin_function (tree decl)
ae8cbbc8 3589{
54be5d7e 3590 tree id = DECL_NAME (decl);
3591 const char *name = IDENTIFIER_POINTER (id);
ae8cbbc8 3592 /* All builtins that don't begin with an '_' should additionally
3593 go in the 'std' namespace. */
3594 if (name[0] != '_')
3595 {
fdf53993 3596 tree decl2 = copy_node(decl);
ae8cbbc8 3597 push_namespace (std_identifier);
24470055 3598 builtin_function_1 (decl2, std_node, false);
3599 pop_namespace ();
3600 }
3601
3602 return builtin_function_1 (decl, NULL_TREE, false);
3603}
3604
3605/* Like cxx_builtin_function, but guarantee the function is added to the global
3606 scope. This is to allow function specific options to add new machine
3607 dependent builtins when the target ISA changes via attribute((target(...)))
3608 which saves space on program startup if the program does not use non-generic
3609 ISAs. */
3610
3611tree
3612cxx_builtin_function_ext_scope (tree decl)
3613{
3614
3615 tree id = DECL_NAME (decl);
3616 const char *name = IDENTIFIER_POINTER (id);
3617 /* All builtins that don't begin with an '_' should additionally
3618 go in the 'std' namespace. */
3619 if (name[0] != '_')
3620 {
3621 tree decl2 = copy_node(decl);
3622 push_namespace (std_identifier);
3623 builtin_function_1 (decl2, std_node, true);
ae8cbbc8 3624 pop_namespace ();
3625 }
3626
24470055 3627 return builtin_function_1 (decl, NULL_TREE, true);
ae8cbbc8 3628}
3629
d267eaf5 3630/* Generate a FUNCTION_DECL with the typical flags for a runtime library
3631 function. Not called directly. */
3632
3633static tree
1b72315d 3634build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
d267eaf5 3635{
3636 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3637 DECL_EXTERNAL (fn) = 1;
3638 TREE_PUBLIC (fn) = 1;
3639 DECL_ARTIFICIAL (fn) = 1;
97cc4539 3640 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
4b1984f5 3641 SET_DECL_LANGUAGE (fn, lang_c);
91caa6ca 3642 /* Runtime library routines are, by definition, available in an
3643 external shared object. */
3644 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3645 DECL_VISIBILITY_SPECIFIED (fn) = 1;
d267eaf5 3646 return fn;
3647}
c215939a 3648
d267eaf5 3649/* Returns the _DECL for a library function with C linkage.
3650 We assume that such functions never throw; if this is incorrect,
3651 callers should unset TREE_NOTHROW. */
c215939a 3652
0b83df30 3653static tree
1b72315d 3654build_library_fn (tree name, tree type)
d267eaf5 3655{
25c55cb4 3656 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3657 TREE_NOTHROW (fn) = 1;
3658 return fn;
d267eaf5 3659}
3660
3661/* Returns the _DECL for a library function with C++ linkage. */
3662
97cc4539 3663static tree
1b72315d 3664build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
d267eaf5 3665{
97cc4539 3666 tree fn = build_library_fn_1 (name, operator_code, type);
d267eaf5 3667 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
c87435c8 3668 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4b1984f5 3669 SET_DECL_LANGUAGE (fn, lang_cplusplus);
d267eaf5 3670 return fn;
3671}
3672
3673/* Like build_library_fn, but takes a C string instead of an
3674 IDENTIFIER_NODE. */
3675
3676tree
1b72315d 3677build_library_fn_ptr (const char* name, tree type)
72040e7e 3678{
d267eaf5 3679 return build_library_fn (get_identifier (name), type);
3680}
3681
3682/* Like build_cp_library_fn, but takes a C string instead of an
3683 IDENTIFIER_NODE. */
3684
3685tree
1b72315d 3686build_cp_library_fn_ptr (const char* name, tree type)
d267eaf5 3687{
97cc4539 3688 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
d267eaf5 3689}
3690
3691/* Like build_library_fn, but also pushes the function so that we will
0b83df30 3692 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
3693 may throw exceptions listed in RAISES. */
d267eaf5 3694
3695tree
0b83df30 3696push_library_fn (tree name, tree type, tree raises)
d267eaf5 3697{
0b83df30 3698 tree fn;
3699
3700 if (raises)
3701 type = build_exception_variant (type, raises);
3702
3703 fn = build_library_fn (name, type);
d267eaf5 3704 pushdecl_top_level (fn);
3705 return fn;
3706}
3707
3708/* Like build_cp_library_fn, but also pushes the function so that it
3709 will be found by normal lookup. */
3710
97cc4539 3711static tree
1b72315d 3712push_cp_library_fn (enum tree_code operator_code, tree type)
d267eaf5 3713{
3c3beda6 3714 tree fn = build_cp_library_fn (ansi_opname (operator_code),
97cc4539 3715 operator_code,
3716 type);
d267eaf5 3717 pushdecl (fn);
3718 return fn;
3719}
3720
3721/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3722 a FUNCTION_TYPE. */
3723
3724tree
1b72315d 3725push_void_library_fn (tree name, tree parmtypes)
d267eaf5 3726{
3727 tree type = build_function_type (void_type_node, parmtypes);
0b83df30 3728 return push_library_fn (name, type, NULL_TREE);
d267eaf5 3729}
3730
93d6541c 3731/* Like push_library_fn, but also note that this function throws
d267eaf5 3732 and does not return. Used for __throw_foo and the like. */
3733
3734tree
1b72315d 3735push_throw_library_fn (tree name, tree type)
d267eaf5 3736{
0b83df30 3737 tree fn = push_library_fn (name, type, NULL_TREE);
d267eaf5 3738 TREE_THIS_VOLATILE (fn) = 1;
3739 TREE_NOTHROW (fn) = 0;
3740 return fn;
72040e7e 3741}
471086d6 3742\f
0f2952a1 3743/* When we call finish_struct for an anonymous union, we create
3744 default copy constructors and such. But, an anonymous union
3745 shouldn't have such things; this function undoes the damage to the
3746 anonymous union type T.
3747
3748 (The reason that we create the synthesized methods is that we don't
3749 distinguish `union { int i; }' from `typedef union { int i; } U'.
3750 The first is an anonymous union; the second is just an ordinary
3751 union type.) */
3752
3753void
1b72315d 3754fixup_anonymous_aggr (tree t)
0f2952a1 3755{
3756 tree *q;
3757
331bc0ad 3758 /* Wipe out memory of synthesized methods. */
930e8175 3759 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
0f2952a1 3760 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3761 TYPE_HAS_INIT_REF (t) = 0;
3762 TYPE_HAS_CONST_INIT_REF (t) = 0;
3763 TYPE_HAS_ASSIGN_REF (t) = 0;
0f2952a1 3764 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3765
3766 /* Splice the implicitly generated functions out of the TYPE_METHODS
3767 list. */
3768 q = &TYPE_METHODS (t);
3769 while (*q)
3770 {
3771 if (DECL_ARTIFICIAL (*q))
3772 *q = TREE_CHAIN (*q);
3773 else
3774 q = &TREE_CHAIN (*q);
3775 }
3776
657c76e1 3777 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
0f2952a1 3778 if (TYPE_METHODS (t))
c2d52c0c 3779 {
3780 tree decl = TYPE_MAIN_DECL (t);
3781
3782 if (TREE_CODE (t) != UNION_TYPE)
3783 error ("%Jan anonymous struct cannot have function members", decl);
3784 else
3785 error ("%Jan anonymous union cannot have function members", decl);
3786 }
69821268 3787
3788 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3789 assignment operators (because they cannot have these methods themselves).
3790 For anonymous unions this is already checked because they are not allowed
3791 in any union, otherwise we have to check it. */
3792 if (TREE_CODE (t) != UNION_TYPE)
3793 {
3794 tree field, type;
3795
3796 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3797 if (TREE_CODE (field) == FIELD_DECL)
3798 {
3799 type = TREE_TYPE (field);
3800 if (CLASS_TYPE_P (type))
3801 {
653e5405 3802 if (TYPE_NEEDS_CONSTRUCTING (type))
3cf8b391 3803 error ("member %q+#D with constructor not allowed "
3804 "in anonymous aggregate", field);
69821268 3805 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3cf8b391 3806 error ("member %q+#D with destructor not allowed "
3807 "in anonymous aggregate", field);
69821268 3808 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3cf8b391 3809 error ("member %q+#D with copy assignment operator "
3810 "not allowed in anonymous aggregate", field);
69821268 3811 }
3812 }
3813 }
0f2952a1 3814}
3815
37b8b0d0 3816/* Make sure that a declaration with no declarator is well-formed, i.e.
0a3b29ad 3817 just declares a tagged type or anonymous union.
471086d6 3818
0a3b29ad 3819 Returns the type declared; or NULL_TREE if none. */
471086d6 3820
37b8b0d0 3821tree
4b9b2871 3822check_tag_decl (cp_decl_specifier_seq *declspecs)
471086d6 3823{
4b9b2871 3824 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3825 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
0a3b29ad 3826 /* If a class, struct, or enum type is declared by the DECLSPECS
3827 (i.e, if a class-specifier, enum-specifier, or non-typename
3828 elaborated-type-specifier appears in the DECLSPECS),
3829 DECLARED_TYPE is set to the corresponding type. */
3830 tree declared_type = NULL_TREE;
3831 bool error_p = false;
471086d6 3832
4b9b2871 3833 if (declspecs->multiple_types_p)
37b8b0d0 3834 error ("multiple types in one declaration");
4b9b2871 3835 else if (declspecs->redefined_builtin_type)
3836 {
3837 if (!in_system_header)
2b9e3597 3838 permerror (input_location, "redeclaration of C++ built-in type %qT",
561fec9d 3839 declspecs->redefined_builtin_type);
4b9b2871 3840 return NULL_TREE;
3841 }
48994391 3842
345b2a39 3843 if (declspecs->type
3844 && TYPE_P (declspecs->type)
491e04ef 3845 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
95397ff9 3846 && MAYBE_CLASS_TYPE_P (declspecs->type))
4b9b2871 3847 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3848 declared_type = declspecs->type;
3849 else if (declspecs->type == error_mark_node)
3850 error_p = true;
0a3b29ad 3851 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
2b9e3597 3852 permerror (input_location, "declaration does not declare anything");
83c4eacf 3853 /* Check for an anonymous union. */
95397ff9 3854 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
0a3b29ad 3855 && TYPE_ANONYMOUS_P (declared_type))
84b5d9d7 3856 {
a614c830 3857 /* 7/3 In a simple-declaration, the optional init-declarator-list
653e5405 3858 can be omitted only when declaring a class (clause 9) or
3859 enumeration (7.2), that is, when the decl-specifier-seq contains
3860 either a class-specifier, an elaborated-type-specifier with
3861 a class-key (9.1), or an enum-specifier. In these cases and
3862 whenever a class-specifier or enum-specifier is present in the
3863 decl-specifier-seq, the identifiers in these specifiers are among
3864 the names being declared by the declaration (as class-name,
3865 enum-names, or enumerators, depending on the syntax). In such
3866 cases, and except for the declaration of an unnamed bit-field (9.6),
3867 the decl-specifier-seq shall introduce one or more names into the
3868 program, or shall redeclare a name introduced by a previous
3869 declaration. [Example:
3870 enum { }; // ill-formed
3871 typedef class { }; // ill-formed
3872 --end example] */
a614c830 3873 if (saw_typedef)
653e5405 3874 {
3875 error ("missing type-name in typedef-declaration");
3876 return NULL_TREE;
3877 }
84b5d9d7 3878 /* Anonymous unions are objects, so they can have specifiers. */;
0a3b29ad 3879 SET_ANON_AGGR_TYPE_P (declared_type);
128e1d72 3880
8864917d 3881 if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
21ca8540 3882 pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
84b5d9d7 3883 }
3884
4b9b2871 3885 else
471086d6 3886 {
4b9b2871 3887 if (declspecs->specs[(int)ds_inline]
3888 || declspecs->specs[(int)ds_virtual])
3ce479a6 3889 error ("%qs can only be specified for functions",
491e04ef 3890 declspecs->specs[(int)ds_inline]
4b9b2871 3891 ? "inline" : "virtual");
3892 else if (saw_friend
491e04ef 3893 && (!current_class_type
4b9b2871 3894 || current_scope () != current_class_type))
3ce479a6 3895 error ("%<friend%> can only be specified inside a class");
4b9b2871 3896 else if (declspecs->specs[(int)ds_explicit])
3ce479a6 3897 error ("%<explicit%> can only be specified for constructors");
4b9b2871 3898 else if (declspecs->storage_class)
3899 error ("a storage class can only be specified for objects "
3900 "and functions");
3901 else if (declspecs->specs[(int)ds_const]
3902 || declspecs->specs[(int)ds_volatile]
3903 || declspecs->specs[(int)ds_restrict]
3904 || declspecs->specs[(int)ds_thread])
3905 error ("qualifiers can only be specified for objects "
3906 "and functions");
9e67fc26 3907 else if (saw_typedef)
3908 warning (0, "%<typedef%> was ignored in this declaration");
37b8b0d0 3909 }
471086d6 3910
0a3b29ad 3911 return declared_type;
37b8b0d0 3912}
3913
3914/* Called when a declaration is seen that contains no names to declare.
3915 If its type is a reference to a structure, union or enum inherited
3916 from a containing scope, shadow that tag name for the current scope
3917 with a forward reference.
3918 If its type defines a new named structure or union
3919 or defines an enum, it is valid but we need not do anything here.
3920 Otherwise, it is an error.
3921
3922 C++: may have to grok the declspecs to learn about static,
491e04ef 3923 complain for anonymous unions.
37b8b0d0 3924
0a3b29ad 3925 Returns the TYPE declared -- or NULL_TREE if none. */
3926
3927tree
4b9b2871 3928shadow_tag (cp_decl_specifier_seq *declspecs)
37b8b0d0 3929{
3930 tree t = check_tag_decl (declspecs);
3931
0a3b29ad 3932 if (!t)
3933 return NULL_TREE;
3934
a32f42ef 3935 if (declspecs->attributes)
3936 {
3cf8b391 3937 warning (0, "attribute ignored in declaration of %q+#T", t);
3938 warning (0, "attribute for %q+#T must follow the %qs keyword",
3939 t, class_key_or_enum_as_string (t));
a32f42ef 3940
3941 }
3942
ec469fe9 3943 if (maybe_process_partial_specialization (t) == error_mark_node)
3944 return NULL_TREE;
37b8b0d0 3945
3946 /* This is where the variables in an anonymous union are
3947 declared. An anonymous union declaration looks like:
3948 union { ... } ;
3949 because there is no declarator after the union, the parser
3950 sends that declaration here. */
0a3b29ad 3951 if (ANON_AGGR_TYPE_P (t))
37b8b0d0 3952 {
128e1d72 3953 fixup_anonymous_aggr (t);
37b8b0d0 3954
3955 if (TYPE_FIELDS (t))
3956 {
491e04ef 3957 tree decl = grokdeclarator (/*declarator=*/NULL,
3046c0a3 3958 declspecs, NORMAL, 0, NULL);
37b8b0d0 3959 finish_anon_union (decl);
3960 }
471086d6 3961 }
0a3b29ad 3962
3963 return t;
471086d6 3964}
3965\f
3966/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3967
3968tree
491e04ef 3969groktypename (cp_decl_specifier_seq *type_specifiers,
75eaa947 3970 const cp_declarator *declarator,
3971 bool is_template_arg)
471086d6 3972{
4b9b2871 3973 tree attrs;
bf2bc322 3974 tree type;
75eaa947 3975 enum decl_context context
3976 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4b9b2871 3977 attrs = type_specifiers->attributes;
3978 type_specifiers->attributes = NULL_TREE;
75eaa947 3979 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
ed55ed37 3980 if (attrs && type != error_mark_node)
614bac3f 3981 {
3982 if (CLASS_TYPE_P (type))
b63863e0 3983 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
3984 "outside of definition", type);
95397ff9 3985 else if (MAYBE_CLASS_TYPE_P (type))
b63863e0 3986 /* A template type parameter or other dependent type. */
3987 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
3988 "type %qT without an associated declaration", type);
614bac3f 3989 else
3990 cplus_decl_attributes (&type, attrs, 0);
3991 }
bf2bc322 3992 return type;
471086d6 3993}
3994
d1d739f8 3995/* Process a DECLARATOR for a function-scope variable declaration,
3996 namespace-scope variable declaration, or function declaration.
3997 (Function definitions go through start_function; class member
3998 declarations appearing in the body of the class go through
3999 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4000 If an error occurs, the error_mark_node is returned instead.
4001
16f0449a 4002 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4003 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4004 for an explicitly defaulted function, or SD_DELETED for an explicitly
4005 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4006 implicitly initialized via a default constructor. ATTRIBUTES and
4007 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4008 *PUSHED_SCOPE_P is set to the scope entered in this function, if any; if
4009 set, the caller is responsible for calling pop_scope. */
471086d6 4010
471086d6 4011tree
491e04ef 4012start_decl (const cp_declarator *declarator,
4b9b2871 4013 cp_decl_specifier_seq *declspecs,
653e5405 4014 int initialized,
4015 tree attributes,
4016 tree prefix_attributes,
7f602bca 4017 tree *pushed_scope_p)
471086d6 4018{
9581e01c 4019 tree decl;
d1d739f8 4020 tree type;
471086d6 4021 tree context;
ca1f96a6 4022 bool was_public;
3ef0a05e 4023 int flags;
471086d6 4024
7f602bca 4025 *pushed_scope_p = NULL_TREE;
9031d10b 4026
88da234d 4027 /* An object declared as __attribute__((deprecated)) suppresses
4028 warnings of uses of other deprecated items. */
4029 if (lookup_attribute ("deprecated", attributes))
4030 deprecated_state = DEPRECATED_SUPPRESS;
4031
e3c541f0 4032 attributes = chainon (attributes, prefix_attributes);
d8f6e09c 4033
f9670f72 4034 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
e3c541f0 4035 &attributes);
980877d7 4036
88da234d 4037 deprecated_state = DEPRECATED_NORMAL;
4038
effc6d53 4039 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4040 || decl == error_mark_node)
8b652e89 4041 return error_mark_node;
471086d6 4042
4043 type = TREE_TYPE (decl);
4044
9ba4048d 4045 context = DECL_CONTEXT (decl);
471086d6 4046
91caa6ca 4047 if (context)
7f602bca 4048 {
4049 *pushed_scope_p = push_scope (context);
9031d10b 4050
7f602bca 4051 /* We are only interested in class contexts, later. */
4052 if (TREE_CODE (context) == NAMESPACE_DECL)
4053 context = NULL_TREE;
4054 }
8417823c 4055
471086d6 4056 if (initialized)
4057 /* Is it valid for this decl to have an initializer at all?
4058 If not, set INITIALIZED to zero, which will indirectly
e4118769 4059 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
471086d6 4060 switch (TREE_CODE (decl))
4061 {
4062 case TYPE_DECL:
2336da2a 4063 error ("typedef %qD is initialized (use decltype instead)", decl);
bbc8f5d0 4064 return error_mark_node;
471086d6 4065
4066 case FUNCTION_DECL:
16f0449a 4067 if (initialized == SD_DELETED)
2336da2a 4068 /* We'll handle the rest of the semantics later, but we need to
4069 set this now so it's visible to duplicate_decls. */
4070 DECL_DELETED_FN (decl) = 1;
4071 break;
471086d6 4072
4073 default:
4a7414ab 4074 break;
471086d6 4075 }
4076
471086d6 4077 if (initialized)
4078 {
d0622bdf 4079 if (! toplevel_bindings_p ()
471086d6 4080 && DECL_EXTERNAL (decl))
c3ceba8e 4081 warning (0, "declaration of %q#D has %<extern%> and is initialized",
653e5405 4082 decl);
471086d6 4083 DECL_EXTERNAL (decl) = 0;
e857e9c7 4084 if (toplevel_bindings_p ())
471086d6 4085 TREE_STATIC (decl) = 1;
471086d6 4086 }
4087
3ef0a05e 4088 /* If this is a typedef that names the class for linkage purposes
4089 (7.1.3p8), apply any attributes directly to the type. */
4090 if (TREE_CODE (decl) == TYPE_DECL
4091 && TAGGED_TYPE_P (TREE_TYPE (decl))
4092 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4093 flags = ATTR_FLAG_TYPE_IN_PLACE;
4094 else
4095 flags = 0;
4096
9f45906c 4097 /* Set attributes here so if duplicate decl, will have proper attributes. */
3ef0a05e 4098 cplus_decl_attributes (&decl, attributes, flags);
9f45906c 4099
768d7d97 4100 /* Dllimported symbols cannot be defined. Static data members (which
4101 can be initialized in-class and dllimported) go through grokfield,
4102 not here, so we don't need to exclude those decls when checking for
4103 a definition. */
4104 if (initialized && DECL_DLLIMPORT_P (decl))
4105 {
4106 error ("definition of %q#D is marked %<dllimport%>", decl);
4107 DECL_DLLIMPORT_P (decl) = 0;
4108 }
4109
5626f4cd 4110 /* If #pragma weak was used, mark the decl weak now. */
3656266b 4111 maybe_apply_pragma_weak (decl);
5626f4cd 4112
5955c361 4113 if (TREE_CODE (decl) == FUNCTION_DECL
4114 && DECL_DECLARED_INLINE_P (decl)
4115 && DECL_UNINLINABLE (decl)
4116 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3cf8b391 4117 warning (0, "inline function %q+D given attribute noinline", decl);
5955c361 4118
4b72716d 4119 if (context && COMPLETE_TYPE_P (complete_type (context)))
822f06da 4120 {
4121 if (TREE_CODE (decl) == VAR_DECL)
4122 {
b330805e 4123 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
822f06da 4124 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
3ce479a6 4125 error ("%q#D is not a static member of %q#T", decl, context);
1ad432f2 4126 else
4127 {
4128 if (DECL_CONTEXT (field) != context)
3d2dcf3a 4129 {
0a3b29ad 4130 if (!same_type_p (DECL_CONTEXT (field), context))
2b9e3597 4131 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
561fec9d 4132 "to be defined as %<%T::%D%>",
4133 DECL_CONTEXT (field), DECL_NAME (decl),
4134 context, DECL_NAME (decl));
3d2dcf3a 4135 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4136 }
e993f6d9 4137 if (processing_specialization
4138 && template_class_depth (context) == 0
4139 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4140 error ("template header not allowed in member definition "
4141 "of explicitly specialized class");
668ae905 4142 /* Static data member are tricky; an in-class initialization
4143 still doesn't provide a definition, so the in-class
4144 declaration will have DECL_EXTERNAL set, but will have an
4145 initialization. Thus, duplicate_decls won't warn
4146 about this situation, and so we check here. */
788f3e3e 4147 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
1e5fcbe2 4148 error ("duplicate initialization of %qD", decl);
c1d4295f 4149 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
1ad432f2 4150 decl = field;
4151 }
822f06da 4152 }
ce28ee2e 4153 else
4154 {
7bdfc61c 4155 tree field = check_classfn (context, decl,
0122f52b 4156 (processing_template_decl
4157 > template_class_depth (context))
4158 ? current_template_parms
4159 : NULL_TREE);
e5252ce9 4160 if (field && field != error_mark_node
4161 && duplicate_decls (decl, field,
4162 /*newdecl_is_friend=*/false))
ce28ee2e 4163 decl = field;
4164 }
4165
4166 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
8a5e9d02 4167 DECL_IN_AGGR_P (decl) = 0;
a18487bb 4168 /* Do not mark DECL as an explicit specialization if it was not
4169 already marked as an instantiation; a declaration should
4170 never be marked as a specialization unless we know what
9031d10b 4171 template is being specialized. */
a18487bb 4172 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
2ad9569d 4173 {
a18487bb 4174 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
9031d10b 4175
2ad9569d 4176 /* [temp.expl.spec] An explicit specialization of a static data
4177 member of a template is a definition if the declaration
4178 includes an initializer; otherwise, it is a declaration.
9031d10b 4179
2ad9569d 4180 We check for processing_specialization so this only applies
4181 to the new specialization syntax. */
788f3e3e 4182 if (!initialized && processing_specialization)
2ad9569d 4183 DECL_EXTERNAL (decl) = 1;
4184 }
ce28ee2e 4185
ef5a592c 4186 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
2b9e3597 4187 permerror (input_location, "declaration of %q#D outside of class is not definition",
561fec9d 4188 decl);
822f06da 4189 }
4190
ca1f96a6 4191 was_public = TREE_PUBLIC (decl);
4192
70a658bd 4193 /* Enter this declaration into the symbol table. */
d1d739f8 4194 decl = maybe_push_decl (decl);
de9554eb 4195
3cc0b4b9 4196 if (processing_template_decl)
d1d739f8 4197 decl = push_template_decl (decl);
4198 if (decl == error_mark_node)
3cbf947d 4199 return error_mark_node;
e857e9c7 4200
a17c2a3a 4201 /* Tell the back end to use or not use .common as appropriate. If we say
4c4e55a3 4202 -fconserve-space, we want this to save .data space, at the expense of
4203 wrong semantics. If we say -fno-conserve-space, we want this to
4204 produce errors about redefs; to do this we force variables into the
4205 data segment. */
102e3995 4206 if (flag_conserve_space
d1d739f8 4207 && TREE_CODE (decl) == VAR_DECL
4208 && TREE_PUBLIC (decl)
4209 && !DECL_THREAD_LOCAL_P (decl)
102e3995 4210 && !have_global_bss_p ())
d1d739f8 4211 DECL_COMMON (decl) = 1;
980877d7 4212
d1d739f8 4213 if (TREE_CODE (decl) == VAR_DECL
4214 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4215 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
ca1f96a6 4216 {
4217 /* This is a const variable with implicit 'static'. Set
4218 DECL_THIS_STATIC so we can tell it from variables that are
4219 !TREE_PUBLIC because of the anonymous namespace. */
d1d739f8 4220 gcc_assert (cp_type_readonly (TREE_TYPE (decl)));
4221 DECL_THIS_STATIC (decl) = 1;
ca1f96a6 4222 }
4223
d1d739f8 4224 if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4225 start_decl_1 (decl, initialized);
471086d6 4226
d1d739f8 4227 return decl;
471086d6 4228}
4229
d1d739f8 4230/* Process the declaration of a variable DECL. INITIALIZED is true
4231 iff DECL is explicitly initialized. (INITIALIZED is false if the
4232 variable is initialized via an implicitly-called constructor.)
4233 This function must be called for ordinary variables (including, for
4234 example, implicit instantiations of templates), but must not be
4235 called for template declarations. */
4236
e857e9c7 4237void
788f3e3e 4238start_decl_1 (tree decl, bool initialized)
471086d6 4239{
788f3e3e 4240 tree type;
d1d739f8 4241 bool complete_p;
4242 bool aggregate_definition_p;
471086d6 4243
788f3e3e 4244 gcc_assert (!processing_template_decl);
4245
4246 if (error_operand_p (decl))
67b61957 4247 return;
4248
788f3e3e 4249 gcc_assert (TREE_CODE (decl) == VAR_DECL);
d1d739f8 4250
788f3e3e 4251 type = TREE_TYPE (decl);
d1d739f8 4252 complete_p = COMPLETE_TYPE_P (type);
95397ff9 4253 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
d1d739f8 4254
4255 /* If an explicit initializer is present, or if this is a definition
4256 of an aggregate, then we need a complete type at this point.
4257 (Scalars are always complete types, so there is nothing to
4258 check.) This code just sets COMPLETE_P; errors (if necessary)
4259 are issued below. */
4260 if ((initialized || aggregate_definition_p)
4261 && !complete_p
4262 && COMPLETE_TYPE_P (complete_type (type)))
4263 {
4264 complete_p = true;
4265 /* We will not yet have set TREE_READONLY on DECL if the type
4266 was "const", but incomplete, before this point. But, now, we
4267 have a complete type, so we can try again. */
4268 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4269 }
788f3e3e 4270
e857e9c7 4271 if (initialized)
d1d739f8 4272 /* Is it valid for this decl to have an initializer at all? */
471086d6 4273 {
e857e9c7 4274 /* Don't allow initializations for incomplete types except for
4275 arrays which might be completed by the initialization. */
d1d739f8 4276 if (complete_p)
e857e9c7 4277 ; /* A complete type is ok. */
46f4817e 4278 else if (type_uses_auto (type))
4279 ; /* An auto type is ok. */
e857e9c7 4280 else if (TREE_CODE (type) != ARRAY_TYPE)
471086d6 4281 {
3ce479a6 4282 error ("variable %q#D has initializer but incomplete type", decl);
3aa622aa 4283 type = TREE_TYPE (decl) = error_mark_node;
e857e9c7 4284 }
4b72716d 4285 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
e857e9c7 4286 {
4287 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
3ce479a6 4288 error ("elements of array %q#D have incomplete type", decl);
e857e9c7 4289 /* else we already gave an error in start_decl. */
471086d6 4290 }
471086d6 4291 }
d1d739f8 4292 else if (aggregate_definition_p && !complete_p)
471086d6 4293 {
46f4817e 4294 if (type_uses_auto (type))
4295 error ("declaration of %q#D has no initializer", decl);
4296 else
4297 error ("aggregate %q#D has incomplete type and cannot be defined",
4298 decl);
d1d739f8 4299 /* Change the type so that assemble_variable will give
4300 DECL an rtl we can live with: (mem (const_int 0)). */
4301 type = TREE_TYPE (decl) = error_mark_node;
e857e9c7 4302 }
4303
6f46e702 4304 /* Create a new scope to hold this declaration if necessary.
4305 Whether or not a new scope is necessary cannot be determined
4306 until after the type has been completed; if the type is a
4307 specialization of a class template it is not until after
4308 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4309 will be set correctly. */
4310 maybe_push_cleanup_level (type);
e857e9c7 4311}
4312
d7d79557 4313/* Handle initialization of references. DECL, TYPE, and INIT have the
4314 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4315 but will be set to a new CLEANUP_STMT if a temporary is created
63eff20d 4316 that must be destroyed subsequently.
d7d79557 4317
4318 Returns an initializer expression to use to initialize DECL, or
4319 NULL if the initialization can be performed statically.
96624a9e 4320
4321 Quotes on semantics can be found in ARM 8.4.3. */
4322
e6393a02 4323static tree
d7d79557 4324grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
e857e9c7 4325{
4326 tree tmp;
4327
4328 if (init == NULL_TREE)
4329 {
4330 if ((DECL_LANG_SPECIFIC (decl) == 0
4331 || DECL_IN_AGGR_P (decl) == 0)
4332 && ! DECL_THIS_EXTERN (decl))
44ed1032 4333 error ("%qD declared as reference but not initialized", decl);
e6393a02 4334 return NULL_TREE;
e857e9c7 4335 }
4336
18a4cb16 4337 if (TREE_CODE (init) == CONSTRUCTOR)
e857e9c7 4338 {
3ce479a6 4339 error ("ISO C++ forbids use of initializer list to "
653e5405 4340 "initialize reference %qD", decl);
e6393a02 4341 return NULL_TREE;
471086d6 4342 }
4343
4344 if (TREE_CODE (init) == TREE_LIST)
8a4008da 4345 init = build_x_compound_expr_from_list (init, "initializer");
471086d6 4346
4347 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4348 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
a681799d 4349 /* Note: default conversion is only called in very special cases. */
4350 init = decay_conversion (init);
980877d7 4351
2243fa67 4352 /* Convert INIT to the reference type TYPE. This may involve the
4353 creation of a temporary, whose lifetime must be the same as that
7dd37241 4354 of the reference. If so, a DECL_EXPR for the temporary will be
4355 added just after the DECL_EXPR for DECL. That's why we don't set
2243fa67 4356 DECL_INITIAL for local references (instead assigning to them
4357 explicitly); we need to allow the temporary to be initialized
4358 first. */
d7d79557 4359 tmp = initialize_reference (type, init, decl, cleanup);
471086d6 4360
ad91f3ed 4361 if (tmp == error_mark_node)
e6393a02 4362 return NULL_TREE;
4363 else if (tmp == NULL_TREE)
471086d6 4364 {
3ce479a6 4365 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
e6393a02 4366 return NULL_TREE;
471086d6 4367 }
471086d6 4368
e6393a02 4369 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4370 return tmp;
4371
ca106ab1 4372 DECL_INITIAL (decl) = tmp;
e6393a02 4373
4374 return NULL_TREE;
471086d6 4375}
4376
f82f1250 4377/* Subroutine of check_initializer. We're initializing a DECL of
4378 std::initializer_list<T> TYPE from a braced-init-list INIT, and need to
4379 extend the lifetime of the underlying array to match that of the decl,
4380 just like for reference initialization. CLEANUP is as for
4381 grok_reference_init. */
4382
4383static tree
4384build_init_list_var_init (tree decl, tree type, tree init, tree *cleanup)
4385{
4386 tree aggr_init, array, arrtype;
4387 init = perform_implicit_conversion (type, init, tf_warning_or_error);
4388 aggr_init = TARGET_EXPR_INITIAL (init);
4389 init = build2 (INIT_EXPR, type, decl, init);
4390
4391 array = AGGR_INIT_EXPR_ARG (aggr_init, 1);
4392 arrtype = TREE_TYPE (array);
4393 STRIP_NOPS (array);
4394 gcc_assert (TREE_CODE (array) == ADDR_EXPR);
4395 array = TREE_OPERAND (array, 0);
4396 /* If the array is constant, finish_compound_literal already made it a
4397 static variable and we don't need to do anything here. */
4398 if (decl && TREE_CODE (array) == TARGET_EXPR)
4399 {
4400 tree subinit;
4401 tree var = set_up_extended_ref_temp (decl, array, cleanup, &subinit);
4402 var = build_address (var);
4403 var = convert (arrtype, var);
4404 AGGR_INIT_EXPR_ARG (aggr_init, 1) = var;
4405 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
4406 }
4407 return init;
4408}
4409
1e26d88a 4410/* Designated initializers in arrays are not supported in GNU C++.
4411 The parser cannot detect this error since it does not know whether
4412 a given brace-enclosed initializer is for a class type or for an
4413 array. This function checks that CE does not use a designated
4414 initializer. If it does, an error is issued. Returns true if CE
4415 is valid, i.e., does not have a designated initializer. */
4416
4417static bool
4418check_array_designated_initializer (const constructor_elt *ce)
4419{
9a5f9798 4420 /* Designated initializers for array elements are not supported. */
1e26d88a 4421 if (ce->index)
4422 {
4423 /* The parser only allows identifiers as designated
08cc44e7 4424 initializers. */
a5be0bc2 4425 if (ce->index == error_mark_node)
4426 error ("name used in a GNU-style designated "
4427 "initializer for an array");
4428 else
4429 {
4430 gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4431 error ("name %qD used in a GNU-style designated "
4432 "initializer for an array", ce->index);
4433 }
1e26d88a 4434 return false;
4435 }
4436
4437 return true;
4438}
4439
ece7bde7 4440/* When parsing `int a[] = {1, 2};' we don't know the size of the
4441 array until we finish parsing the initializer. If that's the
4442 situation we're in, update DECL accordingly. */
4443
4444static void
1b72315d 4445maybe_deduce_size_from_array_init (tree decl, tree init)
ece7bde7 4446{
4447 tree type = TREE_TYPE (decl);
4448
4449 if (TREE_CODE (type) == ARRAY_TYPE
4450 && TYPE_DOMAIN (type) == NULL_TREE
4451 && TREE_CODE (decl) != TYPE_DECL)
4452 {
cb4cc35f 4453 /* do_default is really a C-ism to deal with tentative definitions.
4454 But let's leave it here to ease the eventual merge. */
4455 int do_default = !DECL_EXTERNAL (decl);
ece7bde7 4456 tree initializer = init ? init : DECL_INITIAL (decl);
1e26d88a 4457 int failure = 0;
ece7bde7 4458
1e26d88a 4459 /* Check that there are no designated initializers in INIT, as
4460 those are not supported in GNU C++, and as the middle-end
4461 will crash if presented with a non-numeric designated
4462 initializer. */
4463 if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
ac4d57eb 4464 {
1e26d88a 4465 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4466 constructor_elt *ce;
4467 HOST_WIDE_INT i;
4468 for (i = 0;
4469 VEC_iterate (constructor_elt, v, i, ce);
08d094fe 4470 ++i)
1e26d88a 4471 if (!check_array_designated_initializer (ce))
4472 failure = 1;
ac4d57eb 4473 }
1e26d88a 4474
4475 if (!failure)
ece7bde7 4476 {
1e26d88a 4477 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4478 do_default);
4479 if (failure == 1)
ac4d57eb 4480 {
1e26d88a 4481 error ("initializer fails to determine size of %qD", decl);
4482 TREE_TYPE (decl) = error_mark_node;
4483 }
4484 else if (failure == 2)
4485 {
4486 if (do_default)
4487 {
4488 error ("array size missing in %qD", decl);
4489 TREE_TYPE (decl) = error_mark_node;
4490 }
4491 /* If a `static' var's size isn't known, make it extern as
4492 well as static, so it does not get allocated. If it's not
4493 `static', then don't mark it extern; finish_incomplete_decl
4494 will give it a default size and it will get allocated. */
4495 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4496 DECL_EXTERNAL (decl) = 1;
4497 }
4498 else if (failure == 3)
4499 {
4500 error ("zero-size array %qD", decl);
ac4d57eb 4501 TREE_TYPE (decl) = error_mark_node;
4502 }
ac4d57eb 4503 }
ece7bde7 4504
76828b12 4505 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4506
ca02fe0a 4507 relayout_decl (decl);
ece7bde7 4508 }
4509}
4510
4511/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
73b8a26b 4512 any appropriate error messages regarding the layout. */
ece7bde7 4513
73b8a26b 4514static void
1b72315d 4515layout_var_decl (tree decl)
ece7bde7 4516{
ac4d57eb 4517 tree type;
4518
ac4d57eb 4519 type = TREE_TYPE (decl);
4520 if (type == error_mark_node)
4521 return;
73b8a26b 4522
4523 /* If we haven't already layed out this declaration, do so now.
4524 Note that we must not call complete type for an external object
4525 because it's type might involve templates that we are not
755edffd 4526 supposed to instantiate yet. (And it's perfectly valid to say
73b8a26b 4527 `extern X x' for some incomplete type `X'.) */
4528 if (!DECL_EXTERNAL (decl))
4529 complete_type (type);
491e04ef 4530 if (!DECL_SIZE (decl)
2c73aca0 4531 && TREE_TYPE (decl) != error_mark_node
15a7c339 4532 && (COMPLETE_TYPE_P (type)
491e04ef 4533 || (TREE_CODE (type) == ARRAY_TYPE
15a7c339 4534 && !TYPE_DOMAIN (type)
4535 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
ece7bde7 4536 layout_decl (decl, 0);
4537
9f9b1983 4538 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
ece7bde7 4539 {
4540 /* An automatic variable with an incomplete type: that is an error.
4541 Don't talk about array types here, since we took care of that
4542 message in grokdeclarator. */
3ce479a6 4543 error ("storage size of %qD isn't known", decl);
ece7bde7 4544 TREE_TYPE (decl) = error_mark_node;
4545 }
b3908271 4546#if 0
4547 /* Keep this code around in case we later want to control debug info
4548 based on whether a type is "used". (jason 1999-11-11) */
4549
95397ff9 4550 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
ece7bde7 4551 /* Let debugger know it should output info for this type. */
4552 note_debug_info_needed (ttype);
4553
4554 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4555 note_debug_info_needed (DECL_CONTEXT (decl));
b3908271 4556#endif
ece7bde7 4557
4558 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4559 && DECL_SIZE (decl) != NULL_TREE
4560 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4561 {
4562 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4563 constant_expression_warning (DECL_SIZE (decl));
4564 else
1f93c018 4565 {
4566 error ("storage size of %qD isn't constant", decl);
4567 TREE_TYPE (decl) = error_mark_node;
4568 }
ece7bde7 4569 }
4570}
4571
ece7bde7 4572/* If a local static variable is declared in an inline function, or if
4573 we have a weak definition, we must endeavor to create only one
4574 instance of the variable at link-time. */
4575
e3040053 4576void
1b72315d 4577maybe_commonize_var (tree decl)
ece7bde7 4578{
4579 /* Static data in a function with comdat linkage also has comdat
4580 linkage. */
4581 if (TREE_STATIC (decl)
4582 /* Don't mess with __FUNCTION__. */
93d6541c 4583 && ! DECL_ARTIFICIAL (decl)
20b8c6bf 4584 && DECL_FUNCTION_SCOPE_P (decl)
4585 /* Unfortunately, import_export_decl has not always been called
4586 before the function is processed, so we cannot simply check
491e04ef 4587 DECL_COMDAT. */
a70c1164 4588 && (DECL_COMDAT (DECL_CONTEXT (decl))
20b8c6bf 4589 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4590 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4591 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
ece7bde7 4592 {
de496319 4593 if (flag_weak)
ece7bde7 4594 {
de496319 4595 /* With weak symbols, we simply make the variable COMDAT;
4596 that will cause copies in multiple translations units to
4597 be merged. */
4598 comdat_linkage (decl);
4599 }
4600 else
4601 {
4602 if (DECL_INITIAL (decl) == NULL_TREE
4603 || DECL_INITIAL (decl) == error_mark_node)
ece7bde7 4604 {
de496319 4605 /* Without weak symbols, we can use COMMON to merge
4606 uninitialized variables. */
ece7bde7 4607 TREE_PUBLIC (decl) = 1;
4608 DECL_COMMON (decl) = 1;
4609 }
de496319 4610 else
ece7bde7 4611 {
de496319 4612 /* While for initialized variables, we must use internal
4613 linkage -- which means that multiple copies will not
4614 be merged. */
4615 TREE_PUBLIC (decl) = 0;
4616 DECL_COMMON (decl) = 0;
3cf8b391 4617 warning (0, "sorry: semantics of inline function static "
4618 "data %q+#D are wrong (you'll wind up "
4619 "with multiple copies)", decl);
c3ceba8e 4620 warning (0, "%J you can work around this by removing "
653e5405 4621 "the initializer",
9bc3739f 4622 decl);
ece7bde7 4623 }
4624 }
4625 }
4626 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4627 /* Set it up again; we might have set DECL_INITIAL since the last
4628 time. */
4629 comdat_linkage (decl);
4630}
4631
3e04bd45 4632/* Issue an error message if DECL is an uninitialized const variable. */
4633
4634static void
1b72315d 4635check_for_uninitialized_const_var (tree decl)
3e04bd45 4636{
4637 tree type = TREE_TYPE (decl);
4638
4639 /* ``Unless explicitly declared extern, a const object does not have
4640 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4641 7.1.6 */
4642 if (TREE_CODE (decl) == VAR_DECL
4643 && TREE_CODE (type) != REFERENCE_TYPE
4644 && CP_TYPE_CONST_P (type)
4645 && !TYPE_NEEDS_CONSTRUCTING (type)
4646 && !DECL_INITIAL (decl))
3ce479a6 4647 error ("uninitialized const %qD", decl);
3e04bd45 4648}
4649
c75b4594 4650\f
4651/* Structure holding the current initializer being processed by reshape_init.
4652 CUR is a pointer to the current element being processed, END is a pointer
4653 after the last element present in the initializer. */
4654typedef struct reshape_iterator_t
4655{
4656 constructor_elt *cur;
4657 constructor_elt *end;
4658} reshape_iter;
4659
4660static tree reshape_init_r (tree, reshape_iter *, bool);
4661
2437a99c 4662/* FIELD is a FIELD_DECL or NULL. In the former case, the value
4663 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4664 initialized. If there are no more such fields, the return value
4665 will be NULL. */
4666
4667static tree
4668next_initializable_field (tree field)
4669{
4670 while (field
4671 && (TREE_CODE (field) != FIELD_DECL
4672 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4673 || DECL_ARTIFICIAL (field)))
4674 field = TREE_CHAIN (field);
4675
4676 return field;
4677}
4678
c75b4594 4679/* Subroutine of reshape_init_array and reshape_init_vector, which does
4680 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4681 INTEGER_CST representing the size of the array minus one (the maximum index),
4682 or NULL_TREE if the array was declared without specifying the size. D is
4683 the iterator within the constructor. */
4684
4685static tree
4686reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
51ca9277 4687{
c75b4594 4688 tree new_init;
51ca9277 4689 bool sized_array_p = (max_index != NULL_TREE);
4e2cc11c 4690 unsigned HOST_WIDE_INT max_index_cst = 0;
4691 unsigned HOST_WIDE_INT index;
51ca9277 4692
c75b4594 4693 /* The initializer for an array is always a CONSTRUCTOR. */
f82f1250 4694 new_init = build_constructor (init_list_type_node, NULL);
c75b4594 4695
51ca9277 4696 if (sized_array_p)
4e2cc11c 4697 {
0c3502bc 4698 /* Minus 1 is used for zero sized arrays. */
4699 if (integer_all_onesp (max_index))
4700 return new_init;
4701
4e2cc11c 4702 if (host_integerp (max_index, 1))
4703 max_index_cst = tree_low_cst (max_index, 1);
4704 /* sizetype is sign extended, not zero extended. */
4705 else
4706 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4707 1);
4708 }
51ca9277 4709
4710 /* Loop until there are no more initializers. */
4711 for (index = 0;
c75b4594 4712 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
51ca9277 4713 ++index)
4714 {
c75b4594 4715 tree elt_init;
4716
1e26d88a 4717 check_array_designated_initializer (d->cur);
c75b4594 4718 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
c9e1b8d8 4719 if (elt_init == error_mark_node)
4720 return error_mark_node;
c75b4594 4721 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
51ca9277 4722 }
4723
c75b4594 4724 return new_init;
51ca9277 4725}
4726
c75b4594 4727/* Subroutine of reshape_init_r, processes the initializers for arrays.
4728 Parameters are the same of reshape_init_r. */
2437a99c 4729
c75b4594 4730static tree
4731reshape_init_array (tree type, reshape_iter *d)
4732{
4733 tree max_index = NULL_TREE;
491e04ef 4734
c75b4594 4735 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
2437a99c 4736
c75b4594 4737 if (TYPE_DOMAIN (type))
4738 max_index = array_type_nelts (type);
4739
4740 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4741}
4742
4743/* Subroutine of reshape_init_r, processes the initializers for vectors.
4744 Parameters are the same of reshape_init_r. */
2437a99c 4745
4746static tree
c75b4594 4747reshape_init_vector (tree type, reshape_iter *d)
2437a99c 4748{
c75b4594 4749 tree max_index = NULL_TREE;
4750 tree rtype;
4751
4752 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4753
79b01846 4754 if (COMPOUND_LITERAL_P (d->cur->value))
c75b4594 4755 {
4756 tree value = d->cur->value;
4757 if (!same_type_p (TREE_TYPE (value), type))
4758 {
4759 error ("invalid type %qT as initializer for a vector of type %qT",
4760 TREE_TYPE (d->cur->value), type);
074ab442 4761 value = error_mark_node;
c75b4594 4762 }
4763 ++d->cur;
4764 return value;
4765 }
4766
4767 /* For a vector, the representation type is a struct
4768 containing a single member which is an array of the
4769 appropriate size. */
4770 rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4771 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4772 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4773
4774 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4775}
4776
4777/* Subroutine of reshape_init_r, processes the initializers for classes
4778 or union. Parameters are the same of reshape_init_r. */
4779
4780static tree
4781reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4782{
4783 tree field;
2437a99c 4784 tree new_init;
2437a99c 4785
c75b4594 4786 gcc_assert (CLASS_TYPE_P (type));
2437a99c 4787
c75b4594 4788 /* The initializer for a class is always a CONSTRUCTOR. */
f82f1250 4789 new_init = build_constructor (init_list_type_node, NULL);
c75b4594 4790 field = next_initializable_field (TYPE_FIELDS (type));
062e8fef 4791
c75b4594 4792 if (!field)
2437a99c 4793 {
c75b4594 4794 /* [dcl.init.aggr]
4795
4796 An initializer for an aggregate member that is an
4797 empty class shall have the form of an empty
4798 initializer-list {}. */
4799 if (!first_initializer_p)
4800 {
4801 error ("initializer for %qT must be brace-enclosed", type);
4802 return error_mark_node;
4803 }
4804 return new_init;
2437a99c 4805 }
c75b4594 4806
4807 /* Loop through the initializable fields, gathering initializers. */
4808 while (d->cur != d->end)
2437a99c 4809 {
c75b4594 4810 tree field_init;
4811
4812 /* Handle designated initializers, as an extension. */
4813 if (d->cur->index)
4814 {
c75b4594 4815 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4816
4817 if (!field || TREE_CODE (field) != FIELD_DECL)
45d36c6d 4818 {
4819 error ("%qT has no non-static data member named %qD", type,
4820 d->cur->index);
4821 return error_mark_node;
4822 }
c75b4594 4823 }
4824
4825 /* If we processed all the member of the class, we are done. */
4826 if (!field)
4827 break;
4828
4829 field_init = reshape_init_r (TREE_TYPE (field), d,
4830 /*first_initializer_p=*/false);
4831 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4832
4833 /* [dcl.init.aggr]
4834
4835 When a union is initialized with a brace-enclosed
4836 initializer, the braces shall only contain an
4837 initializer for the first member of the union. */
4838 if (TREE_CODE (type) == UNION_TYPE)
4839 break;
4840
4841 field = next_initializable_field (TREE_CHAIN (field));
2437a99c 4842 }
4843
c75b4594 4844 return new_init;
4845}
4846
4847/* Subroutine of reshape_init, which processes a single initializer (part of
4848 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4849 iterator within the CONSTRUCTOR which points to the initializer to process.
4850 FIRST_INITIALIZER_P is true if this is the first initializer of the
4851 CONSTRUCTOR node. */
4852
4853static tree
4854reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4855{
4856 tree init = d->cur->value;
4857
88337b46 4858 if (error_operand_p (init))
4859 return error_mark_node;
4860
2437a99c 4861 /* A non-aggregate type is always initialized with a single
4862 initializer. */
4863 if (!CP_AGGREGATE_TYPE_P (type))
c75b4594 4864 {
4865 /* It is invalid to initialize a non-aggregate type with a
84cae378 4866 brace-enclosed initializer before C++0x.
c75b4594 4867 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4868 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4869 a CONSTRUCTOR (with a record type). */
4870 if (TREE_CODE (init) == CONSTRUCTOR
4871 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
4872 {
84cae378 4873 if (SCALAR_TYPE_P (type))
4874 {
4875 error ("braces around scalar initializer for type %qT", type);
4876 init = error_mark_node;
4877 }
4878 else
4879 maybe_warn_cpp0x ("extended initializer lists");
c75b4594 4880 }
074ab442 4881
c75b4594 4882 d->cur++;
4883 return init;
4884 }
2437a99c 4885
4886 /* [dcl.init.aggr]
4887
4888 All implicit type conversions (clause _conv_) are considered when
4889 initializing the aggregate member with an initializer from an
4890 initializer-list. If the initializer can initialize a member,
4891 the member is initialized. Otherwise, if the member is itself a
4892 non-empty subaggregate, brace elision is assumed and the
4893 initializer is considered for the initialization of the first
4894 member of the subaggregate. */
c75b4594 4895 if (TREE_CODE (init) != CONSTRUCTOR
db3bf8f6 4896 && can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL))
2437a99c 4897 {
c75b4594 4898 d->cur++;
4899 return init;
2437a99c 4900 }
4901
c75b4594 4902 /* [dcl.init.string]
4903
4904 A char array (whether plain char, signed char, or unsigned char)
4905 can be initialized by a string-literal (optionally enclosed in
4906 braces); a wchar_t array can be initialized by a wide
4907 string-literal (optionally enclosed in braces). */
4908 if (TREE_CODE (type) == ARRAY_TYPE
791f63f0 4909 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
2437a99c 4910 {
c75b4594 4911 tree str_init = init;
2437a99c 4912
c75b4594 4913 /* Strip one level of braces if and only if they enclose a single
074ab442 4914 element (as allowed by [dcl.init.string]). */
c75b4594 4915 if (!first_initializer_p
4916 && TREE_CODE (str_init) == CONSTRUCTOR
4917 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
2437a99c 4918 {
c75b4594 4919 str_init = VEC_index (constructor_elt,
4920 CONSTRUCTOR_ELTS (str_init), 0)->value;
4921 }
074ab442 4922
c75b4594 4923 /* If it's a string literal, then it's the initializer for the array
074ab442 4924 as a whole. Otherwise, continue with normal initialization for
c75b4594 4925 array types (one value per array element). */
4926 if (TREE_CODE (str_init) == STRING_CST)
4927 {
4928 d->cur++;
4929 return str_init;
4930 }
4931 }
2437a99c 4932
c75b4594 4933 /* The following cases are about aggregates. If we are not within a full
4934 initializer already, and there is not a CONSTRUCTOR, it means that there
4935 is a missing set of braces (that is, we are processing the case for
4936 which reshape_init exists). */
4937 if (!first_initializer_p)
4938 {
4939 if (TREE_CODE (init) == CONSTRUCTOR)
4940 {
7ac77761 4941 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
4942 /* There is no need to reshape pointer-to-member function
4943 initializers, as they are always constructed correctly
4944 by the front end. */
4945 ;
4946 else if (COMPOUND_LITERAL_P (init))
c75b4594 4947 /* For a nested compound literal, there is no need to reshape since
4948 brace elision is not allowed. Even if we decided to allow it,
4949 we should add a call to reshape_init in finish_compound_literal,
4950 before calling digest_init, so changing this code would still
4951 not be necessary. */
7ac77761 4952 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
4953 else
2437a99c 4954 {
c75b4594 4955 ++d->cur;
4956 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4957 return reshape_init (type, init);
2437a99c 4958 }
2437a99c 4959 }
d76f7d08 4960
c75b4594 4961 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
4962 type);
4963 }
2437a99c 4964
c75b4594 4965 /* Dispatch to specialized routines. */
4966 if (CLASS_TYPE_P (type))
4967 return reshape_init_class (type, d, first_initializer_p);
4968 else if (TREE_CODE (type) == ARRAY_TYPE)
4969 return reshape_init_array (type, d);
4970 else if (TREE_CODE (type) == VECTOR_TYPE)
4971 return reshape_init_vector (type, d);
4972 else
4973 gcc_unreachable();
4974}
2437a99c 4975
c75b4594 4976/* Undo the brace-elision allowed by [dcl.init.aggr] in a
4977 brace-enclosed aggregate initializer.
2437a99c 4978
c75b4594 4979 INIT is the CONSTRUCTOR containing the list of initializers describing
4980 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
4981 It may not presently match the shape of the TYPE; for example:
4982
4983 struct S { int a; int b; };
4984 struct S a[] = { 1, 2, 3, 4 };
4985
4986 Here INIT will hold a VEC of four elements, rather than a
4987 VEC of two elements, each itself a VEC of two elements. This
4988 routine transforms INIT from the former form into the latter. The
4989 revised CONSTRUCTOR node is returned. */
4990
79b01846 4991tree
c75b4594 4992reshape_init (tree type, tree init)
4993{
4994 VEC(constructor_elt, gc) *v;
4995 reshape_iter d;
4996 tree new_init;
4997
c75b4594 4998 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4999
5000 v = CONSTRUCTOR_ELTS (init);
5001
5002 /* An empty constructor does not need reshaping, and it is always a valid
5003 initializer. */
5004 if (VEC_empty (constructor_elt, v))
5005 return init;
5006
5007 /* Recurse on this CONSTRUCTOR. */
5008 d.cur = VEC_index (constructor_elt, v, 0);
5009 d.end = d.cur + VEC_length (constructor_elt, v);
5010
5011 new_init = reshape_init_r (type, &d, true);
c9e1b8d8 5012 if (new_init == error_mark_node)
5013 return error_mark_node;
c75b4594 5014
5015 /* Make sure all the element of the constructor were used. Otherwise,
5016 issue an error about exceeding initializers. */
5017 if (d.cur != d.end)
5018 error ("too many initializers for %qT", type);
2437a99c 5019
5020 return new_init;
5021}
5022
bc7a08da 5023/* Verify array initializer. Returns true if errors have been reported. */
5024
5025bool
5026check_array_initializer (tree decl, tree type, tree init)
5027{
5028 tree element_type = TREE_TYPE (type);
5029
5030 /* The array type itself need not be complete, because the
5031 initializer may tell us how many elements are in the array.
5032 But, the elements of the array must be complete. */
5033 if (!COMPLETE_TYPE_P (complete_type (element_type)))
5034 {
5035 if (decl)
5036 error ("elements of array %q#D have incomplete type", decl);
5037 else
5038 error ("elements of array %q#T have incomplete type", type);
5039 return true;
5040 }
5041 /* It is not valid to initialize a VLA. */
5042 if (init
5043 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5044 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5045 {
5046 if (decl)
5047 error ("variable-sized object %qD may not be initialized", decl);
5048 else
5049 error ("variable-sized compound literal");
5050 return true;
5051 }
5052 return false;
5053}
5054
f82f1250 5055/* Subroutine of check_initializer; args are passed down from that function.
5056 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
5057
5058static tree
5059build_aggr_init_full_exprs (tree decl, tree init, int flags)
5060
5061{
5062 int saved_stmts_are_full_exprs_p = 0;
5063 if (building_stmt_tree ())
5064 {
5065 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5066 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5067 }
5068 init = build_aggr_init (decl, init, flags, tf_warning_or_error);
5069 if (building_stmt_tree ())
5070 current_stmt_tree ()->stmts_are_full_exprs_p =
5071 saved_stmts_are_full_exprs_p;
5072 return init;
5073}
5074
9f9b1983 5075/* Verify INIT (the initializer for DECL), and record the
d7d79557 5076 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
5077 grok_reference_init.
2437a99c 5078
5079 If the return value is non-NULL, it is an expression that must be
5080 evaluated dynamically to initialize DECL. */
ece7bde7 5081
9f9b1983 5082static tree
d7d79557 5083check_initializer (tree decl, tree init, int flags, tree *cleanup)
ece7bde7 5084{
23ed74d8 5085 tree type = TREE_TYPE (decl);
3afe9b43 5086 tree init_code = NULL;
a35129cf 5087
2c73aca0 5088 /* Things that are going to be initialized need to have complete
5089 type. */
5090 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
9f9b1983 5091
2c73aca0 5092 if (type == error_mark_node)
5093 /* We will have already complained. */
12c5b530 5094 return NULL_TREE;
5095
5096 if (TREE_CODE (type) == ARRAY_TYPE)
2c73aca0 5097 {
bc7a08da 5098 if (check_array_initializer (decl, type, init))
5099 return NULL_TREE;
2c73aca0 5100 }
12c5b530 5101 else if (!COMPLETE_TYPE_P (type))
2c73aca0 5102 {
3ce479a6 5103 error ("%qD has incomplete type", decl);
2c73aca0 5104 TREE_TYPE (decl) = error_mark_node;
12c5b530 5105 return NULL_TREE;
ece7bde7 5106 }
12c5b530 5107 else
5108 /* There is no way to make a variable-sized class type in GNU C++. */
5109 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6dcdb5de 5110
5111 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
9a4933b3 5112 {
6dcdb5de 5113 int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5114 if (SCALAR_TYPE_P (type))
5115 {
f82f1250 5116 if (init_len == 0)
5117 {
5118 maybe_warn_cpp0x ("extended initializer lists");
5119 init = build_zero_init (type, NULL_TREE, false);
5120 }
5121 else if (init_len != 1)
6dcdb5de 5122 {
5123 error ("scalar object %qD requires one element in initializer",
5124 decl);
5125 TREE_TYPE (decl) = error_mark_node;
5126 return NULL_TREE;
5127 }
5128 }
9a4933b3 5129 }
ece7bde7 5130
5131 if (TREE_CODE (decl) == CONST_DECL)
5132 {
21966c2f 5133 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
ece7bde7 5134
5135 DECL_INITIAL (decl) = init;
5136
b4df430b 5137 gcc_assert (init != NULL_TREE);
ece7bde7 5138 init = NULL_TREE;
5139 }
9f9b1983 5140 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
d7d79557 5141 init = grok_reference_init (decl, type, init, cleanup);
ece7bde7 5142 else if (init)
5143 {
c75b4594 5144 /* Do not reshape constructors of vectors (they don't need to be
074ab442 5145 reshaped. */
f82f1250 5146 if (BRACE_ENCLOSED_INITIALIZER_P (init))
a9df464b 5147 {
f82f1250 5148 if (is_std_init_list (type))
5149 return build_init_list_var_init (decl, type, init, cleanup);
5150 else if (TYPE_NON_AGGREGATE_CLASS (type))
5151 {
5152 /* Don't reshape if the class has constructors. */
5153 if (cxx_dialect == cxx98)
5154 error ("in C++98 %qD must be initialized by constructor, "
5155 "not by %<{...}%>",
5156 decl);
5157 init = build_tree_list (NULL_TREE, init);
5158 }
8d125f7d 5159 else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
b448d263 5160 {
5161 error ("opaque vector types cannot be initialized");
5162 init = error_mark_node;
5163 }
f82f1250 5164 else
5165 init = reshape_init (type, init);
a9df464b 5166 }
2437a99c 5167
5168 /* If DECL has an array type without a specific bound, deduce the
5169 array size from the initializer. */
5170 maybe_deduce_size_from_array_init (decl, init);
5171 type = TREE_TYPE (decl);
ac4d57eb 5172 if (type == error_mark_node)
5173 return NULL_TREE;
2437a99c 5174
f82f1250 5175 if (TYPE_NEEDS_CONSTRUCTING (type)
5176 || (CLASS_TYPE_P (type)
5177 && !BRACE_ENCLOSED_INITIALIZER_P (init)))
5178 return build_aggr_init_full_exprs (decl, init, flags);
5179 else if (TREE_CODE (init) != TREE_VEC)
ece7bde7 5180 {
cf7aa2e5 5181 init_code = store_init_value (decl, init, flags);
f82f1250 5182 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5183 && DECL_INITIAL (decl)
5184 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5185 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5186 warning (0, "array %qD initialized by parenthesized string literal %qE",
5187 decl, DECL_INITIAL (decl));
5188 init = NULL;
ece7bde7 5189 }
ece7bde7 5190 }
5191 else if (DECL_EXTERNAL (decl))
5192 ;
2437a99c 5193 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
f82f1250 5194 return build_aggr_init_full_exprs (decl, init, flags);
95397ff9 5195 else if (MAYBE_CLASS_TYPE_P (type))
ece7bde7 5196 {
5197 tree core_type = strip_array_types (type);
5198
2437a99c 5199 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
3ce479a6 5200 error ("structure %qD with uninitialized const members", decl);
2437a99c 5201 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
3ce479a6 5202 error ("structure %qD with uninitialized reference members", decl);
ece7bde7 5203
5204 check_for_uninitialized_const_var (decl);
ece7bde7 5205 }
5206 else
5207 check_for_uninitialized_const_var (decl);
980877d7 5208
2437a99c 5209 if (init && init != error_mark_node)
831d52a2 5210 init_code = build2 (INIT_EXPR, type, decl, init);
2437a99c 5211
3afe9b43 5212 return init_code;
ece7bde7 5213}
5214
5215/* If DECL is not a local variable, give it RTL. */
5216
5217static void
1b72315d 5218make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
ece7bde7 5219{
5ef286c9 5220 int toplev = toplevel_bindings_p ();
5221 int defer_p;
22a2c138 5222 const char *filename;
ece7bde7 5223
b2c4af5e 5224 /* Set the DECL_ASSEMBLER_NAME for the object. */
5225 if (asmspec)
5226 {
5227 /* The `register' keyword, when used together with an
5228 asm-specification, indicates that the variable should be
5229 placed in a particular register. */
5230 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5231 {
287cbb2e 5232 set_user_assembler_name (decl, asmspec);
b2c4af5e 5233 DECL_HARD_REGISTER (decl) = 1;
5234 }
5235 else
46a7e216 5236 {
5237 if (TREE_CODE (decl) == FUNCTION_DECL
5238 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5239 set_builtin_user_assembler_name (decl, asmspec);
5240 set_user_assembler_name (decl, asmspec);
5241 }
b2c4af5e 5242 }
5243
a8e8221e 5244 /* Handle non-variables up front. */
5245 if (TREE_CODE (decl) != VAR_DECL)
5246 {
b2c4af5e 5247 rest_of_decl_compilation (decl, toplev, at_eof);
a8e8221e 5248 return;
5249 }
5250
5ef286c9 5251 /* If we see a class member here, it should be a static data
5252 member. */
5253 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5254 {
b4df430b 5255 gcc_assert (TREE_STATIC (decl));
5ef286c9 5256 /* An in-class declaration of a static data member should be
5257 external; it is only a declaration, and not a definition. */
5258 if (init == NULL_TREE)
30abb346 5259 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5ef286c9 5260 }
5261
5ef286c9 5262 /* We don't create any RTL for local variables. */
5263 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5264 return;
ece7bde7 5265
5ef286c9 5266 /* We defer emission of local statics until the corresponding
7dd37241 5267 DECL_EXPR is expanded. */
5ef286c9 5268 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5269
f626b489 5270 /* We try to defer namespace-scope static constants so that they are
5271 not emitted into the object file unnecessarily. */
22a2c138 5272 filename = input_filename;
f626b489 5273 if (!DECL_VIRTUAL_P (decl)
5274 && TREE_READONLY (decl)
5275 && DECL_INITIAL (decl) != NULL_TREE
5276 && DECL_INITIAL (decl) != error_mark_node
22a2c138 5277 && filename != NULL
f626b489 5278 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5279 && toplev
5280 && !TREE_PUBLIC (decl))
c4c3877b 5281 {
5282 /* Fool with the linkage of static consts according to #pragma
5283 interface. */
4507a637 5284 struct c_fileinfo *finfo = get_fileinfo (filename);
62bf98ad 5285 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
ece7bde7 5286 {
5ef286c9 5287 TREE_PUBLIC (decl) = 1;
62bf98ad 5288 DECL_EXTERNAL (decl) = finfo->interface_only;
ece7bde7 5289 }
ece7bde7 5290
5ef286c9 5291 defer_p = 1;
ece7bde7 5292 }
f626b489 5293 /* Likewise for template instantiations. */
caa6fdce 5294 else if (DECL_LANG_SPECIFIC (decl)
5295 && DECL_IMPLICIT_INSTANTIATION (decl))
f626b489 5296 defer_p = 1;
5ef286c9 5297
5ef286c9 5298 /* If we're not deferring, go ahead and assemble the variable. */
b2c4af5e 5299 if (!defer_p)
5300 rest_of_decl_compilation (decl, toplev, at_eof);
ece7bde7 5301}
5302
4888ab9a 5303/* walk_tree helper for wrap_temporary_cleanups, below. */
5304
5305static tree
5306wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5307{
5308 if (TYPE_P (*stmt_p))
5309 {
5310 *walk_subtrees = 0;
5311 return NULL_TREE;
5312 }
5313
5314 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5315 {
5316 tree guard = (tree)data;
5317 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5318
5319 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
0bc060a4 5320 /* Tell honor_protect_cleanup_actions to handle this as a separate
5321 cleanup. */
5322 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5323
4888ab9a 5324 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5325 }
5326
5327 return NULL_TREE;
5328}
5329
5330/* We're initializing a local variable which has a cleanup GUARD. If there
5331 are any temporaries used in the initializer INIT of this variable, we
5332 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
0bc060a4 5333 variable will be cleaned up properly if one of them throws.
5334
5335 Unfortunately, there's no way to express this properly in terms of
5336 nesting, as the regions for the temporaries overlap the region for the
5337 variable itself; if there are two temporaries, the variable needs to be
5338 the first thing destroyed if either of them throws. However, we only
5339 want to run the variable's cleanup if it actually got constructed. So
5340 we need to guard the temporary cleanups with the variable's cleanup if
5341 they are run on the normal path, but not if they are run on the
5342 exceptional path. We implement this by telling
5343 honor_protect_cleanup_actions to strip the variable cleanup from the
5344 exceptional path. */
4888ab9a 5345
5346static void
5347wrap_temporary_cleanups (tree init, tree guard)
5348{
5349 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5350}
5351
18a4cb16 5352/* Generate code to initialize DECL (a local variable). */
ece7bde7 5353
2437a99c 5354static void
1b72315d 5355initialize_local_var (tree decl, tree init)
ece7bde7 5356{
43295e27 5357 tree type = TREE_TYPE (decl);
ce0c3b07 5358 tree cleanup;
4888ab9a 5359 int already_used;
ece7bde7 5360
b4df430b 5361 gcc_assert (TREE_CODE (decl) == VAR_DECL
5362 || TREE_CODE (decl) == RESULT_DECL);
5363 gcc_assert (!TREE_STATIC (decl));
ba3a3d1f 5364
2437a99c 5365 if (DECL_SIZE (decl) == NULL_TREE)
ba3a3d1f 5366 {
5367 /* If we used it already as memory, it must stay in memory. */
5368 DECL_INITIAL (decl) = NULL_TREE;
5369 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4888ab9a 5370 return;
ba3a3d1f 5371 }
5372
4888ab9a 5373 if (type == error_mark_node)
5374 return;
980877d7 5375
4888ab9a 5376 /* Compute and store the initial value. */
5377 already_used = TREE_USED (decl) || TREE_USED (type);
ece7bde7 5378
4888ab9a 5379 /* Generate a cleanup, if necessary. */
5380 cleanup = cxx_maybe_build_cleanup (decl);
ece7bde7 5381
4888ab9a 5382 /* Perform the initialization. */
5383 if (init)
5384 {
5385 int saved_stmts_are_full_exprs_p;
5386
5387 /* If we're only initializing a single object, guard the destructors
5388 of any temporaries used in its initializer with its destructor.
5389 This isn't right for arrays because each element initialization is
5390 a full-expression. */
5391 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5392 wrap_temporary_cleanups (init, cleanup);
5393
5394 gcc_assert (building_stmt_tree ());
5395 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5396 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5397 finish_expr_stmt (init);
5398 current_stmt_tree ()->stmts_are_full_exprs_p =
5399 saved_stmts_are_full_exprs_p;
ece7bde7 5400 }
2243fa67 5401
4888ab9a 5402 /* Set this to 0 so we can tell whether an aggregate which was
5403 initialized was ever used. Don't do this if it has a
5404 destructor, so we don't complain about the 'resource
5405 allocation is initialization' idiom. Now set
5406 attribute((unused)) on types so decls of that type will be
5407 marked used. (see TREE_USED, above.) */
5408 if (TYPE_NEEDS_CONSTRUCTING (type)
5409 && ! already_used
5410 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5411 && DECL_NAME (decl))
5412 TREE_USED (decl) = 0;
5413 else if (already_used)
5414 TREE_USED (decl) = 1;
5415
5416 if (cleanup)
ce0c3b07 5417 finish_decl_cleanup (decl, cleanup);
2243fa67 5418}
5419
aff47ac3 5420/* DECL is a VAR_DECL for a compiler-generated variable with static
5421 storage duration (like a virtual table) whose initializer is a
79b01846 5422 compile-time constant. INIT must be either a TREE_LIST of values,
5423 or a CONSTRUCTOR. Initialize the variable and provide it to the
5424 back end. */
aff47ac3 5425
5426void
5427initialize_artificial_var (tree decl, tree init)
5428{
c4dd8131 5429 gcc_assert (DECL_ARTIFICIAL (decl));
79b01846 5430 if (TREE_CODE (init) == TREE_LIST)
f82f1250 5431 init = build_constructor_from_list (TREE_TYPE (decl), init);
79b01846 5432 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5433 DECL_INITIAL (decl) = init;
aff47ac3 5434 DECL_INITIALIZED_P (decl) = 1;
5435 determine_visibility (decl);
5436 layout_var_decl (decl);
5437 maybe_commonize_var (decl);
5438 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5439}
5440
62116ec3 5441/* INIT is the initializer for a variable, as represented by the
5442 parser. Returns true iff INIT is value-dependent. */
5443
5444static bool
5445value_dependent_init_p (tree init)
5446{
5447 if (TREE_CODE (init) == TREE_LIST)
5448 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5449 return any_value_dependent_elements_p (init);
5450 else if (TREE_CODE (init) == CONSTRUCTOR)
5451 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5452 {
5453 VEC(constructor_elt, gc) *elts;
5454 size_t nelts;
5455 size_t i;
5456
5457 elts = CONSTRUCTOR_ELTS (init);
5458 nelts = VEC_length (constructor_elt, elts);
5459 for (i = 0; i < nelts; ++i)
5460 if (value_dependent_init_p (VEC_index (constructor_elt,
5461 elts, i)->value))
5462 return true;
5463 }
5464 else
5465 /* It must be a simple expression, e.g., int i = 3; */
5466 return value_dependent_expression_p (init);
5467
5468 return false;
5469}
5470
471086d6 5471/* Finish processing of a declaration;
5472 install its line number and initial value.
5473 If the length of an array type is not known before,
5474 it must be determined now, from the initial value, or it is an error.
5475
d91303a6 5476 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
5477 true, then INIT is an integral constant expression.
471086d6 5478
8823d708 5479 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
991ab8f3 5480 if the (init) syntax was used. */
471086d6 5481
5482void
074ab442 5483cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
d91303a6 5484 tree asmspec_tree, int flags)
471086d6 5485{
d7d79557 5486 tree type;
d7d79557 5487 tree cleanup;
023b3db6 5488 const char *asmspec = NULL;
471086d6 5489 int was_readonly = 0;
050cc3b1 5490 bool var_definition_p = false;
ac4d57eb 5491 int saved_processing_template_decl;
46f4817e 5492 tree auto_node;
471086d6 5493
f3959165 5494 if (decl == error_mark_node)
5495 return;
5496 else if (! decl)
471086d6 5497 {
5498 if (init)
905d4035 5499 error ("assignment (not initialization) in declaration");
471086d6 5500 return;
5501 }
5502
b4df430b 5503 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
ac4d57eb 5504 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5505 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5506
5507 type = TREE_TYPE (decl);
5508 if (type == error_mark_node)
5509 return;
ce0c3b07 5510
d7d79557 5511 /* Assume no cleanup is required. */
5512 cleanup = NULL_TREE;
ac4d57eb 5513 saved_processing_template_decl = processing_template_decl;
d7d79557 5514
d81e00a4 5515 /* If a name was specified, get the string. */
ddeeea02 5516 if (global_scope_p (current_binding_level))
ea42c4de 5517 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
32955d67 5518 if (asmspec_tree && asmspec_tree != error_mark_node)
c4c3877b 5519 asmspec = TREE_STRING_POINTER (asmspec_tree);
471086d6 5520
df5066e2 5521 if (current_class_type
9ba4048d 5522 && CP_DECL_CONTEXT (decl) == current_class_type
df5066e2 5523 && TYPE_BEING_DEFINED (current_class_type)
5524 && (DECL_INITIAL (decl) || init))
c792eccc 5525 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
df5066e2 5526
46f4817e 5527 auto_node = type_uses_auto (type);
39311b35 5528 if (auto_node)
46f4817e 5529 {
39311b35 5530 if (init == NULL_TREE)
5531 {
5532 error ("declaration of %q#D has no initializer", decl);
5533 TREE_TYPE (decl) = error_mark_node;
5534 return;
5535 }
6b8740d8 5536 if (TREE_CODE (init) == TREE_LIST)
5537 init = build_x_compound_expr_from_list (init, "initializer");
5538 if (describable_type (init))
39311b35 5539 {
5540 type = TREE_TYPE (decl) = do_auto_deduction (type, init, auto_node);
5541 if (type == error_mark_node)
5542 return;
5543 }
46f4817e 5544 }
5545
5c9c5a4b 5546 if (init && TREE_CODE (decl) == FUNCTION_DECL)
5547 {
5548 if (init == ridpointers[(int)RID_DELETE])
5549 {
5550 /* FIXME check this is 1st decl. */
5551 DECL_DELETED_FN (decl) = 1;
5552 DECL_DECLARED_INLINE_P (decl) = 1;
5553 DECL_INITIAL (decl) = error_mark_node;
5554 init = NULL_TREE;
5555 }
5556 else if (init == ridpointers[(int)RID_DEFAULT])
5557 {
5558 if (!defaultable_fn_p (decl))
958802d2 5559 {
5560 error ("%qD cannot be defaulted", decl);
5561 DECL_INITIAL (decl) = NULL_TREE;
5562 }
5c9c5a4b 5563 else
5564 DECL_DEFAULTED_FN (decl) = 1;
5565 }
5566 }
5567
3cc0b4b9 5568 if (processing_template_decl)
e857e9c7 5569 {
ac4d57eb 5570 bool type_dependent_p;
5571
ca106ab1 5572 /* Add this declaration to the statement-tree. */
ce0c3b07 5573 if (at_function_scope_p ())
7dd37241 5574 add_decl_expr (decl);
ca106ab1 5575
ac4d57eb 5576 type_dependent_p = dependent_type_p (type);
5577
830a6615 5578 if (check_for_bare_parameter_packs (init))
5579 {
5580 init = NULL_TREE;
5581 DECL_INITIAL (decl) = NULL_TREE;
5582 }
5583
62dfea2e 5584 if (init && init_const_expr_p && TREE_CODE (decl) == VAR_DECL)
d91303a6 5585 {
ac4d57eb 5586 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5587 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5588 TREE_CONSTANT (decl) = 1;
d91303a6 5589 }
5590
62116ec3 5591 /* Generally, initializers in templates are expanded when the
5592 template is instantiated. But, if DECL is an integral
5593 constant static data member, then it can be used in future
5594 integral constant expressions, and its value must be
5595 available. */
5596 if (!(init
5597 && DECL_CLASS_SCOPE_P (decl)
5598 && DECL_INTEGRAL_CONSTANT_VAR_P (decl)
5599 && !type_dependent_p
5600 && !value_dependent_init_p (init)))
ac4d57eb 5601 {
5602 if (init)
5603 DECL_INITIAL (decl) = init;
5604 if (TREE_CODE (decl) == VAR_DECL
5605 && !DECL_PRETTY_FUNCTION_P (decl)
5606 && !type_dependent_p)
5607 maybe_deduce_size_from_array_init (decl, init);
5608 goto finish_end;
5609 }
9031d10b 5610
655b3d9d 5611 if (TREE_CODE (init) == TREE_LIST)
5612 {
5613 /* If the parenthesized-initializer form was used (e.g.,
5614 "int A<N>::i(X)"), then INIT will be a TREE_LIST of initializer
5615 arguments. (There is generally only one.) We convert them
5616 individually. */
5617 tree list = init;
5618 for (; list; list = TREE_CHAIN (list))
5619 {
5620 tree elt = TREE_VALUE (list);
5621 TREE_VALUE (list) = fold_non_dependent_expr (elt);
5622 }
5623 }
5624 else
5625 init = fold_non_dependent_expr (init);
ac4d57eb 5626 processing_template_decl = 0;
e857e9c7 5627 }
4a7414ab 5628
471086d6 5629 /* Take care of TYPE_DECLs up front. */
5630 if (TREE_CODE (decl) == TYPE_DECL)
5631 {
ddb9bca7 5632 if (type != error_mark_node
95397ff9 5633 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
471086d6 5634 {
5635 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
c3ceba8e 5636 warning (0, "shadowing previous type declaration of %q#D", decl);
b7d1e8ea 5637 set_identifier_type_value (DECL_NAME (decl), decl);
471086d6 5638 }
fff5e605 5639
5640 /* If we have installed this as the canonical typedef for this
5641 type, and that type has not been defined yet, delay emitting
ad87de1e 5642 the debug information for it, as we will emit it later. */
b0df6589 5643 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
4b72716d 5644 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
fff5e605 5645 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5646
b2c4af5e 5647 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5648 at_eof);
471086d6 5649 goto finish_end;
5650 }
4a7414ab 5651
f06b15bf 5652 /* A reference will be modified here, as it is initialized. */
9031d10b 5653 if (! DECL_EXTERNAL (decl)
f06b15bf 5654 && TREE_READONLY (decl)
5655 && TREE_CODE (type) == REFERENCE_TYPE)
471086d6 5656 {
471086d6 5657 was_readonly = 1;
f06b15bf 5658 TREE_READONLY (decl) = 0;
471086d6 5659 }
5660
6c666cd5 5661 if (TREE_CODE (decl) == VAR_DECL)
23ed74d8 5662 {
5663 /* Only PODs can have thread-local storage. Other types may require
5664 various kinds of non-trivial initialization. */
1b53eb20 5665 if (DECL_THREAD_LOCAL_P (decl) && !pod_type_p (TREE_TYPE (decl)))
3ce479a6 5666 error ("%qD cannot be thread-local because it has non-POD type %qT",
23ed74d8 5667 decl, TREE_TYPE (decl));
c4dd8131 5668 /* If this is a local variable that will need a mangled name,
5669 register it now. We must do this before processing the
5670 initializer for the variable, since the initialization might
5671 require a guard variable, and since the mangled name of the
5672 guard variable will depend on the mangled name of this
5673 variable. */
cb8229af 5674 if (DECL_FUNCTION_SCOPE_P (decl)
c4dd8131 5675 && TREE_STATIC (decl)
5676 && !DECL_ARTIFICIAL (decl))
5677 push_local_name (decl);
23ed74d8 5678 /* Convert the initializer to the type of DECL, if we have not
5679 already initialized DECL. */
5680 if (!DECL_INITIALIZED_P (decl)
5681 /* If !DECL_EXTERNAL then DECL is being defined. In the
2437a99c 5682 case of a static data member initialized inside the
23ed74d8 5683 class-specifier, there can be an initializer even if DECL
5684 is *not* defined. */
5685 && (!DECL_EXTERNAL (decl) || init))
5686 {
95397ff9 5687 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
faf19a81 5688 {
5689 tree jclass
5690 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
5691 /* Allow libjava/prims.cc define primitive classes. */
5692 if (init != NULL_TREE
5693 || jclass == NULL_TREE
5694 || TREE_CODE (jclass) != TYPE_DECL
5695 || !POINTER_TYPE_P (TREE_TYPE (jclass))
5696 || !same_type_ignoring_top_level_qualifiers_p
5697 (type, TREE_TYPE (TREE_TYPE (jclass))))
5698 error ("Java object %qD not allocated with %<new%>", decl);
5699 init = NULL_TREE;
5700 }
a6b4af6d 5701 if (init)
d91303a6 5702 {
5703 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5704 if (init_const_expr_p)
5705 {
5706 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5707 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5708 TREE_CONSTANT (decl) = 1;
5709 }
5710 }
d7d79557 5711 init = check_initializer (decl, init, flags, &cleanup);
77b5d754 5712 /* Thread-local storage cannot be dynamically initialized. */
1b53eb20 5713 if (DECL_THREAD_LOCAL_P (decl) && init)
77b5d754 5714 {
3ce479a6 5715 error ("%qD is thread-local and so cannot be dynamically "
77b5d754 5716 "initialized", decl);
5717 init = NULL_TREE;
5718 }
e6ef0e42 5719
5720 /* Check that the initializer for a static data member was a
14b50238 5721 constant. Although we check in the parser that the
e6ef0e42 5722 initializer is an integral constant expression, we do not
5723 simplify division-by-zero at the point at which it
5724 occurs. Therefore, in:
5725
5726 struct S { static const int i = 7 / 0; };
074ab442 5727
e6ef0e42 5728 we issue an error at this point. It would
5729 probably be better to forbid division by zero in
5730 integral constant expressions. */
c75ae97e 5731 if (DECL_EXTERNAL (decl) && init)
5732 {
c75ae97e 5733 error ("%qD cannot be initialized by a non-constant expression"
5734 " when being declared", decl);
5735 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5736 init = NULL_TREE;
5737 }
9031d10b 5738
23ed74d8 5739 /* Handle:
491e04ef 5740
23ed74d8 5741 [dcl.init]
491e04ef 5742
23ed74d8 5743 The memory occupied by any object of static storage
5744 duration is zero-initialized at program startup before
5745 any other initialization takes place.
491e04ef 5746
23ed74d8 5747 We cannot create an appropriate initializer until after
5748 the type of DECL is finalized. If DECL_INITIAL is set,
5749 then the DECL is statically initialized, and any
5750 necessary zero-initialization has already been performed. */
5751 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5752 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
5d3c3f21 5753 /*nelts=*/NULL_TREE,
23ed74d8 5754 /*static_storage_p=*/true);
5755 /* Remember that the initialization for this variable has
5756 taken place. */
5757 DECL_INITIALIZED_P (decl) = 1;
050cc3b1 5758 /* This declaration is the definition of this variable,
5759 unless we are initializing a static data member within
5760 the class specifier. */
5761 if (!DECL_EXTERNAL (decl))
5762 var_definition_p = true;
23ed74d8 5763 }
db2d58f1 5764 /* If the variable has an array type, lay out the type, even if
5765 there is no initializer. It is valid to index through the
5766 array, and we must get TYPE_ALIGN set correctly on the array
5767 type. */
5768 else if (TREE_CODE (type) == ARRAY_TYPE)
5769 layout_type (type);
23ed74d8 5770 }
faf19a81 5771 else if (TREE_CODE (decl) == FIELD_DECL
95397ff9 5772 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
faf19a81 5773 error ("non-static data member %qD has Java class type", decl);
4a7414ab 5774
ddb449aa 5775 /* Add this declaration to the statement-tree. This needs to happen
7dd37241 5776 after the call to check_initializer so that the DECL_EXPR for a
5777 reference temp is added before the DECL_EXPR for the reference itself. */
ce0c3b07 5778 if (at_function_scope_p ())
7dd37241 5779 add_decl_expr (decl);
ca106ab1 5780
8f62cb30 5781 /* Let the middle end know about variables and functions -- but not
5782 static data members in uninstantiated class templates. */
5783 if (!saved_processing_template_decl
5784 && (TREE_CODE (decl) == VAR_DECL
5785 || TREE_CODE (decl) == FUNCTION_DECL))
471086d6 5786 {
ece7bde7 5787 if (TREE_CODE (decl) == VAR_DECL)
8f62cb30 5788 {
5789 layout_var_decl (decl);
5790 maybe_commonize_var (decl);
5791 }
471086d6 5792
e5be38c3 5793 /* This needs to happen after the linkage is set. */
5794 determine_visibility (decl);
5795
cb8229af 5796 if (var_definition_p && TREE_STATIC (decl))
5797 {
5798 /* If a TREE_READONLY variable needs initialization
5799 at runtime, it is no longer readonly and we need to
5800 avoid MEM_READONLY_P being set on RTL created for it. */
5801 if (init)
5802 {
5803 if (TREE_READONLY (decl))
5804 TREE_READONLY (decl) = 0;
5805 was_readonly = 0;
5806 }
5807 else if (was_readonly)
5808 TREE_READONLY (decl) = 1;
5809 }
5810
ece7bde7 5811 make_rtl_for_nonlocal_decl (decl, init, asmspec);
471086d6 5812
d97a7640 5813 /* Check for abstractness of the type. Notice that there is no
5814 need to strip array types here since the check for those types
5815 is already done within create_array_type_for_decl. */
980877d7 5816 if (TREE_CODE (type) == FUNCTION_TYPE
ece7bde7 5817 || TREE_CODE (type) == METHOD_TYPE)
d97a7640 5818 abstract_virtuals_error (decl, TREE_TYPE (type));
980877d7 5819 else
71817734 5820 abstract_virtuals_error (decl, type);
471086d6 5821
2336da2a 5822 if (TREE_TYPE (decl) == error_mark_node)
2437a99c 5823 /* No initialization required. */
bb09dca5 5824 ;
2336da2a 5825 else if (TREE_CODE (decl) == FUNCTION_DECL)
5826 {
5827 if (init)
5828 {
5c9c5a4b 5829 if (init == ridpointers[(int)RID_DEFAULT])
2336da2a 5830 {
5c9c5a4b 5831 /* An out-of-class default definition is defined at
5832 the point where it is explicitly defaulted. */
5833 if (DECL_INITIAL (decl) == error_mark_node)
5834 synthesize_method (decl);
2336da2a 5835 }
5836 else
5837 error ("function %q#D is initialized like a variable", decl);
5838 }
5839 /* else no initialization required. */
5840 }
bf1b65b4 5841 else if (DECL_EXTERNAL (decl)
5842 && ! (DECL_LANG_SPECIFIC (decl)
5843 && DECL_NOT_REALLY_EXTERN (decl)))
e857e9c7 5844 {
5845 if (init)
5846 DECL_INITIAL (decl) = init;
5847 }
cb8229af 5848 /* A variable definition. */
5849 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5850 /* Initialize the local variable. */
5851 initialize_local_var (decl, init);
5852
5853 /* If a variable is defined, and then a subsequent
5854 definition with external linkage is encountered, we will
5855 get here twice for the same variable. We want to avoid
5856 calling expand_static_init more than once. For variables
5857 that are not static data members, we can call
5858 expand_static_init only when we actually process the
5859 initializer. It is not legal to redeclare a static data
5860 member, so this issue does not arise in that case. */
5861 else if (var_definition_p && TREE_STATIC (decl))
5862 expand_static_init (decl, init);
471086d6 5863 }
5864
d7d79557 5865 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5866 reference, insert it in the statement-tree now. */
5867 if (cleanup)
2363ef00 5868 push_cleanup (decl, cleanup, false);
d7d79557 5869
471086d6 5870 finish_end:
ac4d57eb 5871 processing_template_decl = saved_processing_template_decl;
471086d6 5872
471086d6 5873 if (was_readonly)
5874 TREE_READONLY (decl) = 1;
40109983 5875
5876 /* If this was marked 'used', be sure it will be output. */
5877 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
4490a821 5878 mark_decl_referenced (decl);
471086d6 5879}
5880
331bc0ad 5881/* This is here for a midend callback from c-common.c. */
96624a9e 5882
e4118769 5883void
b9c74b4d 5884finish_decl (tree decl, tree init, tree origtype ATTRIBUTE_UNUSED,
5885 tree asmspec_tree)
e4118769 5886{
d91303a6 5887 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, asmspec_tree, 0);
e4118769 5888}
5889
1da45f21 5890/* Returns a declaration for a VAR_DECL as if:
5891
5892 extern "C" TYPE NAME;
5893
5894 had been seen. Used to create compiler-generated global
5895 variables. */
5896
6cf0bc8c 5897static tree
1b72315d 5898declare_global_var (tree name, tree type)
1da45f21 5899{
5900 tree decl;
5901
5902 push_to_top_level ();
e60a6f7b 5903 decl = build_decl (input_location, VAR_DECL, name, type);
1da45f21 5904 TREE_PUBLIC (decl) = 1;
5905 DECL_EXTERNAL (decl) = 1;
5906 DECL_ARTIFICIAL (decl) = 1;
882d3c4f 5907 /* If the user has explicitly declared this variable (perhaps
5908 because the code we are compiling is part of a low-level runtime
5909 library), then it is possible that our declaration will be merged
5910 with theirs by pushdecl. */
5911 decl = pushdecl (decl);
b9c74b4d 5912 finish_decl (decl, NULL_TREE, NULL_TREE, NULL_TREE);
1da45f21 5913 pop_from_top_level ();
5914
5915 return decl;
5916}
5917
34382091 5918/* Returns the type for the argument to "__cxa_atexit" (or "atexit",
5919 if "__cxa_atexit" is not being used) corresponding to the function
5920 to be called when the program exits. */
5921
5922static tree
5923get_atexit_fn_ptr_type (void)
5924{
5925 tree arg_types;
5926 tree fn_type;
5927
5928 if (!atexit_fn_ptr_type_node)
5929 {
5930 if (flag_use_cxa_atexit
5931 && !targetm.cxx.use_atexit_for_cxa_atexit ())
5932 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
5933 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5934 else
5935 /* The parameter to "atexit" is "void (*)(void)". */
5936 arg_types = void_list_node;
5937
5938 fn_type = build_function_type (void_type_node, arg_types);
5939 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
5940 }
5941
5942 return atexit_fn_ptr_type_node;
5943}
5944
1da45f21 5945/* Returns a pointer to the `atexit' function. Note that if
3160db1d 5946 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
1da45f21 5947 `__cxa_atexit' function specified in the IA64 C++ ABI. */
5948
5949static tree
1b72315d 5950get_atexit_node (void)
1da45f21 5951{
5952 tree atexit_fndecl;
5953 tree arg_types;
5954 tree fn_type;
5955 tree fn_ptr_type;
5956 const char *name;
46b9ff5e 5957 bool use_aeabi_atexit;
1da45f21 5958
5959 if (atexit_node)
5960 return atexit_node;
5961
d91ef9b0 5962 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
1da45f21 5963 {
5964 /* The declaration for `__cxa_atexit' is:
5965
5966 int __cxa_atexit (void (*)(void *), void *, void *)
5967
5968 We build up the argument types and then then function type
5969 itself. */
980877d7 5970
46b9ff5e 5971 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
1da45f21 5972 /* First, build the pointer-to-function type for the first
5973 argument. */
34382091 5974 fn_ptr_type = get_atexit_fn_ptr_type ();
1da45f21 5975 /* Then, build the rest of the argument types. */
5976 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
46b9ff5e 5977 if (use_aeabi_atexit)
5978 {
5979 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5980 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5981 }
5982 else
5983 {
5984 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5985 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5986 }
1da45f21 5987 /* And the final __cxa_atexit type. */
5988 fn_type = build_function_type (integer_type_node, arg_types);
5989 fn_ptr_type = build_pointer_type (fn_type);
46b9ff5e 5990 if (use_aeabi_atexit)
5991 name = "__aeabi_atexit";
5992 else
5993 name = "__cxa_atexit";
1da45f21 5994 }
5995 else
5996 {
5997 /* The declaration for `atexit' is:
980877d7 5998
653e5405 5999 int atexit (void (*)());
1da45f21 6000
6001 We build up the argument types and then then function type
6002 itself. */
34382091 6003 fn_ptr_type = get_atexit_fn_ptr_type ();
1da45f21 6004 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
6005 /* Build the final atexit type. */
6006 fn_type = build_function_type (integer_type_node, arg_types);
6007 name = "atexit";
6008 }
6009
6010 /* Now, build the function declaration. */
6011 push_lang_context (lang_name_c);
d267eaf5 6012 atexit_fndecl = build_library_fn_ptr (name, fn_type);
1da45f21 6013 mark_used (atexit_fndecl);
6014 pop_lang_context ();
a681799d 6015 atexit_node = decay_conversion (atexit_fndecl);
1da45f21 6016
6017 return atexit_node;
6018}
6019
6020/* Returns the __dso_handle VAR_DECL. */
6021
6022static tree
1b72315d 6023get_dso_handle_node (void)
1da45f21 6024{
6025 if (dso_handle_node)
6026 return dso_handle_node;
6027
6028 /* Declare the variable. */
6029 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6030 ptr_type_node);
6031
6032 return dso_handle_node;
6033}
6034
6035/* Begin a new function with internal linkage whose job will be simply
6036 to destroy some particular variable. */
6037
4c1de685 6038static GTY(()) int start_cleanup_cnt;
6039
1da45f21 6040static tree
1b72315d 6041start_cleanup_fn (void)
1da45f21 6042{
1da45f21 6043 char name[32];
1da45f21 6044 tree fntype;
6045 tree fndecl;
d91ef9b0 6046 bool use_cxa_atexit = flag_use_cxa_atexit
6047 && !targetm.cxx.use_atexit_for_cxa_atexit ();
1da45f21 6048
6049 push_to_top_level ();
6050
6051 /* No need to mangle this. */
6052 push_lang_context (lang_name_c);
6053
1da45f21 6054 /* Build the name of the function. */
4c1de685 6055 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
1da45f21 6056 /* Build the function declaration. */
34382091 6057 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
1da45f21 6058 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6059 /* It's a function with internal linkage, generated by the
6060 compiler. */
6061 TREE_PUBLIC (fndecl) = 0;
6062 DECL_ARTIFICIAL (fndecl) = 1;
52b5ec4c 6063 /* Make the function `inline' so that it is only emitted if it is
6064 actually needed. It is unlikely that it will be inlined, since
4109ca29 6065 it is only called via a function pointer, but we avoid unnecessary
52b5ec4c 6066 emissions this way. */
3f6f16c2 6067 DECL_DECLARED_INLINE_P (fndecl) = 1;
19489abd 6068 DECL_INTERFACE_KNOWN (fndecl) = 1;
1da45f21 6069 /* Build the parameter. */
d91ef9b0 6070 if (use_cxa_atexit)
1da45f21 6071 {
6072 tree parmdecl;
6073
d145d8d5 6074 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
1da45f21 6075 DECL_CONTEXT (parmdecl) = fndecl;
1da45f21 6076 TREE_USED (parmdecl) = 1;
6077 DECL_ARGUMENTS (fndecl) = parmdecl;
6078 }
6079
24c5ffc6 6080 pushdecl (fndecl);
3046c0a3 6081 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
1da45f21 6082
1da45f21 6083 pop_lang_context ();
6084
6085 return current_function_decl;
6086}
6087
6088/* Finish the cleanup function begun by start_cleanup_fn. */
6089
6090static void
1b72315d 6091end_cleanup_fn (void)
1da45f21 6092{
6cb758f0 6093 expand_or_defer_fn (finish_function (0));
1da45f21 6094
6095 pop_from_top_level ();
6096}
6097
060ff7d8 6098/* Generate code to handle the destruction of DECL, an object with
6099 static storage duration. */
b9920b13 6100
4813f5af 6101tree
1b72315d 6102register_dtor_fn (tree decl)
b9920b13 6103{
1da45f21 6104 tree cleanup;
b9920b13 6105 tree compound_stmt;
1da45f21 6106 tree args;
6107 tree fcall;
34382091 6108 tree type;
6109 bool use_dtor;
b9920b13 6110
34382091 6111 type = TREE_TYPE (decl);
6112 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
4813f5af 6113 return void_zero_node;
060ff7d8 6114
34382091 6115 /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6116 a class object, we can just pass the destructor to
6117 "__cxa_atexit"; we don't have to build a temporary function to do
6118 the cleanup. */
6119 use_dtor = (flag_use_cxa_atexit
6120 && !targetm.cxx.use_atexit_for_cxa_atexit ()
6121 && CLASS_TYPE_P (type));
6122 if (use_dtor)
6123 {
6124 int idx;
6125
6126 /* Find the destructor. */
6127 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6128 gcc_assert (idx >= 0);
6129 cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6130 /* Make sure it is accessible. */
6131 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6132 }
6133 else
6134 {
6135 /* Call build_cleanup before we enter the anonymous function so
6136 that any access checks will be done relative to the current
6137 scope, rather than the scope of the anonymous function. */
6138 build_cleanup (decl);
6139
6140 /* Now start the function. */
6141 cleanup = start_cleanup_fn ();
6142
6143 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
6144 to the original function, rather than the anonymous one. That
6145 will make the back end think that nested functions are in use,
6146 which causes confusion. */
6147 push_deferring_access_checks (dk_no_check);
6148 fcall = build_cleanup (decl);
6149 pop_deferring_access_checks ();
6150
6151 /* Create the body of the anonymous function. */
6152 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6153 finish_expr_stmt (fcall);
6154 finish_compound_stmt (compound_stmt);
6155 end_cleanup_fn ();
6156 }
b9920b13 6157
6158 /* Call atexit with the cleanup function. */
b04d4dc3 6159 mark_used (cleanup);
34382091 6160 cleanup = build_address (cleanup);
d91ef9b0 6161 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
1da45f21 6162 {
34382091 6163 tree addr;
6164
6165 if (use_dtor)
6166 {
6167 /* We must convert CLEANUP to the type that "__cxa_atexit"
6168 expects. */
6169 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6170 /* "__cxa_atexit" will pass the address of DECL to the
6171 cleanup function. */
6172 mark_used (decl);
6173 addr = build_address (decl);
6174 /* The declared type of the parameter to "__cxa_atexit" is
6175 "void *". For plain "T*", we could just let the
ebd21de4 6176 machinery in cp_build_function_call convert it -- but if the
34382091 6177 type is "cv-qualified T *", then we need to convert it
6178 before passing it in, to avoid spurious errors. */
6179 addr = build_nop (ptr_type_node, addr);
6180 }
6181 else
6182 /* Since the cleanup functions we build ignore the address
6183 they're given, there's no reason to pass the actual address
6184 in, and, in general, it's cheaper to pass NULL than any
6185 other value. */
6186 addr = null_pointer_node;
491e04ef 6187 args = tree_cons (NULL_TREE,
ebd21de4 6188 cp_build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0,
6189 tf_warning_or_error),
ffe1802e 6190 NULL_TREE);
46b9ff5e 6191 if (targetm.cxx.use_aeabi_atexit ())
6192 {
6193 args = tree_cons (NULL_TREE, cleanup, args);
34382091 6194 args = tree_cons (NULL_TREE, addr, args);
46b9ff5e 6195 }
6196 else
6197 {
34382091 6198 args = tree_cons (NULL_TREE, addr, args);
46b9ff5e 6199 args = tree_cons (NULL_TREE, cleanup, args);
6200 }
1da45f21 6201 }
6202 else
6203 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
ebd21de4 6204 return cp_build_function_call (get_atexit_node (), args,
6205 tf_warning_or_error);
b9920b13 6206}
6207
2437a99c 6208/* DECL is a VAR_DECL with static storage duration. INIT, if present,
6209 is its initializer. Generate code to handle the construction
6210 and destruction of DECL. */
6211
6212static void
1b72315d 6213expand_static_init (tree decl, tree init)
471086d6 6214{
b4df430b 6215 gcc_assert (TREE_CODE (decl) == VAR_DECL);
6216 gcc_assert (TREE_STATIC (decl));
2437a99c 6217
6218 /* Some variables require no initialization. */
491e04ef 6219 if (!init
2437a99c 6220 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
6221 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6222 return;
6223
c0731520 6224 if (DECL_FUNCTION_SCOPE_P (decl))
471086d6 6225 {
6226 /* Emit code to perform this initialization but once. */
2ca3d426 6227 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6228 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
d01f58f9 6229 tree guard, guard_addr;
4813f5af 6230 tree acquire_fn, release_fn, abort_fn;
6231 tree flag, begin;
471086d6 6232
1fc84929 6233 /* Emit code to perform this initialization but once. This code
6234 looks like:
6235
653e5405 6236 static <type> guard;
6237 if (!guard.first_byte) {
4813f5af 6238 if (__cxa_guard_acquire (&guard)) {
6239 bool flag = false;
6240 try {
653e5405 6241 // Do initialization.
6242 flag = true; __cxa_guard_release (&guard);
6243 // Register variable for destruction at end of program.
4813f5af 6244 } catch {
653e5405 6245 if (!flag) __cxa_guard_abort (&guard);
4813f5af 6246 }
1fc84929 6247 }
6248
4813f5af 6249 Note that the `flag' variable is only set to 1 *after* the
1fc84929 6250 initialization is complete. This ensures that an exception,
6251 thrown during the construction, will cause the variable to
6252 reinitialized when we pass through this code again, as per:
980877d7 6253
1fc84929 6254 [stmt.dcl]
6255
9031d10b 6256 If the initialization exits by throwing an exception, the
1fc84929 6257 initialization is not complete, so it will be tried again
6258 the next time control enters the declaration.
6259
653e5405 6260 This process should be thread-safe, too; multiple threads
4813f5af 6261 should not be able to initialize the variable more than
6262 once. */
4eb32e62 6263
6264 /* Create the guard variable. */
6265 guard = get_guard (decl);
1fc84929 6266
2ca3d426 6267 /* This optimization isn't safe on targets with relaxed memory
6268 consistency. On such targets we force synchronization in
6269 __cxa_guard_acquire. */
6270 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6271 {
6272 /* Begin the conditional initialization. */
6273 if_stmt = begin_if_stmt ();
6274 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6275 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6276 }
4813f5af 6277
6278 if (flag_threadsafe_statics)
6279 {
6280 guard_addr = build_address (guard);
4813f5af 6281
6282 acquire_fn = get_identifier ("__cxa_guard_acquire");
6283 release_fn = get_identifier ("__cxa_guard_release");
6284 abort_fn = get_identifier ("__cxa_guard_abort");
6285 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
6286 {
6287 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
6288 void_list_node);
6289 tree vfntype = build_function_type (void_type_node, argtypes);
6290 acquire_fn = push_library_fn
0b83df30 6291 (acquire_fn, build_function_type (integer_type_node, argtypes),
6292 NULL_TREE);
6293 release_fn = push_library_fn (release_fn, vfntype, NULL_TREE);
6294 abort_fn = push_library_fn (abort_fn, vfntype, NULL_TREE);
4813f5af 6295 }
6296 else
6297 {
6298 release_fn = identifier_global_value (release_fn);
6299 abort_fn = identifier_global_value (abort_fn);
6300 }
6301
6302 inner_if_stmt = begin_if_stmt ();
d01f58f9 6303 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
4813f5af 6304 inner_if_stmt);
6305
6306 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6307 begin = get_target_expr (boolean_false_node);
6308 flag = TARGET_EXPR_SLOT (begin);
6309
6310 TARGET_EXPR_CLEANUP (begin)
5753d297 6311 = build3 (COND_EXPR, void_type_node, flag,
6312 void_zero_node,
d01f58f9 6313 build_call_n (abort_fn, 1, guard_addr));
4813f5af 6314 CLEANUP_EH_ONLY (begin) = 1;
6315
6316 /* Do the initialization itself. */
6317 init = add_stmt_to_compound (begin, init);
6318 init = add_stmt_to_compound
5753d297 6319 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
4813f5af 6320 init = add_stmt_to_compound
d01f58f9 6321 (init, build_call_n (release_fn, 1, guard_addr));
4813f5af 6322 }
b48733fd 6323 else
4813f5af 6324 init = add_stmt_to_compound (init, set_guard (guard));
3d4e092a 6325
1fc84929 6326 /* Use atexit to register a function for destroying this static
6327 variable. */
4813f5af 6328 init = add_stmt_to_compound (init, register_dtor_fn (decl));
6329
6330 finish_expr_stmt (init);
6331
6332 if (flag_threadsafe_statics)
6333 {
6334 finish_compound_stmt (inner_then_clause);
6335 finish_then_clause (inner_if_stmt);
6336 finish_if_stmt (inner_if_stmt);
6337 }
3d4e092a 6338
2ca3d426 6339 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6340 {
6341 finish_compound_stmt (then_clause);
6342 finish_then_clause (if_stmt);
6343 finish_if_stmt (if_stmt);
6344 }
471086d6 6345 }
6346 else
b53fb33d 6347 static_aggregates = tree_cons (init, decl, static_aggregates);
471086d6 6348}
357d301c 6349
471086d6 6350\f
6351/* Make TYPE a complete type based on INITIAL_VALUE.
6352 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
983bd96f 6353 2 if there was no information (in which case assume 0 if DO_DEFAULT),
6354 3 if the initializer list is empty (in pedantic mode). */
471086d6 6355
6356int
c271bdb2 6357cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
471086d6 6358{
c271bdb2 6359 int failure;
6360 tree type, elt_type;
980877d7 6361
471086d6 6362 if (initial_value)
6363 {
08d094fe 6364 unsigned HOST_WIDE_INT i;
6365 tree value;
6366
e67164f5 6367 /* An array of character type can be initialized from a
c75b4594 6368 brace-enclosed string constant.
6369
6370 FIXME: this code is duplicated from reshape_init. Probably
6371 we should just call reshape_init here? */
c271bdb2 6372 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
e67164f5 6373 && TREE_CODE (initial_value) == CONSTRUCTOR
c75b4594 6374 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6375 {
6376 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6377 tree value = VEC_index (constructor_elt, v, 0)->value;
6378
6379 if (TREE_CODE (value) == STRING_CST
6380 && VEC_length (constructor_elt, v) == 1)
6381 initial_value = value;
6382 }
08d094fe 6383
6384 /* If any of the elements are parameter packs, we can't actually
6385 complete this type now because the array size is dependent. */
6386 if (TREE_CODE (initial_value) == CONSTRUCTOR)
6387 {
6388 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
6389 i, value)
6390 {
6391 if (PACK_EXPANSION_P (value))
6392 return 0;
6393 }
6394 }
471086d6 6395 }
6396
c271bdb2 6397 failure = complete_array_type (ptype, initial_value, do_default);
471086d6 6398
c271bdb2 6399 /* We can create the array before the element type is complete, which
6400 means that we didn't have these two bits set in the original type
6401 either. In completing the type, we are expected to propagate these
6402 bits. See also complete_type which does the same thing for arrays
6403 of fixed size. */
6404 type = *ptype;
6405 if (TYPE_DOMAIN (type))
471086d6 6406 {
e945eb2d 6407 elt_type = TREE_TYPE (type);
c271bdb2 6408 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
e945eb2d 6409 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
c271bdb2 6410 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
471086d6 6411 }
6412
c271bdb2 6413 return failure;
471086d6 6414}
6415\f
6416/* Return zero if something is declared to be a member of type
6417 CTYPE when in the context of CUR_TYPE. STRING is the error
6418 message to print in that case. Otherwise, quietly return 1. */
96624a9e 6419
471086d6 6420static int
1b72315d 6421member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
471086d6 6422{
6423 if (ctype && ctype != cur_type)
6424 {
017fafd4 6425 if (flags == DTOR_FLAG)
3ce479a6 6426 error ("destructor for alien class %qT cannot be a member", ctype);
017fafd4 6427 else
3ce479a6 6428 error ("constructor for alien class %qT cannot be a member", ctype);
471086d6 6429 return 0;
6430 }
6431 return 1;
6432}
6433\f
6434/* Subroutine of `grokdeclarator'. */
6435
6436/* Generate errors possibly applicable for a given set of specifiers.
6437 This is for ARM $7.1.2. */
96624a9e 6438
471086d6 6439static void
1b72315d 6440bad_specifiers (tree object,
653e5405 6441 const char* type,
6442 int virtualp,
6443 int quals,
6444 int inlinep,
6445 int friendp,
6446 int raises)
471086d6 6447{
6448 if (virtualp)
3ce479a6 6449 error ("%qD declared as a %<virtual%> %s", object, type);
471086d6 6450 if (inlinep)
3ce479a6 6451 error ("%qD declared as an %<inline%> %s", object, type);
471086d6 6452 if (quals)
3ce479a6 6453 error ("%<const%> and %<volatile%> function specifiers on "
653e5405 6454 "%qD invalid in %s declaration",
6455 object, type);
471086d6 6456 if (friendp)
3cf8b391 6457 error ("%q+D declared as a friend", object);
a49facc5 6458 if (raises
6459 && (TREE_CODE (object) == TYPE_DECL
6460 || (!TYPE_PTRFN_P (TREE_TYPE (object))
054e01a7 6461 && !TYPE_REFFN_P (TREE_TYPE (object))
a49facc5 6462 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
3cf8b391 6463 error ("%q+D declared with an exception specification", object);
471086d6 6464}
6465
9ed9d9ec 6466/* DECL is a member function or static data member and is presently
6467 being defined. Check that the definition is taking place in a
6468 valid namespace. */
6469
6470static void
6471check_class_member_definition_namespace (tree decl)
6472{
6473 /* These checks only apply to member functions and static data
6474 members. */
6475 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6476 || TREE_CODE (decl) == VAR_DECL);
6477 /* We check for problems with specializations in pt.c in
6478 check_specialization_namespace, where we can issue better
6479 diagnostics. */
6480 if (processing_specialization)
6481 return;
6482 /* There are no restrictions on the placement of
6483 explicit instantiations. */
6484 if (processing_explicit_instantiation)
6485 return;
6486 /* [class.mfct]
6487
6488 A member function definition that appears outside of the
6489 class definition shall appear in a namespace scope enclosing
6490 the class definition.
6491
6492 [class.static.data]
6493
6494 The definition for a static data member shall appear in a
6495 namespace scope enclosing the member's class definition. */
6496 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
2b9e3597 6497 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
561fec9d 6498 decl, DECL_CONTEXT (decl));
9ed9d9ec 6499}
6500
7873fcd6 6501/* Build a PARM_DECL for the "this" parameter. TYPE is the
6502 METHOD_TYPE for a non-static member function; QUALS are the
6503 cv-qualifiers that apply to the function. */
074ab442 6504
7873fcd6 6505tree
6506build_this_parm (tree type, cp_cv_quals quals)
6507{
6508 tree this_type;
6509 tree qual_type;
6510 tree parm;
6511 cp_cv_quals this_quals;
6512
6513 this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
6514 /* The `this' parameter is implicitly `const'; it cannot be
6515 assigned to. */
6516 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
6517 qual_type = cp_build_qualified_type (this_type, this_quals);
6518 parm = build_artificial_parm (this_identifier, qual_type);
6519 cp_apply_type_quals_to_decl (this_quals, parm);
6520 return parm;
074ab442 6521}
7873fcd6 6522
471086d6 6523/* CTYPE is class type, or null if non-class.
6524 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
6525 or METHOD_TYPE.
6526 DECLARATOR is the function's name.
7ef14399 6527 PARMS is a chain of PARM_DECLs for the function.
471086d6 6528 VIRTUALP is truthvalue of whether the function is virtual or not.
6529 FLAGS are to be passed through to `grokclassfn'.
6530 QUALS are qualifiers indicating whether the function is `const'
6531 or `volatile'.
6532 RAISES is a list of exceptions that this function can raise.
6533 CHECK is 1 if we must find this method in CTYPE, 0 if we should
980877d7 6534 not look, and -1 if we should not call `grokclassfn' at all.
76c1ba40 6535
6ecedd95 6536 SFK is the kind of special function (if any) for the new function.
6537
e0d8778b 6538 Returns `NULL_TREE' if something goes wrong, after issuing
76c1ba40 6539 applicable error messages. */
96624a9e 6540
471086d6 6541static tree
491e04ef 6542grokfndecl (tree ctype,
653e5405 6543 tree type,
6544 tree declarator,
7ef14399 6545 tree parms,
653e5405 6546 tree orig_declarator,
6547 int virtualp,
6548 enum overload_flags flags,
2cfb6cde 6549 cp_cv_quals quals,
653e5405 6550 tree raises,
6551 int check,
6552 int friendp,
6553 int publicp,
6554 int inlinep,
6ecedd95 6555 special_function_kind sfk,
7be1bc1f 6556 bool funcdef_flag,
653e5405 6557 int template_count,
6558 tree in_namespace,
d19f0a18 6559 tree* attrlist,
6560 location_t location)
471086d6 6561{
83c4eacf 6562 tree decl;
471086d6 6563 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
03db3ebd 6564 tree t;
471086d6 6565
471086d6 6566 if (raises)
01779b5f 6567 type = build_exception_variant (type, raises);
f9670f72 6568
471086d6 6569 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
d19f0a18 6570
6571 /* If we have an explicit location, use it, otherwise use whatever
6572 build_lang_decl used (probably input_location). */
6573 if (location != UNKNOWN_LOCATION)
6574 DECL_SOURCE_LOCATION (decl) = location;
6575
7873fcd6 6576 if (TREE_CODE (type) == METHOD_TYPE)
6577 {
6578 tree parm;
6579 parm = build_this_parm (type, quals);
6580 TREE_CHAIN (parm) = parms;
6581 parms = parm;
6582 }
7ef14399 6583 DECL_ARGUMENTS (decl) = parms;
e92154af 6584 for (t = parms; t; t = TREE_CHAIN (t))
6585 DECL_CONTEXT (t) = decl;
a109dc3b 6586 /* Propagate volatile out from type to decl. */
471086d6 6587 if (TYPE_VOLATILE (type))
f69ecb3b 6588 TREE_THIS_VOLATILE (decl) = 1;
471086d6 6589
a80e2c52 6590 /* Setup decl according to sfk. */
6591 switch (sfk)
6592 {
6593 case sfk_constructor:
6594 case sfk_copy_constructor:
6595 DECL_CONSTRUCTOR_P (decl) = 1;
6596 break;
6597 case sfk_destructor:
6598 DECL_DESTRUCTOR_P (decl) = 1;
6599 break;
6600 default:
6601 break;
6602 }
6603
097b5c8b 6604 /* If pointers to member functions use the least significant bit to
6605 indicate whether a function is virtual, ensure a pointer
6606 to this function will have that bit clear. */
6607 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6608 && TREE_CODE (type) == METHOD_TYPE
6609 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
6610 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
6611
d9f07a8d 6612 if (friendp
6613 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
6614 {
6615 if (funcdef_flag)
6616 error
6617 ("defining explicit specialization %qD in friend declaration",
6618 orig_declarator);
6619 else
6620 {
6621 tree fns = TREE_OPERAND (orig_declarator, 0);
6622 tree args = TREE_OPERAND (orig_declarator, 1);
6623
6624 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
6625 {
6626 /* Something like `template <class T> friend void f<T>()'. */
6627 error ("invalid use of template-id %qD in declaration "
6628 "of primary template",
6629 orig_declarator);
6630 return NULL_TREE;
6631 }
6632
6633
6634 /* A friend declaration of the form friend void f<>(). Record
6635 the information in the TEMPLATE_ID_EXPR. */
6636 SET_DECL_IMPLICIT_INSTANTIATION (decl);
6637
6638 if (TREE_CODE (fns) == COMPONENT_REF)
6639 {
6640 /* Due to bison parser ickiness, we will have already looked
6641 up an operator_name or PFUNCNAME within the current class
6642 (see template_id in parse.y). If the current class contains
6643 such a name, we'll get a COMPONENT_REF here. Undo that. */
6644
6645 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
6646 == current_class_type);
6647 fns = TREE_OPERAND (fns, 1);
6648 }
6649 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
6650 || TREE_CODE (fns) == OVERLOAD);
6651 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
6652
6653 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
6654 if (TREE_PURPOSE (t)
6655 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
6656 {
6657 error ("default arguments are not allowed in declaration "
6658 "of friend template specialization %qD",
6659 decl);
6660 return NULL_TREE;
6661 }
6662
6663 if (inlinep)
6664 {
6665 error ("%<inline%> is not allowed in declaration of friend "
6666 "template specialization %qD",
6667 decl);
6668 return NULL_TREE;
6669 }
6670 }
6671 }
6672
62be7b35 6673 /* If this decl has namespace scope, set that up. */
8417823c 6674 if (in_namespace)
ce82f1c3 6675 set_decl_namespace (decl, in_namespace, friendp);
f4ef27d5 6676 else if (!ctype)
62be7b35 6677 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8417823c 6678
16fd72fa 6679 /* `main' and builtins have implicit 'C' linkage. */
6680 if ((MAIN_NAME_P (declarator)
6681 || (IDENTIFIER_LENGTH (declarator) > 10
6682 && IDENTIFIER_POINTER (declarator)[0] == '_'
6683 && IDENTIFIER_POINTER (declarator)[1] == '_'
6684 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
6685 && current_lang_name == lang_name_cplusplus
3ea58ecd 6686 && ctype == NULL_TREE
62be7b35 6687 /* NULL_TREE means global namespace. */
6688 && DECL_CONTEXT (decl) == NULL_TREE)
4b1984f5 6689 SET_DECL_LANGUAGE (decl, lang_c);
16fd72fa 6690
471086d6 6691 /* Should probably propagate const out from type to decl I bet (mrs). */
6692 if (staticp)
6693 {
6694 DECL_STATIC_FUNCTION_P (decl) = 1;
6695 DECL_CONTEXT (decl) = ctype;
471086d6 6696 }
6697
e4ce2dc4 6698 if (ctype)
9ed9d9ec 6699 {
6700 DECL_CONTEXT (decl) = ctype;
6701 if (funcdef_flag)
6702 check_class_member_definition_namespace (decl);
6703 }
e4ce2dc4 6704
16fd72fa 6705 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
bb09dca5 6706 {
95b2ac55 6707 if (processing_template_decl)
3ce479a6 6708 error ("cannot declare %<::main%> to be a template");
bb09dca5 6709 if (inlinep)
3ce479a6 6710 error ("cannot declare %<::main%> to be inline");
78390ff9 6711 if (!publicp)
3ce479a6 6712 error ("cannot declare %<::main%> to be static");
bb09dca5 6713 inlinep = 0;
6714 publicp = 1;
6715 }
844e1a9a 6716
6cbb4197 6717 /* Members of anonymous types and local classes have no linkage; make
1112ccbc 6718 them internal. If a typedef is made later, this will be changed. */
83c4eacf 6719 if (ctype && (TYPE_ANONYMOUS_P (ctype)
9ba4048d 6720 || decl_function_context (TYPE_MAIN_DECL (ctype))))
844e1a9a 6721 publicp = 0;
6722
6723 if (publicp)
6724 {
6725 /* [basic.link]: A name with no linkage (notably, the name of a class
6726 or enumeration declared in a local scope) shall not be used to
6727 declare an entity with linkage.
6728
bf594afa 6729 Only check this for public decls for now. See core 319, 389. */
caa6fdce 6730 t = no_linkage_check (TREE_TYPE (decl),
6731 /*relaxed_p=*/false);
844e1a9a 6732 if (t)
6733 {
83c4eacf 6734 if (TYPE_ANONYMOUS_P (t))
cbaacf5e 6735 {
a2697ab6 6736 if (DECL_EXTERN_C_P (decl))
cbaacf5e 6737 /* Allow this; it's pretty common in C. */;
6738 else
83c4eacf 6739 {
2b9e3597 6740 permerror (input_location, "non-local function %q#D uses anonymous type",
83c4eacf 6741 decl);
6742 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
2b9e3597 6743 permerror (input_location, "%q+#D does not refer to the unqualified "
561fec9d 6744 "type, so it is not used for linkage",
6745 TYPE_NAME (t));
83c4eacf 6746 }
cbaacf5e 6747 }
844e1a9a 6748 else
2b9e3597 6749 permerror (input_location, "non-local function %q#D uses local type %qT", decl, t);
844e1a9a 6750 }
6751 }
6752
f69ecb3b 6753 TREE_PUBLIC (decl) = publicp;
bb09dca5 6754 if (! publicp)
f69ecb3b 6755 {
6756 DECL_INTERFACE_KNOWN (decl) = 1;
6757 DECL_NOT_REALLY_EXTERN (decl) = 1;
6758 }
bb09dca5 6759
10c08065 6760 /* If the declaration was declared inline, mark it as such. */
bb09dca5 6761 if (inlinep)
10c08065 6762 DECL_DECLARED_INLINE_P (decl) = 1;
471086d6 6763
6764 DECL_EXTERNAL (decl) = 1;
2cfb6cde 6765 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
471086d6 6766 {
82cae756 6767 error (ctype
6768 ? G_("static member function %qD cannot have cv-qualifier")
a16a8bec 6769 : G_("non-member function %qD cannot have cv-qualifier"),
82cae756 6770 decl);
2cfb6cde 6771 quals = TYPE_UNQUALIFIED;
471086d6 6772 }
6773
fcdd34ab 6774 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
6775 && !grok_op_properties (decl, /*complain=*/true))
6776 return NULL_TREE;
471086d6 6777
9ba4048d 6778 if (ctype && decl_function_context (decl))
f69ecb3b 6779 DECL_NO_STATIC_CHAIN (decl) = 1;
e4ce2dc4 6780
f13e7b2b 6781 if (funcdef_flag)
6782 /* Make the init_value nonzero so pushdecl knows this is not
6783 tentative. error_mark_node is replaced later with the BLOCK. */
6784 DECL_INITIAL (decl) = error_mark_node;
6785
78fdeecc 6786 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
90252716 6787 TREE_NOTHROW (decl) = 1;
6788
668ae905 6789 /* Caller will do the rest of this. */
471086d6 6790 if (check < 0)
6791 return decl;
6792
3467e461 6793 if (ctype != NULL_TREE)
a80e2c52 6794 grokclassfn (ctype, decl, flags);
3467e461 6795
6796 decl = check_explicit_specialization (orig_declarator, decl,
6797 template_count,
7be1bc1f 6798 2 * funcdef_flag +
3467e461 6799 4 * (friendp != 0));
6800 if (decl == error_mark_node)
6801 return NULL_TREE;
64b4f183 6802
c37ff371 6803 if (attrlist)
6804 {
6805 cplus_decl_attributes (&decl, *attrlist, 0);
6806 *attrlist = NULL_TREE;
6807 }
6808
45e13181 6809 /* Check main's type after attributes have been applied. */
6810 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6811 {
6812 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
6813 integer_type_node))
6814 {
6815 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
6816 tree newtype;
6817 error ("%<::main%> must return %<int%>");
6818 newtype = build_function_type (integer_type_node, oldtypeargs);
6819 TREE_TYPE (decl) = newtype;
6820 }
23efcc02 6821 if (warn_main)
6822 check_main_parameter_types (decl);
45e13181 6823 }
6824
3467e461 6825 if (ctype != NULL_TREE
6826 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6827 && check)
471086d6 6828 {
e5252ce9 6829 tree old_decl = check_classfn (ctype, decl,
6830 (processing_template_decl
6831 > template_class_depth (ctype))
6832 ? current_template_parms
6833 : NULL_TREE);
6834
6835 if (old_decl == error_mark_node)
6836 return NULL_TREE;
471086d6 6837
3467e461 6838 if (old_decl)
471086d6 6839 {
f12b8e1e 6840 tree ok;
7f602bca 6841 tree pushed_scope;
66bf0ee5 6842
7be1bc1f 6843 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6844 /* Because grokfndecl is always supposed to return a
6845 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6846 here. We depend on our callers to figure out that its
6847 really a template that's being returned. */
6848 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6849
6850 if (DECL_STATIC_FUNCTION_P (old_decl)
6851 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6852 /* Remove the `this' parm added by grokclassfn.
6853 XXX Isn't this done in start_function, too? */
6854 revert_static_member_fn (decl);
6855 if (DECL_ARTIFICIAL (old_decl))
9129d24f 6856 {
6857 error ("definition of implicitly-declared %qD", old_decl);
6858 return NULL_TREE;
6859 }
7be1bc1f 6860
3467e461 6861 /* Since we've smashed OLD_DECL to its
6862 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
6863 if (TREE_CODE (decl) == TEMPLATE_DECL)
6864 decl = DECL_TEMPLATE_RESULT (decl);
6865
6866 /* Attempt to merge the declarations. This can fail, in
6c0cc2cd 6867 the case of some invalid specialization declarations. */
7f602bca 6868 pushed_scope = push_scope (ctype);
c1d4295f 6869 ok = duplicate_decls (decl, old_decl, friendp);
7f602bca 6870 if (pushed_scope)
6871 pop_scope (pushed_scope);
66bf0ee5 6872 if (!ok)
6873 {
3ce479a6 6874 error ("no %q#D member function declared in class %qT",
66bf0ee5 6875 decl, ctype);
6876 return NULL_TREE;
6877 }
3467e461 6878 return old_decl;
471086d6 6879 }
6880 }
3467e461 6881
6882 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6883 return NULL_TREE;
6884
6885 if (ctype == NULL_TREE || check)
6886 return decl;
6887
6888 if (virtualp)
4c481f71 6889 DECL_VIRTUAL_P (decl) = 1;
3467e461 6890
471086d6 6891 return decl;
6892}
6893
caa6fdce 6894/* DECL is a VAR_DECL for a static data member. Set flags to reflect
6895 the linkage that DECL will receive in the object file. */
6896
6897static void
6898set_linkage_for_static_data_member (tree decl)
6899{
6900 /* A static data member always has static storage duration and
6901 external linkage. Note that static data members are forbidden in
6902 local classes -- the only situation in which a class has
6903 non-external linkage. */
6904 TREE_PUBLIC (decl) = 1;
6905 TREE_STATIC (decl) = 1;
6906 /* For non-template classes, static data members are always put
6907 out in exactly those files where they are defined, just as
4a44ba29 6908 with ordinary namespace-scope variables. */
caa6fdce 6909 if (!processing_template_decl)
6910 DECL_INTERFACE_KNOWN (decl) = 1;
6911}
6912
491e04ef 6913/* Create a VAR_DECL named NAME with the indicated TYPE.
3645386f 6914
6915 If SCOPE is non-NULL, it is the class type or namespace containing
6916 the variable. If SCOPE is NULL, the variable should is created in
6917 the innermost enclosings scope. */
6918
471086d6 6919static tree
1b72315d 6920grokvardecl (tree type,
653e5405 6921 tree name,
6493c502 6922 const cp_decl_specifier_seq *declspecs,
653e5405 6923 int initialized,
6924 int constp,
6925 tree scope)
471086d6 6926{
6927 tree decl;
ab6bb714 6928 tree explicit_scope;
eaf26d83 6929
b4df430b 6930 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
3645386f 6931
ab6bb714 6932 /* Compute the scope in which to place the variable, but remember
6933 whether or not that scope was explicitly specified by the user. */
6934 explicit_scope = scope;
3645386f 6935 if (!scope)
471086d6 6936 {
3645386f 6937 /* An explicit "extern" specifier indicates a namespace-scope
6938 variable. */
4b9b2871 6939 if (declspecs->storage_class == sc_extern)
3645386f 6940 scope = current_namespace;
6941 else if (!at_function_scope_p ())
46f43a6b 6942 scope = current_scope ();
3645386f 6943 }
6944
6945 if (scope
6946 && (/* If the variable is a namespace-scope variable declared in a
6947 template, we need DECL_LANG_SPECIFIC. */
6948 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6949 /* Similarly for namespace-scope variables with language linkage
6950 other than C++. */
491e04ef 6951 || (TREE_CODE (scope) == NAMESPACE_DECL
3645386f 6952 && current_lang_name != lang_name_cplusplus)
6953 /* Similarly for static data members. */
6954 || TYPE_P (scope)))
6955 decl = build_lang_decl (VAR_DECL, name, type);
471086d6 6956 else
e60a6f7b 6957 decl = build_decl (input_location, VAR_DECL, name, type);
62be7b35 6958
ab6bb714 6959 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6960 set_decl_namespace (decl, explicit_scope, 0);
3645386f 6961 else
f0652ba9 6962 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
a74e8896 6963
4b9b2871 6964 if (declspecs->storage_class == sc_extern)
471086d6 6965 {
6966 DECL_THIS_EXTERN (decl) = 1;
6967 DECL_EXTERNAL (decl) = !initialized;
6968 }
6969
00d2b1b9 6970 if (DECL_CLASS_SCOPE_P (decl))
471086d6 6971 {
caa6fdce 6972 set_linkage_for_static_data_member (decl);
6973 /* This function is only called with out-of-class definitions. */
822f06da 6974 DECL_EXTERNAL (decl) = 0;
9ed9d9ec 6975 check_class_member_definition_namespace (decl);
471086d6 6976 }
6977 /* At top level, either `static' or no s.c. makes a definition
6978 (perhaps tentative), and absence of `static' makes it public. */
d0622bdf 6979 else if (toplevel_bindings_p ())
471086d6 6980 {
4b9b2871 6981 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
02b4641e 6982 && (DECL_THIS_EXTERN (decl) || ! constp));
471086d6 6983 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
6984 }
6985 /* Not at top level, only `static' makes a static definition. */
6986 else
6987 {
4b9b2871 6988 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
471086d6 6989 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
6990 }
844e1a9a 6991
4b9b2871 6992 if (declspecs->specs[(int)ds_thread])
9dda1f80 6993 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
e396cd54 6994
844e1a9a 6995 if (TREE_PUBLIC (decl))
6996 {
6997 /* [basic.link]: A name with no linkage (notably, the name of a class
6998 or enumeration declared in a local scope) shall not be used to
6999 declare an entity with linkage.
7000
93523877 7001 Only check this for public decls for now. */
f119c055 7002 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
844e1a9a 7003 if (t)
7004 {
83c4eacf 7005 if (TYPE_ANONYMOUS_P (t))
1112ccbc 7006 {
7007 if (DECL_EXTERN_C_P (decl))
64ab1bb3 7008 /* Allow this; it's pretty common in C. */
7009 ;
1112ccbc 7010 else
7011 {
f119c055 7012 /* DRs 132, 319 and 389 seem to indicate types with
7013 no linkage can only be used to declare extern "C"
7014 entities. Since it's not always an error in the
7015 ISO C++ 90 Standard, we only issue a warning. */
c3ceba8e 7016 warning (0, "non-local variable %q#D uses anonymous type",
1112ccbc 7017 decl);
7018 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
3cf8b391 7019 warning (0, "%q+#D does not refer to the unqualified "
7020 "type, so it is not used for linkage",
7021 TYPE_NAME (t));
1112ccbc 7022 }
7023 }
844e1a9a 7024 else
c3ceba8e 7025 warning (0, "non-local variable %q#D uses local type %qT", decl, t);
844e1a9a 7026 }
7027 }
41bc4735 7028 else
7029 DECL_INTERFACE_KNOWN (decl) = 1;
844e1a9a 7030
471086d6 7031 return decl;
7032}
7033
2b77484d 7034/* Create and return a canonical pointer to member function type, for
7035 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
471086d6 7036
7037tree
1b72315d 7038build_ptrmemfunc_type (tree type)
471086d6 7039{
805e22b2 7040 tree field, fields;
471086d6 7041 tree t;
3970dedc 7042 tree unqualified_variant = NULL_TREE;
471086d6 7043
594f37d2 7044 if (type == error_mark_node)
7045 return type;
20c01ba9 7046
471086d6 7047 /* If a canonical type already exists for this type, use it. We use
7048 this method instead of type_hash_canon, because it only does a
7049 simple equality check on the list of field members. */
7050
7051 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7052 return t;
7053
3970dedc 7054 /* Make sure that we always have the unqualified pointer-to-member
7055 type first. */
3119c950 7056 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
980877d7 7057 unqualified_variant
3970dedc 7058 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7059
95397ff9 7060 t = make_class_type (RECORD_TYPE);
a6460bf1 7061 xref_basetypes (t, NULL_TREE);
491e04ef 7062
a17c2a3a 7063 /* Let the front end know this is a pointer to member function... */
c25194fd 7064 TYPE_PTRMEMFUNC_FLAG (t) = 1;
95397ff9 7065 /* ... and not really a class type. */
7066 SET_CLASS_TYPE_P (t, 0);
471086d6 7067
e60a6f7b 7068 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
805e22b2 7069 fields = field;
491e04ef 7070
e60a6f7b 7071 field = build_decl (input_location, FIELD_DECL, delta_identifier,
7072 delta_type_node);
805e22b2 7073 TREE_CHAIN (field) = fields;
7074 fields = field;
491e04ef 7075
805e22b2 7076 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
471086d6 7077
a17c2a3a 7078 /* Zap out the name so that the back end will give us the debugging
471086d6 7079 information for this anonymous RECORD_TYPE. */
7080 TYPE_NAME (t) = NULL_TREE;
7081
3970dedc 7082 /* If this is not the unqualified form of this pointer-to-member
7083 type, set the TYPE_MAIN_VARIANT for this type to be the
7084 unqualified type. Since they are actually RECORD_TYPEs that are
7085 not variants of each other, we must do this manually. */
3119c950 7086 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
3970dedc 7087 {
3119c950 7088 t = build_qualified_type (t, cp_type_quals (type));
3970dedc 7089 TYPE_MAIN_VARIANT (t) = unqualified_variant;
7090 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7091 TYPE_NEXT_VARIANT (unqualified_variant) = t;
9dc9ee82 7092 TREE_TYPE (TYPE_BINFO (t)) = t;
3970dedc 7093 }
7094
7095 /* Cache this pointer-to-member type so that we can find it again
7096 later. */
471086d6 7097 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7098
9dc9ee82 7099 if (TYPE_STRUCTURAL_EQUALITY_P (type))
7100 SET_TYPE_STRUCTURAL_EQUALITY (t);
7101 else if (TYPE_CANONICAL (type) != type)
7102 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
6753bca0 7103
471086d6 7104 return t;
7105}
7106
3645386f 7107/* Create and return a pointer to data member type. */
7108
7109tree
7110build_ptrmem_type (tree class_type, tree member_type)
7111{
1bc16cab 7112 if (TREE_CODE (member_type) == METHOD_TYPE)
7113 {
7114 tree arg_types;
7115
7116 arg_types = TYPE_ARG_TYPES (member_type);
491e04ef 7117 class_type = (cp_build_qualified_type
1bc16cab 7118 (class_type,
7119 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
491e04ef 7120 member_type
7121 = build_method_type_directly (class_type,
5bfb0742 7122 TREE_TYPE (member_type),
7123 TREE_CHAIN (arg_types));
1bc16cab 7124 return build_ptrmemfunc_type (build_pointer_type (member_type));
7125 }
7126 else
7127 {
b4df430b 7128 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
1bc16cab 7129 return build_offset_type (class_type, member_type);
7130 }
3645386f 7131}
7132
d8f6e09c 7133/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7134 Check to see that the definition is valid. Issue appropriate error
7135 messages. Return 1 if the definition is particularly bad, or 0
7136 otherwise. */
7137
7138int
1b72315d 7139check_static_variable_definition (tree decl, tree type)
d8f6e09c 7140{
7141 /* Motion 10 at San Diego: If a static const integral data member is
7142 initialized with an integral constant expression, the initializer
7143 may appear either in the declaration (within the class), or in
7144 the definition, but not both. If it appears in the class, the
7145 member is a member constant. The file-scope definition is always
7146 required. */
0fe26a86 7147 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
d8f6e09c 7148 {
3ce479a6 7149 error ("invalid in-class initialization of static data member "
653e5405 7150 "of non-integral type %qT",
0fe26a86 7151 type);
d8f6e09c 7152 /* If we just return the declaration, crashes will sometimes
0f3ccaa3 7153 occur. We therefore return void_type_node, as if this were a
d8f6e09c 7154 friend declaration, to cause callers to completely ignore
7155 this declaration. */
7156 return 1;
7157 }
7158 else if (!CP_TYPE_CONST_P (type))
3ce479a6 7159 error ("ISO C++ forbids in-class initialization of non-const "
653e5405 7160 "static member %qD",
7161 decl);
b3353c23 7162 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
21ca8540 7163 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
653e5405 7164 "%qD of non-integral type %qT", decl, type);
d8f6e09c 7165
7166 return 0;
7167}
7168
b1e0749b 7169/* Given the SIZE (i.e., number of elements) in an array, compute an
7170 appropriate index type for the array. If non-NULL, NAME is the
7171 name of the thing being declared. */
7172
949d8cc7 7173tree
1b72315d 7174compute_array_index_type (tree name, tree size)
b1e0749b 7175{
d91303a6 7176 tree type;
b1e0749b 7177 tree itype;
6753bca0 7178 tree abi_1_itype = NULL_TREE;
b1e0749b 7179
d91303a6 7180 if (error_operand_p (size))
7181 return error_mark_node;
7182
7183 type = TREE_TYPE (size);
1cd6548d 7184 /* The array bound must be an integer type. */
b3353c23 7185 if (!dependent_type_p (type) && !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
b1e0749b 7186 {
1cd6548d 7187 if (name)
3ce479a6 7188 error ("size of array %qD has non-integral type %qT", name, type);
1cd6548d 7189 else
3ce479a6 7190 error ("size of array has non-integral type %qT", type);
1cd6548d 7191 size = integer_one_node;
7192 type = TREE_TYPE (size);
b1e0749b 7193 }
7194
c4773308 7195 /* We can only call value_dependent_expression_p on integral constant
7196 expressions; the parser adds a dummy NOP_EXPR with TREE_SIDE_EFFECTS
7197 set if this isn't one. */
7198 if (processing_template_decl
7199 && (TREE_SIDE_EFFECTS (size) || value_dependent_expression_p (size)))
7200 {
7201 /* We cannot do any checking for a SIZE that isn't known to be
7202 constant. Just build the index type and mark that it requires
7203 structural equality checks. */
6753bca0 7204 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7205 size, integer_one_node));
c4773308 7206 if (!TREE_SIDE_EFFECTS (size))
7207 {
7208 TYPE_DEPENDENT_P (itype) = 1;
7209 TYPE_DEPENDENT_P_VALID (itype) = 1;
7210 }
6753bca0 7211 SET_TYPE_STRUCTURAL_EQUALITY (itype);
7212 return itype;
7213 }
7214
7215 if (!abi_version_at_least (2) && processing_template_decl)
7216 /* For abi-1, we handled all instances in templates the same way,
08cc44e7 7217 even when they were non-dependent. This affects the manglings
6753bca0 7218 produced. So, we do the normal checking for non-dependent
7219 sizes, but at the end we'll return the same type that abi-1
7220 would have, but with TYPE_CANONICAL set to the "right"
7221 value that the current ABI would provide. */
7222 abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7223 size, integer_one_node));
1cd6548d 7224
a109dc3b 7225 /* The size might be the result of a cast. */
db4f24e2 7226 STRIP_TYPE_NOPS (size);
7227
7228 /* It might be a const variable or enumeration constant. */
13f0eb20 7229 size = integral_constant_value (size);
db4f24e2 7230
b1e0749b 7231 /* Normally, the array-bound will be a constant. */
f9b9bf39 7232 if (TREE_CODE (size) == INTEGER_CST)
b1e0749b 7233 {
7234 /* Check to see if the array bound overflowed. Make that an
7235 error, no matter how generous we're being. */
07317e69 7236 constant_expression_error (size);
b1e0749b 7237
7238 /* An array must have a positive number of elements. */
7239 if (INT_CST_LT (size, integer_zero_node))
7240 {
32997f84 7241 if (name)
3ce479a6 7242 error ("size of array %qD is negative", name);
32997f84 7243 else
cf103c6c 7244 error ("size of array is negative");
b1e0749b 7245 size = integer_one_node;
7246 }
8f034d15 7247 /* As an extension we allow zero-sized arrays. We always allow
7248 them in system headers because glibc uses them. */
8864917d 7249 else if (integer_zerop (size) && !in_system_header)
32997f84 7250 {
7251 if (name)
21ca8540 7252 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
32997f84 7253 else
21ca8540 7254 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
32997f84 7255 }
b1e0749b 7256 }
f9b9bf39 7257 else if (TREE_CONSTANT (size))
7258 {
7259 /* `(int) &fn' is not a valid array bound. */
7260 if (name)
3ce479a6 7261 error ("size of array %qD is not an integral constant-expression",
653e5405 7262 name);
f9b9bf39 7263 else
cf103c6c 7264 error ("size of array is not an integral constant-expression");
120c6697 7265 size = integer_one_node;
f9b9bf39 7266 }
aaafd660 7267 else if (pedantic && warn_vla != 0)
1cd6548d 7268 {
7269 if (name)
21ca8540 7270 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
1cd6548d 7271 else
21ca8540 7272 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
aaafd660 7273 }
7274 else if (warn_vla > 0)
7275 {
7276 if (name)
7277 warning (OPT_Wvla,
7278 "variable length array %qD is used", name);
7279 else
7280 warning (OPT_Wvla,
7281 "variable length array is used");
1cd6548d 7282 }
b1e0749b 7283
1cd6548d 7284 if (processing_template_decl && !TREE_CONSTANT (size))
7285 /* A variable sized array. */
7286 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7287 else
b1e0749b 7288 {
5d7ed6c7 7289 HOST_WIDE_INT saved_processing_template_decl;
7290
1cd6548d 7291 /* Compute the index of the largest element in the array. It is
653e5405 7292 one less than the number of elements in the array. We save
7293 and restore PROCESSING_TEMPLATE_DECL so that computations in
7294 cp_build_binary_op will be appropriately folded. */
5d7ed6c7 7295 saved_processing_template_decl = processing_template_decl;
7296 processing_template_decl = 0;
8e70fb09 7297 itype = cp_build_binary_op (input_location,
7298 MINUS_EXPR,
5d7ed6c7 7299 cp_convert (ssizetype, size),
ebd21de4 7300 cp_convert (ssizetype, integer_one_node),
7301 tf_warning_or_error);
5d7ed6c7 7302 itype = fold (itype);
7303 processing_template_decl = saved_processing_template_decl;
7304
1cd6548d 7305 if (!TREE_CONSTANT (itype))
331bc0ad 7306 /* A variable sized array. */
1cd6548d 7307 itype = variable_size (itype);
7308 /* Make sure that there was no overflow when creating to a signed
653e5405 7309 index type. (For example, on a 32-bit machine, an array with
7310 size 2^32 - 1 is too big.) */
9d5b08f1 7311 else if (TREE_CODE (itype) == INTEGER_CST
7312 && TREE_OVERFLOW (itype))
b1e0749b 7313 {
1cd6548d 7314 error ("overflow in array dimension");
7315 TREE_OVERFLOW (itype) = 0;
b1e0749b 7316 }
b1e0749b 7317 }
980877d7 7318
b1e0749b 7319 /* Create and return the appropriate index type. */
6753bca0 7320 if (abi_1_itype)
7321 {
7322 tree t = build_index_type (itype);
7323 TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
7324 return abi_1_itype;
7325 }
7326 else
7327 return build_index_type (itype);
b1e0749b 7328}
7329
0a3b29ad 7330/* Returns the scope (if any) in which the entity declared by
7331 DECLARATOR will be located. If the entity was declared with an
7332 unqualified name, NULL_TREE is returned. */
7333
7334tree
3046c0a3 7335get_scope_of_declarator (const cp_declarator *declarator)
0a3b29ad 7336{
3046c0a3 7337 while (declarator && declarator->kind != cdk_id)
7338 declarator = declarator->declarator;
7339
7340 /* If the declarator-id is a SCOPE_REF, the scope in which the
7341 declaration occurs is the first operand. */
7342 if (declarator
2ded3667 7343 && declarator->u.id.qualifying_scope)
7344 return declarator->u.id.qualifying_scope;
3046c0a3 7345
4a44ba29 7346 /* Otherwise, the declarator is not a qualified name; the entity will
3046c0a3 7347 be declared in the current scope. */
7348 return NULL_TREE;
0a3b29ad 7349}
7350
b1e0749b 7351/* Returns an ARRAY_TYPE for an array with SIZE elements of the
7352 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
7353 with this type. */
7354
7355static tree
1b72315d 7356create_array_type_for_decl (tree name, tree type, tree size)
b1e0749b 7357{
7358 tree itype = NULL_TREE;
7359 const char* error_msg;
7360
7361 /* If things have already gone awry, bail now. */
7362 if (type == error_mark_node || size == error_mark_node)
7363 return error_mark_node;
7364
7365 /* Assume that everything will go OK. */
7366 error_msg = NULL;
7367
7368 /* There are some types which cannot be array elements. */
7369 switch (TREE_CODE (type))
7370 {
7371 case VOID_TYPE:
7372 error_msg = "array of void";
7373 break;
7374
7375 case FUNCTION_TYPE:
7376 error_msg = "array of functions";
7377 break;
7378
7379 case REFERENCE_TYPE:
7380 error_msg = "array of references";
7381 break;
7382
b1e0749b 7383 case METHOD_TYPE:
7384 error_msg = "array of function members";
7385 break;
7386
7387 default:
7388 break;
7389 }
7390
7391 /* If something went wrong, issue an error-message and return. */
7392 if (error_msg)
7393 {
7394 if (name)
3ce479a6 7395 error ("declaration of %qD as %s", name, error_msg);
b1e0749b 7396 else
cf103c6c 7397 error ("creating %s", error_msg);
b1e0749b 7398
7399 return error_mark_node;
7400 }
7401
7402 /* [dcl.array]
980877d7 7403
b1e0749b 7404 The constant expressions that specify the bounds of the arrays
7405 can be omitted only for the first member of the sequence. */
7406 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
7407 {
80ca7112 7408 if (name)
3ce479a6 7409 error ("declaration of %qD as multidimensional array must "
653e5405 7410 "have bounds for all dimensions except the first",
7411 name);
80ca7112 7412 else
3ce479a6 7413 error ("multidimensional array must have bounds for all "
653e5405 7414 "dimensions except the first");
b1e0749b 7415
7416 return error_mark_node;
7417 }
7418
7419 /* Figure out the index type for the array. */
7420 if (size)
7421 itype = compute_array_index_type (name, size);
7422
d97a7640 7423 /* [dcl.array]
7424 T is called the array element type; this type shall not be [...] an
7425 abstract class type. */
7426 abstract_virtuals_error (name, type);
7427
b1e0749b 7428 return build_cplus_array_type (type, itype);
7429}
7430
bb855ff9 7431/* Check that it's OK to declare a function with the indicated TYPE.
7432 SFK indicates the kind of special function (if any) that this
606b494c 7433 function is. OPTYPE is the type given in a conversion operator
853b7640 7434 declaration, or the class type for a constructor/destructor.
7435 Returns the actual return type of the function; that
bb855ff9 7436 may be different than TYPE if an error occurs, or for certain
7437 special functions. */
7438
7439static tree
1b72315d 7440check_special_function_return_type (special_function_kind sfk,
653e5405 7441 tree type,
7442 tree optype)
bb855ff9 7443{
7444 switch (sfk)
7445 {
7446 case sfk_constructor:
7447 if (type)
cf103c6c 7448 error ("return type specification for constructor invalid");
3c3beda6 7449
853b7640 7450 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7451 type = build_pointer_type (optype);
7452 else
7453 type = void_type_node;
bb855ff9 7454 break;
7455
7456 case sfk_destructor:
7457 if (type)
cf103c6c 7458 error ("return type specification for destructor invalid");
853b7640 7459 /* We can't use the proper return type here because we run into
4a44ba29 7460 problems with ambiguous bases and covariant returns.
853b7640 7461 Java classes are left unchanged because (void *) isn't a valid
7462 Java type, and we don't want to change the Java ABI. */
7463 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7464 type = build_pointer_type (void_type_node);
7465 else
7466 type = void_type_node;
bb855ff9 7467 break;
7468
7469 case sfk_conversion:
23360a6a 7470 if (type)
7471 error ("return type specified for %<operator %T%>", optype);
bb855ff9 7472 type = optype;
7473 break;
7474
7475 default:
092b1d6f 7476 gcc_unreachable ();
bb855ff9 7477 }
7478
7479 return type;
7480}
7481
dc9d9310 7482/* A variable or data member (whose unqualified name is IDENTIFIER)
7483 has been declared with the indicated TYPE. If the TYPE is not
7484 acceptable, issue an error message and return a type to use for
93523877 7485 error-recovery purposes. */
dc9d9310 7486
7487tree
7488check_var_type (tree identifier, tree type)
7489{
7490 if (VOID_TYPE_P (type))
7491 {
7492 if (!identifier)
7493 error ("unnamed variable or field declared void");
7494 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
7495 {
7496 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
7497 error ("variable or field %qE declared void", identifier);
7498 }
7499 else
7500 error ("variable or field declared void");
779e287a 7501 type = error_mark_node;
dc9d9310 7502 }
9031d10b 7503
dc9d9310 7504 return type;
7505}
7506
0a3b29ad 7507/* Given declspecs and a declarator (abstract or otherwise), determine
7508 the name and type of the object declared and construct a DECL node
7509 for it.
471086d6 7510
98467bd8 7511 DECLSPECS points to the representation of declaration-specifier
7512 sequence that precedes declarator.
471086d6 7513
7514 DECL_CONTEXT says which syntactic context this declaration is in:
7515 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7516 FUNCDEF for a function definition. Like NORMAL but a few different
7517 error messages in each case. Return value may be zero meaning
7518 this definition is too screwy to try to parse.
7519 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
7520 handle member functions (which have FIELD context).
7521 Return value may be zero meaning this definition is too screwy to
7522 try to parse.
7523 PARM for a parameter declaration (either within a function prototype
7524 or before a function body). Make a PARM_DECL, or return void_type_node.
c25194fd 7525 CATCHPARM for a parameter declaration before a catch clause.
471086d6 7526 TYPENAME if for a typename (in a cast or sizeof).
7527 Don't make a DECL node; just return the ..._TYPE node.
7528 FIELD for a struct or union field; make a FIELD_DECL.
7529 BITFIELD for a field with specified width.
2336da2a 7530 INITIALIZED is as for start_decl.
471086d6 7531
e3c541f0 7532 ATTRLIST is a pointer to the list of attributes, which may be NULL
7533 if there are none; *ATTRLIST may be modified if attributes from inside
7534 the declarator should be applied to the declaration.
d8f6e09c 7535
0a3b29ad 7536 When this function is called, scoping variables (such as
7537 CURRENT_CLASS_TYPE) should reflect the scope in which the
7538 declaration occurs, not the scope in which the new declaration will
7539 be placed. For example, on:
471086d6 7540
0a3b29ad 7541 void S::f() { ... }
471086d6 7542
0a3b29ad 7543 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
70ed6de4 7544 should not be `S'.
7545
7546 Returns a DECL (if a declarator is present), a TYPE (if there is no
7547 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
7548 error occurs. */
471086d6 7549
471086d6 7550tree
3046c0a3 7551grokdeclarator (const cp_declarator *declarator,
6493c502 7552 const cp_decl_specifier_seq *declspecs,
653e5405 7553 enum decl_context decl_context,
7554 int initialized,
7555 tree* attrlist)
471086d6 7556{
471086d6 7557 tree type = NULL_TREE;
7558 int longlong = 0;
c25194fd 7559 int virtualp, explicitp, friendp, inlinep, staticp;
471086d6 7560 int explicit_int = 0;
7561 int explicit_char = 0;
c4a8ac95 7562 int defaulted_int = 0;
ed7bb01a 7563 tree dependent_name = NULL_TREE;
491e04ef 7564
471086d6 7565 tree typedef_decl = NULL_TREE;
3046c0a3 7566 const char *name = NULL;
471086d6 7567 tree typedef_type = NULL_TREE;
7be1bc1f 7568 /* True if this declarator is a function definition. */
7569 bool funcdef_flag = false;
3046c0a3 7570 cp_declarator_kind innermost_code = cdk_error;
471086d6 7571 int bitfield = 0;
7d85c040 7572#if 0
7573 /* See the code below that used this. */
e3c541f0 7574 tree decl_attr = NULL_TREE;
7d85c040 7575#endif
471086d6 7576
7577 /* Keep track of what sort of function is being processed
7578 so that we can warn about default return values, or explicit
7579 return values which do not match prescribed defaults. */
bb855ff9 7580 special_function_kind sfk = sfk_none;
471086d6 7581
7582 tree dname = NULL_TREE;
471086d6 7583 tree ctor_return_type = NULL_TREE;
7584 enum overload_flags flags = NO_SPECIAL;
7873fcd6 7585 /* cv-qualifiers that apply to the declarator, for a declaration of
7586 a member function. */
7587 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
7588 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
7589 int type_quals;
f9670f72 7590 tree raises = NULL_TREE;
b1cfe2be 7591 int template_count = 0;
e3c541f0 7592 tree returned_attrs = NULL_TREE;
7ef14399 7593 tree parms = NULL_TREE;
3046c0a3 7594 const cp_declarator *id_declarator;
7595 /* The unqualified name of the declarator; either an
7596 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
7597 tree unqualified_id;
7598 /* The class type, if any, in which this entity is located,
7599 or NULL_TREE if none. Note that this value may be different from
7600 the current class type; for example if an attempt is made to declare
7601 "A::f" inside "B", this value will be "A". */
7602 tree ctype = current_class_type;
7603 /* The NAMESPACE_DECL for the namespace in which this entity is
7604 located. If an unqualified name is used to declare the entity,
7605 this value will be NULL_TREE, even if the entity is located at
491e04ef 7606 namespace scope. */
3046c0a3 7607 tree in_namespace = NULL_TREE;
6493c502 7608 cp_storage_class storage_class;
7609 bool unsigned_p, signed_p, short_p, long_p, thread_p;
b9dd3954 7610 bool type_was_error_mark_node = false;
d95d815d 7611 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
e9ec06a1 7612 bool set_no_warning = false;
75eaa947 7613 bool template_type_arg = false;
2b3c93a3 7614 const char *errmsg;
6493c502 7615
7616 signed_p = declspecs->specs[(int)ds_signed];
7617 unsigned_p = declspecs->specs[(int)ds_unsigned];
7618 short_p = declspecs->specs[(int)ds_short];
7619 long_p = declspecs->specs[(int)ds_long];
36c61b55 7620 longlong = declspecs->specs[(int)ds_long] >= 2;
6493c502 7621 thread_p = declspecs->specs[(int)ds_thread];
471086d6 7622
471086d6 7623 if (decl_context == FUNCDEF)
7be1bc1f 7624 funcdef_flag = true, decl_context = NORMAL;
471086d6 7625 else if (decl_context == MEMFUNCDEF)
7be1bc1f 7626 funcdef_flag = true, decl_context = FIELD;
471086d6 7627 else if (decl_context == BITFIELD)
7628 bitfield = 1, decl_context = FIELD;
75eaa947 7629 else if (decl_context == TEMPLATE_TYPE_ARG)
7630 template_type_arg = true, decl_context = TYPENAME;
471086d6 7631
2336da2a 7632 if (initialized > 1)
7633 funcdef_flag = true;
7634
471086d6 7635 /* Look inside a declarator for the name being declared
7636 and get it as a string, for an error message. */
491e04ef 7637 for (id_declarator = declarator;
7638 id_declarator;
3046c0a3 7639 id_declarator = id_declarator->declarator)
7640 {
7641 if (id_declarator->kind != cdk_id)
7642 innermost_code = id_declarator->kind;
471086d6 7643
3046c0a3 7644 switch (id_declarator->kind)
7645 {
7646 case cdk_function:
7647 if (id_declarator->declarator
7648 && id_declarator->declarator->kind == cdk_id)
471086d6 7649 {
3046c0a3 7650 sfk = id_declarator->declarator->u.id.sfk;
7651 if (sfk == sfk_destructor)
7652 flags = DTOR_FLAG;
ac9386a0 7653 }
3046c0a3 7654 break;
652e1a2d 7655
3046c0a3 7656 case cdk_id:
7657 {
2ded3667 7658 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
7659 tree decl = id_declarator->u.id.unqualified_name;
3046c0a3 7660 if (!decl)
7661 break;
2ded3667 7662 if (qualifying_scope)
471086d6 7663 {
88733325 7664 if (at_function_scope_p ())
7665 {
7666 /* [dcl.meaning]
7667
7668 A declarator-id shall not be qualified except
7669 for ...
7670
7671 None of the cases are permitted in block
7672 scope. */
7673 if (qualifying_scope == global_namespace)
7674 error ("invalid use of qualified-name %<::%D%>",
7675 decl);
7676 else if (TYPE_P (qualifying_scope))
7677 error ("invalid use of qualified-name %<%T::%D%>",
7678 qualifying_scope, decl);
7679 else
7680 error ("invalid use of qualified-name %<%D::%D%>",
7681 qualifying_scope, decl);
7682 return error_mark_node;
7683 }
7684 else if (TYPE_P (qualifying_scope))
3046c0a3 7685 {
2ded3667 7686 ctype = qualifying_scope;
3046c0a3 7687 if (innermost_code != cdk_function
7688 && current_class_type
491e04ef 7689 && !UNIQUELY_DERIVED_FROM_P (ctype,
3046c0a3 7690 current_class_type))
7691 {
3ce479a6 7692 error ("type %qT is not derived from type %qT",
3046c0a3 7693 ctype, current_class_type);
2ded3667 7694 return error_mark_node;
3046c0a3 7695 }
3046c0a3 7696 }
7697 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
7698 in_namespace = qualifying_scope;
3046c0a3 7699 }
3046c0a3 7700 switch (TREE_CODE (decl))
7701 {
7702 case BIT_NOT_EXPR:
652e1a2d 7703 {
f0d4a607 7704 tree type;
7705
7706 if (innermost_code != cdk_function)
7707 {
7708 error ("declaration of %qD as non-function", decl);
7709 return error_mark_node;
7710 }
9031d10b 7711 else if (!qualifying_scope
f0d4a607 7712 && !(current_class_type && at_class_scope_p ()))
7713 {
7714 error ("declaration of %qD as non-member", decl);
7715 return error_mark_node;
7716 }
9031d10b 7717
f0d4a607 7718 type = TREE_OPERAND (decl, 0);
ae0d6a1c 7719 if (TYPE_P (type))
7720 type = constructor_name (type);
a608187f 7721 name = identifier_to_locale (IDENTIFIER_POINTER (type));
046ff221 7722 dname = decl;
3046c0a3 7723 }
7724 break;
e8d95fdc 7725
3046c0a3 7726 case TEMPLATE_ID_EXPR:
7727 {
7728 tree fns = TREE_OPERAND (decl, 0);
e8d95fdc 7729
3046c0a3 7730 dname = fns;
3046c0a3 7731 if (TREE_CODE (dname) != IDENTIFIER_NODE)
652e1a2d 7732 {
b4df430b 7733 gcc_assert (is_overloaded_fn (dname));
3046c0a3 7734 dname = DECL_NAME (get_first_fn (dname));
652e1a2d 7735 }
7736 }
3046c0a3 7737 /* Fall through. */
652e1a2d 7738
3046c0a3 7739 case IDENTIFIER_NODE:
7740 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7741 dname = decl;
652e1a2d 7742
3046c0a3 7743 if (C_IS_RESERVED_WORD (dname))
7744 {
3ce479a6 7745 error ("declarator-id missing; using reserved word %qD",
3046c0a3 7746 dname);
a608187f 7747 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
3046c0a3 7748 }
7749 else if (!IDENTIFIER_TYPENAME_P (dname))
a608187f 7750 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
3046c0a3 7751 else
7752 {
b4df430b 7753 gcc_assert (flags == NO_SPECIAL);
3046c0a3 7754 flags = TYPENAME_FLAG;
7755 ctor_return_type = TREE_TYPE (dname);
7756 sfk = sfk_conversion;
7757 if (is_typename_at_global_scope (dname))
a608187f 7758 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
3046c0a3 7759 else
7760 name = "<invalid operator>";
7761 }
7762 break;
7763
3046c0a3 7764 default:
092b1d6f 7765 gcc_unreachable ();
3046c0a3 7766 }
e178a5a9 7767 break;
a6daf8c6 7768 }
e178a5a9 7769
a6daf8c6 7770 case cdk_array:
7771 case cdk_pointer:
7772 case cdk_reference:
7773 case cdk_ptrmem:
7774 break;
acb91513 7775
a6daf8c6 7776 case cdk_error:
7777 return error_mark_node;
3046c0a3 7778
a6daf8c6 7779 default:
7780 gcc_unreachable ();
3046c0a3 7781 }
7782 if (id_declarator->kind == cdk_id)
7783 break;
7784 }
471086d6 7785
197c9df7 7786 /* [dcl.fct.edf]
074ab442 7787
197c9df7 7788 The declarator in a function-definition shall have the form
7789 D1 ( parameter-declaration-clause) ... */
3046c0a3 7790 if (funcdef_flag && innermost_code != cdk_function)
197c9df7 7791 {
7792 error ("function definition does not declare parameters");
7793 return error_mark_node;
7794 }
471086d6 7795
bcf789d7 7796 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
3046c0a3 7797 && innermost_code != cdk_function
4b9b2871 7798 && ! (ctype && !declspecs->any_specifiers_p))
bcf789d7 7799 {
3ce479a6 7800 error ("declaration of %qD as non-function", dname);
8f776a97 7801 return error_mark_node;
bcf789d7 7802 }
7803
471086d6 7804 /* Anything declared one level down from the top level
7805 must be one of the parameters of a function
7806 (because the body is at least two levels down). */
7807
7808 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7809 by not allowing C++ class definitions to specify their parameters
7810 with xdecls (must be spec.d in the parmlist).
7811
7812 Since we now wait to push a class scope until we are sure that
7813 we are in a legitimate method context, we must set oldcname
d0622bdf 7814 explicitly (since current_class_name is not yet alive).
7815
7816 We also want to avoid calling this a PARM if it is in a namespace. */
471086d6 7817
70a658bd 7818 if (decl_context == NORMAL && !toplevel_bindings_p ())
d0622bdf 7819 {
1f3233d1 7820 struct cp_binding_level *b = current_binding_level;
fa3834f1 7821 current_binding_level = b->level_chain;
d0622bdf 7822 if (current_binding_level != 0 && toplevel_bindings_p ())
7823 decl_context = PARM;
fa3834f1 7824 current_binding_level = b;
d0622bdf 7825 }
471086d6 7826
2a80b8e1 7827 if (name == NULL)
7828 name = decl_context == PARM ? "parameter" : "type name";
980877d7 7829
4b9b2871 7830 /* If there were multiple types specified in the decl-specifier-seq,
7831 issue an error message. */
7832 if (declspecs->multiple_types_p)
f5b76e27 7833 {
7834 error ("two or more data types in declaration of %qs", name);
7835 return error_mark_node;
7836 }
7837
e383d2d0 7838 if (declspecs->conflicting_specifiers_p)
7839 {
7840 error ("conflicting specifiers in declaration of %qs", name);
7841 return error_mark_node;
7842 }
7843
4b9b2871 7844 /* Extract the basic type from the decl-specifier-seq. */
7845 type = declspecs->type;
7846 if (type == error_mark_node)
b9dd3954 7847 {
7848 type = NULL_TREE;
7849 type_was_error_mark_node = true;
7850 }
4b9b2871 7851 /* If the entire declaration is itself tagged as deprecated then
7852 suppress reports of deprecated items. */
7853 if (type && TREE_DEPRECATED (type)
7854 && deprecated_state != DEPRECATED_SUPPRESS)
45c4e798 7855 warn_deprecated_use (type, NULL_TREE);
4b9b2871 7856 if (type && TREE_CODE (type) == TYPE_DECL)
471086d6 7857 {
4b9b2871 7858 typedef_decl = type;
7859 type = TREE_TYPE (typedef_decl);
9d72c82a 7860 if (TREE_DEPRECATED (type)
7861 && DECL_ARTIFICIAL (typedef_decl)
7862 && deprecated_state != DEPRECATED_SUPPRESS)
45c4e798 7863 warn_deprecated_use (type, NULL_TREE);
4b9b2871 7864 }
7865 /* No type at all: default to `int', and set DEFAULTED_INT
7866 because it was not a user-defined typedef. */
6493c502 7867 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
4b9b2871 7868 {
7869 /* These imply 'int'. */
7870 type = integer_type_node;
7871 defaulted_int = 1;
7872 }
7873 /* Gather flags. */
7874 explicit_int = declspecs->explicit_int_p;
7875 explicit_char = declspecs->explicit_char_p;
e396cd54 7876
47fd99f9 7877#if 0
7878 /* See the code below that used this. */
7879 if (typedef_decl)
7880 decl_attr = DECL_ATTRIBUTES (typedef_decl);
7881#endif
471086d6 7882 typedef_type = type;
7883
ad91f3ed 7884
853b7640 7885 if (sfk != sfk_conversion)
7886 ctor_return_type = ctype;
7887
bb855ff9 7888 if (sfk != sfk_none)
7889 type = check_special_function_return_type (sfk, type,
bb855ff9 7890 ctor_return_type);
7891 else if (type == NULL_TREE)
471086d6 7892 {
bb855ff9 7893 int is_main;
7894
471086d6 7895 explicit_int = -1;
bb855ff9 7896
fccd46be 7897 /* We handle `main' specially here, because 'main () { }' is so
7898 common. With no options, it is allowed. With -Wreturn-type,
7899 it is a warning. It is only an error with -pedantic-errors. */
bb855ff9 7900 is_main = (funcdef_flag
6cd31fa5 7901 && dname && MAIN_NAME_P (dname)
bb855ff9 7902 && ctype == NULL_TREE
7903 && in_namespace == NULL_TREE
7904 && current_namespace == global_namespace);
7905
b9dd3954 7906 if (type_was_error_mark_node)
7907 /* We've already issued an error, don't complain more. */;
7908 else if (in_system_header || flag_ms_extensions)
bb855ff9 7909 /* Allow it, sigh. */;
561fec9d 7910 else if (! is_main)
2b9e3597 7911 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
561fec9d 7912 else if (pedantic)
21ca8540 7913 pedwarn (input_location, OPT_pedantic,
8864917d 7914 "ISO C++ forbids declaration of %qs with no type", name);
1bc0f76b 7915 else
7916 warning (OPT_Wreturn_type,
7917 "ISO C++ forbids declaration of %qs with no type", name);
262108c9 7918
bb855ff9 7919 type = integer_type_node;
ac9386a0 7920 }
491e04ef 7921
471086d6 7922 ctype = NULL_TREE;
7923
7924 /* Now process the modifiers that were specified
7925 and check for invalid combinations. */
7926
7927 /* Long double is a special combination. */
90807bc8 7928 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
471086d6 7929 {
6493c502 7930 long_p = false;
980877d7 7931 type = build_qualified_type (long_double_type_node,
3119c950 7932 cp_type_quals (type));
471086d6 7933 }
7934
7935 /* Check all other uses of type modifiers. */
7936
6493c502 7937 if (unsigned_p || signed_p || long_p || short_p)
471086d6 7938 {
7939 int ok = 0;
7940
90807bc8 7941 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
7942 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
6493c502 7943 else if (signed_p && unsigned_p)
90807bc8 7944 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
7945 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
7946 error ("%<long long%> invalid for %qs", name);
7947 else if (long_p && TREE_CODE (type) == REAL_TYPE)
7948 error ("%<long%> invalid for %qs", name);
7949 else if (short_p && TREE_CODE (type) == REAL_TYPE)
7950 error ("%<short%> invalid for %qs", name);
302c179a 7951 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
7952 error ("%<long%> or %<short%> invalid for %qs", name);
90807bc8 7953 else if ((long_p || short_p) && explicit_char)
7954 error ("%<long%> or %<short%> specified with char for %qs", name);
7955 else if (long_p && short_p)
7956 error ("%<long%> and %<short%> specified together for %qs", name);
924bbf02 7957 else if (type == char16_type_node || type == char32_type_node)
7958 {
7959 if (signed_p || unsigned_p)
7960 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7961 else if (short_p || long_p)
7962 error ("%<short%> or %<long%> invalid for %qs", name);
7963 }
471086d6 7964 else
7965 {
7966 ok = 1;
c4a8ac95 7967 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
471086d6 7968 {
21ca8540 7969 pedwarn (input_location, OPT_pedantic,
8864917d 7970 "long, short, signed or unsigned used invalidly for %qs",
471086d6 7971 name);
7972 if (flag_pedantic_errors)
7973 ok = 0;
7974 }
7975 }
7976
7977 /* Discard the type modifiers if they are invalid. */
7978 if (! ok)
7979 {
6493c502 7980 unsigned_p = false;
7981 signed_p = false;
7982 long_p = false;
7983 short_p = false;
471086d6 7984 longlong = 0;
7985 }
7986 }
7987
7988 /* Decide whether an integer type is signed or not.
7989 Optionally treat bitfields as signed by default. */
6493c502 7990 if (unsigned_p
3498bcb9 7991 /* [class.bit]
7992
7993 It is implementation-defined whether a plain (neither
7994 explicitly signed or unsigned) char, short, int, or long
7995 bit-field is signed or unsigned.
980877d7 7996
3498bcb9 7997 Naturally, we extend this to long long as well. Note that
7998 this does not include wchar_t. */
7999 || (bitfield && !flag_signed_bitfields
6493c502 8000 && !signed_p
3498bcb9 8001 /* A typedef for plain `int' without `signed' can be
8002 controlled just like plain `int', but a typedef for
8003 `signed int' cannot be so controlled. */
980877d7 8004 && !(typedef_decl
b981ae4a 8005 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
f92d4c86 8006 && TREE_CODE (type) == INTEGER_TYPE
b981ae4a 8007 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
471086d6 8008 {
8009 if (longlong)
8010 type = long_long_unsigned_type_node;
6493c502 8011 else if (long_p)
471086d6 8012 type = long_unsigned_type_node;
6493c502 8013 else if (short_p)
471086d6 8014 type = short_unsigned_type_node;
8015 else if (type == char_type_node)
8016 type = unsigned_char_type_node;
8017 else if (typedef_decl)
71eea85c 8018 type = unsigned_type_for (type);
471086d6 8019 else
8020 type = unsigned_type_node;
8021 }
6493c502 8022 else if (signed_p && type == char_type_node)
471086d6 8023 type = signed_char_type_node;
8024 else if (longlong)
8025 type = long_long_integer_type_node;
6493c502 8026 else if (long_p)
471086d6 8027 type = long_integer_type_node;
6493c502 8028 else if (short_p)
471086d6 8029 type = short_integer_type_node;
8030
4b9b2871 8031 if (declspecs->specs[(int)ds_complex])
c4a8ac95 8032 {
6493c502 8033 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
3ce479a6 8034 error ("complex invalid for %qs", name);
c4a8ac95 8035 /* If we just have "complex", it is equivalent to
8036 "complex double", but if any modifiers at all are specified it is
8037 the complex form of TYPE. E.g, "complex short" is
8038 "complex short int". */
8039
6493c502 8040 else if (defaulted_int && ! longlong
8041 && ! (long_p || short_p || signed_p || unsigned_p))
c4a8ac95 8042 type = complex_double_type_node;
8043 else if (type == integer_type_node)
8044 type = complex_integer_type_node;
8045 else if (type == float_type_node)
8046 type = complex_float_type_node;
8047 else if (type == double_type_node)
8048 type = complex_double_type_node;
8049 else if (type == long_double_type_node)
8050 type = complex_long_double_type_node;
8051 else
8052 type = build_complex_type (type);
8053 }
8054
9edbac04 8055 type_quals = TYPE_UNQUALIFIED;
4b9b2871 8056 if (declspecs->specs[(int)ds_const])
9edbac04 8057 type_quals |= TYPE_QUAL_CONST;
4b9b2871 8058 if (declspecs->specs[(int)ds_volatile])
9edbac04 8059 type_quals |= TYPE_QUAL_VOLATILE;
4b9b2871 8060 if (declspecs->specs[(int)ds_restrict])
9edbac04 8061 type_quals |= TYPE_QUAL_RESTRICT;
8062 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
3ce479a6 8063 error ("qualifiers are not allowed on declaration of %<operator %T%>",
653e5405 8064 ctor_return_type);
1ca935fd 8065
9031d10b 8066 if (TREE_CODE (type) == FUNCTION_TYPE
11ef5c28 8067 && type_quals != TYPE_UNQUALIFIED)
8068 {
8069 /* This was an error in C++98 (cv-qualifiers cannot be added to
653e5405 8070 a function type), but DR 295 makes the code well-formed by
8071 dropping the extra qualifiers. */
11ef5c28 8072 if (pedantic)
653e5405 8073 {
8074 tree bad_type = build_qualified_type (type, type_quals);
21ca8540 8075 pedwarn (input_location, OPT_pedantic,
8864917d 8076 "ignoring %qV qualifiers added to function type %qT",
653e5405 8077 bad_type, type);
8078 }
11ef5c28 8079 type_quals = TYPE_UNQUALIFIED;
8080 }
9edbac04 8081 type_quals |= cp_type_quals (type);
8082 type = cp_build_qualified_type_real
8083 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
0fbca5e8 8084 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
9edbac04 8085 /* We might have ignored or rejected some of the qualifiers. */
8086 type_quals = cp_type_quals (type);
491e04ef 8087
471086d6 8088 staticp = 0;
4b9b2871 8089 inlinep = !! declspecs->specs[(int)ds_inline];
8090 virtualp = !! declspecs->specs[(int)ds_virtual];
8091 explicitp = !! declspecs->specs[(int)ds_explicit];
471086d6 8092
6493c502 8093 storage_class = declspecs->storage_class;
8094 if (storage_class == sc_static)
471086d6 8095 staticp = 1 + (decl_context == FIELD);
8096
8097 if (virtualp && staticp == 2)
8098 {
3ce479a6 8099 error ("member %qD cannot be declared both virtual and static", dname);
f8181093 8100 storage_class = sc_none;
471086d6 8101 staticp = 0;
8102 }
4b9b2871 8103 friendp = !! declspecs->specs[(int)ds_friend];
471086d6 8104
ed7bb01a 8105 if (dependent_name && !friendp)
6debb1d0 8106 {
ed7bb01a 8107 error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
b4b95037 8108 return error_mark_node;
6debb1d0 8109 }
471086d6 8110
4b9b2871 8111 /* Issue errors about use of storage classes for parameters. */
8112 if (decl_context == PARM)
471086d6 8113 {
4b9b2871 8114 if (declspecs->specs[(int)ds_typedef])
84b72af8 8115 {
8116 error ("typedef declaration invalid in parameter declaration");
8117 return error_mark_node;
8118 }
6493c502 8119 else if (storage_class == sc_static
8120 || storage_class == sc_extern
8121 || thread_p)
905d4035 8122 error ("storage class specifiers invalid in parameter declarations");
475fd34e 8123
8124 if (type_uses_auto (type))
8125 {
8126 error ("parameter declared %<auto%>");
8127 type = error_mark_node;
8128 }
471086d6 8129 }
8130
8131 /* Give error if `virtual' is used outside of class declaration. */
1e66592c 8132 if (virtualp
8133 && (current_class_name == NULL_TREE || decl_context != FIELD))
471086d6 8134 {
140beb32 8135 error ("%<virtual%> outside class declaration");
471086d6 8136 virtualp = 0;
8137 }
471086d6 8138
8139 /* Static anonymous unions are dealt with here. */
8140 if (staticp && decl_context == TYPENAME
4b9b2871 8141 && declspecs->type
8142 && ANON_AGGR_TYPE_P (declspecs->type))
471086d6 8143 decl_context = FIELD;
8144
471086d6 8145 /* Warn about storage classes that are invalid for certain
8146 kinds of declarations (parameters, typenames, etc.). */
d76c5c3c 8147 if (thread_p
8148 && ((storage_class
8149 && storage_class != sc_extern
8150 && storage_class != sc_static)
8151 || declspecs->specs[(int)ds_typedef]))
8152 {
8153 error ("multiple storage classes in declaration of %qs", name);
8154 thread_p = false;
8155 }
e383d2d0 8156 if (decl_context != NORMAL
8157 && ((storage_class != sc_none
8158 && storage_class != sc_mutable)
8159 || thread_p))
471086d6 8160 {
c25194fd 8161 if ((decl_context == PARM || decl_context == CATCHPARM)
6493c502 8162 && (storage_class == sc_register
8163 || storage_class == sc_auto))
471086d6 8164 ;
4b9b2871 8165 else if (declspecs->specs[(int)ds_typedef])
d2a15a12 8166 ;
471086d6 8167 else if (decl_context == FIELD
331bc0ad 8168 /* C++ allows static class elements. */
6493c502 8169 && storage_class == sc_static)
20c01ba9 8170 /* C++ also allows inlines and signed and unsigned elements,
8171 but in those cases we don't come in here. */
471086d6 8172 ;
8173 else
8174 {
8175 if (decl_context == FIELD)
0ed74b62 8176 error ("storage class specified for %qs", name);
471086d6 8177 else
5212eb00 8178 {
8179 if (decl_context == PARM || decl_context == CATCHPARM)
3ce479a6 8180 error ("storage class specified for parameter %qs", name);
5212eb00 8181 else
8182 error ("storage class specified for typename");
8183 }
6493c502 8184 if (storage_class == sc_register
8185 || storage_class == sc_auto
8186 || storage_class == sc_extern
8187 || thread_p)
8188 storage_class = sc_none;
471086d6 8189 }
8190 }
6493c502 8191 else if (storage_class == sc_extern && funcdef_flag
d0622bdf 8192 && ! toplevel_bindings_p ())
3ce479a6 8193 error ("nested function %qs declared %<extern%>", name);
d0622bdf 8194 else if (toplevel_bindings_p ())
471086d6 8195 {
6493c502 8196 if (storage_class == sc_auto)
3ce479a6 8197 error ("top-level declaration of %qs specifies %<auto%>", name);
471086d6 8198 }
6493c502 8199 else if (thread_p
8200 && storage_class != sc_extern
8201 && storage_class != sc_static)
e396cd54 8202 {
3ce479a6 8203 error ("function-scope %qs implicitly auto and declared %<__thread%>",
e396cd54 8204 name);
6493c502 8205 thread_p = false;
e396cd54 8206 }
471086d6 8207
6493c502 8208 if (storage_class && friendp)
2c7e1786 8209 {
8210 error ("storage class specifiers invalid in friend function declarations");
8211 storage_class = sc_none;
8212 staticp = 0;
8213 }
4742975e 8214
3046c0a3 8215 if (!id_declarator)
8216 unqualified_id = NULL_TREE;
8217 else
471086d6 8218 {
2ded3667 8219 unqualified_id = id_declarator->u.id.unqualified_name;
3046c0a3 8220 switch (TREE_CODE (unqualified_id))
471086d6 8221 {
3046c0a3 8222 case BIT_NOT_EXPR:
ae0d6a1c 8223 unqualified_id = TREE_OPERAND (unqualified_id, 0);
8224 if (TYPE_P (unqualified_id))
8225 unqualified_id = constructor_name (unqualified_id);
3046c0a3 8226 break;
491e04ef 8227
3046c0a3 8228 case IDENTIFIER_NODE:
8229 case TEMPLATE_ID_EXPR:
222b8af3 8230 break;
491e04ef 8231
3046c0a3 8232 default:
092b1d6f 8233 gcc_unreachable ();
3046c0a3 8234 }
8235 }
222b8af3 8236
3046c0a3 8237 /* Determine the type of the entity declared by recurring on the
8238 declarator. */
1cb8ea17 8239 for (; declarator; declarator = declarator->declarator)
3046c0a3 8240 {
8241 const cp_declarator *inner_declarator;
8242 tree attrs;
471086d6 8243
3046c0a3 8244 if (type == error_mark_node)
8245 return error_mark_node;
faa4e1f1 8246
3046c0a3 8247 attrs = declarator->attributes;
8248 if (attrs)
8249 {
8250 int attr_flags;
491e04ef 8251
3046c0a3 8252 attr_flags = 0;
8253 if (declarator == NULL || declarator->kind == cdk_id)
8254 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8255 if (declarator->kind == cdk_function)
8256 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8257 if (declarator->kind == cdk_array)
8258 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8259 returned_attrs = decl_attributes (&type,
8260 chainon (returned_attrs, attrs),
8261 attr_flags);
8262 }
8263
1cb8ea17 8264 if (declarator->kind == cdk_id)
8265 break;
8266
8267 inner_declarator = declarator->declarator;
8268
3046c0a3 8269 switch (declarator->kind)
8270 {
8271 case cdk_array:
491e04ef 8272 type = create_array_type_for_decl (dname, type,
3046c0a3 8273 declarator->u.array.bounds);
471086d6 8274 break;
8275
3046c0a3 8276 case cdk_function:
471086d6 8277 {
8278 tree arg_types;
c38086bd 8279 int funcdecl_p;
471086d6 8280
8281 /* Declaring a function type.
8282 Make sure we have a valid type for the function to return. */
471086d6 8283
e9ec06a1 8284 if (type_quals != TYPE_UNQUALIFIED)
8285 {
8286 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
36e37a87 8287 warning (OPT_Wignored_qualifiers,
e9ec06a1 8288 "type qualifiers ignored on function return type");
8289 /* We now know that the TYPE_QUALS don't apply to the
8290 decl, but to its return type. */
8291 type_quals = TYPE_UNQUALIFIED;
8292 set_no_warning = true;
8293 }
2b3c93a3 8294 errmsg = targetm.invalid_return_type (type);
8295 if (errmsg)
8296 {
8297 error (errmsg);
8298 type = integer_type_node;
8299 }
471086d6 8300
8ee8eae7 8301 /* Error about some types functions can't return. */
471086d6 8302
8303 if (TREE_CODE (type) == FUNCTION_TYPE)
8304 {
3ce479a6 8305 error ("%qs declared as function returning a function", name);
8ee8eae7 8306 return error_mark_node;
471086d6 8307 }
8308 if (TREE_CODE (type) == ARRAY_TYPE)
8309 {
3ce479a6 8310 error ("%qs declared as function returning an array", name);
8ee8eae7 8311 return error_mark_node;
471086d6 8312 }
8313
1e66592c 8314 /* Pick up type qualifiers which should be applied to `this'. */
7873fcd6 8315 memfn_quals = declarator->u.function.qualifiers;
1e66592c 8316
f9670f72 8317 /* Pick up the exception specifications. */
3046c0a3 8318 raises = declarator->u.function.exception_specification;
f9670f72 8319
b7a03761 8320 /* Say it's a definition only for the CALL_EXPR
8321 closest to the identifier. */
8322 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
8323
346e3a9c 8324 /* Handle a late-specified return type. */
b7a03761 8325 if (funcdecl_p)
8326 {
8327 if (type_uses_auto (type))
8328 {
ddcb49ca 8329 if (!declarator->u.function.late_return_type)
b7a03761 8330 {
475fd34e 8331 error ("%qs function uses %<auto%> type specifier without"
b7a03761 8332 " late return type", name);
8333 return error_mark_node;
8334 }
8335 else if (!is_auto (type))
8336 {
475fd34e 8337 error ("%qs function with late return type has"
8338 " %qT as its type rather than plain %<auto%>",
8339 name, type);
b7a03761 8340 return error_mark_node;
8341 }
8342 }
8343 else if (declarator->u.function.late_return_type)
8344 {
8345 error ("%qs function with late return type not declared"
475fd34e 8346 " with %<auto%> type specifier", name);
b7a03761 8347 return error_mark_node;
8348 }
8349 }
346e3a9c 8350 type = splice_late_return_type
8351 (type, declarator->u.function.late_return_type);
8352 if (type == error_mark_node)
8353 return error_mark_node;
8354
471086d6 8355 if (ctype == NULL_TREE
8356 && decl_context == FIELD
c38086bd 8357 && funcdecl_p
471086d6 8358 && (friendp == 0 || dname == current_class_name))
8359 ctype = current_class_type;
8360
3046c0a3 8361 if (ctype && (sfk == sfk_constructor
8362 || sfk == sfk_destructor))
471086d6 8363 {
8364 /* We are within a class's scope. If our declarator name
8365 is the same as the class name, and we are defining
8366 a function, then it is a constructor/destructor, and
8367 therefore returns a void type. */
074ab442 8368
7873fcd6 8369 /* ISO C++ 12.4/2. A destructor may not be declared
8370 const or volatile. A destructor may not be
8371 static.
074ab442 8372
7873fcd6 8373 ISO C++ 12.1. A constructor may not be declared
8374 const or volatile. A constructor may not be
8375 virtual. A constructor may not be static. */
074ab442 8376 if (staticp == 2)
7873fcd6 8377 error ((flags == DTOR_FLAG)
8378 ? "destructor cannot be static member function"
8379 : "constructor cannot be static member function");
8380 if (memfn_quals)
471086d6 8381 {
7873fcd6 8382 error ((flags == DTOR_FLAG)
8383 ? "destructors may not be cv-qualified"
8384 : "constructors may not be cv-qualified");
8385 memfn_quals = TYPE_UNQUALIFIED;
471086d6 8386 }
7873fcd6 8387
8388 if (decl_context == FIELD
8389 && !member_function_or_else (ctype,
8390 current_class_type,
8391 flags))
b4b95037 8392 return error_mark_node;
7873fcd6 8393
8394 if (flags != DTOR_FLAG)
471086d6 8395 {
7873fcd6 8396 /* It's a constructor. */
c25194fd 8397 if (explicitp == 1)
8398 explicitp = 2;
471086d6 8399 if (virtualp)
8400 {
2b9e3597 8401 permerror (input_location, "constructors cannot be declared virtual");
471086d6 8402 virtualp = 0;
8403 }
e9360a55 8404 if (decl_context == FIELD
8405 && sfk != sfk_constructor)
b4b95037 8406 return error_mark_node;
471086d6 8407 }
8408 if (decl_context == FIELD)
8409 staticp = 0;
8410 }
1e66592c 8411 else if (friendp)
471086d6 8412 {
1e66592c 8413 if (initialized)
3ce479a6 8414 error ("can't initialize friend function %qs", name);
1e66592c 8415 if (virtualp)
8416 {
8417 /* Cannot be both friend and virtual. */
905d4035 8418 error ("virtual functions cannot be friends");
1e66592c 8419 friendp = 0;
8420 }
bea7d742 8421 if (decl_context == NORMAL)
905d4035 8422 error ("friend declaration not in class definition");
bea7d742 8423 if (current_function_decl && funcdef_flag)
3ce479a6 8424 error ("can't define friend function %qs in a local "
653e5405 8425 "class definition",
8426 name);
471086d6 8427 }
cf7aa2e5 8428 else if (ctype && sfk == sfk_conversion)
8429 {
8430 if (explicitp == 1)
8431 {
8432 maybe_warn_cpp0x ("explicit conversion operators");
8433 explicitp = 2;
8434 }
8435 }
471086d6 8436
491e04ef 8437 arg_types = grokparms (declarator->u.function.parameters,
3046c0a3 8438 &parms);
471086d6 8439
3046c0a3 8440 if (inner_declarator
8441 && inner_declarator->kind == cdk_id
8442 && inner_declarator->u.id.sfk == sfk_destructor
8443 && arg_types != void_list_node)
471086d6 8444 {
3046c0a3 8445 error ("destructors may not have parameters");
8446 arg_types = void_list_node;
8447 parms = NULL_TREE;
471086d6 8448 }
491e04ef 8449
48ec80c8 8450 type = build_function_type (type, arg_types);
471086d6 8451 }
8452 break;
8453
3046c0a3 8454 case cdk_pointer:
8455 case cdk_reference:
8456 case cdk_ptrmem:
471086d6 8457 /* Filter out pointers-to-references and references-to-references.
8458 We can get these if a TYPE_DECL is used. */
8459
8460 if (TREE_CODE (type) == REFERENCE_TYPE)
8461 {
63949b38 8462 if (declarator->kind != cdk_reference)
8463 {
8464 error ("cannot declare pointer to %q#T", type);
8465 type = TREE_TYPE (type);
8466 }
8467
8468 /* In C++0x, we allow reference to reference declarations
8469 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
8470 and template type arguments [14.3.1/4 temp.arg.type]. The
8471 check for direct reference to reference declarations, which
8472 are still forbidden, occurs below. Reasoning behind the change
8473 can be found in DR106, DR540, and the rvalue reference
8474 proposals. */
6dcdb5de 8475 else if (cxx_dialect == cxx98)
63949b38 8476 {
8477 error ("cannot declare reference to %q#T", type);
8478 type = TREE_TYPE (type);
8479 }
127a1cd0 8480 }
3046c0a3 8481 else if (VOID_TYPE_P (type))
8482 {
8483 if (declarator->kind == cdk_reference)
3ce479a6 8484 error ("cannot declare reference to %q#T", type);
3046c0a3 8485 else if (declarator->kind == cdk_ptrmem)
3ce479a6 8486 error ("cannot declare pointer to %q#T member", type);
3046c0a3 8487 }
0f2952a1 8488
3e04bd45 8489 /* We now know that the TYPE_QUALS don't apply to the decl,
8490 but to the target of the pointer. */
8491 type_quals = TYPE_UNQUALIFIED;
471086d6 8492
3046c0a3 8493 if (declarator->kind == cdk_ptrmem
eabbcb35 8494 && (TREE_CODE (type) == FUNCTION_TYPE
8495 || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
3046c0a3 8496 {
7873fcd6 8497 memfn_quals |= cp_type_quals (type);
074ab442 8498 type = build_memfn_type (type,
7873fcd6 8499 declarator->u.pointer.class_type,
8500 memfn_quals);
8501 memfn_quals = TYPE_UNQUALIFIED;
3046c0a3 8502 }
8503
75eaa947 8504 if (TREE_CODE (type) == FUNCTION_TYPE
8505 && cp_type_quals (type) != TYPE_UNQUALIFIED)
8506 error ("cannot declare %s to qualified function type %qT",
8507 declarator->kind == cdk_reference ? "reference" : "pointer",
8508 type);
8509
3046c0a3 8510 if (declarator->kind == cdk_reference)
471086d6 8511 {
63949b38 8512 /* In C++0x, the type we are creating a reference to might be
8513 a typedef which is itself a reference type. In that case,
8514 we follow the reference collapsing rules in
8515 [7.1.3/8 dcl.typedef] to create the final reference type:
8516
8517 "If a typedef TD names a type that is a reference to a type
8518 T, an attempt to create the type 'lvalue reference to cv TD'
8519 creates the type 'lvalue reference to T,' while an attempt
8520 to create the type "rvalue reference to cv TD' creates the
8521 type TD."
8522 */
7f134624 8523 if (!VOID_TYPE_P (type))
63949b38 8524 type = cp_build_reference_type
8525 ((TREE_CODE (type) == REFERENCE_TYPE
8526 ? TREE_TYPE (type) : type),
8527 (declarator->u.reference.rvalue_ref
8528 && (TREE_CODE(type) != REFERENCE_TYPE
8529 || TYPE_REF_IS_RVALUE (type))));
8530
8531 /* In C++0x, we need this check for direct reference to
8532 reference declarations, which are forbidden by
8533 [8.3.2/5 dcl.ref]. Reference to reference declarations
8534 are only allowed indirectly through typedefs and template
8535 type arguments. Example:
8536
8537 void foo(int & &); // invalid ref-to-ref decl
8538
8539 typedef int & int_ref;
8540 void foo(int_ref &); // valid ref-to-ref decl
8541 */
8542 if (inner_declarator && inner_declarator->kind == cdk_reference)
8543 error ("cannot declare reference to %q#T, which is not "
8544 "a typedef or a template type argument", type);
471086d6 8545 }
8546 else if (TREE_CODE (type) == METHOD_TYPE)
2b77484d 8547 type = build_ptrmemfunc_type (build_pointer_type (type));
3046c0a3 8548 else if (declarator->kind == cdk_ptrmem)
05d851a1 8549 {
393f878f 8550 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
8551 != NAMESPACE_DECL);
8552 if (declarator->u.pointer.class_type == error_mark_node)
42510d75 8553 /* We will already have complained. */
8554 type = error_mark_node;
05d851a1 8555 else
8556 type = build_ptrmem_type (declarator->u.pointer.class_type,
8557 type);
8558 }
471086d6 8559 else
8560 type = build_pointer_type (type);
8561
8562 /* Process a list of type modifier keywords (such as
8563 const or volatile) that were given inside the `*' or `&'. */
8564
3046c0a3 8565 if (declarator->u.pointer.qualifiers)
471086d6 8566 {
491e04ef 8567 type
8568 = cp_build_qualified_type (type,
2cfb6cde 8569 declarator->u.pointer.qualifiers);
9edbac04 8570 type_quals = cp_type_quals (type);
471086d6 8571 }
471086d6 8572 ctype = NULL_TREE;
8573 break;
8574
3046c0a3 8575 case cdk_error:
8576 break;
471086d6 8577
3046c0a3 8578 default:
092b1d6f 8579 gcc_unreachable ();
3046c0a3 8580 }
8581 }
491e04ef 8582
3046c0a3 8583 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
8584 && TREE_CODE (type) != FUNCTION_TYPE
8585 && TREE_CODE (type) != METHOD_TYPE)
8586 {
3ce479a6 8587 error ("template-id %qD used as a declarator",
3046c0a3 8588 unqualified_id);
8589 unqualified_id = dname;
8590 }
b1cfe2be 8591
9ed9d9ec 8592 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
8593 qualified with a class-name, turn it into a METHOD_TYPE, unless
8594 we know that the function is static. We take advantage of this
8595 opportunity to do other processing that pertains to entities
8596 explicitly declared to be class members. Note that if DECLARATOR
8597 is non-NULL, we know it is a cdk_id declarator; otherwise, we
8598 would not have exited the loop above. */
491e04ef 8599 if (declarator
2ded3667 8600 && declarator->u.id.qualifying_scope
8601 && TYPE_P (declarator->u.id.qualifying_scope))
3046c0a3 8602 {
8603 tree t;
471086d6 8604
2ded3667 8605 ctype = declarator->u.id.qualifying_scope;
8606 ctype = TYPE_MAIN_VARIANT (ctype);
3046c0a3 8607 t = ctype;
8608 while (t != NULL_TREE && CLASS_TYPE_P (t))
8609 {
8610 /* You're supposed to have one `template <...>' for every
8611 template class, but you don't need one for a full
8612 specialization. For example:
471086d6 8613
3046c0a3 8614 template <class T> struct S{};
8615 template <> struct S<int> { void f(); };
8616 void S<int>::f () {}
bea7d742 8617
3046c0a3 8618 is correct; there shouldn't be a `template <>' for the
8619 definition of `S<int>::f'. */
a761e730 8620 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
8621 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
8622 /* T is an explicit (not partial) specialization. All
8623 containing classes must therefore also be explicitly
8624 specialized. */
8625 break;
8626 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
3046c0a3 8627 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
8628 template_count += 1;
bea7d742 8629
3046c0a3 8630 t = TYPE_MAIN_DECL (t);
8631 t = DECL_CONTEXT (t);
8632 }
471086d6 8633
3046c0a3 8634 if (ctype == current_class_type)
3ebfd19c 8635 {
8636 if (friendp)
f1a8fafd 8637 {
2b9e3597 8638 permerror (input_location, "member functions are implicitly friends of their class");
f1a8fafd 8639 friendp = 0;
8640 }
3ebfd19c 8641 else
2b9e3597 8642 permerror (declarator->id_loc,
2ba27e7e 8643 "extra qualification %<%T::%> on member %qs",
8644 ctype, name);
3ebfd19c 8645 }
197c9df7 8646 else if (/* If the qualifying type is already complete, then we
8647 can skip the following checks. */
8648 !COMPLETE_TYPE_P (ctype)
9cc0994e 8649 && (/* If the function is being defined, then
8650 qualifying type must certainly be complete. */
074ab442 8651 funcdef_flag
9cc0994e 8652 /* A friend declaration of "T::f" is OK, even if
8653 "T" is a template parameter. But, if this
8654 function is not a friend, the qualifying type
8655 must be a class. */
8656 || (!friendp && !CLASS_TYPE_P (ctype))
8657 /* For a declaration, the type need not be
8658 complete, if either it is dependent (since there
8659 is no meaningful definition of complete in that
8660 case) or the qualifying class is currently being
8661 defined. */
197c9df7 8662 || !(dependent_type_p (ctype)
8663 || currently_open_class (ctype)))
971caa0c 8664 /* Check that the qualifying type is complete. */
197c9df7 8665 && !complete_type_or_else (ctype, NULL_TREE))
8666 return error_mark_node;
3046c0a3 8667 else if (TREE_CODE (type) == FUNCTION_TYPE)
8668 {
2ded3667 8669 tree sname = declarator->u.id.unqualified_name;
4ac852cb 8670
7be1bc1f 8671 if (current_class_type
8672 && (!friendp || funcdef_flag))
8673 {
8674 error (funcdef_flag
8675 ? "cannot define member function %<%T::%s%> within %<%T%>"
8676 : "cannot declare member function %<%T::%s%> within %<%T%>",
8677 ctype, name, current_class_type);
8678 return error_mark_node;
8679 }
8680
3046c0a3 8681 if (TREE_CODE (sname) == IDENTIFIER_NODE
8682 && NEW_DELETE_OPNAME_P (sname))
8683 /* Overloaded operator new and operator delete
8684 are always static functions. */
8685 ;
3046c0a3 8686 else
7873fcd6 8687 type = build_memfn_type (type, ctype, memfn_quals);
3046c0a3 8688 }
4b9b2871 8689 else if (declspecs->specs[(int)ds_typedef]
197c9df7 8690 && current_class_type)
3046c0a3 8691 {
197c9df7 8692 error ("cannot declare member %<%T::%s%> within %qT",
8693 ctype, name, current_class_type);
3046c0a3 8694 return error_mark_node;
471086d6 8695 }
8696 }
8697
9ed9d9ec 8698 /* Now TYPE has the actual type. */
8699
e3c541f0 8700 if (returned_attrs)
57e7b4d8 8701 {
e3c541f0 8702 if (attrlist)
8703 *attrlist = chainon (returned_attrs, *attrlist);
57e7b4d8 8704 else
e3c541f0 8705 attrlist = &returned_attrs;
57e7b4d8 8706 }
8707
d95d815d 8708 /* Handle parameter packs. */
8709 if (parameter_pack_p)
8710 {
8711 if (decl_context == PARM)
8712 /* Turn the type into a pack expansion.*/
8713 type = make_pack_expansion (type);
8714 else
8715 error ("non-parameter %qs cannot be a parameter pack", name);
8716 }
8717
119c9424 8718 /* Did array size calculations overflow? */
8719
8720 if (TREE_CODE (type) == ARRAY_TYPE
8721 && COMPLETE_TYPE_P (type)
5f6a70dd 8722 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8723 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
119c9424 8724 {
3ce479a6 8725 error ("size of array %qs is too large", name);
4109ca29 8726 /* If we proceed with the array type as it is, we'll eventually
119c9424 8727 crash in tree_low_cst(). */
8728 type = error_mark_node;
8729 }
8730
c015cd2f 8731 if ((decl_context == FIELD || decl_context == PARM)
491e04ef 8732 && !processing_template_decl
1f8a6ff8 8733 && variably_modified_type_p (type, NULL_TREE))
bab7b18e 8734 {
c015cd2f 8735 if (decl_context == FIELD)
3ce479a6 8736 error ("data member may not have variably modified type %qT", type);
c015cd2f 8737 else
3ce479a6 8738 error ("parameter may not have variably modified type %qT", type);
bab7b18e 8739 type = error_mark_node;
8740 }
8741
2a80b8e1 8742 if (explicitp == 1 || (explicitp && friendp))
c25194fd 8743 {
2a80b8e1 8744 /* [dcl.fct.spec] The explicit specifier shall only be used in
653e5405 8745 declarations of constructors within a class definition. */
3ce479a6 8746 error ("only declarations of constructors can be %<explicit%>");
c25194fd 8747 explicitp = 0;
8748 }
8749
6493c502 8750 if (storage_class == sc_mutable)
ce28ee2e 8751 {
e4494371 8752 if (decl_context != FIELD || friendp)
653e5405 8753 {
3ce479a6 8754 error ("non-member %qs cannot be declared %<mutable%>", name);
6493c502 8755 storage_class = sc_none;
653e5405 8756 }
4b9b2871 8757 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
ce28ee2e 8758 {
3ce479a6 8759 error ("non-object member %qs cannot be declared %<mutable%>", name);
6493c502 8760 storage_class = sc_none;
ce28ee2e 8761 }
2a80b8e1 8762 else if (TREE_CODE (type) == FUNCTION_TYPE
653e5405 8763 || TREE_CODE (type) == METHOD_TYPE)
8764 {
3ce479a6 8765 error ("function %qs cannot be declared %<mutable%>", name);
6493c502 8766 storage_class = sc_none;
653e5405 8767 }
ce28ee2e 8768 else if (staticp)
8769 {
3ce479a6 8770 error ("static %qs cannot be declared %<mutable%>", name);
6493c502 8771 storage_class = sc_none;
ce28ee2e 8772 }
2a80b8e1 8773 else if (type_quals & TYPE_QUAL_CONST)
8774 {
3ce479a6 8775 error ("const %qs cannot be declared %<mutable%>", name);
6493c502 8776 storage_class = sc_none;
2a80b8e1 8777 }
ce28ee2e 8778 }
8779
4a442922 8780 /* If this is declaring a typedef name, return a TYPE_DECL. */
4b9b2871 8781 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
471086d6 8782 {
8783 tree decl;
8784
8785 /* Note that the grammar rejects storage classes
8786 in typenames, fields or parameters. */
7d53e30d 8787 if (current_lang_name == lang_name_java)
8788 TYPE_FOR_JAVA (type) = 1;
074ab442 8789
7873fcd6 8790 /* This declaration:
8791
074ab442 8792 typedef void f(int) const;
7873fcd6 8793
074ab442 8794 declares a function type which is not a member of any
7873fcd6 8795 particular class, but which is cv-qualified; for
074ab442 8796 example "f S::*" declares a pointer to a const-qualified
7873fcd6 8797 member function of S. We record the cv-qualification in the
8798 function type. */
8799 if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
9ef0441c 8800 {
8801 type = cp_build_qualified_type (type, memfn_quals);
8802
8803 /* We have now dealt with these qualifiers. */
8804 memfn_quals = TYPE_UNQUALIFIED;
8805 }
471086d6 8806
b0df6589 8807 if (decl_context == FIELD)
d612858d 8808 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
b0df6589 8809 else
e60a6f7b 8810 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
d1a83041 8811 if (id_declarator && declarator->u.id.qualifying_scope) {
d612858d 8812 error ("%Jtypedef name may not be a nested-name-specifier", decl);
d1a83041 8813 TREE_TYPE (decl) = error_mark_node;
8814 }
d612858d 8815
8816 if (decl_context != FIELD)
b04d77fe 8817 {
b04d77fe 8818 if (!current_function_decl)
8819 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
811f0725 8820 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
9031d10b 8821 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
811f0725 8822 (current_function_decl)))
8823 /* The TYPE_DECL is "abstract" because there will be
8824 clones of this constructor/destructor, and there will
8825 be copies of this TYPE_DECL generated in those
8826 clones. */
8827 DECL_ABSTRACT (decl) = 1;
b04d77fe 8828 }
d612858d 8829 else if (constructor_name_p (unqualified_id, current_class_type))
2b9e3597 8830 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
561fec9d 8831 "as enclosing class",
8832 unqualified_id);
491e04ef 8833
70a658bd 8834 /* If the user declares "typedef struct {...} foo" then the
8835 struct will have an anonymous name. Fill that name in now.
8836 Nothing can refer to it, so nothing needs know about the name
8837 change. */
471086d6 8838 if (type != error_mark_node
3046c0a3 8839 && unqualified_id
471086d6 8840 && TYPE_NAME (type)
8841 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
83c4eacf 8842 && TYPE_ANONYMOUS_P (type)
3119c950 8843 && cp_type_quals (type) == TYPE_UNQUALIFIED)
471086d6 8844 {
1717856a 8845 tree t;
8846
8417823c 8847 /* Replace the anonymous name with the real name everywhere. */
1717856a 8848 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
8d17cbdd 8849 {
8850 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8851 {
8852 debug_hooks->set_name (t, decl);
8853 TYPE_NAME (t) = decl;
8854 }
8855 }
471086d6 8856
8857 if (TYPE_LANG_SPECIFIC (type))
8858 TYPE_WAS_ANONYMOUS (type) = 1;
8859
586f49f7 8860 /* If this is a typedef within a template class, the nested
8861 type is a (non-primary) template. The name for the
8862 template needs updating as well. */
8863 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
980877d7 8864 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
586f49f7 8865 = TYPE_IDENTIFIER (type);
8866
844e1a9a 8867 /* FIXME remangle member functions; member functions of a
8868 type with external linkage have external linkage. */
d2a15a12 8869 }
d2a15a12 8870
6493c502 8871 if (signed_p
471086d6 8872 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8873 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
8874
074ab442 8875 bad_specifiers (decl, "type", virtualp,
7873fcd6 8876 memfn_quals != TYPE_UNQUALIFIED,
1e28ccf1 8877 inlinep, friendp, raises != NULL_TREE);
8878
471086d6 8879 return decl;
8880 }
8881
8882 /* Detect the case of an array type of unspecified size
8883 which came, as such, direct from a typedef name.
47fd99f9 8884 We must copy the type, so that the array's domain can be
8885 individually set by the object's initializer. */
471086d6 8886
47fd99f9 8887 if (type && typedef_type
8888 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
119c9424 8889 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
47fd99f9 8890 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
471086d6 8891
54da4cc8 8892 /* Detect where we're using a typedef of function type to declare a
7ef14399 8893 function. PARMS will not be set, so we must create it now. */
491e04ef 8894
54da4cc8 8895 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
8896 {
8897 tree decls = NULL_TREE;
8898 tree args;
8899
8900 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
8901 {
d145d8d5 8902 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
54da4cc8 8903
8904 TREE_CHAIN (decl) = decls;
8905 decls = decl;
8906 }
491e04ef 8907
7ef14399 8908 parms = nreverse (decls);
11ef5c28 8909
8910 if (decl_context != TYPENAME)
653e5405 8911 {
8912 /* A cv-qualifier-seq shall only be part of the function type
8913 for a non-static member function. [8.3.5/4 dcl.fct] */
8914 if (cp_type_quals (type) != TYPE_UNQUALIFIED
8915 && (current_class_type == NULL_TREE || staticp) )
8916 {
15fb719c 8917 error (staticp
4ee03384 8918 ? G_("qualified function types cannot be used to "
8919 "declare static member functions")
8920 : G_("qualified function types cannot be used to "
8921 "declare free functions"));
653e5405 8922 type = TYPE_MAIN_VARIANT (type);
8923 }
8924
8925 /* The qualifiers on the function type become the qualifiers on
8926 the non-static member function. */
7873fcd6 8927 memfn_quals |= cp_type_quals (type);
653e5405 8928 }
54da4cc8 8929 }
8930
471086d6 8931 /* If this is a type name (such as, in a cast or sizeof),
8932 compute the type and return it now. */
8933
8934 if (decl_context == TYPENAME)
8935 {
8936 /* Note that the grammar rejects storage classes
8937 in typenames, fields or parameters. */
3e04bd45 8938 if (type_quals != TYPE_UNQUALIFIED)
771665d8 8939 type_quals = TYPE_UNQUALIFIED;
471086d6 8940
8941 /* Special case: "friend class foo" looks like a TYPENAME context. */
8942 if (friendp)
8943 {
3e04bd45 8944 if (type_quals != TYPE_UNQUALIFIED)
1e66592c 8945 {
cf103c6c 8946 error ("type qualifiers specified for friend class declaration");
3e04bd45 8947 type_quals = TYPE_UNQUALIFIED;
1e66592c 8948 }
8949 if (inlinep)
8950 {
3ce479a6 8951 error ("%<inline%> specified for friend class declaration");
1e66592c 8952 inlinep = 0;
8953 }
cb4cc35f 8954
55ebab6e 8955 if (!current_aggr)
eccec853 8956 {
55ebab6e 8957 /* Don't allow friend declaration without a class-key. */
eccec853 8958 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
2b9e3597 8959 permerror (input_location, "template parameters cannot be friends");
cb4cc35f 8960 else if (TREE_CODE (type) == TYPENAME_TYPE)
2b9e3597 8961 permerror (input_location, "friend declaration requires class-key, "
561fec9d 8962 "i.e. %<friend class %T::%D%>",
8963 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
eccec853 8964 else
2b9e3597 8965 permerror (input_location, "friend declaration requires class-key, "
561fec9d 8966 "i.e. %<friend %#T%>",
8967 type);
eccec853 8968 }
1e66592c 8969
8970 /* Only try to do this stuff if we didn't already give up. */
8971 if (type != integer_type_node)
8972 {
8973 /* A friendly class? */
8974 if (current_class_type)
b123b79d 8975 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8976 /*complain=*/true);
1e66592c 8977 else
3ce479a6 8978 error ("trying to make class %qT a friend of global scope",
653e5405 8979 type);
20c01ba9 8980
1e66592c 8981 type = void_type_node;
8982 }
471086d6 8983 }
7873fcd6 8984 else if (memfn_quals)
471086d6 8985 {
75eaa947 8986 if (ctype == NULL_TREE
8987 && TREE_CODE (type) == METHOD_TYPE)
8988 ctype = TYPE_METHOD_BASETYPE (type);
8989
7b2c7b37 8990 if (ctype)
7873fcd6 8991 type = build_memfn_type (type, ctype, memfn_quals);
75eaa947 8992 /* Core issue #547: need to allow this in template type args. */
8993 else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
8994 type = cp_build_qualified_type (type, memfn_quals);
8995 else
8996 error ("invalid qualifiers on non-member function type");
471086d6 8997 }
8998
8999 return type;
9000 }
3046c0a3 9001 else if (unqualified_id == NULL_TREE && decl_context != PARM
c25194fd 9002 && decl_context != CATCHPARM
471086d6 9003 && TREE_CODE (type) != UNION_TYPE
9004 && ! bitfield)
9005 {
3ce479a6 9006 error ("abstract declarator %qT used as declaration", type);
d753ca1f 9007 return error_mark_node;
471086d6 9008 }
9009
dc9d9310 9010 /* Only functions may be declared using an operator-function-id. */
9011 if (unqualified_id
9012 && IDENTIFIER_OPNAME_P (unqualified_id)
9013 && TREE_CODE (type) != FUNCTION_TYPE
9014 && TREE_CODE (type) != METHOD_TYPE)
471086d6 9015 {
dc9d9310 9016 error ("declaration of %qD as non-function", unqualified_id);
9017 return error_mark_node;
471086d6 9018 }
9019
dc9d9310 9020 /* We don't check parameter types here because we can emit a better
9021 error message later. */
9022 if (decl_context != PARM)
779e287a 9023 {
9024 type = check_var_type (unqualified_id, type);
9025 if (type == error_mark_node)
9026 return error_mark_node;
9027 }
dc9d9310 9028
471086d6 9029 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9030 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
9031
77b7e009 9032 if (decl_context == PARM || decl_context == CATCHPARM)
9033 {
9034 if (ctype || in_namespace)
3ce479a6 9035 error ("cannot use %<::%> in parameter declaration");
77b7e009 9036
9037 /* A parameter declared as an array of T is really a pointer to T.
9038 One declared as a function is really a pointer to a function.
9039 One declared as a member is really a pointer to member. */
9040
9041 if (TREE_CODE (type) == ARRAY_TYPE)
9042 {
9043 /* Transfer const-ness of array into that of type pointed to. */
9044 type = build_pointer_type (TREE_TYPE (type));
3e04bd45 9045 type_quals = TYPE_UNQUALIFIED;
77b7e009 9046 }
9047 else if (TREE_CODE (type) == FUNCTION_TYPE)
9048 type = build_pointer_type (type);
77b7e009 9049 }
980877d7 9050
471086d6 9051 {
cd16867a 9052 tree decl;
471086d6 9053
9054 if (decl_context == PARM)
9055 {
3046c0a3 9056 decl = cp_build_parm_decl (unqualified_id, type);
471086d6 9057
074ab442 9058 bad_specifiers (decl, "parameter", virtualp,
7873fcd6 9059 memfn_quals != TYPE_UNQUALIFIED,
471086d6 9060 inlinep, friendp, raises != NULL_TREE);
471086d6 9061 }
9062 else if (decl_context == FIELD)
9063 {
30bedc1f 9064 /* The C99 flexible array extension. */
9065 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
9066 && TYPE_DOMAIN (type) == NULL_TREE)
9067 {
9068 tree itype = compute_array_index_type (dname, integer_zero_node);
9069 type = build_cplus_array_type (TREE_TYPE (type), itype);
9070 }
9071
471086d6 9072 if (type == error_mark_node)
9073 {
9074 /* Happens when declaring arrays of sizes which
9075 are error_mark_node, for example. */
9076 decl = NULL_TREE;
9077 }
4e8042b1 9078 else if (in_namespace && !friendp)
f50dc4d4 9079 {
9080 /* Something like struct S { int N::j; }; */
3ce479a6 9081 error ("invalid use of %<::%>");
1ed8d248 9082 return error_mark_node;
f50dc4d4 9083 }
471086d6 9084 else if (TREE_CODE (type) == FUNCTION_TYPE)
9085 {
9086 int publicp = 0;
1146f179 9087 tree function_context;
471086d6 9088
9089 if (friendp == 0)
9090 {
9091 if (ctype == NULL_TREE)
9092 ctype = current_class_type;
9093
9094 if (ctype == NULL_TREE)
9095 {
3ce479a6 9096 error ("can't make %qD into a method -- not in a class",
3046c0a3 9097 unqualified_id);
b4b95037 9098 return error_mark_node;
471086d6 9099 }
9100
9101 /* ``A union may [ ... ] not [ have ] virtual functions.''
9102 ARM 9.5 */
9103 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9104 {
3ce479a6 9105 error ("function %qD declared virtual inside a union",
3046c0a3 9106 unqualified_id);
b4b95037 9107 return error_mark_node;
471086d6 9108 }
9109
3046c0a3 9110 if (NEW_DELETE_OPNAME_P (unqualified_id))
471086d6 9111 {
9112 if (virtualp)
9113 {
3ce479a6 9114 error ("%qD cannot be declared virtual, since it "
653e5405 9115 "is always static",
3046c0a3 9116 unqualified_id);
471086d6 9117 virtualp = 0;
9118 }
9119 }
9120 else if (staticp < 2)
7873fcd6 9121 type = build_memfn_type (type, ctype, memfn_quals);
471086d6 9122 }
9123
f0d4a607 9124 /* Check that the name used for a destructor makes sense. */
3f5c3428 9125 if (sfk == sfk_destructor)
f0d4a607 9126 {
ae0d6a1c 9127 tree uqname = id_declarator->u.id.unqualified_name;
9128
3f5c3428 9129 if (!ctype)
9130 {
9131 gcc_assert (friendp);
9132 error ("expected qualified name in friend declaration "
ae0d6a1c 9133 "for destructor %qD", uqname);
3f5c3428 9134 return error_mark_node;
9135 }
9136
ae0d6a1c 9137 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
3f5c3428 9138 {
9139 error ("declaration of %qD as member of %qT",
ae0d6a1c 9140 uqname, ctype);
3f5c3428 9141 return error_mark_node;
9142 }
f0d4a607 9143 }
341addc7 9144 else if (sfk == sfk_constructor && friendp)
9145 {
9146 error ("expected qualified name in friend declaration "
9147 "for constructor %qD",
9148 id_declarator->u.id.unqualified_name);
9149 return error_mark_node;
9150 }
f0d4a607 9151
471086d6 9152 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
980877d7 9153 function_context = (ctype != NULL_TREE) ?
9ba4048d 9154 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
1146f179 9155 publicp = (! friendp || ! staticp)
9156 && function_context == NULL_TREE;
980877d7 9157 decl = grokfndecl (ctype, type,
3046c0a3 9158 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9159 ? unqualified_id : dname,
7ef14399 9160 parms,
3046c0a3 9161 unqualified_id,
7873fcd6 9162 virtualp, flags, memfn_quals, raises,
b1cfe2be 9163 friendp ? -1 : 0, friendp, publicp, inlinep,
6ecedd95 9164 sfk,
d19f0a18 9165 funcdef_flag, template_count, in_namespace,
9166 attrlist, declarator->id_loc);
e0d8778b 9167 if (decl == NULL_TREE)
16d70871 9168 return error_mark_node;
7d85c040 9169#if 0
9170 /* This clobbers the attrs stored in `decl' from `attrlist'. */
e3c541f0 9171 /* The decl and setting of decl_attr is also turned off. */
9172 decl = build_decl_attribute_variant (decl, decl_attr);
7d85c040 9173#endif
617abf06 9174
6c5af975 9175 /* [class.conv.ctor]
9176
9177 A constructor declared without the function-specifier
9178 explicit that can be called with a single parameter
9179 specifies a conversion from the type of its first
9180 parameter to the type of its class. Such a constructor
9181 is called a converting constructor. */
c25194fd 9182 if (explicitp == 2)
9183 DECL_NONCONVERTING_P (decl) = 1;
471086d6 9184 }
9185 else if (TREE_CODE (type) == METHOD_TYPE)
9186 {
bb09dca5 9187 /* We only get here for friend declarations of
9188 members of other classes. */
471086d6 9189 /* All method decls are public, so tell grokfndecl to set
9190 TREE_PUBLIC, also. */
6994351f 9191 decl = grokfndecl (ctype, type,
3046c0a3 9192 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9193 ? unqualified_id : dname,
7ef14399 9194 parms,
3046c0a3 9195 unqualified_id,
7873fcd6 9196 virtualp, flags, memfn_quals, raises,
6ecedd95 9197 friendp ? -1 : 0, friendp, 1, 0, sfk,
9031d10b 9198 funcdef_flag, template_count, in_namespace,
d19f0a18 9199 attrlist,
9200 declarator->id_loc);
617abf06 9201 if (decl == NULL_TREE)
b4b95037 9202 return error_mark_node;
471086d6 9203 }
d2b38b0e 9204 else if (!staticp && !dependent_type_p (type)
4b72716d 9205 && !COMPLETE_TYPE_P (complete_type (type))
471086d6 9206 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9207 {
3046c0a3 9208 if (unqualified_id)
3ce479a6 9209 error ("field %qD has incomplete type", unqualified_id);
1e66592c 9210 else
3ce479a6 9211 error ("name %qT has incomplete type", type);
471086d6 9212
9213 /* If we're instantiating a template, tell them which
9214 instantiation made the field's type be incomplete. */
9215 if (current_class_type
9216 && TYPE_NAME (current_class_type)
b0df6589 9217 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
4b9b2871 9218 && declspecs->type
9219 && declspecs->type == type)
3ce479a6 9220 error (" in instantiation of template %qT",
653e5405 9221 current_class_type);
c25194fd 9222
6d90c6ab 9223 return error_mark_node;
471086d6 9224 }
9225 else
9226 {
9227 if (friendp)
9228 {
3ce479a6 9229 error ("%qE is neither function nor member function; "
653e5405 9230 "cannot be declared friend", unqualified_id);
471086d6 9231 friendp = 0;
9232 }
9233 decl = NULL_TREE;
9234 }
9235
9236 if (friendp)
9237 {
9238 /* Friends are treated specially. */
9239 if (ctype == current_class_type)
561fec9d 9240 ; /* We already issued a permerror. */
653e5405 9241 else if (decl && DECL_NAME (decl))
69b6679c 9242 {
9243 if (template_class_depth (current_class_type) == 0)
9244 {
9245 decl = check_explicit_specialization
3046c0a3 9246 (unqualified_id, decl, template_count,
7be1bc1f 9247 2 * funcdef_flag + 4);
69b6679c 9248 if (decl == error_mark_node)
9249 return error_mark_node;
9250 }
491e04ef 9251
3046c0a3 9252 decl = do_friend (ctype, unqualified_id, decl,
074ab442 9253 *attrlist, flags,
7873fcd6 9254 funcdef_flag);
69b6679c 9255 return decl;
9256 }
9257 else
b4b95037 9258 return error_mark_node;
471086d6 9259 }
9260
331bc0ad 9261 /* Structure field. It may not be a function, except for C++. */
471086d6 9262
9263 if (decl == NULL_TREE)
9264 {
471086d6 9265 if (initialized)
9266 {
1ca935fd 9267 if (!staticp)
9268 {
9269 /* An attempt is being made to initialize a non-static
9270 member. But, from [class.mem]:
980877d7 9271
1ca935fd 9272 4 A member-declarator can contain a
9273 constant-initializer only if it declares a static
9274 member (_class.static_) of integral or enumeration
980877d7 9275 type, see _class.static.data_.
1ca935fd 9276
9277 This used to be relatively common practice, but
9278 the rest of the compiler does not correctly
9279 handle the initialization unless the member is
9280 static so we make it static below. */
2b9e3597 9281 permerror (input_location, "ISO C++ forbids initialization of member %qD",
561fec9d 9282 unqualified_id);
2b9e3597 9283 permerror (input_location, "making %qD static", unqualified_id);
1ca935fd 9284 staticp = 1;
9285 }
9286
df5066e2 9287 if (uses_template_parms (type))
9288 /* We'll check at instantiation time. */
9289 ;
3046c0a3 9290 else if (check_static_variable_definition (unqualified_id,
df5066e2 9291 type))
9292 /* If we just return the declaration, crashes
9293 will sometimes occur. We therefore return
37b8b0d0 9294 void_type_node, as if this was a friend
9295 declaration, to cause callers to completely
9296 ignore this declaration. */
b4b95037 9297 return error_mark_node;
471086d6 9298 }
9299
1ca935fd 9300 if (staticp)
471086d6 9301 {
2ee03578 9302 /* C++ allows static class members. All other work
9303 for this is done by grokfield. */
3046c0a3 9304 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
caa6fdce 9305 set_linkage_for_static_data_member (decl);
9306 /* Even if there is an in-class initialization, DECL
9307 is considered undefined until an out-of-class
9308 definition is provided. */
9309 DECL_EXTERNAL (decl) = 1;
2bf7bc7f 9310
9311 if (thread_p)
9dda1f80 9312 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
471086d6 9313 }
9314 else
9315 {
e60a6f7b 9316 decl = build_decl (input_location,
9317 FIELD_DECL, unqualified_id, type);
851dfbff 9318 DECL_NONADDRESSABLE_P (decl) = bitfield;
78ba9fed 9319 if (bitfield && !unqualified_id)
9320 TREE_NO_WARNING (decl) = 1;
9321
6493c502 9322 if (storage_class == sc_mutable)
471086d6 9323 {
9324 DECL_MUTABLE_P (decl) = 1;
6493c502 9325 storage_class = sc_none;
471086d6 9326 }
9327 }
9328
074ab442 9329 bad_specifiers (decl, "field", virtualp,
7873fcd6 9330 memfn_quals != TYPE_UNQUALIFIED,
471086d6 9331 inlinep, friendp, raises != NULL_TREE);
9332 }
9333 }
e310e8dd 9334 else if (TREE_CODE (type) == FUNCTION_TYPE
9335 || TREE_CODE (type) == METHOD_TYPE)
471086d6 9336 {
b1cfe2be 9337 tree original_name;
471086d6 9338 int publicp = 0;
9339
3046c0a3 9340 if (!unqualified_id)
b4b95037 9341 return error_mark_node;
471086d6 9342
3046c0a3 9343 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
b1cfe2be 9344 original_name = dname;
9345 else
3046c0a3 9346 original_name = unqualified_id;
b1cfe2be 9347
6493c502 9348 if (storage_class == sc_auto)
3ce479a6 9349 error ("storage class %<auto%> invalid for function %qs", name);
6493c502 9350 else if (storage_class == sc_register)
3ce479a6 9351 error ("storage class %<register%> invalid for function %qs", name);
6493c502 9352 else if (thread_p)
3ce479a6 9353 error ("storage class %<__thread%> invalid for function %qs", name);
471086d6 9354
9355 /* Function declaration not at top level.
9356 Storage classes other than `extern' are not allowed
9357 and `extern' makes no difference. */
d0622bdf 9358 if (! toplevel_bindings_p ()
6493c502 9359 && (storage_class == sc_static
4b9b2871 9360 || declspecs->specs[(int)ds_inline])
471086d6 9361 && pedantic)
0543e7a9 9362 {
6493c502 9363 if (storage_class == sc_static)
21ca8540 9364 pedwarn (input_location, OPT_pedantic,
8864917d 9365 "%<static%> specified invalid for function %qs "
653e5405 9366 "declared out of global scope", name);
0543e7a9 9367 else
21ca8540 9368 pedwarn (input_location, OPT_pedantic,
8864917d 9369 "%<inline%> specifier invalid for function %qs "
653e5405 9370 "declared out of global scope", name);
0543e7a9 9371 }
980877d7 9372
3a0f30ec 9373 if (ctype != NULL_TREE
9374 && TREE_CODE (ctype) != NAMESPACE_DECL && !MAYBE_CLASS_TYPE_P (ctype))
9375 {
9376 error ("%q#T is not a class or a namespace", ctype);
9377 ctype = NULL_TREE;
9378 }
9379
471086d6 9380 if (ctype == NULL_TREE)
9381 {
9382 if (virtualp)
9383 {
3ce479a6 9384 error ("virtual non-class function %qs", name);
471086d6 9385 virtualp = 0;
9386 }
5768cbca 9387 else if (sfk == sfk_constructor
9388 || sfk == sfk_destructor)
9389 {
9390 error (funcdef_flag
9391 ? "%qs defined in a non-class scope"
9392 : "%qs declared in a non-class scope", name);
9393 sfk = sfk_none;
9394 }
471086d6 9395 }
7ef14399 9396 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9397 && !NEW_DELETE_OPNAME_P (original_name))
491e04ef 9398 type = build_method_type_directly (ctype,
5bfb0742 9399 TREE_TYPE (type),
9400 TYPE_ARG_TYPES (type));
471086d6 9401
c76251c1 9402 /* Record presence of `static'. */
bb09dca5 9403 publicp = (ctype != NULL_TREE
6493c502 9404 || storage_class == sc_extern
9405 || storage_class != sc_static);
471086d6 9406
3046c0a3 9407 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
7873fcd6 9408 virtualp, flags, memfn_quals, raises,
668ae905 9409 1, friendp,
6ecedd95 9410 publicp, inlinep, sfk, funcdef_flag,
d19f0a18 9411 template_count, in_namespace, attrlist,
9412 declarator->id_loc);
617abf06 9413 if (decl == NULL_TREE)
b4b95037 9414 return error_mark_node;
471086d6 9415
471086d6 9416 if (staticp == 1)
9417 {
6c0cc2cd 9418 int invalid_static = 0;
471086d6 9419
9420 /* Don't allow a static member function in a class, and forbid
9421 declaring main to be static. */
9422 if (TREE_CODE (type) == METHOD_TYPE)
9423 {
2b9e3597 9424 permerror (input_location, "cannot declare member function %qD to have "
561fec9d 9425 "static linkage", decl);
6c0cc2cd 9426 invalid_static = 1;
471086d6 9427 }
471086d6 9428 else if (current_function_decl)
9429 {
9430 /* FIXME need arm citation */
905d4035 9431 error ("cannot declare static function inside another function");
6c0cc2cd 9432 invalid_static = 1;
471086d6 9433 }
9434
6c0cc2cd 9435 if (invalid_static)
471086d6 9436 {
9437 staticp = 0;
6493c502 9438 storage_class = sc_none;
471086d6 9439 }
9440 }
471086d6 9441 }
9442 else
9443 {
9444 /* It's a variable. */
9445
9446 /* An uninitialized decl with `extern' is a reference. */
491e04ef 9447 decl = grokvardecl (type, unqualified_id,
4b9b2871 9448 declspecs,
980877d7 9449 initialized,
9450 (type_quals & TYPE_QUAL_CONST) != 0,
3645386f 9451 ctype ? ctype : in_namespace);
074ab442 9452 bad_specifiers (decl, "variable", virtualp,
7873fcd6 9453 memfn_quals != TYPE_UNQUALIFIED,
471086d6 9454 inlinep, friendp, raises != NULL_TREE);
9455
9456 if (ctype)
9457 {
617abf06 9458 DECL_CONTEXT (decl) = ctype;
471086d6 9459 if (staticp == 1)
9460 {
2b9e3597 9461 permerror (input_location, "%<static%> may not be used when defining "
561fec9d 9462 "(as opposed to declaring) a static data member");
653e5405 9463 staticp = 0;
6493c502 9464 storage_class = sc_none;
471086d6 9465 }
6493c502 9466 if (storage_class == sc_register && TREE_STATIC (decl))
1e66592c 9467 {
3ce479a6 9468 error ("static member %qD declared %<register%>", decl);
6493c502 9469 storage_class = sc_none;
1e66592c 9470 }
6493c502 9471 if (storage_class == sc_extern && pedantic)
471086d6 9472 {
21ca8540 9473 pedwarn (input_location, OPT_pedantic,
8864917d 9474 "cannot explicitly declare member %q#D to have "
9475 "extern linkage", decl);
6493c502 9476 storage_class = sc_none;
471086d6 9477 }
9478 }
9479 }
9480
9fc151e6 9481 if (storage_class == sc_extern && initialized && !funcdef_flag)
9482 {
9483 if (toplevel_bindings_p ())
9484 {
9485 /* It's common practice (and completely valid) to have a const
9486 be initialized and declared extern. */
9487 if (!(type_quals & TYPE_QUAL_CONST))
9488 warning (0, "%qs initialized and declared %<extern%>", name);
9489 }
9490 else
18c9e397 9491 {
9492 error ("%qs has both %<extern%> and initializer", name);
9493 return error_mark_node;
9494 }
9fc151e6 9495 }
9496
471086d6 9497 /* Record `register' declaration for warnings on &
9498 and in case doing stupid register allocation. */
9499
6493c502 9500 if (storage_class == sc_register)
471086d6 9501 DECL_REGISTER (decl) = 1;
6493c502 9502 else if (storage_class == sc_extern)
0543e7a9 9503 DECL_THIS_EXTERN (decl) = 1;
6493c502 9504 else if (storage_class == sc_static)
bb09dca5 9505 DECL_THIS_STATIC (decl) = 1;
9506
d1d739f8 9507 /* Record constancy and volatility on the DECL itself . There's
9508 no need to do this when processing a template; we'll do this
9509 for the instantiated declaration based on the type of DECL. */
e9c0ac6a 9510 if (!processing_template_decl)
11ef5c28 9511 cp_apply_type_quals_to_decl (type_quals, decl);
471086d6 9512
e9ec06a1 9513 if (set_no_warning)
9514 TREE_NO_WARNING (decl) = 1;
9515
471086d6 9516 return decl;
9517 }
9518}
9519\f
53137e6a 9520/* Subroutine of start_function. Ensure that each of the parameter
9521 types (as listed in PARMS) is complete, as is required for a
9522 function definition. */
96624a9e 9523
471086d6 9524static void
1b72315d 9525require_complete_types_for_parms (tree parms)
471086d6 9526{
3d411d73 9527 for (; parms; parms = TREE_CHAIN (parms))
471086d6 9528 {
dfc27db5 9529 if (dependent_type_p (TREE_TYPE (parms)))
9530 continue;
05a549ac 9531 if (!VOID_TYPE_P (TREE_TYPE (parms))
9532 && complete_type_or_else (TREE_TYPE (parms), parms))
4c9d06ba 9533 {
a7160c20 9534 relayout_decl (parms);
4c9d06ba 9535 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9536 }
05a549ac 9537 else
9538 /* grokparms or complete_type_or_else will have already issued
9539 an error. */
9540 TREE_TYPE (parms) = error_mark_node;
471086d6 9541 }
9542}
9543
3160db1d 9544/* Returns nonzero if T is a local variable. */
74410faa 9545
31236dcd 9546int
f8fd23c0 9547local_variable_p (const_tree t)
74410faa 9548{
980877d7 9549 if ((TREE_CODE (t) == VAR_DECL
74410faa 9550 /* A VAR_DECL with a context that is a _TYPE is a static data
9551 member. */
9552 && !TYPE_P (CP_DECL_CONTEXT (t))
9553 /* Any other non-local variable must be at namespace scope. */
31236dcd 9554 && !DECL_NAMESPACE_SCOPE_P (t))
74410faa 9555 || (TREE_CODE (t) == PARM_DECL))
31236dcd 9556 return 1;
74410faa 9557
31236dcd 9558 return 0;
9559}
9560
31236dcd 9561/* Like local_variable_p, but suitable for use as a tree-walking
9562 function. */
9563
9564static tree
6374121b 9565local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9566 void *data ATTRIBUTE_UNUSED)
31236dcd 9567{
6374121b 9568 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
9569 return *tp;
9570 else if (TYPE_P (*tp))
9571 *walk_subtrees = 0;
9572
9573 return NULL_TREE;
74410faa 9574}
9575
6374121b 9576
74410faa 9577/* Check that ARG, which is a default-argument expression for a
6c0cc2cd 9578 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
74410faa 9579 something goes wrong. DECL may also be a _TYPE node, rather than a
9580 DECL, if there is no DECL available. */
9581
9582tree
1b72315d 9583check_default_argument (tree decl, tree arg)
74410faa 9584{
9585 tree var;
9586 tree decl_type;
9587
9588 if (TREE_CODE (arg) == DEFAULT_ARG)
9589 /* We get a DEFAULT_ARG when looking at an in-class declaration
9590 with a default argument. Ignore the argument for now; we'll
9591 deal with it after the class is complete. */
9592 return arg;
9593
74410faa 9594 if (TYPE_P (decl))
9595 {
9596 decl_type = decl;
9597 decl = NULL_TREE;
9598 }
9599 else
9600 decl_type = TREE_TYPE (decl);
9601
980877d7 9602 if (arg == error_mark_node
74410faa 9603 || decl == error_mark_node
9604 || TREE_TYPE (arg) == error_mark_node
9605 || decl_type == error_mark_node)
9606 /* Something already went wrong. There's no need to check
9607 further. */
9608 return error_mark_node;
9609
9610 /* [dcl.fct.default]
980877d7 9611
74410faa 9612 A default argument expression is implicitly converted to the
9613 parameter type. */
9614 if (!TREE_TYPE (arg)
db3bf8f6 9615 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
74410faa 9616 {
9617 if (decl)
3ce479a6 9618 error ("default argument for %q#D has type %qT",
653e5405 9619 decl, TREE_TYPE (arg));
74410faa 9620 else
3ce479a6 9621 error ("default argument for parameter of type %qT has type %qT",
653e5405 9622 decl_type, TREE_TYPE (arg));
74410faa 9623
9624 return error_mark_node;
9625 }
9626
9627 /* [dcl.fct.default]
9628
9629 Local variables shall not be used in default argument
980877d7 9630 expressions.
74410faa 9631
9632 The keyword `this' shall not be used in a default argument of a
9633 member function. */
20a8f962 9634 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
74410faa 9635 if (var)
9636 {
3ce479a6 9637 error ("default argument %qE uses local variable %qD", arg, var);
74410faa 9638 return error_mark_node;
9639 }
9640
9641 /* All is well. */
9642 return arg;
9643}
9644
34eac767 9645/* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
9646
9647static tree
9648type_is_deprecated (tree type)
9649{
9650 enum tree_code code;
9651 if (TREE_DEPRECATED (type))
9652 return type;
9653 if (TYPE_NAME (type)
9654 && TREE_DEPRECATED (TYPE_NAME (type)))
9655 return type;
9656
9657 code = TREE_CODE (type);
9658
9659 if (code == POINTER_TYPE || code == REFERENCE_TYPE
9660 || code == OFFSET_TYPE || code == FUNCTION_TYPE
9661 || code == METHOD_TYPE || code == ARRAY_TYPE)
9662 return type_is_deprecated (TREE_TYPE (type));
9663
9664 if (TYPE_PTRMEMFUNC_P (type))
9665 return type_is_deprecated
9666 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
9667
9668 return NULL_TREE;
9669}
9670
471086d6 9671/* Decode the list of parameter types for a function type.
9672 Given the list of things declared inside the parens,
9673 return a list of types.
9674
3046c0a3 9675 If this parameter does not end with an ellipsis, we append
9676 void_list_node.
1d75985e 9677
7ef14399 9678 *PARMS is set to the chain of PARM_DECLs created. */
471086d6 9679
9680static tree
34eac767 9681grokparms (tree parmlist, tree *parms)
471086d6 9682{
9683 tree result = NULL_TREE;
9684 tree decls = NULL_TREE;
34eac767 9685 tree parm;
1d75985e 9686 int any_error = 0;
471086d6 9687
34eac767 9688 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
471086d6 9689 {
8bc97186 9690 tree type = NULL_TREE;
34eac767 9691 tree init = TREE_PURPOSE (parm);
9692 tree decl = TREE_VALUE (parm);
2b3c93a3 9693 const char *errmsg;
471086d6 9694
34eac767 9695 if (parm == void_list_node)
653e5405 9696 break;
471086d6 9697
1d75985e 9698 if (! decl || TREE_TYPE (decl) == error_mark_node)
653e5405 9699 continue;
20c01ba9 9700
1d75985e 9701 type = TREE_TYPE (decl);
9702 if (VOID_TYPE_P (type))
653e5405 9703 {
9704 if (same_type_p (type, void_type_node)
4a638818 9705 && DECL_SELF_REFERENCE_P (type)
34eac767 9706 && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
653e5405 9707 /* this is a parmlist of `(void)', which is ok. */
9708 break;
9709 cxx_incomplete_type_error (decl, type);
8bc97186 9710 /* It's not a good idea to actually create parameters of
9711 type `void'; other parts of the compiler assume that a
9712 void type terminates the parameter list. */
0cd69b17 9713 type = error_mark_node;
8bc97186 9714 TREE_TYPE (decl) = error_mark_node;
653e5405 9715 }
471086d6 9716
faf19a81 9717 if (type != error_mark_node
9718 && TYPE_FOR_JAVA (type)
95397ff9 9719 && MAYBE_CLASS_TYPE_P (type))
faf19a81 9720 {
9721 error ("parameter %qD has Java class type", decl);
9722 type = error_mark_node;
9723 TREE_TYPE (decl) = error_mark_node;
9724 init = NULL_TREE;
9725 }
9726
2b3c93a3 9727 if (type != error_mark_node
9728 && (errmsg = targetm.invalid_parameter_type (type)))
9729 {
9730 error (errmsg);
9731 type = error_mark_node;
9732 TREE_TYPE (decl) = error_mark_node;
9733 }
9734
20c01ba9 9735 if (type != error_mark_node)
0cd69b17 9736 {
34eac767 9737 if (deprecated_state != DEPRECATED_SUPPRESS)
9738 {
9739 tree deptype = type_is_deprecated (type);
9740 if (deptype)
45c4e798 9741 warn_deprecated_use (deptype, NULL_TREE);
34eac767 9742 }
9743
0cd69b17 9744 /* Top-level qualifiers on the parameters are
9745 ignored for function types. */
66521570 9746 type = cp_build_qualified_type (type, 0);
0cd69b17 9747 if (TREE_CODE (type) == METHOD_TYPE)
9748 {
3ce479a6 9749 error ("parameter %qD invalidly declared method type", decl);
0cd69b17 9750 type = build_pointer_type (type);
9751 TREE_TYPE (decl) = type;
9752 }
0cd69b17 9753 else if (abstract_virtuals_error (decl, type))
a109dc3b 9754 any_error = 1; /* Seems like a good idea. */
0cd69b17 9755 else if (POINTER_TYPE_P (type))
9756 {
9757 /* [dcl.fct]/6, parameter types cannot contain pointers
9758 (references) to arrays of unknown bound. */
3b6baa6d 9759 tree t = TREE_TYPE (type);
9760 int ptr = TYPE_PTR_P (type);
9761
653e5405 9762 while (1)
9763 {
9764 if (TYPE_PTR_P (t))
9765 ptr = 1;
9766 else if (TREE_CODE (t) != ARRAY_TYPE)
9767 break;
9768 else if (!TYPE_DOMAIN (t))
9769 break;
9770 t = TREE_TYPE (t);
9771 }
0cd69b17 9772 if (TREE_CODE (t) == ARRAY_TYPE)
3ce479a6 9773 error ("parameter %qD includes %s to array of unknown "
653e5405 9774 "bound %qT",
9775 decl, ptr ? "pointer" : "reference", t);
0cd69b17 9776 }
9777
6d5a06c3 9778 if (any_error)
0cd69b17 9779 init = NULL_TREE;
6d5a06c3 9780 else if (init && !processing_template_decl)
9781 init = check_default_argument (decl, init);
0cd69b17 9782 }
471086d6 9783
d95d815d 9784 if (TREE_CODE (decl) == PARM_DECL
9785 && FUNCTION_PARAMETER_PACK_P (decl)
34eac767 9786 && TREE_CHAIN (parm)
9787 && TREE_CHAIN (parm) != void_list_node)
d95d815d 9788 error ("parameter packs must be at the end of the parameter list");
9789
1d75985e 9790 TREE_CHAIN (decl) = decls;
9791 decls = decl;
8bc97186 9792 result = tree_cons (init, type, result);
471086d6 9793 }
1d75985e 9794 decls = nreverse (decls);
9795 result = nreverse (result);
34eac767 9796 if (parm)
1d75985e 9797 result = chainon (result, void_list_node);
7ef14399 9798 *parms = decls;
471086d6 9799
471086d6 9800 return result;
9801}
03db3ebd 9802
471086d6 9803\f
01779b5f 9804/* D is a constructor or overloaded `operator='.
9805
9806 Let T be the class in which D is declared. Then, this function
9807 returns:
9808
9809 -1 if D's is an ill-formed constructor or copy assignment operator
9810 whose first parameter is of type `T'.
9811 0 if D is not a copy constructor or copy assignment
9812 operator.
9813 1 if D is a copy constructor or copy assignment operator whose
9814 first parameter is a reference to const qualified T.
9815 2 if D is a copy constructor or copy assignment operator whose
9816 first parameter is a reference to non-const qualified T.
9817
9818 This function can be used as a predicate. Positive values indicate
3160db1d 9819 a copy constructor and nonzero values indicate a copy assignment
9ba4048d 9820 operator. */
9821
f9670f72 9822int
9f627b1a 9823copy_fn_p (const_tree d)
f9670f72 9824{
01779b5f 9825 tree args;
9826 tree arg_type;
9827 int result = 1;
491e04ef 9828
fcdd34ab 9829 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9ba4048d 9830
e9360a55 9831 if (TREE_CODE (d) == TEMPLATE_DECL
9832 || (DECL_TEMPLATE_INFO (d)
9833 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
01779b5f 9834 /* Instantiations of template member functions are never copy
9835 functions. Note that member functions of templated classes are
9836 represented as template functions internally, and we must
9837 accept those as copy functions. */
9838 return 0;
491e04ef 9839
01779b5f 9840 args = FUNCTION_FIRST_USER_PARMTYPE (d);
9841 if (!args)
9ba4048d 9842 return 0;
9843
01779b5f 9844 arg_type = TREE_VALUE (args);
e95dafb1 9845 if (arg_type == error_mark_node)
9846 return 0;
01779b5f 9847
9848 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
9849 {
9850 /* Pass by value copy assignment operator. */
9851 result = -1;
9852 }
9853 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
63949b38 9854 && !TYPE_REF_IS_RVALUE (arg_type)
01779b5f 9855 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
9856 {
9857 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
9858 result = 2;
9859 }
9860 else
9861 return 0;
491e04ef 9862
01779b5f 9863 args = TREE_CHAIN (args);
9864
9865 if (args && args != void_list_node && !TREE_PURPOSE (args))
9866 /* There are more non-optional args. */
9867 return 0;
9868
9869 return result;
9870}
9871
63949b38 9872/* D is a constructor or overloaded `operator='.
9873
9874 Let T be the class in which D is declared. Then, this function
9875 returns true when D is a move constructor or move assignment
9876 operator, false otherwise. */
9877
9878bool
9f627b1a 9879move_fn_p (const_tree d)
63949b38 9880{
9881 tree args;
9882 tree arg_type;
9883 bool result = false;
9884
9885 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9886
6dcdb5de 9887 if (cxx_dialect == cxx98)
9888 /* There are no move constructors if we are in C++98 mode. */
63949b38 9889 return false;
9890
9891 if (TREE_CODE (d) == TEMPLATE_DECL
9892 || (DECL_TEMPLATE_INFO (d)
9893 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9894 /* Instantiations of template member functions are never copy
9895 functions. Note that member functions of templated classes are
9896 represented as template functions internally, and we must
9897 accept those as copy functions. */
9898 return 0;
9899
9900 args = FUNCTION_FIRST_USER_PARMTYPE (d);
9901 if (!args)
9902 return 0;
9903
9904 arg_type = TREE_VALUE (args);
9905 if (arg_type == error_mark_node)
9906 return 0;
9907
9908 if (TREE_CODE (arg_type) == REFERENCE_TYPE
9909 && TYPE_REF_IS_RVALUE (arg_type)
9910 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
9911 DECL_CONTEXT (d)))
9912 result = true;
9913
9914 args = TREE_CHAIN (args);
9915
9916 if (args && args != void_list_node && !TREE_PURPOSE (args))
9917 /* There are more non-optional args. */
9918 return false;
9919
9920 return result;
9921}
9922
01779b5f 9923/* Remember any special properties of member function DECL. */
9924
930e8175 9925void
9926grok_special_member_properties (tree decl)
01779b5f 9927{
e9360a55 9928 tree class_type;
9929
e4364343 9930 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
e9360a55 9931 return;
9932
9933 class_type = DECL_CONTEXT (decl);
9934 if (DECL_CONSTRUCTOR_P (decl))
01779b5f 9935 {
9936 int ctor = copy_fn_p (decl);
491e04ef 9937
930e8175 9938 if (!DECL_ARTIFICIAL (decl))
9939 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
e9360a55 9940
01779b5f 9941 if (ctor > 0)
9942 {
9943 /* [class.copy]
491e04ef 9944
653e5405 9945 A non-template constructor for class X is a copy
9946 constructor if its first parameter is of type X&, const
9947 X&, volatile X& or const volatile X&, and either there
9948 are no other parameters or else all other parameters have
9949 default arguments. */
e9360a55 9950 TYPE_HAS_INIT_REF (class_type) = 1;
2336da2a 9951 if (!DECL_DEFAULTED_FN (decl))
9952 TYPE_HAS_COMPLEX_INIT_REF (class_type) = 1;
01779b5f 9953 if (ctor > 1)
e9360a55 9954 TYPE_HAS_CONST_INIT_REF (class_type) = 1;
01779b5f 9955 }
9956 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
b96a096a 9957 {
9958 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
9959 if (TREE_CODE (decl) == TEMPLATE_DECL || !DECL_DEFAULTED_FN (decl))
9960 TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
9961 }
f82f1250 9962 else if (is_list_ctor (decl))
9963 TYPE_HAS_LIST_CTOR (class_type) = 1;
01779b5f 9964 }
9965 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
9966 {
9967 /* [class.copy]
491e04ef 9968
653e5405 9969 A non-template assignment operator for class X is a copy
9970 assignment operator if its parameter is of type X, X&, const
9971 X&, volatile X& or const volatile X&. */
491e04ef 9972
01779b5f 9973 int assop = copy_fn_p (decl);
491e04ef 9974
01779b5f 9975 if (assop)
9976 {
e9360a55 9977 TYPE_HAS_ASSIGN_REF (class_type) = 1;
2336da2a 9978 if (!DECL_DEFAULTED_FN (decl))
9979 TYPE_HAS_COMPLEX_ASSIGN_REF (class_type) = 1;
01779b5f 9980 if (assop != 1)
e9360a55 9981 TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
01779b5f 9982 }
9983 }
f9670f72 9984}
9985
01779b5f 9986/* Check a constructor DECL has the correct form. Complains
9987 if the class has a constructor of the form X(X). */
96624a9e 9988
ddb9bca7 9989int
9f627b1a 9990grok_ctor_properties (const_tree ctype, const_tree decl)
471086d6 9991{
01779b5f 9992 int ctor_parm = copy_fn_p (decl);
9993
9994 if (ctor_parm < 0)
9995 {
9996 /* [class.copy]
491e04ef 9997
653e5405 9998 A declaration of a constructor for a class X is ill-formed if
9999 its first parameter is of type (optionally cv-qualified) X
10000 and either there are no other parameters or else all other
10001 parameters have default arguments.
10002
10003 We *don't* complain about member template instantiations that
10004 have this form, though; they can occur as we try to decide
10005 what constructor to use during overload resolution. Since
10006 overload resolution will never prefer such a constructor to
10007 the non-template copy constructor (which is either explicitly
10008 or implicitly defined), there's no need to worry about their
10009 existence. Theoretically, they should never even be
10010 instantiated, but that's hard to forestall. */
3ce479a6 10011 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
745f5bd2 10012 ctype, ctype);
745f5bd2 10013 return 0;
471086d6 10014 }
491e04ef 10015
ddb9bca7 10016 return 1;
471086d6 10017}
10018
97cc4539 10019/* An operator with this code is unary, but can also be binary. */
96624a9e 10020
e581f478 10021static int
1b72315d 10022ambi_op_p (enum tree_code code)
471086d6 10023{
97cc4539 10024 return (code == INDIRECT_REF
10025 || code == ADDR_EXPR
97d541d5 10026 || code == UNARY_PLUS_EXPR
97cc4539 10027 || code == NEGATE_EXPR
10028 || code == PREINCREMENT_EXPR
10029 || code == PREDECREMENT_EXPR);
471086d6 10030}
10031
10032/* An operator with this name can only be unary. */
96624a9e 10033
e581f478 10034static int
1b72315d 10035unary_op_p (enum tree_code code)
471086d6 10036{
97cc4539 10037 return (code == TRUTH_NOT_EXPR
10038 || code == BIT_NOT_EXPR
10039 || code == COMPONENT_REF
10040 || code == TYPE_EXPR);
471086d6 10041}
10042
ef3c9d49 10043/* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
b7d1e8ea 10044 errors are issued for invalid declarations. */
96624a9e 10045
fcdd34ab 10046bool
dc1ff7b1 10047grok_op_properties (tree decl, bool complain)
471086d6 10048{
10049 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
97cc4539 10050 tree argtype;
471086d6 10051 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10052 tree name = DECL_NAME (decl);
97cc4539 10053 enum tree_code operator_code;
10054 int arity;
33b91f7e 10055 bool ellipsis_p;
dc1ff7b1 10056 tree class_type;
97cc4539 10057
33b91f7e 10058 /* Count the number of arguments and check for ellipsis. */
97cc4539 10059 for (argtype = argtypes, arity = 0;
10060 argtype && argtype != void_list_node;
10061 argtype = TREE_CHAIN (argtype))
10062 ++arity;
33b91f7e 10063 ellipsis_p = !argtype;
471086d6 10064
dc1ff7b1 10065 class_type = DECL_CONTEXT (decl);
10066 if (class_type && !CLASS_TYPE_P (class_type))
10067 class_type = NULL_TREE;
471086d6 10068
97cc4539 10069 if (DECL_CONV_FN_P (decl))
10070 operator_code = TYPE_EXPR;
10071 else
10072 do
10073 {
c5144efa 10074#define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
10075 if (ansi_opname (CODE) == name) \
10076 { \
7216a9ff 10077 operator_code = (CODE); \
c5144efa 10078 break; \
10079 } \
10080 else if (ansi_assopname (CODE) == name) \
10081 { \
7216a9ff 10082 operator_code = (CODE); \
c5144efa 10083 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
10084 break; \
97cc4539 10085 }
10086
10087#include "operators.def"
10088#undef DEF_OPERATOR
10089
092b1d6f 10090 gcc_unreachable ();
97cc4539 10091 }
10092 while (0);
e014fc6a 10093 gcc_assert (operator_code != MAX_TREE_CODES);
97cc4539 10094 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10095
dc1ff7b1 10096 if (class_type)
10097 switch (operator_code)
10098 {
10099 case NEW_EXPR:
10100 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
10101 break;
3c3beda6 10102
dc1ff7b1 10103 case DELETE_EXPR:
10104 TYPE_GETS_DELETE (class_type) |= 1;
10105 break;
3c3beda6 10106
dc1ff7b1 10107 case VEC_NEW_EXPR:
10108 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
10109 break;
3c3beda6 10110
dc1ff7b1 10111 case VEC_DELETE_EXPR:
10112 TYPE_GETS_DELETE (class_type) |= 2;
10113 break;
97cc4539 10114
dc1ff7b1 10115 default:
10116 break;
10117 }
97cc4539 10118
c62b41e8 10119 /* [basic.std.dynamic.allocation]/1:
10120
10121 A program is ill-formed if an allocation function is declared
10122 in a namespace scope other than global scope or declared static
10123 in global scope.
10124
10125 The same also holds true for deallocation functions. */
10126 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
10127 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10128 {
10129 if (DECL_NAMESPACE_SCOPE_P (decl))
10130 {
10131 if (CP_DECL_CONTEXT (decl) != global_namespace)
fcdd34ab 10132 {
10133 error ("%qD may not be declared within a namespace", decl);
10134 return false;
10135 }
c62b41e8 10136 else if (!TREE_PUBLIC (decl))
fcdd34ab 10137 {
10138 error ("%qD may not be declared as static", decl);
10139 return false;
10140 }
c62b41e8 10141 }
10142 }
10143
97cc4539 10144 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
68d6de5b 10145 {
10146 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10147 DECL_IS_OPERATOR_NEW (decl) = 1;
10148 }
97cc4539 10149 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
7ef14399 10150 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
471086d6 10151 else
10152 {
10153 /* An operator function must either be a non-static member function
10154 or have at least one parameter of a class, a reference to a class,
10155 an enumeration, or a reference to an enumeration. 13.4.0.6 */
94f3b32d 10156 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
471086d6 10157 {
97cc4539 10158 if (operator_code == TYPE_EXPR
10159 || operator_code == CALL_EXPR
10160 || operator_code == COMPONENT_REF
10161 || operator_code == ARRAY_REF
10162 || operator_code == NOP_EXPR)
ef3c9d49 10163 {
10164 error ("%qD must be a nonstatic member function", decl);
fcdd34ab 10165 return false;
ef3c9d49 10166 }
471086d6 10167 else
10168 {
b7d1e8ea 10169 tree p;
471086d6 10170
94f3b32d 10171 if (DECL_STATIC_FUNCTION_P (decl))
ef3c9d49 10172 {
10173 error ("%qD must be either a non-static member "
10174 "function or a non-member function", decl);
fcdd34ab 10175 return false;
ef3c9d49 10176 }
94f3b32d 10177
b7d1e8ea 10178 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
10179 {
10180 tree arg = non_reference (TREE_VALUE (p));
6231ce32 10181 if (arg == error_mark_node)
fcdd34ab 10182 return false;
6231ce32 10183
95397ff9 10184 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
b7d1e8ea 10185 because these checks are performed even on
10186 template functions. */
95397ff9 10187 if (MAYBE_CLASS_TYPE_P (arg)
10188 || TREE_CODE (arg) == ENUMERAL_TYPE)
b7d1e8ea 10189 break;
10190 }
10191
10192 if (!p || p == void_list_node)
10193 {
fcdd34ab 10194 if (complain)
10195 error ("%qD must have an argument of class or "
10196 "enumerated type", decl);
10197 return false;
b7d1e8ea 10198 }
471086d6 10199 }
10200 }
980877d7 10201
b7d1e8ea 10202 /* There are no restrictions on the arguments to an overloaded
10203 "operator ()". */
97cc4539 10204 if (operator_code == CALL_EXPR)
fcdd34ab 10205 return true;
471086d6 10206
dc1ff7b1 10207 /* Warn about conversion operators that will never be used. */
9031d10b 10208 if (IDENTIFIER_TYPENAME_P (name)
dc1ff7b1 10209 && ! DECL_TEMPLATE_INFO (decl)
10210 && warn_conversion
10211 /* Warn only declaring the function; there is no need to
10212 warn again about out-of-class definitions. */
10213 && class_type == current_class_type)
ddb9bca7 10214 {
10215 tree t = TREE_TYPE (name);
dc1ff7b1 10216 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
10217 const char *what = 0;
3c3beda6 10218
dc1ff7b1 10219 if (ref)
10220 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
ddb9bca7 10221
dc1ff7b1 10222 if (TREE_CODE (t) == VOID_TYPE)
10223 what = "void";
10224 else if (class_type)
10225 {
10226 if (t == class_type)
ddb9bca7 10227 what = "the same type";
38281c46 10228 /* Don't force t to be complete here. */
95397ff9 10229 else if (MAYBE_CLASS_TYPE_P (t)
4b72716d 10230 && COMPLETE_TYPE_P (t)
dc1ff7b1 10231 && DERIVED_FROM_P (t, class_type))
ddb9bca7 10232 what = "a base class";
ddb9bca7 10233 }
dc1ff7b1 10234
10235 if (what)
ced7c954 10236 warning (OPT_Wconversion, "conversion to %s%s will never use a type "
dc1ff7b1 10237 "conversion operator",
10238 ref ? "a reference to " : "", what);
ddb9bca7 10239 }
33b91f7e 10240
01779b5f 10241 if (operator_code == COND_EXPR)
471086d6 10242 {
10243 /* 13.4.0.3 */
cf103c6c 10244 error ("ISO C++ prohibits overloading operator ?:");
fcdd34ab 10245 return false;
980877d7 10246 }
33b91f7e 10247 else if (ellipsis_p)
fcdd34ab 10248 {
10249 error ("%qD must not have variable number of arguments", decl);
10250 return false;
10251 }
97cc4539 10252 else if (ambi_op_p (operator_code))
471086d6 10253 {
97cc4539 10254 if (arity == 1)
10255 /* We pick the one-argument operator codes by default, so
10256 we don't have to change anything. */
10257 ;
10258 else if (arity == 2)
471086d6 10259 {
97cc4539 10260 /* If we thought this was a unary operator, we now know
10261 it to be a binary operator. */
10262 switch (operator_code)
10263 {
10264 case INDIRECT_REF:
10265 operator_code = MULT_EXPR;
10266 break;
10267
10268 case ADDR_EXPR:
10269 operator_code = BIT_AND_EXPR;
10270 break;
10271
97d541d5 10272 case UNARY_PLUS_EXPR:
97cc4539 10273 operator_code = PLUS_EXPR;
10274 break;
10275
10276 case NEGATE_EXPR:
10277 operator_code = MINUS_EXPR;
10278 break;
10279
10280 case PREINCREMENT_EXPR:
10281 operator_code = POSTINCREMENT_EXPR;
10282 break;
10283
10284 case PREDECREMENT_EXPR:
b81be439 10285 operator_code = POSTDECREMENT_EXPR;
97cc4539 10286 break;
10287
10288 default:
092b1d6f 10289 gcc_unreachable ();
97cc4539 10290 }
10291
10292 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10293
10294 if ((operator_code == POSTINCREMENT_EXPR
10295 || operator_code == POSTDECREMENT_EXPR)
3cc0b4b9 10296 && ! processing_template_decl
48edae76 10297 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
471086d6 10298 {
10299 if (methodp)
3ce479a6 10300 error ("postfix %qD must take %<int%> as its argument",
fcdd34ab 10301 decl);
471086d6 10302 else
fcdd34ab 10303 error ("postfix %qD must take %<int%> as its second "
10304 "argument", decl);
10305 return false;
471086d6 10306 }
10307 }
10308 else
10309 {
10310 if (methodp)
3ce479a6 10311 error ("%qD must take either zero or one argument", decl);
471086d6 10312 else
3ce479a6 10313 error ("%qD must take either one or two arguments", decl);
fcdd34ab 10314 return false;
471086d6 10315 }
02d7f858 10316
10317 /* More Effective C++ rule 6. */
f85d646a 10318 if (warn_ecpp
97cc4539 10319 && (operator_code == POSTINCREMENT_EXPR
10320 || operator_code == POSTDECREMENT_EXPR
10321 || operator_code == PREINCREMENT_EXPR
10322 || operator_code == PREDECREMENT_EXPR))
02d7f858 10323 {
10324 tree arg = TREE_VALUE (argtypes);
10325 tree ret = TREE_TYPE (TREE_TYPE (decl));
10326 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10327 arg = TREE_TYPE (arg);
10328 arg = TYPE_MAIN_VARIANT (arg);
97cc4539 10329 if (operator_code == PREINCREMENT_EXPR
10330 || operator_code == PREDECREMENT_EXPR)
02d7f858 10331 {
10332 if (TREE_CODE (ret) != REFERENCE_TYPE
daf9ff67 10333 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10334 arg))
ced7c954 10335 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
653e5405 10336 build_reference_type (arg));
02d7f858 10337 }
10338 else
10339 {
daf9ff67 10340 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
ced7c954 10341 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
02d7f858 10342 }
10343 }
471086d6 10344 }
97cc4539 10345 else if (unary_op_p (operator_code))
471086d6 10346 {
97cc4539 10347 if (arity != 1)
471086d6 10348 {
10349 if (methodp)
3ce479a6 10350 error ("%qD must take %<void%>", decl);
471086d6 10351 else
3ce479a6 10352 error ("%qD must take exactly one argument", decl);
fcdd34ab 10353 return false;
471086d6 10354 }
10355 }
97cc4539 10356 else /* if (binary_op_p (operator_code)) */
471086d6 10357 {
97cc4539 10358 if (arity != 2)
471086d6 10359 {
10360 if (methodp)
3ce479a6 10361 error ("%qD must take exactly one argument", decl);
471086d6 10362 else
3ce479a6 10363 error ("%qD must take exactly two arguments", decl);
fcdd34ab 10364 return false;
471086d6 10365 }
02d7f858 10366
10367 /* More Effective C++ rule 7. */
f85d646a 10368 if (warn_ecpp
97cc4539 10369 && (operator_code == TRUTH_ANDIF_EXPR
10370 || operator_code == TRUTH_ORIF_EXPR
10371 || operator_code == COMPOUND_EXPR))
ced7c954 10372 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
653e5405 10373 decl);
02d7f858 10374 }
10375
10376 /* Effective C++ rule 23. */
f85d646a 10377 if (warn_ecpp
97cc4539 10378 && arity == 2
40590b10 10379 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
97cc4539 10380 && (operator_code == PLUS_EXPR
10381 || operator_code == MINUS_EXPR
10382 || operator_code == TRUNC_DIV_EXPR
40590b10 10383 || operator_code == MULT_EXPR
10384 || operator_code == TRUNC_MOD_EXPR)
02d7f858 10385 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
ced7c954 10386 warning (OPT_Weffc__, "%qD should return by value", decl);
471086d6 10387
01779b5f 10388 /* [over.oper]/8 */
356ca252 10389 for (; argtypes && argtypes != void_list_node;
653e5405 10390 argtypes = TREE_CHAIN (argtypes))
10391 if (TREE_PURPOSE (argtypes))
10392 {
10393 TREE_PURPOSE (argtypes) = NULL_TREE;
10394 if (operator_code == POSTINCREMENT_EXPR
97cc4539 10395 || operator_code == POSTDECREMENT_EXPR)
653e5405 10396 {
21ca8540 10397 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments",
8864917d 10398 decl);
653e5405 10399 }
10400 else
fcdd34ab 10401 {
10402 error ("%qD cannot have default arguments", decl);
10403 return false;
10404 }
653e5405 10405 }
471086d6 10406 }
fcdd34ab 10407 return true;
471086d6 10408}
10409\f
d9da0685 10410/* Return a string giving the keyword associate with CODE. */
10411
e1721763 10412static const char *
1b72315d 10413tag_name (enum tag_types code)
435a15bf 10414{
10415 switch (code)
10416 {
10417 case record_type:
10418 return "struct";
10419 case class_type:
10420 return "class";
10421 case union_type:
d9da0685 10422 return "union";
435a15bf 10423 case enum_type:
10424 return "enum";
d9da0685 10425 case typename_type:
10426 return "typename";
435a15bf 10427 default:
092b1d6f 10428 gcc_unreachable ();
435a15bf 10429 }
10430}
10431
ac12b007 10432/* Name lookup in an elaborated-type-specifier (after the keyword
b7d1e8ea 10433 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
ac12b007 10434 elaborated-type-specifier is invalid, issue a diagnostic and return
b7d1e8ea 10435 error_mark_node; otherwise, return the *_TYPE to which it referred.
220b71ed 10436 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
ac12b007 10437
8172be22 10438tree
ac12b007 10439check_elaborated_type_specifier (enum tag_types tag_code,
b7d1e8ea 10440 tree decl,
220b71ed 10441 bool allow_template_p)
ac12b007 10442{
b7d1e8ea 10443 tree type;
ac12b007 10444
b7d1e8ea 10445 /* In the case of:
10446
10447 struct S { struct S *p; };
10448
10449 name lookup will find the TYPE_DECL for the implicit "S::S"
10450 typedef. Adjust for that here. */
10451 if (DECL_SELF_REFERENCE_P (decl))
10452 decl = TYPE_NAME (TREE_TYPE (decl));
10453
10454 type = TREE_TYPE (decl);
10455
e1316b34 10456 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10457 is false for this case as well. */
10458 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10459 {
10460 error ("using template type parameter %qT after %qs",
10461 type, tag_name (tag_code));
10462 return error_mark_node;
10463 }
491e04ef 10464 /* [dcl.type.elab]
b7d1e8ea 10465
10466 If the identifier resolves to a typedef-name or a template
10467 type-parameter, the elaborated-type-specifier is ill-formed.
10468
10469 In other words, the only legitimate declaration to use in the
10470 elaborated type specifier is the implicit typedef created when
10471 the type is declared. */
d9da0685 10472 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
10473 && tag_code != typename_type)
ac12b007 10474 {
3ce479a6 10475 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
3cf8b391 10476 error ("%q+D has a previous declaration here", decl);
b7d1e8ea 10477 return error_mark_node;
ac12b007 10478 }
220b71ed 10479 else if (TREE_CODE (type) != RECORD_TYPE
10480 && TREE_CODE (type) != UNION_TYPE
d9da0685 10481 && tag_code != enum_type
10482 && tag_code != typename_type)
220b71ed 10483 {
3ce479a6 10484 error ("%qT referred to as %qs", type, tag_name (tag_code));
3cf8b391 10485 error ("%q+T has a previous declaration here", type);
b7d1e8ea 10486 return error_mark_node;
220b71ed 10487 }
10488 else if (TREE_CODE (type) != ENUMERAL_TYPE
8702dea3 10489 && tag_code == enum_type)
220b71ed 10490 {
3ce479a6 10491 error ("%qT referred to as enum", type);
3cf8b391 10492 error ("%q+T has a previous declaration here", type);
b7d1e8ea 10493 return error_mark_node;
220b71ed 10494 }
10495 else if (!allow_template_p
10496 && TREE_CODE (type) == RECORD_TYPE
10497 && CLASSTYPE_IS_TEMPLATE (type))
10498 {
10499 /* If a class template appears as elaborated type specifier
10500 without a template header such as:
10501
10502 template <class T> class C {};
10503 void f(class C); // No template header here
10504
10505 then the required template argument is missing. */
3ce479a6 10506 error ("template argument required for %<%s %T%>",
220b71ed 10507 tag_name (tag_code),
10508 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
b7d1e8ea 10509 return error_mark_node;
220b71ed 10510 }
ac12b007 10511
b7d1e8ea 10512 return type;
ac12b007 10513}
10514
e1316b34 10515/* Lookup NAME in elaborate type specifier in scope according to
1fadf2c8 10516 SCOPE and issue diagnostics if necessary.
e1316b34 10517 Return *_TYPE node upon success, NULL_TREE when the NAME is not
10518 found, and ERROR_MARK_NODE for type error. */
10519
10520static tree
10521lookup_and_check_tag (enum tag_types tag_code, tree name,
1fadf2c8 10522 tag_scope scope, bool template_header_p)
e1316b34 10523{
10524 tree t;
10525 tree decl;
1fadf2c8 10526 if (scope == ts_global)
3f3fa556 10527 {
10528 /* First try ordinary name lookup, ignoring hidden class name
10529 injected via friend declaration. */
d1c41717 10530 decl = lookup_name_prefer_type (name, 2);
3f3fa556 10531 /* If that fails, the name will be placed in the smallest
10532 non-class, non-function-prototype scope according to 3.3.1/5.
10533 We may already have a hidden name declared as friend in this
1fb8fb56 10534 scope. So lookup again but not ignoring hidden names.
3f3fa556 10535 If we find one, that name will be made visible rather than
10536 creating a new tag. */
10537 if (!decl)
10538 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10539 }
e1316b34 10540 else
1fadf2c8 10541 decl = lookup_type_scope (name, scope);
e1316b34 10542
10543 if (decl && DECL_CLASS_TEMPLATE_P (decl))
10544 decl = DECL_TEMPLATE_RESULT (decl);
10545
10546 if (decl && TREE_CODE (decl) == TYPE_DECL)
10547 {
9714e24f 10548 /* Look for invalid nested type:
10549 class C {
10550 class C {};
10551 }; */
10552 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
10553 {
10554 error ("%qD has the same name as the class in which it is "
10555 "declared",
10556 decl);
10557 return error_mark_node;
10558 }
10559
e1316b34 10560 /* Two cases we need to consider when deciding if a class
10561 template is allowed as an elaborated type specifier:
10562 1. It is a self reference to its own class.
10563 2. It comes with a template header.
10564
10565 For example:
10566
10567 template <class T> class C {
10568 class C *c1; // DECL_SELF_REFERENCE_P is true
10569 class D;
10570 };
10571 template <class U> class C; // template_header_p is true
10572 template <class T> class C<T>::D {
10573 class C *c2; // DECL_SELF_REFERENCE_P is true
10574 }; */
10575
10576 t = check_elaborated_type_specifier (tag_code,
10577 decl,
10578 template_header_p
10579 | DECL_SELF_REFERENCE_P (decl));
10580 return t;
10581 }
8a58dc06 10582 else if (decl && TREE_CODE (decl) == TREE_LIST)
10583 {
10584 error ("reference to %qD is ambiguous", name);
10585 print_candidates (decl);
10586 return error_mark_node;
10587 }
e1316b34 10588 else
10589 return NULL_TREE;
10590}
10591
220b71ed 10592/* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
471086d6 10593 Define the tag as a forward-reference if it is not defined.
10594
220b71ed 10595 If a declaration is given, process it here, and report an error if
fb3e3237 10596 multiple declarations are not identical.
471086d6 10597
1fadf2c8 10598 SCOPE is TS_CURRENT when this is also a definition. Only look in
471086d6 10599 the current frame for the name (since C++ allows new names in any
1fadf2c8 10600 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
10601 declaration. Only look beginning from the current scope outward up
10602 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
220b71ed 10603
10604 TEMPLATE_HEADER_P is true when this declaration is preceded by
10605 a set of template parameters. */
471086d6 10606
471086d6 10607tree
fb3e3237 10608xref_tag (enum tag_types tag_code, tree name,
1fadf2c8 10609 tag_scope scope, bool template_header_p)
471086d6 10610{
471086d6 10611 enum tree_code code;
cd16867a 10612 tree t;
162ed5b9 10613 tree context = NULL_TREE;
f5edc715 10614
851fe51a 10615 timevar_push (TV_NAME_LOOKUP);
220b71ed 10616
b4df430b 10617 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
220b71ed 10618
471086d6 10619 switch (tag_code)
10620 {
10621 case record_type:
10622 case class_type:
471086d6 10623 code = RECORD_TYPE;
471086d6 10624 break;
10625 case union_type:
10626 code = UNION_TYPE;
471086d6 10627 break;
10628 case enum_type:
10629 code = ENUMERAL_TYPE;
10630 break;
10631 default:
092b1d6f 10632 gcc_unreachable ();
471086d6 10633 }
10634
e1316b34 10635 /* In case of anonymous name, xref_tag is only called to
10636 make type node and push name. Name lookup is not required. */
10637 if (ANON_AGGRNAME_P (name))
10638 t = NULL_TREE;
471086d6 10639 else
e1316b34 10640 t = lookup_and_check_tag (tag_code, name,
1fadf2c8 10641 scope, template_header_p);
220b71ed 10642
e1316b34 10643 if (t == error_mark_node)
10644 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
980877d7 10645
1fadf2c8 10646 if (scope != ts_current && t && current_class_type
e1316b34 10647 && template_class_depth (current_class_type)
10648 && template_header_p)
10649 {
1fadf2c8 10650 /* Since SCOPE is not TS_CURRENT, we are not looking at a
e1316b34 10651 definition of this tag. Since, in addition, we are currently
10652 processing a (member) template declaration of a template
10653 class, we must be very careful; consider:
162ed5b9 10654
e1316b34 10655 template <class X>
10656 struct S1
162ed5b9 10657
e1316b34 10658 template <class U>
10659 struct S2
10660 { template <class V>
10661 friend struct S1; };
162ed5b9 10662
e1316b34 10663 Here, the S2::S1 declaration should not be confused with the
10664 outer declaration. In particular, the inner version should
10665 have a template parameter of level 2, not level 1. This
10666 would be particularly important if the member declaration
10667 were instead:
162ed5b9 10668
e1316b34 10669 template <class V = U> friend struct S1;
162ed5b9 10670
e1316b34 10671 say, when we should tsubst into `U' when instantiating
10672 S2. On the other hand, when presented with:
162ed5b9 10673
e1316b34 10674 template <class T>
10675 struct S1 {
10676 template <class U>
10677 struct S2 {};
10678 template <class U>
10679 friend struct S2;
10680 };
162ed5b9 10681
e1316b34 10682 we must find the inner binding eventually. We
10683 accomplish this by making sure that the new type we
10684 create to represent this declaration has the right
10685 TYPE_CONTEXT. */
10686 context = TYPE_CONTEXT (t);
10687 t = NULL_TREE;
471086d6 10688 }
10689
220b71ed 10690 if (! t)
471086d6 10691 {
10692 /* If no such tag is yet defined, create a forward-reference node
10693 and record it as the "definition".
10694 When a real declaration of this type is found,
10695 the forward-reference will be altered into a real type. */
471086d6 10696 if (code == ENUMERAL_TYPE)
10697 {
3ce479a6 10698 error ("use of enum %q#D without previous declaration", name);
84a51273 10699 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
471086d6 10700 }
471086d6 10701 else
10702 {
95397ff9 10703 t = make_class_type (code);
220b71ed 10704 TYPE_CONTEXT (t) = context;
3f3fa556 10705 t = pushtag (name, t, scope);
471086d6 10706 }
10707 }
10708 else
10709 {
95397ff9 10710 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
2ed0bcc0 10711 {
10712 if (!redeclare_class_template (t, current_template_parms))
10713 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10714 }
491e04ef 10715 else if (!processing_template_decl
86b92c8e 10716 && CLASS_TYPE_P (t)
10717 && CLASSTYPE_IS_TEMPLATE (t))
10718 {
3ce479a6 10719 error ("redeclaration of %qT as a non-template", t);
f2c6bb6c 10720 error ("previous declaration %q+D", t);
10721 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
86b92c8e 10722 }
3f3fa556 10723
10724 /* Make injected friend class visible. */
10725 if (scope != ts_within_enclosing_non_class
10726 && hidden_name_p (TYPE_NAME (t)))
10727 {
10728 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
10729 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
10730
10731 if (TYPE_TEMPLATE_INFO (t))
10732 {
10733 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
10734 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
10735 }
653e5405 10736 }
471086d6 10737 }
10738
220b71ed 10739 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
471086d6 10740}
1a3f833b 10741
d2a15a12 10742tree
1fadf2c8 10743xref_tag_from_type (tree old, tree id, tag_scope scope)
d2a15a12 10744{
160175b4 10745 enum tag_types tag_kind;
d2a15a12 10746
10747 if (TREE_CODE (old) == RECORD_TYPE)
160175b4 10748 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
d2a15a12 10749 else
160175b4 10750 tag_kind = union_type;
d2a15a12 10751
10752 if (id == NULL_TREE)
10753 id = TYPE_IDENTIFIER (old);
10754
1fadf2c8 10755 return xref_tag (tag_kind, id, scope, false);
d2a15a12 10756}
10757
168db9a4 10758/* Create the binfo hierarchy for REF with (possibly NULL) base list
10759 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
10760 access_* node, and the TREE_VALUE is the type of the base-class.
47afaf8b 10761 Non-NULL TREE_TYPE indicates virtual inheritance.
10762
f18d004a 10763 Returns true if the binfo hierarchy was successfully created,
47afaf8b 10764 false if an error was detected. */
d1aed66b 10765
47afaf8b 10766bool
95f3173a 10767xref_basetypes (tree ref, tree base_list)
1a3f833b 10768{
954ad420 10769 tree *basep;
f6cc6a08 10770 tree binfo, base_binfo;
93523877 10771 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
4a44ba29 10772 unsigned max_bases = 0; /* Maximum direct bases. */
954ad420 10773 int i;
168db9a4 10774 tree default_access;
10775 tree igo_prev; /* Track Inheritance Graph Order. */
e4eb931c 10776
670f67e2 10777 if (ref == error_mark_node)
47afaf8b 10778 return false;
670f67e2 10779
168db9a4 10780 /* The base of a derived class is private by default, all others are
10781 public. */
10782 default_access = (TREE_CODE (ref) == RECORD_TYPE
10783 && CLASSTYPE_DECLARED_CLASS (ref)
10784 ? access_private_node : access_public_node);
8042247d 10785
b90e9c68 10786 /* First, make sure that any templates in base-classes are
10787 instantiated. This ensures that if we call ourselves recursively
10788 we do not get confused about which classes are marked and which
10789 are not. */
491e04ef 10790 basep = &base_list;
10791 while (*basep)
954ad420 10792 {
10793 tree basetype = TREE_VALUE (*basep);
491e04ef 10794
954ad420 10795 if (!(processing_template_decl && uses_template_parms (basetype))
10796 && !complete_type_or_else (basetype, NULL))
95f3173a 10797 /* An incomplete type. Remove it from the list. */
954ad420 10798 *basep = TREE_CHAIN (*basep);
10799 else
168db9a4 10800 {
10801 max_bases++;
10802 if (TREE_TYPE (*basep))
10803 max_vbases++;
10804 if (CLASS_TYPE_P (basetype))
10805 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
10806 basep = &TREE_CHAIN (*basep);
10807 }
954ad420 10808 }
b90e9c68 10809
ee086965 10810 TYPE_MARKED_P (ref) = 1;
168db9a4 10811
a6460bf1 10812 /* The binfo slot should be empty, unless this is an (ill-formed)
10813 redefinition. */
b4df430b 10814 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
10815 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
491e04ef 10816
f6cc6a08 10817 binfo = make_tree_binfo (max_bases);
491e04ef 10818
168db9a4 10819 TYPE_BINFO (ref) = binfo;
10820 BINFO_OFFSET (binfo) = size_zero_node;
10821 BINFO_TYPE (binfo) = ref;
491e04ef 10822
41771881 10823 /* Apply base-class info set up to the variants of this type. */
10824 fixup_type_variants (ref);
10825
168db9a4 10826 if (max_bases)
10827 {
046bfc77 10828 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
168db9a4 10829 /* An aggregate cannot have baseclasses. */
10830 CLASSTYPE_NON_AGGREGATE (ref) = 1;
491e04ef 10831
168db9a4 10832 if (TREE_CODE (ref) == UNION_TYPE)
47afaf8b 10833 {
10834 error ("derived union %qT invalid", ref);
10835 return false;
10836 }
168db9a4 10837 }
491e04ef 10838
168db9a4 10839 if (max_bases > 1)
95f3173a 10840 {
168db9a4 10841 if (TYPE_FOR_JAVA (ref))
47afaf8b 10842 {
10843 error ("Java class %qT cannot have multiple bases", ref);
10844 return false;
10845 }
168db9a4 10846 }
491e04ef 10847
168db9a4 10848 if (max_vbases)
10849 {
046bfc77 10850 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
491e04ef 10851
168db9a4 10852 if (TYPE_FOR_JAVA (ref))
47afaf8b 10853 {
10854 error ("Java class %qT cannot have virtual bases", ref);
10855 return false;
10856 }
168db9a4 10857 }
a6460bf1 10858
168db9a4 10859 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
10860 {
10861 tree access = TREE_PURPOSE (base_list);
10862 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
10863 tree basetype = TREE_VALUE (base_list);
491e04ef 10864
168db9a4 10865 if (access == access_default_node)
10866 access = default_access;
491e04ef 10867
d95d815d 10868 if (PACK_EXPANSION_P (basetype))
10869 basetype = PACK_EXPANSION_PATTERN (basetype);
168db9a4 10870 if (TREE_CODE (basetype) == TYPE_DECL)
10871 basetype = TREE_TYPE (basetype);
60538280 10872 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
168db9a4 10873 {
3ce479a6 10874 error ("base type %qT fails to be a struct or class type",
168db9a4 10875 basetype);
47afaf8b 10876 return false;
1a3f833b 10877 }
491e04ef 10878
168db9a4 10879 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
10880 TYPE_FOR_JAVA (ref) = 1;
10881
f6cc6a08 10882 base_binfo = NULL_TREE;
168db9a4 10883 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
95f3173a 10884 {
168db9a4 10885 base_binfo = TYPE_BINFO (basetype);
4a44ba29 10886 /* The original basetype could have been a typedef'd type. */
168db9a4 10887 basetype = BINFO_TYPE (base_binfo);
491e04ef 10888
168db9a4 10889 /* Inherit flags from the base. */
10890 TYPE_HAS_NEW_OPERATOR (ref)
10891 |= TYPE_HAS_NEW_OPERATOR (basetype);
10892 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
10893 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
10894 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
168db9a4 10895 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
ee086965 10896 CLASSTYPE_DIAMOND_SHAPED_P (ref)
10897 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
10898 CLASSTYPE_REPEATED_BASE_P (ref)
10899 |= CLASSTYPE_REPEATED_BASE_P (basetype);
954ad420 10900 }
9031d10b 10901
9f0da84b 10902 /* We must do this test after we've seen through a typedef
10903 type. */
10904 if (TYPE_MARKED_P (basetype))
10905 {
10906 if (basetype == ref)
3ce479a6 10907 error ("recursive type %qT undefined", basetype);
9f0da84b 10908 else
3ce479a6 10909 error ("duplicate base type %qT invalid", basetype);
47afaf8b 10910 return false;
9f0da84b 10911 }
d95d815d 10912
10913 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
10914 /* Regenerate the pack expansion for the bases. */
10915 basetype = make_pack_expansion (basetype);
10916
9f0da84b 10917 TYPE_MARKED_P (basetype) = 1;
491e04ef 10918
168db9a4 10919 base_binfo = copy_binfo (base_binfo, basetype, ref,
10920 &igo_prev, via_virtual);
10921 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
10922 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
de4355dc 10923
f6cc6a08 10924 BINFO_BASE_APPEND (binfo, base_binfo);
db77fe17 10925 BINFO_BASE_ACCESS_APPEND (binfo, access);
a6460bf1 10926 }
10927
ee086965 10928 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
10929 /* If we have space in the vbase vector, we must have shared at
10930 least one of them, and are therefore diamond shaped. */
10931 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
10932
95f3173a 10933 /* Unmark all the types. */
f6cc6a08 10934 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
ee086965 10935 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10936 TYPE_MARKED_P (ref) = 0;
10937
10938 /* Now see if we have a repeated base type. */
10939 if (!CLASSTYPE_REPEATED_BASE_P (ref))
10940 {
10941 for (base_binfo = binfo; base_binfo;
10942 base_binfo = TREE_CHAIN (base_binfo))
10943 {
10944 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10945 {
10946 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
10947 break;
10948 }
10949 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
10950 }
10951 for (base_binfo = binfo; base_binfo;
10952 base_binfo = TREE_CHAIN (base_binfo))
10953 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10954 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10955 else
10956 break;
10957 }
47afaf8b 10958
10959 return true;
1a3f833b 10960}
980877d7 10961
471086d6 10962\f
471086d6 10963/* Begin compiling the definition of an enumeration type.
3f00a6c0 10964 NAME is its name,
10965
10966 UNDERLYING_TYPE is the type that will be used as the storage for
10967 the enumeration type. This should be NULL_TREE if no storage type
10968 was specified.
10969
10970 SCOPED_ENUM_P is true if this is a scoped enumeration type.
10971
471086d6 10972 Returns the type object, as yet incomplete.
10973 Also records info about it so that build_enumerator
10974 may be used to declare the individual values as they are read. */
10975
10976tree
3f00a6c0 10977start_enum (tree name, tree underlying_type, bool scoped_enum_p)
471086d6 10978{
1fadf2c8 10979 tree enumtype;
10980
10981 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
471086d6 10982
10983 /* If this is the real definition for a previous forward reference,
10984 fill in the contents in the same object that used to be the
10985 forward reference. */
10986
1fadf2c8 10987 enumtype = lookup_and_check_tag (enum_type, name,
10988 /*tag_scope=*/ts_current,
10989 /*template_header_p=*/false);
471086d6 10990
10991 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
43476131 10992 {
3ce479a6 10993 error ("multiple definition of %q#T", enumtype);
9bc3739f 10994 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
383acc13 10995 /* Clear out TYPE_VALUES, and start again. */
10996 TYPE_VALUES (enumtype) = NULL_TREE;
43476131 10997 }
471086d6 10998 else
10999 {
1fadf2c8 11000 /* In case of error, make a dummy enum to allow parsing to
11001 continue. */
11002 if (enumtype == error_mark_node)
11003 name = make_anon_name ();
11004
471086d6 11005 enumtype = make_node (ENUMERAL_TYPE);
3f3fa556 11006 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
471086d6 11007 }
11008
934e3486 11009 if (enumtype == error_mark_node)
11010 return enumtype;
11011
3f00a6c0 11012 if (scoped_enum_p)
11013 {
11014 SET_SCOPED_ENUM_P (enumtype, 1);
11015 begin_scope (sk_scoped_enum, enumtype);
11016
11017 /* [C++0x dcl.enum]p5:
11018
11019 If not explicitly specified, the underlying type of a scoped
11020 enumeration type is int. */
11021 if (!underlying_type)
11022 underlying_type = integer_type_node;
11023 }
11024
11025 if (underlying_type)
11026 {
11027 if (CP_INTEGRAL_TYPE_P (underlying_type))
11028 {
11029 TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (underlying_type);
11030 TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (underlying_type);
11031 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11032 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
342ad2d6 11033 SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
3f00a6c0 11034 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11035 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11036 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11037 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11038 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11039 }
11040 else
11041 error ("underlying type %<%T%> of %<%T%> must be an integral type",
11042 underlying_type, enumtype);
11043 }
11044
471086d6 11045 return enumtype;
11046}
11047
11048/* After processing and defining all the values of an enumeration type,
11049 install their decls in the enumeration type and finish it off.
a4fb1d94 11050 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
471086d6 11051
a4fb1d94 11052void
1b72315d 11053finish_enum (tree enumtype)
471086d6 11054{
ee1ab431 11055 tree values;
11056 tree decl;
a4fb1d94 11057 tree minnode;
11058 tree maxnode;
3f00a6c0 11059 tree value;
a4fb1d94 11060 tree t;
11061 bool unsignedp;
fe80e237 11062 bool use_short_enum;
a4fb1d94 11063 int lowprec;
491e04ef 11064 int highprec;
a4fb1d94 11065 int precision;
9f1b7d17 11066 unsigned int itk;
d0ef003f 11067 tree underlying_type = NULL_TREE;
3f00a6c0 11068 bool fixed_underlying_type_p
11069 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
a4fb1d94 11070
11071 /* We built up the VALUES in reverse order. */
11072 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
11073
15da6f57 11074 /* For an enum defined in a template, just set the type of the values;
11075 all further processing is postponed until the template is
11076 instantiated. We need to set the type so that tsubst of a CONST_DECL
11077 works. */
a4fb1d94 11078 if (processing_template_decl)
11079 {
491e04ef 11080 for (values = TYPE_VALUES (enumtype);
11081 values;
ee1ab431 11082 values = TREE_CHAIN (values))
11083 TREE_TYPE (TREE_VALUE (values)) = enumtype;
334ec926 11084 if (at_function_scope_p ())
a4fb1d94 11085 add_stmt (build_min (TAG_DEFN, enumtype));
a4fb1d94 11086 return;
11087 }
11088
ee1ab431 11089 /* Determine the minimum and maximum values of the enumerators. */
a4fb1d94 11090 if (TYPE_VALUES (enumtype))
471086d6 11091 {
a4fb1d94 11092 minnode = maxnode = NULL_TREE;
e857e9c7 11093
491e04ef 11094 for (values = TYPE_VALUES (enumtype);
3f00a6c0 11095 values;
11096 values = TREE_CHAIN (values))
11097 {
11098 decl = TREE_VALUE (values);
11099
11100 /* [dcl.enum]: Following the closing brace of an enum-specifier,
11101 each enumerator has the type of its enumeration. Prior to the
11102 closing brace, the type of each enumerator is the type of its
11103 initializing value. */
11104 TREE_TYPE (decl) = enumtype;
11105
11106 /* Update the minimum and maximum values, if appropriate. */
11107 value = DECL_INITIAL (decl);
11108 if (value == error_mark_node)
11109 value = integer_zero_node;
11110 /* Figure out what the minimum and maximum values of the
11111 enumerators are. */
11112 if (!minnode)
11113 minnode = maxnode = value;
11114 else if (tree_int_cst_lt (maxnode, value))
11115 maxnode = value;
11116 else if (tree_int_cst_lt (value, minnode))
11117 minnode = value;
11118 }
471086d6 11119 }
c38086bd 11120 else
ee1ab431 11121 /* [dcl.enum]
3f00a6c0 11122
ee1ab431 11123 If the enumerator-list is empty, the underlying type is as if
11124 the enumeration had a single enumerator with value 0. */
a4fb1d94 11125 minnode = maxnode = integer_zero_node;
11126
11127 /* Compute the number of bits require to represent all values of the
11128 enumeration. We must do this before the type of MINNODE and
5485b959 11129 MAXNODE are transformed, since tree_int_cst_min_precision relies
11130 on the TREE_TYPE of the value it is passed. */
a4fb1d94 11131 unsignedp = tree_int_cst_sgn (minnode) >= 0;
5485b959 11132 lowprec = tree_int_cst_min_precision (minnode, unsignedp);
11133 highprec = tree_int_cst_min_precision (maxnode, unsignedp);
a4fb1d94 11134 precision = MAX (lowprec, highprec);
11135
3f00a6c0 11136 if (!fixed_underlying_type_p)
11137 {
11138 /* Determine the underlying type of the enumeration.
ee1ab431 11139
3f00a6c0 11140 [dcl.enum]
ee1ab431 11141
3f00a6c0 11142 The underlying type of an enumeration is an integral type that
11143 can represent all the enumerator values defined in the
11144 enumeration. It is implementation-defined which integral type is
11145 used as the underlying type for an enumeration except that the
11146 underlying type shall not be larger than int unless the value of
11147 an enumerator cannot fit in an int or unsigned int.
ee1ab431 11148
3f00a6c0 11149 We use "int" or an "unsigned int" as the underlying type, even if
11150 a smaller integral type would work, unless the user has
11151 explicitly requested that we use the smallest possible type. The
11152 user can request that for all enumerations with a command line
11153 flag, or for just one enumeration with an attribute. */
fe80e237 11154
3f00a6c0 11155 use_short_enum = flag_short_enums
11156 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
fe80e237 11157
3f00a6c0 11158 for (itk = (use_short_enum ? itk_char : itk_int);
11159 itk != itk_none;
11160 itk++)
11161 {
11162 underlying_type = integer_types[itk];
11163 if (TYPE_PRECISION (underlying_type) >= precision
11164 && TYPE_UNSIGNED (underlying_type) == unsignedp)
11165 break;
11166 }
11167 if (itk == itk_none)
11168 {
11169 /* DR 377
11170
11171 IF no integral type can represent all the enumerator values, the
11172 enumeration is ill-formed. */
11173 error ("no integral type can represent all of the enumerator values "
11174 "for %qT", enumtype);
11175 precision = TYPE_PRECISION (long_long_integer_type_node);
11176 underlying_type = integer_types[itk_unsigned_long_long];
11177 }
ee1ab431 11178
3f00a6c0 11179 /* [dcl.enum]
11180
11181 The value of sizeof() applied to an enumeration type, an object
11182 of an enumeration type, or an enumerator, is the value of sizeof()
11183 applied to the underlying type. */
11184 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11185 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
342ad2d6 11186 SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
3f00a6c0 11187 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11188 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11189 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11190
11191 /* Set the underlying type of the enumeration type to the
11192 computed enumeration type, restricted to the enumerator
11193 values. */
11194 ENUM_UNDERLYING_TYPE (enumtype) = copy_node (underlying_type);
11195 set_min_and_max_values_for_integral_type
11196 (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
1791b32e 11197 }
3f00a6c0 11198 else
11199 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
1791b32e 11200
08cc44e7 11201 /* Compute the minimum and maximum values for the type.
471086d6 11202
ee1ab431 11203 [dcl.enum]
11204
11205 For an enumeration where emin is the smallest enumerator and emax
11206 is the largest, the values of the enumeration are the values of the
11207 underlying type in the range bmin to bmax, where bmin and bmax are,
11208 respectively, the smallest and largest values of the smallest bit-
11209 field that can store emin and emax. */
3f00a6c0 11210
30fa03f2 11211 /* The middle-end currently assumes that types with TYPE_PRECISION
11212 narrower than their underlying type are suitably zero or sign
11213 extended to fill their mode. g++ doesn't make these guarantees.
11214 Until the middle-end can represent such paradoxical types, we
4a44ba29 11215 set the TYPE_PRECISION to the width of the underlying type. */
30fa03f2 11216 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
3f00a6c0 11217
ee1ab431 11218 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
3f00a6c0 11219
ee1ab431 11220 /* Convert each of the enumerators to the type of the underlying
11221 type of the enumeration. */
11222 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
11223 {
2d42b7d7 11224 location_t saved_location;
11225
ee1ab431 11226 decl = TREE_VALUE (values);
2d42b7d7 11227 saved_location = input_location;
11228 input_location = DECL_SOURCE_LOCATION (decl);
3f00a6c0 11229 if (fixed_underlying_type_p)
11230 /* If the enumeration type has a fixed underlying type, we
11231 already checked all of the enumerator values. */
11232 value = DECL_INITIAL (decl);
11233 else
11234 value = perform_implicit_conversion (underlying_type,
11235 DECL_INITIAL (decl),
11236 tf_warning_or_error);
2d42b7d7 11237 input_location = saved_location;
00b76131 11238
11239 /* Do not clobber shared ints. */
11240 value = copy_node (value);
9031d10b 11241
ee1ab431 11242 TREE_TYPE (value) = enumtype;
11243 DECL_INITIAL (decl) = value;
1791b32e 11244 }
471086d6 11245
a4fb1d94 11246 /* Fix up all variant types of this enum type. */
11247 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
11248 {
11249 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
11250 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
11251 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
11252 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
11253 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
342ad2d6 11254 SET_TYPE_MODE (t, TYPE_MODE (enumtype));
a4fb1d94 11255 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
11256 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
11257 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
78a8ed03 11258 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
3f00a6c0 11259 ENUM_UNDERLYING_TYPE (t) = ENUM_UNDERLYING_TYPE (enumtype);
1bb4c5ad 11260 }
11261
3f00a6c0 11262 /* Finish up the scope of a scoped enumeration. */
11263 if (SCOPED_ENUM_P (enumtype))
11264 finish_scope ();
11265
a4fb1d94 11266 /* Finish debugging output for this type. */
11267 rest_of_type_compilation (enumtype, namespace_bindings_p ());
471086d6 11268}
11269
990c78e1 11270/* Build and install a CONST_DECL for an enumeration constant of the
383acc13 11271 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
471086d6 11272 Assignment of sequential values by default is handled here. */
11273
383acc13 11274void
1b72315d 11275build_enumerator (tree name, tree value, tree enumtype)
471086d6 11276{
383acc13 11277 tree decl;
10151236 11278 tree context;
383acc13 11279 tree type;
471086d6 11280
640aa28c 11281 /* If the VALUE was erroneous, pretend it wasn't there; that will
11282 result in the enum being assigned the next value in sequence. */
11283 if (value == error_mark_node)
11284 value = NULL_TREE;
11285
471086d6 11286 /* Remove no-op casts from the value. */
11287 if (value)
11288 STRIP_TYPE_NOPS (value);
11289
383acc13 11290 if (! processing_template_decl)
11291 {
11292 /* Validate and default VALUE. */
11293 if (value != NULL_TREE)
11294 {
13f0eb20 11295 value = integral_constant_value (value);
383acc13 11296
11297 if (TREE_CODE (value) == INTEGER_CST)
11298 {
a681799d 11299 value = perform_integral_promotions (value);
383acc13 11300 constant_expression_warning (value);
11301 }
11302 else
11303 {
979d6801 11304 error ("enumerator value for %qD is not an integer constant", name);
383acc13 11305 value = NULL_TREE;
11306 }
11307 }
11308
11309 /* Default based on previous value. */
b4451e15 11310 if (value == NULL_TREE)
383acc13 11311 {
383acc13 11312 if (TYPE_VALUES (enumtype))
11313 {
637fdc50 11314 HOST_WIDE_INT hi;
11315 unsigned HOST_WIDE_INT lo;
11316 tree prev_value;
11317 bool overflowed;
11318
141693d5 11319 /* The next value is the previous value plus one.
637fdc50 11320 add_double doesn't know the type of the target expression,
11321 so we must check with int_fits_type_p as well. */
383acc13 11322 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
141693d5 11323 if (error_operand_p (prev_value))
11324 value = error_mark_node;
11325 else
2d42b7d7 11326 {
141693d5 11327 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
11328 TREE_INT_CST_HIGH (prev_value),
11329 1, 0, &lo, &hi);
11330 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
11331 overflowed
11332 |= !int_fits_type_p (value, TREE_TYPE (prev_value));
11333
11334 if (overflowed)
11335 {
11336 error ("overflow in enumeration values at %qD", name);
11337 value = error_mark_node;
11338 }
2d42b7d7 11339 }
383acc13 11340 }
11341 else
11342 value = integer_zero_node;
11343 }
11344
11345 /* Remove no-op casts from the value. */
15da6f57 11346 STRIP_TYPE_NOPS (value);
3f00a6c0 11347
11348 /* If the underlying type of the enum is fixed, check whether
11349 the enumerator values fits in the underlying type. If it
11350 does not fit, the program is ill-formed [C++0x dcl.enum]. */
11351 if (ENUM_UNDERLYING_TYPE (enumtype)
11352 && value
11353 && TREE_CODE (value) == INTEGER_CST
11354 && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
11355 {
11356 error ("enumerator value %E is too large for underlying type %<%T%>",
11357 value, ENUM_UNDERLYING_TYPE (enumtype));
11358
11359 /* Silently convert the value so that we can continue. */
11360 value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
11361 value, tf_none);
3f00a6c0 11362 }
383acc13 11363 }
471086d6 11364
471086d6 11365 /* C++ associates enums with global, function, or class declarations. */
383acc13 11366 context = current_scope ();
11367
11368 /* Build the actual enumeration constant. Note that the enumeration
3f00a6c0 11369 constants have the underlying type of the enum (if it is fixed)
11370 or the type of their initializer (if the underlying type of the
11371 enum is not fixed):
11372
11373 [ C++0x dcl.enum ]
11374
11375 If the underlying type is fixed, the type of each enumerator
11376 prior to the closing brace is the underlying type; if the
11377 initializing value of an enumerator cannot be represented by
11378 the underlying type, the program is ill-formed. If the
11379 underlying type is not fixed, the type of each enumerator is
11380 the type of its initializing value.
11381
11382 If the underlying type is not fixed, it will be computed by
11383 finish_enum and we will reset the type of this enumerator. Of
11384 course, if we're processing a template, there may be no value. */
383acc13 11385 type = value ? TREE_TYPE (value) : NULL_TREE;
11386
11387 if (context && context == current_class_type)
11388 /* This enum declaration is local to the class. We need the full
e41f0d80 11389 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
383acc13 11390 decl = build_lang_decl (CONST_DECL, name, type);
11391 else
11392 /* It's a global enum, or it's local to a function. (Note local to
10151236 11393 a function could mean local to a class method. */
e60a6f7b 11394 decl = build_decl (input_location, CONST_DECL, name, type);
10151236 11395
383acc13 11396 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
4ee9c684 11397 TREE_CONSTANT (decl) = 1;
4ee9c684 11398 TREE_READONLY (decl) = 1;
383acc13 11399 DECL_INITIAL (decl) = value;
10151236 11400
383acc13 11401 if (context && context == current_class_type)
11402 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
ee1ab431 11403 on the TYPE_FIELDS list for `S'. (That's so that you can say
11404 things like `S::i' later.) */
383acc13 11405 finish_member_declaration (decl);
11406 else
d03f29c4 11407 pushdecl (decl);
383acc13 11408
11409 /* Add this enumeration constant to the list for this type. */
11410 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
471086d6 11411}
11412
3f00a6c0 11413/* Look for an enumerator with the given NAME within the enumeration
11414 type ENUMTYPE. This routine is used primarily for qualified name
11415 lookup into an enumerator in C++0x, e.g.,
11416
11417 enum class Color { Red, Green, Blue };
11418
11419 Color color = Color::Red;
11420
11421 Returns the value corresponding to the enumerator, or
11422 NULL_TREE if no such enumerator was found. */
11423tree
11424lookup_enumerator (tree enumtype, tree name)
11425{
11426 tree e;
11427 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
11428
11429 e = purpose_member (name, TYPE_VALUES (enumtype));
11430 return e? TREE_VALUE (e) : NULL_TREE;
11431}
11432
471086d6 11433\f
d119628b 11434/* We're defining DECL. Make sure that it's type is OK. */
11435
11436static void
1b72315d 11437check_function_type (tree decl, tree current_function_parms)
d119628b 11438{
11439 tree fntype = TREE_TYPE (decl);
4b72716d 11440 tree return_type = complete_type (TREE_TYPE (fntype));
d119628b 11441
11442 /* In a function definition, arg types must be complete. */
11443 require_complete_types_for_parms (current_function_parms);
11444
dfc27db5 11445 if (dependent_type_p (return_type))
11446 return;
faf19a81 11447 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
95397ff9 11448 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
d119628b 11449 {
49eec3d7 11450 tree args = TYPE_ARG_TYPES (fntype);
074ab442 11451
faf19a81 11452 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
11453 error ("return type %q#T is incomplete", return_type);
11454 else
11455 error ("return type has Java class type %q#T", return_type);
d119628b 11456
49eec3d7 11457 /* Make it return void instead. */
d119628b 11458 if (TREE_CODE (fntype) == METHOD_TYPE)
49eec3d7 11459 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
11460 void_type_node,
11461 TREE_CHAIN (args));
d119628b 11462 else
49eec3d7 11463 fntype = build_function_type (void_type_node, args);
980877d7 11464 TREE_TYPE (decl)
d119628b 11465 = build_exception_variant (fntype,
49eec3d7 11466 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
d119628b 11467 }
11468 else
11469 abstract_virtuals_error (decl, TREE_TYPE (fntype));
11470}
11471
471086d6 11472/* Create the FUNCTION_DECL for a function definition.
11473 DECLSPECS and DECLARATOR are the parts of the declaration;
11474 they describe the function's name and the type it returns,
11475 but twisted together in a fashion that parallels the syntax of C.
11476
d119628b 11477 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
11478 DECLARATOR is really the DECL for the function we are about to
11479 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
6528331d 11480 indicating that the function is an inline defined in-class.
980877d7 11481
471086d6 11482 This function creates a binding context for the function body
11483 as well as setting up the FUNCTION_DECL in current_function_decl.
11484
471086d6 11485 For C++, we must first check whether that datum makes any sense.
11486 For example, "class A local_a(1,2);" means that variable local_a
11487 is an aggregate of type A, which should have a constructor
ddb7a3b0 11488 applied to it with the argument list [1, 2].
11489
11490 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
11491 or may be a BLOCK if the function has been defined previously
11492 in this translation unit. On exit, DECL_INITIAL (decl1) will be
11493 error_mark_node if the function has never been defined, or
11494 a BLOCK if the function has been defined somewhere. */
471086d6 11495
3046c0a3 11496void
11497start_preparsed_function (tree decl1, tree attrs, int flags)
471086d6 11498{
471086d6 11499 tree ctype = NULL_TREE;
11500 tree fntype;
11501 tree restype;
471086d6 11502 int doing_friend = 0;
1f3233d1 11503 struct cp_binding_level *bl;
6528331d 11504 tree current_function_parms;
b7102079 11505 struct c_fileinfo *finfo
4507a637 11506 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
d9803664 11507 bool honor_interface;
471086d6 11508
471086d6 11509 /* Sanity check. */
b4df430b 11510 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
11511 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
471086d6 11512
3046c0a3 11513 fntype = TREE_TYPE (decl1);
11514 if (TREE_CODE (fntype) == METHOD_TYPE)
11515 ctype = TYPE_METHOD_BASETYPE (fntype);
491e04ef 11516
3046c0a3 11517 /* ISO C++ 11.4/5. A friend function defined in a class is in
11518 the (lexical) scope of the class in which it is defined. */
11519 if (!ctype && DECL_FRIEND_P (decl1))
471086d6 11520 {
3046c0a3 11521 ctype = DECL_FRIEND_CONTEXT (decl1);
491e04ef 11522
3046c0a3 11523 /* CTYPE could be null here if we're dealing with a template;
11524 for example, `inline friend float foo()' inside a template
11525 will have no CTYPE set. */
11526 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11527 ctype = NULL_TREE;
11528 else
11529 doing_friend = 1;
471086d6 11530 }
980877d7 11531
5955c361 11532 if (DECL_DECLARED_INLINE_P (decl1)
11533 && lookup_attribute ("noinline", attrs))
3cf8b391 11534 warning (0, "inline function %q+D given attribute noinline", decl1);
5955c361 11535
db577900 11536 /* Handle gnu_inline attribute. */
11537 if (GNU_INLINE_P (decl1))
11538 {
11539 DECL_EXTERNAL (decl1) = 1;
11540 DECL_NOT_REALLY_EXTERN (decl1) = 0;
11541 DECL_INTERFACE_KNOWN (decl1) = 1;
a6dac426 11542 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
db577900 11543 }
11544
a321abdb 11545 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
11546 /* This is a constructor, we must ensure that any default args
11547 introduced by this definition are propagated to the clones
11548 now. The clones are used directly in overload resolution. */
11549 adjust_clone_args (decl1);
11550
e0e489c4 11551 /* Sometimes we don't notice that a function is a static member, and
11552 build a METHOD_TYPE for it. Fix that up now. */
11553 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
11554 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
11555 {
11fa0266 11556 revert_static_member_fn (decl1);
e0e489c4 11557 ctype = NULL_TREE;
11558 }
471086d6 11559
53137e6a 11560 /* Set up current_class_type, and enter the scope of the class, if
11561 appropriate. */
11562 if (ctype)
5f6526e1 11563 push_nested_class (ctype);
53137e6a 11564 else if (DECL_STATIC_FUNCTION_P (decl1))
5f6526e1 11565 push_nested_class (DECL_CONTEXT (decl1));
53137e6a 11566
11567 /* Now that we have entered the scope of the class, we must restore
11568 the bindings for any template parameters surrounding DECL1, if it
11569 is an inline member template. (Order is important; consider the
11570 case where a template parameter has the same name as a field of
11571 the class.) It is not until after this point that
11572 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
d119628b 11573 if (flags & SF_INCLASS_INLINE)
53137e6a 11574 maybe_begin_member_template_processing (decl1);
11575
225ec6aa 11576 /* Effective C++ rule 15. */
70a658bd 11577 if (warn_ecpp
97cc4539 11578 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
70a658bd 11579 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
ced7c954 11580 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
70a658bd 11581
11582 /* Make the init_value nonzero so pushdecl knows this is not tentative.
11583 error_mark_node is replaced below (in poplevel) with the BLOCK. */
e0e489c4 11584 if (!DECL_INITIAL (decl1))
11585 DECL_INITIAL (decl1) = error_mark_node;
70a658bd 11586
70a658bd 11587 /* This function exists in static storage.
11588 (This does not mean `static' in the C sense!) */
11589 TREE_STATIC (decl1) = 1;
11590
11591 /* We must call push_template_decl after current_class_type is set
11592 up. (If we are processing inline definitions after exiting a
11593 class scope, current_class_type will be NULL_TREE until set above
11594 by push_nested_class.) */
11595 if (processing_template_decl)
49dcfcc4 11596 {
11597 /* FIXME: Handle error_mark_node more gracefully. */
11598 tree newdecl1 = push_template_decl (decl1);
11599 if (newdecl1 != error_mark_node)
653e5405 11600 decl1 = newdecl1;
49dcfcc4 11601 }
70a658bd 11602
53137e6a 11603 /* We are now in the scope of the function being defined. */
471086d6 11604 current_function_decl = decl1;
53137e6a 11605
e857e9c7 11606 /* Save the parm names or decls from this function's declarator
11607 where store_parm_decls will find them. */
7ef14399 11608 current_function_parms = DECL_ARGUMENTS (decl1);
471086d6 11609
d119628b 11610 /* Make sure the parameter and return types are reasonable. When
11611 you declare a function, these types can be incomplete, but they
11612 must be complete when you define the function. */
dfc27db5 11613 check_function_type (decl1, current_function_parms);
53137e6a 11614
d119628b 11615 /* Build the return declaration for the function. */
11616 restype = TREE_TYPE (fntype);
b8e2eb91 11617 if (DECL_RESULT (decl1) == NULL_TREE)
d119628b 11618 {
540edea7 11619 tree resdecl;
11620
e60a6f7b 11621 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
540edea7 11622 DECL_ARTIFICIAL (resdecl) = 1;
11623 DECL_IGNORED_P (resdecl) = 1;
11624 DECL_RESULT (decl1) = resdecl;
11625
11ef5c28 11626 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
e857e9c7 11627 }
d119628b 11628
d119628b 11629 /* Let the user know we're compiling this function. */
a6260fc7 11630 announce_function (decl1);
1e66592c 11631
b248d3f7 11632 /* Record the decl so that the function name is defined.
11633 If we already have a decl for this name, and it is a FUNCTION_DECL,
11634 use the old decl. */
d119628b 11635 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
b248d3f7 11636 {
668ae905 11637 /* A specialization is not used to guide overload resolution. */
f99f0e9c 11638 if (!DECL_FUNCTION_MEMBER_P (decl1)
491e04ef 11639 && !(DECL_USE_TEMPLATE (decl1) &&
f99f0e9c 11640 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
947f430b 11641 {
11642 tree olddecl = pushdecl (decl1);
11643
11644 if (olddecl == error_mark_node)
11645 /* If something went wrong when registering the declaration,
11646 use DECL1; we have to have a FUNCTION_DECL to use when
11647 parsing the body of the function. */
11648 ;
11649 else
bac56573 11650 {
11651 /* Otherwise, OLDDECL is either a previous declaration
11652 of the same function or DECL1 itself. */
11653
11654 if (warn_missing_declarations
11655 && olddecl == decl1
11656 && !DECL_MAIN_P (decl1)
11657 && TREE_PUBLIC (decl1)
11658 && !DECL_DECLARED_INLINE_P (decl1))
11659 {
11660 tree context;
11661
11662 /* Check whether DECL1 is in an anonymous
11663 namespace. */
11664 for (context = DECL_CONTEXT (decl1);
11665 context;
11666 context = DECL_CONTEXT (context))
11667 {
11668 if (TREE_CODE (context) == NAMESPACE_DECL
11669 && DECL_NAME (context) == NULL_TREE)
11670 break;
11671 }
11672
11673 if (context == NULL)
11674 warning (OPT_Wmissing_declarations,
11675 "no previous declaration for %q+D", decl1);
11676 }
11677
11678 decl1 = olddecl;
11679 }
947f430b 11680 }
8417823c 11681 else
ef5a592c 11682 {
a109dc3b 11683 /* We need to set the DECL_CONTEXT. */
ef5a592c 11684 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
11685 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
ef5a592c 11686 }
b248d3f7 11687 fntype = TREE_TYPE (decl1);
447bd85a 11688
11689 /* If #pragma weak applies, mark the decl appropriately now.
11690 The pragma only applies to global functions. Because
11691 determining whether or not the #pragma applies involves
11692 computing the mangled name for the declaration, we cannot
11693 apply the pragma until after we have merged this declaration
11694 with any previous declarations; if the original declaration
11695 has a linkage specification, that specification applies to
11696 the definition as well, and may affect the mangled name. */
11697 if (!DECL_CONTEXT (decl1))
11698 maybe_apply_pragma_weak (decl1);
b248d3f7 11699 }
e857e9c7 11700
ddb7a3b0 11701 /* Reset this in case the call to pushdecl changed it. */
e857e9c7 11702 current_function_decl = decl1;
ddb7a3b0 11703
11704 gcc_assert (DECL_INITIAL (decl1));
11705
11706 /* This function may already have been parsed, in which case just
11707 return; our caller will skip over the body without parsing. */
11708 if (DECL_INITIAL (decl1) != error_mark_node)
11709 return;
11710
11711 /* Initialize RTL machinery. We cannot do this until
11712 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
11713 even when processing a template; this is how we get
11714 CFUN set up, and our per-function variables initialized.
11715 FIXME factor out the non-RTL stuff. */
11716 bl = current_binding_level;
80f2ef47 11717 allocate_struct_function (decl1, processing_template_decl);
b75409ba 11718
11719 /* Initialize the language data structures. Whenever we start
11720 a new function, we destroy temporaries in the usual way. */
11721 cfun->language = GGC_CNEW (struct language_function);
11722 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
ddb7a3b0 11723 current_binding_level = bl;
11724
11725 /* Even though we're inside a function body, we still don't want to
11726 call expand_expr to calculate the size of a variable-sized array.
11727 We haven't necessarily assigned RTL to all variables yet, so it's
11728 not safe to try to expand expressions involving them. */
18d50ae6 11729 cfun->dont_save_pending_sizes_p = 1;
ddb7a3b0 11730
11731 /* Start the statement-tree, start the tree now. */
11732 DECL_SAVED_TREE (decl1) = push_stmt_list ();
b248d3f7 11733
c15addfa 11734 /* If we are (erroneously) defining a function that we have already
11735 defined before, wipe out what we knew before. */
1f3233d1 11736 if (!DECL_PENDING_INLINE_P (decl1))
11737 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
e0e489c4 11738
6528331d 11739 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
e0e489c4 11740 {
11741 /* We know that this was set up by `grokclassfn'. We do not
11742 wait until `store_parm_decls', since evil parse errors may
11743 never get us to that point. Here we keep the consistency
11744 between `current_class_type' and `current_class_ptr'. */
11745 tree t = DECL_ARGUMENTS (decl1);
980877d7 11746
b4df430b 11747 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
11748 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
980877d7 11749
11750 cp_function_chain->x_current_class_ref
ebd21de4 11751 = cp_build_indirect_ref (t, NULL, tf_warning_or_error);
e0e489c4 11752 cp_function_chain->x_current_class_ptr = t;
11753
16cb20eb 11754 /* Constructors and destructors need to know whether they're "in
11755 charge" of initializing virtual base classes. */
dcbeb3ef 11756 t = TREE_CHAIN (t);
a23287c6 11757 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
dcbeb3ef 11758 {
11759 current_in_charge_parm = t;
11760 t = TREE_CHAIN (t);
11761 }
11762 if (DECL_HAS_VTT_PARM_P (decl1))
11763 {
092b1d6f 11764 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
dcbeb3ef 11765 current_vtt_parm = t;
11766 }
e0e489c4 11767 }
11768
d9803664 11769 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
11770 /* Implicitly-defined methods (like the
11771 destructor for a class in which no destructor
11772 is explicitly declared) must not be defined
11773 until their definition is needed. So, we
11774 ignore interface specifications for
11775 compiler-generated functions. */
11776 && !DECL_ARTIFICIAL (decl1));
074ab442 11777
c25194fd 11778 if (DECL_INTERFACE_KNOWN (decl1))
bb09dca5 11779 {
9ba4048d 11780 tree ctx = decl_function_context (decl1);
f5246b56 11781
bb09dca5 11782 if (DECL_NOT_REALLY_EXTERN (decl1))
11783 DECL_EXTERNAL (decl1) = 0;
f5246b56 11784
d3981643 11785 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
f5246b56 11786 && TREE_PUBLIC (ctx))
11787 /* This is a function in a local class in an extern inline
11788 function. */
11789 comdat_linkage (decl1);
bb09dca5 11790 }
471086d6 11791 /* If this function belongs to an interface, it is public.
11792 If it belongs to someone else's interface, it is also external.
c576929b 11793 This only affects inlines and template instantiations. */
d9803664 11794 else if (!finfo->interface_unknown && honor_interface)
471086d6 11795 {
491e04ef 11796 if (DECL_DECLARED_INLINE_P (decl1)
d3981643 11797 || DECL_TEMPLATE_INSTANTIATION (decl1)
3cc0b4b9 11798 || processing_template_decl)
c576929b 11799 {
11800 DECL_EXTERNAL (decl1)
62bf98ad 11801 = (finfo->interface_only
491e04ef 11802 || (DECL_DECLARED_INLINE_P (decl1)
d3981643 11803 && ! flag_implement_inlines
f3758bba 11804 && !DECL_VINDEX (decl1)));
c576929b 11805
11806 /* For WIN32 we also want to put these in linkonce sections. */
11807 maybe_make_one_only (decl1);
11808 }
c25194fd 11809 else
f69ecb3b 11810 DECL_EXTERNAL (decl1) = 0;
c25194fd 11811 DECL_INTERFACE_KNOWN (decl1) = 1;
caa6fdce 11812 /* If this function is in an interface implemented in this file,
a17c2a3a 11813 make sure that the back end knows to emit this function
caa6fdce 11814 here. */
11815 if (!DECL_EXTERNAL (decl1))
11816 mark_needed (decl1);
471086d6 11817 }
62bf98ad 11818 else if (finfo->interface_unknown && finfo->interface_only
d9803664 11819 && honor_interface)
d557c996 11820 {
11821 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
62bf98ad 11822 interface, we will have both finfo->interface_unknown and
11823 finfo->interface_only set. In that case, we don't want to
11824 use the normal heuristics because someone will supply a
11825 #pragma implementation elsewhere, and deducing it here would
11826 produce a conflict. */
d557c996 11827 comdat_linkage (decl1);
11828 DECL_EXTERNAL (decl1) = 0;
11829 DECL_INTERFACE_KNOWN (decl1) = 1;
11830 DECL_DEFER_OUTPUT (decl1) = 1;
11831 }
471086d6 11832 else
ddb9bca7 11833 {
11834 /* This is a definition, not a reference.
db577900 11835 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
11836 if (!GNU_INLINE_P (decl1))
11837 DECL_EXTERNAL (decl1) = 0;
bb09dca5 11838
491e04ef 11839 if ((DECL_DECLARED_INLINE_P (decl1)
d3981643 11840 || DECL_TEMPLATE_INSTANTIATION (decl1))
e857e9c7 11841 && ! DECL_INTERFACE_KNOWN (decl1)
11842 /* Don't try to defer nested functions for now. */
9ba4048d 11843 && ! decl_function_context (decl1))
b248d3f7 11844 DECL_DEFER_OUTPUT (decl1) = 1;
11845 else
f69ecb3b 11846 DECL_INTERFACE_KNOWN (decl1) = 1;
c25194fd 11847 }
d0622bdf 11848
799435d8 11849 /* Determine the ELF visibility attribute for the function. We must not
11850 do this before calling "pushdecl", as we must allow "duplicate_decls"
11851 to merge any attributes appropriately. We also need to wait until
11852 linkage is set. */
11853 if (!DECL_CLONED_FUNCTION_P (decl1))
11854 determine_visibility (decl1);
11855
e880f232 11856 begin_scope (sk_function_parms, decl1);
471086d6 11857
e857e9c7 11858 ++function_depth;
11859
853b7640 11860 if (DECL_DESTRUCTOR_P (decl1)
11861 || (DECL_CONSTRUCTOR_P (decl1)
11862 && targetm.cxx.cdtor_returns_this ()))
31236dcd 11863 {
e60a6f7b 11864 cdtor_label = build_decl (input_location,
11865 LABEL_DECL, NULL_TREE, NULL_TREE);
853b7640 11866 DECL_CONTEXT (cdtor_label) = current_function_decl;
31236dcd 11867 }
471086d6 11868
65b7f83f 11869 start_fname_decls ();
491e04ef 11870
6528331d 11871 store_parm_decls (current_function_parms);
3046c0a3 11872}
11873
11874
11875/* Like start_preparsed_function, except that instead of a
11876 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
11877
11878 Returns 1 on success. If the DECLARATOR is not suitable for a function
11879 (it defines a datum instead), we return 0, which tells
11880 yyparse to report a parse error. */
11881
11882int
491e04ef 11883start_function (cp_decl_specifier_seq *declspecs,
4b9b2871 11884 const cp_declarator *declarator,
3046c0a3 11885 tree attrs)
11886{
11887 tree decl1;
11888
3046c0a3 11889 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
2ec31349 11890 if (decl1 == error_mark_node)
11891 return 0;
3046c0a3 11892 /* If the declarator is not suitable for a function definition,
11893 cause a syntax error. */
11894 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
2ec31349 11895 {
11896 error ("invalid function declaration");
11897 return 0;
11898 }
491e04ef 11899
3046c0a3 11900 if (DECL_MAIN_P (decl1))
b9dd3954 11901 /* main must return int. grokfndecl should have corrected it
11902 (and issued a diagnostic) if the user got it wrong. */
11903 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
11904 integer_type_node));
3046c0a3 11905
11906 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
6528331d 11907
471086d6 11908 return 1;
11909}
11910\f
d14e9620 11911/* Returns true iff an EH_SPEC_BLOCK should be created in the body of
11912 FN. */
11913
11914static bool
11915use_eh_spec_block (tree fn)
11916{
11917 return (flag_exceptions && flag_enforce_eh_specs
11918 && !processing_template_decl
11919 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
11920 /* We insert the EH_SPEC_BLOCK only in the original
11921 function; then, it is copied automatically to the
11922 clones. */
11923 && !DECL_CLONED_FUNCTION_P (fn)
11924 /* Implicitly-generated constructors and destructors have
11925 exception specifications. However, those specifications
11926 are the union of the possible exceptions specified by the
11927 constructors/destructors for bases and members, so no
11928 unallowed exception will ever reach this function. By
11929 not creating the EH_SPEC_BLOCK we save a little memory,
11930 and we avoid spurious warnings about unreachable
11931 code. */
11932 && !DECL_ARTIFICIAL (fn));
11933}
11934
471086d6 11935/* Store the parameter declarations into the current function declaration.
11936 This is called after parsing the parameter declarations, before
11937 digesting the body of the function.
11938
11939 Also install to binding contour return value identifier, if any. */
11940
6528331d 11941static void
1b72315d 11942store_parm_decls (tree current_function_parms)
471086d6 11943{
cd16867a 11944 tree fndecl = current_function_decl;
11945 tree parm;
471086d6 11946
471086d6 11947 /* This is a chain of any other decls that came in among the parm
11948 declarations. If a parm is declared with enum {foo, bar} x;
11949 then CONST_DECLs for foo and bar are put here. */
11950 tree nonparms = NULL_TREE;
11951
e0e489c4 11952 if (current_function_parms)
471086d6 11953 {
11954 /* This case is when the function was defined with an ANSI prototype.
11955 The parms already have decls, so we need not do anything here
11956 except record them as in effect
11957 and complain if any redundant old-style parm decls were written. */
11958
e0e489c4 11959 tree specparms = current_function_parms;
11960 tree next;
11961
6528331d 11962 /* Must clear this because it might contain TYPE_DECLs declared
e0e489c4 11963 at class level. */
836495aa 11964 current_binding_level->names = NULL;
471086d6 11965
6528331d 11966 /* If we're doing semantic analysis, then we'll call pushdecl
e0e489c4 11967 for each of these. We must do them in reverse order so that
11968 they end in the correct forward order. */
6528331d 11969 specparms = nreverse (specparms);
e857e9c7 11970
e0e489c4 11971 for (parm = specparms; parm; parm = next)
471086d6 11972 {
11973 next = TREE_CHAIN (parm);
11974 if (TREE_CODE (parm) == PARM_DECL)
11975 {
6528331d 11976 if (DECL_NAME (parm) == NULL_TREE
11977 || TREE_CODE (parm) != VOID_TYPE)
11978 pushdecl (parm);
11979 else
3ce479a6 11980 error ("parameter %qD declared void", parm);
471086d6 11981 }
11982 else
11983 {
11984 /* If we find an enum constant or a type tag,
11985 put it aside for the moment. */
11986 TREE_CHAIN (parm) = NULL_TREE;
11987 nonparms = chainon (nonparms, parm);
11988 }
11989 }
11990
6528331d 11991 /* Get the decls in their original chain order and record in the
11992 function. This is all and only the PARM_DECLs that were
11993 pushed into scope by the loop above. */
11994 DECL_ARGUMENTS (fndecl) = getdecls ();
471086d6 11995 }
11996 else
11997 DECL_ARGUMENTS (fndecl) = NULL_TREE;
11998
11999 /* Now store the final chain of decls for the arguments
12000 as the decl-chain of the current lexical scope.
12001 Put the enumerators in as well, at the front so that
12002 DECL_ARGUMENTS is not modified. */
836495aa 12003 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
f85d646a 12004
d14e9620 12005 if (use_eh_spec_block (current_function_decl))
12006 current_eh_spec_block = begin_eh_spec_block ();
471086d6 12007}
12008
471086d6 12009\f
7f075a5e 12010/* We have finished doing semantic analysis on DECL, but have not yet
12011 generated RTL for its body. Save away our current state, so that
12012 when we want to generate RTL later we know what to do. */
12013
12014static void
1b72315d 12015save_function_data (tree decl)
7f075a5e 12016{
1f3233d1 12017 struct language_function *f;
7f075a5e 12018
12019 /* Save the language-specific per-function data so that we can
12020 get it back when we really expand this function. */
b4df430b 12021 gcc_assert (!DECL_PENDING_INLINE_P (decl));
980877d7 12022
7f075a5e 12023 /* Make a copy. */
a33db04a 12024 f = GGC_NEW (struct language_function);
1f3233d1 12025 memcpy (f, cp_function_chain, sizeof (struct language_function));
7f075a5e 12026 DECL_SAVED_FUNCTION_DATA (decl) = f;
12027
12028 /* Clear out the bits we don't need. */
2363ef00 12029 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
7f075a5e 12030 f->bindings = NULL;
e6393a02 12031 f->x_local_names = NULL;
7f075a5e 12032}
12033
7e3e1bb9 12034
853b7640 12035/* Set the return value of the constructor (if present). */
51046b65 12036
12037static void
1b72315d 12038finish_constructor_body (void)
51046b65 12039{
853b7640 12040 tree val;
12041 tree exprstmt;
12042
93d2ae2c 12043 if (targetm.cxx.cdtor_returns_this ()
12044 && (! TYPE_FOR_JAVA (current_class_type)))
853b7640 12045 {
12046 /* Any return from a constructor will end up here. */
e60a6f7b 12047 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
853b7640 12048
12049 val = DECL_ARGUMENTS (current_function_decl);
831d52a2 12050 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12051 DECL_RESULT (current_function_decl), val);
853b7640 12052 /* Return the address of the object. */
e60a6f7b 12053 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
853b7640 12054 add_stmt (exprstmt);
12055 }
51046b65 12056}
12057
7e3e1bb9 12058/* Do all the processing for the beginning of a destructor; set up the
12059 vtable pointers and cleanups for bases and members. */
12060
12061static void
1b72315d 12062begin_destructor_body (void)
7e3e1bb9 12063{
7e3e1bb9 12064 tree compound_stmt;
12065
e1b0710d 12066 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
12067 issued an error message. We still want to try to process the
12068 body of the function, but initialize_vtbl_ptrs will crash if
12069 TYPE_BINFO is NULL. */
12070 if (COMPLETE_TYPE_P (current_class_type))
12071 {
12072 compound_stmt = begin_compound_stmt (0);
12073 /* Make all virtual function table pointers in non-virtual base
12074 classes point to CURRENT_CLASS_TYPE's virtual function
12075 tables. */
12076 initialize_vtbl_ptrs (current_class_ptr);
12077 finish_compound_stmt (compound_stmt);
074ab442 12078
e1b0710d 12079 /* And insert cleanups for our bases and members so that they
12080 will be properly destroyed if we throw. */
12081 push_base_cleanups ();
12082 }
7e3e1bb9 12083}
12084
52616263 12085/* At the end of every destructor we generate code to delete the object if
12086 necessary. Do that now. */
3da16ddc 12087
12088static void
1b72315d 12089finish_destructor_body (void)
3da16ddc 12090{
3da16ddc 12091 tree exprstmt;
12092
c47a7ada 12093 /* Any return from a destructor will end up here; that way all base
12094 and member cleanups will be run when the function returns. */
e60a6f7b 12095 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
c47a7ada 12096
b429d3ee 12097 /* In a virtual destructor, we must call delete. */
12098 if (DECL_VIRTUAL_P (current_function_decl))
12099 {
12100 tree if_stmt;
d4c4d95c 12101 tree virtual_size = cxx_sizeof (current_class_type);
980877d7 12102
b429d3ee 12103 /* [class.dtor]
980877d7 12104
52616263 12105 At the point of definition of a virtual destructor (including
12106 an implicit definition), non-placement operator delete shall
12107 be looked up in the scope of the destructor's class and if
12108 found shall be accessible and unambiguous. */
074ab442 12109 exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
393f878f 12110 virtual_size,
074ab442 12111 /*global_p=*/false,
12112 /*placement=*/NULL_TREE,
393f878f 12113 /*alloc_fn=*/NULL_TREE);
f04596da 12114
b429d3ee 12115 if_stmt = begin_if_stmt ();
831d52a2 12116 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
12117 current_in_charge_parm,
12118 integer_one_node),
b429d3ee 12119 if_stmt);
12120 finish_expr_stmt (exprstmt);
12121 finish_then_clause (if_stmt);
2363ef00 12122 finish_if_stmt (if_stmt);
b429d3ee 12123 }
853b7640 12124
12125 if (targetm.cxx.cdtor_returns_this ())
12126 {
12127 tree val;
12128
12129 val = DECL_ARGUMENTS (current_function_decl);
831d52a2 12130 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12131 DECL_RESULT (current_function_decl), val);
853b7640 12132 /* Return the address of the object. */
e60a6f7b 12133 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
853b7640 12134 add_stmt (exprstmt);
12135 }
52616263 12136}
3da16ddc 12137
52616263 12138/* Do the necessary processing for the beginning of a function body, which
12139 in this case includes member-initializers, but not the catch clauses of
12140 a function-try-block. Currently, this means opening a binding level
bc2b76e0 12141 for the member-initializers (in a ctor) and member cleanups (in a dtor). */
52616263 12142
12143tree
1b72315d 12144begin_function_body (void)
52616263 12145{
7e3e1bb9 12146 tree stmt;
12147
bc2b76e0 12148 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12149 return NULL_TREE;
12150
e0c6233d 12151 if (processing_template_decl)
12152 /* Do nothing now. */;
12153 else
12154 /* Always keep the BLOCK node associated with the outermost pair of
12155 curly braces of a function. These are needed for correct
12156 operation of dwarfout.c. */
e880f232 12157 keep_next_level (true);
e0c6233d 12158
2363ef00 12159 stmt = begin_compound_stmt (BCS_FN_BODY);
7e3e1bb9 12160
12161 if (processing_template_decl)
12162 /* Do nothing now. */;
7e3e1bb9 12163 else if (DECL_DESTRUCTOR_P (current_function_decl))
12164 begin_destructor_body ();
12165
52616263 12166 return stmt;
3da16ddc 12167}
12168
52616263 12169/* Do the processing for the end of a function body. Currently, this means
12170 closing out the cleanups for fully-constructed bases and members, and in
12171 the case of the destructor, deleting the object if desired. Again, this
12172 is only meaningful for [cd]tors, since they are the only functions where
12173 there is a significant distinction between the main body and any
12174 function catch clauses. Handling, say, main() return semantics here
12175 would be wrong, as flowing off the end of a function catch clause for
12176 main() would also need to return 0. */
12177
12178void
1b72315d 12179finish_function_body (tree compstmt)
52616263 12180{
bc2b76e0 12181 if (compstmt == NULL_TREE)
12182 return;
074ab442 12183
c47a7ada 12184 /* Close the block. */
68f8f8cc 12185 finish_compound_stmt (compstmt);
52616263 12186
12187 if (processing_template_decl)
12188 /* Do nothing now. */;
12189 else if (DECL_CONSTRUCTOR_P (current_function_decl))
12190 finish_constructor_body ();
12191 else if (DECL_DESTRUCTOR_P (current_function_decl))
12192 finish_destructor_body ();
491e04ef 12193}
52616263 12194
bc2b76e0 12195/* Given a function, returns the BLOCK corresponding to the outermost level
12196 of curly braces, skipping the artificial block created for constructor
12197 initializers. */
12198
fd6481cf 12199tree
bc2b76e0 12200outer_curly_brace_block (tree fndecl)
12201{
12202 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
12203 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12204 /* Skip the artificial function body block. */
12205 block = BLOCK_SUBBLOCKS (block);
12206 return block;
12207}
12208
471086d6 12209/* Finish up a function declaration and compile that function
12210 all the way to assembler language output. The free the storage
12211 for the function definition.
12212
980877d7 12213 FLAGS is a bitwise or of the following values:
53137e6a 12214 2 - INCLASS_INLINE
12215 We just finished processing the body of an in-class inline
12216 function definition. (This processing will have taken place
23f83a9a 12217 after the class definition is complete.) */
471086d6 12218
07d01fbf 12219tree
1b72315d 12220finish_function (int flags)
471086d6 12221{
cd16867a 12222 tree fndecl = current_function_decl;
471086d6 12223 tree fntype, ctype = NULL_TREE;
53137e6a 12224 int inclass_inline = (flags & 2) != 0;
23f83a9a 12225 int nested;
471086d6 12226
12227 /* When we get some parse errors, we can end up without a
12228 current_function_decl, so cope. */
12229 if (fndecl == NULL_TREE)
07d01fbf 12230 return error_mark_node;
471086d6 12231
038849b3 12232 gcc_assert (!defer_mark_used_calls);
12233 defer_mark_used_calls = true;
12234
9bacae7e 12235 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
12236 && DECL_VIRTUAL_P (fndecl)
12237 && !processing_template_decl)
12238 {
12239 tree fnclass = DECL_CONTEXT (fndecl);
12240 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
12241 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
12242 }
12243
23f83a9a 12244 nested = function_depth > 1;
471086d6 12245 fntype = TREE_TYPE (fndecl);
12246
3da16ddc 12247 /* TREE_READONLY (fndecl) = 1;
12248 This caused &foo to be of type ptr-to-const-function
12249 which then got a warning when stored in a ptr-to-function variable. */
471086d6 12250
b4df430b 12251 gcc_assert (building_stmt_tree ());
ddb7a3b0 12252 /* The current function is being defined, so its DECL_INITIAL should
12253 be set, and unless there's a multiple definition, it should be
12254 error_mark_node. */
12255 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
491e04ef 12256
e55cba4c 12257 /* For a cloned function, we've already got all the code we need;
12258 there's no need to add any extra bits. */
6528331d 12259 if (!DECL_CLONED_FUNCTION_P (fndecl))
471086d6 12260 {
52616263 12261 if (DECL_MAIN_P (current_function_decl))
51046b65 12262 {
ba821eb1 12263 tree stmt;
12264
12265 /* Make it so that `main' always returns 0 by default (or
12266 1 for VMS). */
d442be7a 12267#if VMS_TARGET
ba821eb1 12268 stmt = finish_return_stmt (integer_one_node);
51046b65 12269#else
ba821eb1 12270 stmt = finish_return_stmt (integer_zero_node);
51046b65 12271#endif
ba821eb1 12272 /* Hack. We don't want the middle-end to warn that this
12273 return is unreachable, so put the statement on the
12274 special line 0. */
931b0a0f 12275 {
12276 location_t linezero = linemap_line_start (line_table, 0, 1);
12277 SET_EXPR_LOCATION (stmt, linezero);
12278 }
51046b65 12279 }
23f83a9a 12280
d14e9620 12281 if (use_eh_spec_block (current_function_decl))
df4b504c 12282 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
12283 (TREE_TYPE (current_function_decl)),
12284 current_eh_spec_block);
e857e9c7 12285 }
980877d7 12286
019cf886 12287 /* If we're saving up tree structure, tie off the function now. */
2363ef00 12288 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
12289
12290 finish_fname_decls ();
f96b25bb 12291
95cedffb 12292 /* If this function can't throw any exceptions, remember that. */
12293 if (!processing_template_decl
12294 && !cp_function_chain->can_throw
cf7c4516 12295 && !flag_non_call_exceptions
1a614365 12296 && !DECL_REPLACEABLE_P (fndecl))
95cedffb 12297 TREE_NOTHROW (fndecl) = 1;
12298
471086d6 12299 /* This must come after expand_function_end because cleanups might
12300 have declarations (from inline functions) that need to go into
12301 this function's blocks. */
491e04ef 12302
6cd31fa5 12303 /* If the current binding level isn't the outermost binding level
12304 for this function, either there is a bug, or we have experienced
12305 syntax errors and the statement tree is malformed. */
37b9a732 12306 if (current_binding_level->kind != sk_function_parms)
6cd31fa5 12307 {
12308 /* Make sure we have already experienced errors. */
092b1d6f 12309 gcc_assert (errorcount);
6cd31fa5 12310
12311 /* Throw away the broken statement tree and extra binding
653e5405 12312 levels. */
632f8185 12313 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
6cd31fa5 12314
37b9a732 12315 while (current_binding_level->kind != sk_function_parms)
6cd31fa5 12316 {
37b9a732 12317 if (current_binding_level->kind == sk_class)
6cd31fa5 12318 pop_nested_class ();
12319 else
12320 poplevel (0, 0, 0);
12321 }
12322 }
6528331d 12323 poplevel (1, 0, 1);
471086d6 12324
90e3d9ba 12325 /* Statements should always be full-expressions at the outermost set
12326 of curly braces for a function. */
b4df430b 12327 gcc_assert (stmts_are_full_exprs_p ());
90e3d9ba 12328
4ee9c684 12329 /* Set up the named return value optimization, if we can. Candidate
5b339181 12330 variables are selected in check_return_expr. */
4cfd9030 12331 if (current_function_return_value)
12332 {
12333 tree r = current_function_return_value;
7a8682e3 12334 tree outer;
12335
4cfd9030 12336 if (r != error_mark_node
7a8682e3 12337 /* This is only worth doing for fns that return in memory--and
12338 simpler, since we don't have to worry about promoted modes. */
45550790 12339 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
7a8682e3 12340 /* Only allow this for variables declared in the outer scope of
12341 the function so we know that their lifetime always ends with a
12342 return; see g++.dg/opt/nrv6.C. We could be more flexible if
12343 we were to do this optimization in tree-ssa. */
bc2b76e0 12344 && (outer = outer_curly_brace_block (fndecl))
2363ef00 12345 && chain_member (r, BLOCK_VARS (outer)))
4ee9c684 12346 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
12347
12348 current_function_return_value = NULL_TREE;
4cfd9030 12349 }
12350
d119628b 12351 /* Remember that we were in class scope. */
c25194fd 12352 if (current_class_name)
d119628b 12353 ctype = current_class_type;
c25194fd 12354
c98119cd 12355 /* Must mark the RESULT_DECL as being in this function. */
12356 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12357
12358 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12359 to the FUNCTION_DECL node itself. */
12360 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12361
7f075a5e 12362 /* Save away current state, if appropriate. */
6528331d 12363 if (!processing_template_decl)
7f075a5e 12364 save_function_data (fndecl);
12365
69f4b398 12366 /* Complain if there's just no return statement. */
4edb3605 12367 if (warn_return_type
69f4b398 12368 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
7fac55ae 12369 && !dependent_type_p (TREE_TYPE (fntype))
8fb42a55 12370 && !current_function_returns_value && !current_function_returns_null
69f4b398 12371 /* Don't complain if we abort or throw. */
12372 && !current_function_returns_abnormally
86752479 12373 && !DECL_NAME (DECL_RESULT (fndecl))
3b116dc2 12374 && !TREE_NO_WARNING (fndecl)
853b7640 12375 /* Structor return values (if any) are set by the compiler. */
12376 && !DECL_CONSTRUCTOR_P (fndecl)
12377 && !DECL_DESTRUCTOR_P (fndecl))
3b116dc2 12378 {
12379 warning (OPT_Wreturn_type,
12380 "no return statement in function returning non-void");
12381 TREE_NO_WARNING (fndecl) = 1;
12382 }
90e3d9ba 12383
4ee9c684 12384 /* Store the end of the function, so that we get good line number
12385 info for the epilogue. */
12386 cfun->function_end_locus = input_location;
12387
12388 /* Genericize before inlining. */
12389 if (!processing_template_decl)
12390 {
667fed2f 12391 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
9227b6fc 12392 invoke_plugin_callbacks (PLUGIN_CXX_CP_PRE_GENERICIZE, fndecl);
dddab69e 12393 cp_genericize (fndecl);
667fed2f 12394 /* Clear out the bits we don't need. */
12395 f->x_current_class_ptr = NULL;
12396 f->x_current_class_ref = NULL;
12397 f->x_eh_spec_block = NULL;
12398 f->x_in_charge_parm = NULL;
12399 f->x_vtt_parm = NULL;
12400 f->x_return_value = NULL;
12401 f->bindings = NULL;
7db5a284 12402 f->extern_decl_map = NULL;
4ee9c684 12403
12404 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
75a70cf9 12405 c_warn_unused_result (gimple_body (fndecl));
4ee9c684 12406 }
667fed2f 12407 /* Clear out the bits we don't need. */
12408 local_names = NULL;
4ee9c684 12409
12410 /* We're leaving the context of this function, so zap cfun. It's still in
12411 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
87d4aa85 12412 set_cfun (NULL);
c437b0dc 12413 current_function_decl = NULL;
d119628b 12414
92d27c95 12415 /* If this is an in-class inline definition, we may have to pop the
d119628b 12416 bindings for the template parameters that we added in
12417 maybe_begin_member_template_processing when start_function was
12418 called. */
12419 if (inclass_inline)
12420 maybe_end_member_template_processing ();
12421
12422 /* Leave the scope of the class. */
12423 if (ctype)
12424 pop_nested_class ();
e857e9c7 12425
12426 --function_depth;
471086d6 12427
07d01fbf 12428 /* Clean up. */
bea7d742 12429 if (! nested)
d7c47c0e 12430 /* Let the error reporting routines know that we're outside a
12431 function. For a nested function, this value is used in
c80c4f22 12432 cxx_pop_function_context and then reset via pop_function_context. */
d7c47c0e 12433 current_function_decl = NULL_TREE;
07d01fbf 12434
038849b3 12435 defer_mark_used_calls = false;
12436 if (deferred_mark_used_calls)
12437 {
12438 unsigned int i;
12439 tree decl;
12440
12441 for (i = 0; VEC_iterate (tree, deferred_mark_used_calls, i, decl); i++)
12442 mark_used (decl);
12443 VEC_free (tree, gc, deferred_mark_used_calls);
12444 }
12445
07d01fbf 12446 return fndecl;
471086d6 12447}
12448\f
12449/* Create the FUNCTION_DECL for a function definition.
471086d6 12450 DECLSPECS and DECLARATOR are the parts of the declaration;
12451 they describe the return type and the name of the function,
12452 but twisted together in a fashion that parallels the syntax of C.
12453
12454 This function creates a binding context for the function body
12455 as well as setting up the FUNCTION_DECL in current_function_decl.
12456
12457 Returns a FUNCTION_DECL on success.
12458
12459 If the DECLARATOR is not suitable for a function (it defines a datum
12460 instead), we return 0, which tells yyparse to report a parse error.
12461
12462 May return void_type_node indicating that this method is actually
12463 a friend. See grokfield for more details.
12464
12465 Came here with a `.pushlevel' .
12466
12467 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
12468 CHANGES TO CODE IN `grokfield'. */
96624a9e 12469
471086d6 12470tree
491e04ef 12471start_method (cp_decl_specifier_seq *declspecs,
653e5405 12472 const cp_declarator *declarator, tree attrlist)
471086d6 12473{
f9670f72 12474 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
e3c541f0 12475 &attrlist);
471086d6 12476
0a3b29ad 12477 if (fndecl == error_mark_node)
12478 return error_mark_node;
12479
12480 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
12481 {
12482 error ("invalid member function declaration");
12483 return error_mark_node;
12484 }
471086d6 12485
34966237 12486 if (attrlist)
12487 cplus_decl_attributes (&fndecl, attrlist, 0);
12488
471086d6 12489 /* Pass friends other than inline friend functions back. */
f468434d 12490 if (fndecl == void_type_node)
471086d6 12491 return fndecl;
12492
471086d6 12493 if (DECL_IN_AGGR_P (fndecl))
12494 {
28bbd27a 12495 if (DECL_CONTEXT (fndecl)
e4364343 12496 && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
3ce479a6 12497 error ("%qD is already defined in class %qT", fndecl,
28bbd27a 12498 DECL_CONTEXT (fndecl));
f3d3cc67 12499 return error_mark_node;
471086d6 12500 }
12501
c24cced6 12502 check_template_shadow (fndecl);
12503
d3981643 12504 DECL_DECLARED_INLINE_P (fndecl) = 1;
73b5e722 12505 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
471086d6 12506
34197853 12507 /* We process method specializations in finish_struct_1. */
12508 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
b7d1e8ea 12509 {
12510 fndecl = push_template_decl (fndecl);
12511 if (fndecl == error_mark_node)
12512 return fndecl;
12513 }
ddb9bca7 12514
471086d6 12515 if (! DECL_FRIEND_P (fndecl))
12516 {
471086d6 12517 if (TREE_CHAIN (fndecl))
12518 {
12519 fndecl = copy_node (fndecl);
12520 TREE_CHAIN (fndecl) = NULL_TREE;
12521 }
471086d6 12522 }
12523
b9c74b4d 12524 finish_decl (fndecl, NULL_TREE, NULL_TREE, NULL_TREE);
471086d6 12525
331bc0ad 12526 /* Make a place for the parms. */
e880f232 12527 begin_scope (sk_function_parms, fndecl);
980877d7 12528
471086d6 12529 DECL_IN_AGGR_P (fndecl) = 1;
12530 return fndecl;
12531}
12532
12533/* Go through the motions of finishing a function definition.
12534 We don't compile this method until after the whole class has
12535 been processed.
12536
12537 FINISH_METHOD must return something that looks as though it
12538 came from GROKFIELD (since we are defining a method, after all).
12539
12540 This is called after parsing the body of the function definition.
12541 STMTS is the chain of statements that makes up the function body.
12542
12543 DECL is the ..._DECL that `start_method' provided. */
12544
12545tree
1b72315d 12546finish_method (tree decl)
471086d6 12547{
cd16867a 12548 tree fndecl = decl;
471086d6 12549 tree old_initial;
471086d6 12550
cd16867a 12551 tree link;
471086d6 12552
f468434d 12553 if (decl == void_type_node)
471086d6 12554 return decl;
12555
12556 old_initial = DECL_INITIAL (fndecl);
12557
12558 /* Undo the level for the parms (from start_method).
12559 This is like poplevel, but it causes nothing to be
12560 saved. Saving information here confuses symbol-table
12561 output routines. Besides, this information will
12562 be correctly output when this method is actually
12563 compiled. */
12564
12565 /* Clear out the meanings of the local variables of this level;
12566 also record in each decl which block it belongs to. */
12567
12568 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
12569 {
12570 if (DECL_NAME (link) != NULL_TREE)
2b77484d 12571 pop_binding (DECL_NAME (link), link);
b4df430b 12572 gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
471086d6 12573 DECL_CONTEXT (link) = NULL_TREE;
12574 }
12575
471086d6 12576 poplevel (0, 0, 0);
12577
12578 DECL_INITIAL (fndecl) = old_initial;
12579
12580 /* We used to check if the context of FNDECL was different from
12581 current_class_type as another way to get inside here. This didn't work
12582 for String.cc in libg++. */
12583 if (DECL_FRIEND_P (fndecl))
12584 {
046bfc77 12585 VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
03106e7d 12586 fndecl);
471086d6 12587 decl = void_type_node;
12588 }
12589
12590 return decl;
12591}
12592\f
242fc35c 12593
12594/* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
12595 we can lay it out later, when and if its type becomes complete. */
471086d6 12596
12597void
1b72315d 12598maybe_register_incomplete_var (tree var)
471086d6 12599{
b4df430b 12600 gcc_assert (TREE_CODE (var) == VAR_DECL);
471086d6 12601
242fc35c 12602 /* Keep track of variables with incomplete types. */
491e04ef 12603 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
242fc35c 12604 && DECL_EXTERNAL (var))
fd8d6049 12605 {
242fc35c 12606 tree inner_type = TREE_TYPE (var);
491e04ef 12607
242fc35c 12608 while (TREE_CODE (inner_type) == ARRAY_TYPE)
12609 inner_type = TREE_TYPE (inner_type);
12610 inner_type = TYPE_MAIN_VARIANT (inner_type);
491e04ef 12611
242fc35c 12612 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
12613 /* RTTI TD entries are created while defining the type_info. */
12614 || (TYPE_LANG_SPECIFIC (inner_type)
12615 && TYPE_BEING_DEFINED (inner_type)))
12616 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
fd8d6049 12617 }
242fc35c 12618}
fd8d6049 12619
242fc35c 12620/* Called when a class type (given by TYPE) is defined. If there are
08cc44e7 12621 any existing VAR_DECLs whose type has been completed by this
242fc35c 12622 declaration, update them now. */
fd8d6049 12623
242fc35c 12624void
1b72315d 12625complete_vars (tree type)
242fc35c 12626{
12627 tree *list = &incomplete_vars;
12628
b4df430b 12629 gcc_assert (CLASS_TYPE_P (type));
491e04ef 12630 while (*list)
242fc35c 12631 {
12632 if (same_type_p (type, TREE_PURPOSE (*list)))
fd8d6049 12633 {
242fc35c 12634 tree var = TREE_VALUE (*list);
f06b15bf 12635 tree type = TREE_TYPE (var);
b3609646 12636 /* Complete the type of the variable. The VAR_DECL itself
12637 will be laid out in expand_expr. */
f06b15bf 12638 complete_type (type);
12639 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
242fc35c 12640 /* Remove this entry from the list. */
12641 *list = TREE_CHAIN (*list);
ce28ee2e 12642 }
12643 else
242fc35c 12644 list = &TREE_CHAIN (*list);
ce28ee2e 12645 }
d97a7640 12646
12647 /* Check for pending declarations which may have abstract type. */
12648 complete_type_check_abstract (type);
471086d6 12649}
12650
69ecda18 12651/* If DECL is of a type which needs a cleanup, build and return an
12652 expression to perform that cleanup here. Return NULL_TREE if no
12653 cleanup need be done. */
96624a9e 12654
675996d9 12655tree
1b72315d 12656cxx_maybe_build_cleanup (tree decl)
471086d6 12657{
69ecda18 12658 tree type;
12659 tree attr;
12660 tree cleanup;
12661
12662 /* Assume no cleanup is required. */
12663 cleanup = NULL_TREE;
675996d9 12664
69ecda18 12665 if (error_operand_p (decl))
12666 return cleanup;
12667
12668 /* Handle "__attribute__((cleanup))". We run the cleanup function
12669 before the destructor since the destructor is what actually
12670 terminates the lifetime of the object. */
12671 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
12672 if (attr)
12673 {
12674 tree id;
12675 tree fn;
12676 tree arg;
12677
12678 /* Get the name specified by the user for the cleanup function. */
12679 id = TREE_VALUE (TREE_VALUE (attr));
12680 /* Look up the name to find the cleanup function to call. It is
12681 important to use lookup_name here because that is what is
12682 used in c-common.c:handle_cleanup_attribute when performing
12683 initial checks on the attribute. Note that those checks
12684 include ensuring that the function found is not an overloaded
12685 function, or an object with an overloaded call operator,
08cc44e7 12686 etc.; we can rely on the fact that the function found is an
69ecda18 12687 ordinary FUNCTION_DECL. */
12688 fn = lookup_name (id);
12689 arg = build_address (decl);
12690 mark_used (decl);
ebd21de4 12691 cleanup = cp_build_function_call (fn, build_tree_list (NULL_TREE,
12692 arg),
12693 tf_warning_or_error);
69ecda18 12694 }
12695 /* Handle ordinary C++ destructors. */
12696 type = TREE_TYPE (decl);
12697 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
471086d6 12698 {
5af5654a 12699 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
1f0b839e 12700 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
12701 && CLASSTYPE_VBASECLASSES (type));
69ecda18 12702 tree addr;
12703 tree call;
471086d6 12704
471086d6 12705 if (TREE_CODE (type) == ARRAY_TYPE)
69ecda18 12706 addr = decl;
471086d6 12707 else
f00ae06e 12708 addr = build_address (decl);
471086d6 12709
12710 /* Optimize for space over speed here. */
1f0b839e 12711 if (!has_vbases || flag_expensive_optimizations)
471086d6 12712 flags |= LOOKUP_NONVIRTUAL;
12713
69ecda18 12714 call = build_delete (TREE_TYPE (addr), addr,
675996d9 12715 sfk_complete_destructor, flags, 0);
69ecda18 12716 if (cleanup)
e60a6f7b 12717 cleanup = build_compound_expr (input_location, cleanup, call);
69ecda18 12718 else
12719 cleanup = call;
471086d6 12720 }
69ecda18 12721
12722 return cleanup;
471086d6 12723}
12724\f
019cf886 12725/* When a stmt has been parsed, this function is called. */
471086d6 12726
12727void
1b72315d 12728finish_stmt (void)
471086d6 12729{
471086d6 12730}
12731
11fa0266 12732/* DECL was originally constructed as a non-static member function,
12733 but turned out to be static. Update it accordingly. */
94f3b32d 12734
2d45f35b 12735void
1b72315d 12736revert_static_member_fn (tree decl)
471086d6 12737{
94f3b32d 12738 tree tmp;
11fa0266 12739 tree function = TREE_TYPE (decl);
12740 tree args = TYPE_ARG_TYPES (function);
471086d6 12741
3119c950 12742 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
3e04bd45 12743 != TYPE_UNQUALIFIED)
44ed1032 12744 error ("static member function %q#D declared with type qualifiers", decl);
ce28ee2e 12745
94f3b32d 12746 args = TREE_CHAIN (args);
12747 tmp = build_function_type (TREE_TYPE (function), args);
3119c950 12748 tmp = build_qualified_type (tmp, cp_type_quals (function));
ce28ee2e 12749 tmp = build_exception_variant (tmp,
471086d6 12750 TYPE_RAISES_EXCEPTIONS (function));
11fa0266 12751 TREE_TYPE (decl) = tmp;
12752 if (DECL_ARGUMENTS (decl))
12753 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
12754 DECL_STATIC_FUNCTION_P (decl) = 1;
471086d6 12755}
d81e00a4 12756
1f3233d1 12757/* Return which tree structure is used by T, or TS_CP_GENERIC if T is
12758 one of the language-independent trees. */
1e463950 12759
1f3233d1 12760enum cp_tree_node_structure_enum
1b72315d 12761cp_tree_node_structure (union lang_tree_node * t)
1e463950 12762{
1f3233d1 12763 switch (TREE_CODE (&t->generic))
1e463950 12764 {
0a3b29ad 12765 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
1f3233d1 12766 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
1f3233d1 12767 case OVERLOAD: return TS_CP_OVERLOAD;
12768 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
12769 case PTRMEM_CST: return TS_CP_PTRMEM;
653e5405 12770 case BASELINK: return TS_CP_BASELINK;
dff2f665 12771 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
d95d815d 12772 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
481451eb 12773 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
1f3233d1 12774 default: return TS_CP_GENERIC;
1e463950 12775 }
12776}
6bf5ed8d 12777
174fcc61 12778/* Build the void_list_node (void_type_node having been created). */
12779tree
1b72315d 12780build_void_list_node (void)
174fcc61 12781{
12782 tree t = build_tree_list (NULL_TREE, void_type_node);
174fcc61 12783 return t;
12784}
12785
4ee9c684 12786bool
1b72315d 12787cp_missing_noreturn_ok_p (tree decl)
20c01ba9 12788{
12789 /* A missing noreturn is ok for the `main' function. */
7e64c604 12790 return DECL_MAIN_P (decl);
20c01ba9 12791}
1f3233d1 12792
537cd941 12793/* Return the COMDAT group into which DECL should be placed. */
12794
12795const char *
12796cxx_comdat_group (tree decl)
12797{
12798 tree name;
12799
12800 /* Virtual tables, construction virtual tables, and virtual table
12801 tables all go in a single COMDAT group, named after the primary
12802 virtual table. */
12803 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
12804 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
12805 /* For all other DECLs, the COMDAT group is the mangled name of the
12806 declaration itself. */
12807 else
35117c83 12808 {
12809 while (DECL_THUNK_P (decl))
12810 {
12811 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
12812 into the same section as the target function. In that case
12813 we must return target's name. */
12814 tree target = THUNK_TARGET (decl);
12815 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
12816 && DECL_SECTION_NAME (target) != NULL
12817 && DECL_ONE_ONLY (target))
12818 decl = target;
12819 else
12820 break;
12821 }
12822 name = DECL_ASSEMBLER_NAME (decl);
12823 }
537cd941 12824
12825 return IDENTIFIER_POINTER (name);
12826}
12827
1f3233d1 12828#include "gt-cp-decl.h"