]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/decl.c
Daily bump.
[gcc.git] / gcc / cp / decl.c
CommitLineData
3fd5abcf 1/* Process declarations and variables for C++ compiler.
d363e7bf 2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
ab53bae2 3 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
e5e809f4 4 Contributed by Michael Tiemann (tiemann@cygnus.com)
8d08fdba 5
1c313945 6This file is part of GCC.
8d08fdba 7
1c313945 8GCC is free software; you can redistribute it and/or modify
8d08fdba 9it under the terms of the GNU General Public License as published by
e77f031d 10the Free Software Foundation; either version 3, or (at your option)
8d08fdba
MS
11any later version.
12
1c313945 13GCC is distributed in the hope that it will be useful,
8d08fdba
MS
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
e77f031d
NC
19along with GCC; see the file COPYING3. If not see
20<http://www.gnu.org/licenses/>. */
8d08fdba
MS
21
22
1c313945 23/* Process declarations and symbol lookup for C++ front end.
8d08fdba
MS
24 Also constructs types; the standard scalar types at initialization,
25 and structure, union, array and enum types when they are declared. */
26
27/* ??? not all decl nodes are given the most useful possible
28 line numbers. For example, the CONST_DECLs for enum values. */
29
8d08fdba 30#include "config.h"
8d052bc7 31#include "system.h"
4977bab6
ZW
32#include "coretypes.h"
33#include "tm.h"
8d08fdba
MS
34#include "tree.h"
35#include "rtl.h"
3bdf5ad1 36#include "expr.h"
8d08fdba
MS
37#include "flags.h"
38#include "cp-tree.h"
25af8512 39#include "tree-inline.h"
8d08fdba 40#include "decl.h"
49c249e1
JM
41#include "output.h"
42#include "except.h"
54f92bfb 43#include "toplev.h"
e2500fed 44#include "hashtab.h"
0e9295cf 45#include "tm_p.h"
672a6f42 46#include "target.h"
26f943fd 47#include "c-common.h"
ecb0eece 48#include "c-pragma.h"
7437519c 49#include "diagnostic.h"
e7c41c99 50#include "intl.h"
e2500fed 51#include "debug.h"
22ffcc6f 52#include "timevar.h"
6de9cd9a 53#include "tree-flow.h"
0d83bf5a 54#include "pointer-set.h"
8d08fdba 55
62d1db17 56static tree grokparms (cp_parameter_declarator *, tree *);
11f6b451
NN
57static const char *redeclaration_error_message (tree, tree);
58
11f6b451 59static int decl_jump_unsafe (tree);
11f6b451
NN
60static void require_complete_types_for_parms (tree);
61static int ambi_op_p (enum tree_code);
62static int unary_op_p (enum tree_code);
11f6b451 63static void push_local_name (tree);
7e99327d 64static tree grok_reference_init (tree, tree, tree, tree *);
caf93cb0 65static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
1ff3c076 66 int, int, tree);
11f6b451 67static void record_unknown_type (tree, const char *);
c79efc4d 68static tree builtin_function_1 (tree, tree);
11f6b451
NN
69static tree build_library_fn_1 (tree, enum tree_code, tree);
70static int member_function_or_else (tree, tree, enum overload_flags);
71static void bad_specifiers (tree, const char *, int, int, int, int,
72 int);
11f6b451
NN
73static void check_for_uninitialized_const_var (tree);
74static hashval_t typename_hash (const void *);
75static int typename_compare (const void *, const void *);
11f6b451 76static tree local_variable_p_walkfn (tree *, int *, void *);
11f6b451 77static tree record_builtin_java_type (const char *, int);
461c6fce 78static const char *tag_name (enum tag_types);
29ef83de 79static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
11f6b451 80static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
11f6b451
NN
81static void maybe_deduce_size_from_array_init (tree, tree);
82static void layout_var_decl (tree);
83static void maybe_commonize_var (tree);
7e99327d 84static tree check_initializer (tree, tree, int, tree *);
11f6b451
NN
85static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
86static void save_function_data (tree);
87static void check_function_type (tree, tree);
11f6b451
NN
88static void finish_constructor_body (void);
89static void begin_destructor_body (void);
90static void finish_destructor_body (void);
91static tree create_array_type_for_decl (tree, tree, tree);
92static tree get_atexit_node (void);
93static tree get_dso_handle_node (void);
94static tree start_cleanup_fn (void);
95static void end_cleanup_fn (void);
96static tree cp_make_fname_decl (tree, int);
97static void initialize_predefined_identifiers (void);
caf93cb0 98static tree check_special_function_return_type
11f6b451
NN
99 (special_function_kind, tree, tree);
100static tree push_cp_library_fn (enum tree_code, tree);
101static tree build_cp_library_fn (tree, enum tree_code, tree);
102static void store_parm_decls (tree);
8e3df2de
MM
103static void initialize_local_var (tree, tree);
104static void expand_static_init (tree, tree);
105static tree next_initializable_field (tree);
8d08fdba 106
7f4edbcb 107/* The following symbols are subsumed in the cp_global_trees array, and
68642fb6 108 listed here individually for documentation purposes.
8d08fdba 109
7f4edbcb
BS
110 C++ extensions
111 tree wchar_decl_node;
37c46b43 112
7f4edbcb
BS
113 tree vtable_entry_type;
114 tree delta_type_node;
7f4edbcb 115 tree __t_desc_type_node;
8d08fdba 116
9e62871e 117 tree class_type_node;
7f4edbcb 118 tree unknown_type_node;
8d08fdba 119
7f4edbcb 120 Array type `vtable_entry_type[]'
8d08fdba 121
7f4edbcb
BS
122 tree vtbl_type_node;
123 tree vtbl_ptr_type_node;
8d08fdba 124
2854d3c6 125 Namespaces,
8d08fdba 126
7f4edbcb 127 tree std_node;
2854d3c6 128 tree abi_node;
8d08fdba 129
7f4edbcb
BS
130 A FUNCTION_DECL which can call `abort'. Not necessarily the
131 one that the user will declare, but sufficient to be called
132 by routines that want to abort the program.
8d08fdba 133
7f4edbcb 134 tree abort_fndecl;
8d08fdba 135
7f4edbcb 136 The FUNCTION_DECL for the default `::operator delete'.
2986ae00 137
7f4edbcb 138 tree global_delete_fndecl;
8d08fdba 139
7f4edbcb 140 Used by RTTI
669ec2b4 141 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
3db45ab5 142 tree tinfo_var_id; */
8d08fdba 143
7f4edbcb 144tree cp_global_trees[CPTI_MAX];
8d08fdba 145
2c73f9f5 146/* Indicates that there is a type value in some namespace, although
7f4edbcb 147 that is not necessarily in scope at the moment. */
2c73f9f5 148
00e8de68 149tree global_type_node;
2c73f9f5 150
82a2669e 151/* The node that holds the "name" of the global scope. */
00e8de68 152tree global_scope_name;
82a2669e 153
8e4ce833
JJ
154#define local_names cp_function_chain->x_local_names
155
8d08fdba
MS
156/* A list of objects which have constructors or destructors
157 which reside in the global scope. The decl is stored in
158 the TREE_VALUE slot and the initializer is stored
159 in the TREE_PURPOSE slot. */
160tree static_aggregates;
161
8d08fdba
MS
162/* -- end of C++ */
163
81b3411c 164/* A node for the integer constants 2, and 3. */
d11ad92e 165
81b3411c 166tree integer_two_node, integer_three_node;
8d08fdba 167
1799e5d5
RH
168/* Used only for jumps to as-yet undefined labels, since jumps to
169 defined labels can have their validity checked immediately. */
170
171struct named_label_use_entry GTY(())
172{
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
6625cdb5
JM
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
1799e5d5 194struct named_label_entry GTY(())
6625cdb5 195{
1799e5d5
RH
196 /* The decl itself. */
197 tree label_decl;
198
199 /* The binding level to which the label is *currently* attached.
200 This is initially set to the binding level in which the label
201 is defined, but is modified as scopes are closed. */
e2500fed 202 struct cp_binding_level *binding_level;
3db45ab5 203 /* The head of the names list that was current when the label was
1799e5d5
RH
204 defined, or the inner scope popped. These are the decls that will
205 be skipped when jumping to the label. */
6625cdb5 206 tree names_in_scope;
1799e5d5
RH
207 /* A tree list of all decls from all binding levels that would be
208 crossed by a backward branch to the label. */
6625cdb5 209 tree bad_decls;
1799e5d5
RH
210
211 /* A list of uses of the label, before the label is defined. */
212 struct named_label_use_entry *uses;
213
214 /* The following bits are set after the label is defined, and are
215 updated as scopes are popped. They indicate that a backward jump
ddd0b831 216 to the label will illegally enter a scope of the given flavor. */
1799e5d5
RH
217 bool in_try_scope;
218 bool in_catch_scope;
219 bool in_omp_scope;
6625cdb5 220};
8d08fdba 221
4519c0a8 222#define named_labels cp_function_chain->x_named_labels
8d08fdba 223\f
b2244c65
MM
224/* The number of function bodies which we are currently processing.
225 (Zero if we are at namespace scope, one inside the body of a
226 function, two inside the body of a function in a local class, etc.) */
227int function_depth;
e23bd218
IR
228
229/* States indicating how grokdeclarator() should handle declspecs marked
230 with __attribute__((deprecated)). An object declared as
231 __attribute__((deprecated)) suppresses warnings of uses of other
232 deprecated items. */
caf93cb0 233
e23bd218
IR
234enum deprecated_states {
235 DEPRECATED_NORMAL,
236 DEPRECATED_SUPPRESS
237};
238
239static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
240
8d08fdba 241\f
0154eaa8
MM
242/* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
243 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
244 time the VAR_DECL was declared, the type was incomplete. */
245
e2500fed 246static GTY(()) tree incomplete_vars;
8d08fdba 247\f
74b846e0
MM
248/* Returns the kind of template specialization we are currently
249 processing, given that it's declaration contained N_CLASS_SCOPES
250 explicit scope qualifications. */
251
252tmpl_spec_kind
11f6b451 253current_tmpl_spec_kind (int n_class_scopes)
74b846e0
MM
254{
255 int n_template_parm_scopes = 0;
256 int seen_specialization_p = 0;
257 int innermost_specialization_p = 0;
e2500fed 258 struct cp_binding_level *b;
74b846e0
MM
259
260 /* Scan through the template parameter scopes. */
caf93cb0
EC
261 for (b = current_binding_level;
262 b->kind == sk_template_parms;
a7e8c268 263 b = b->level_chain)
74b846e0
MM
264 {
265 /* If we see a specialization scope inside a parameter scope,
266 then something is wrong. That corresponds to a declaration
267 like:
268
269 template <class T> template <> ...
270
0e339752 271 which is always invalid since [temp.expl.spec] forbids the
74b846e0
MM
272 specialization of a class member template if the enclosing
273 class templates are not explicitly specialized as well. */
a7e8c268 274 if (b->explicit_spec_p)
74b846e0
MM
275 {
276 if (n_template_parm_scopes == 0)
277 innermost_specialization_p = 1;
278 else
279 seen_specialization_p = 1;
280 }
281 else if (seen_specialization_p == 1)
282 return tsk_invalid_member_spec;
283
284 ++n_template_parm_scopes;
285 }
286
287 /* Handle explicit instantiations. */
288 if (processing_explicit_instantiation)
289 {
290 if (n_template_parm_scopes != 0)
291 /* We've seen a template parameter list during an explicit
292 instantiation. For example:
293
294 template <class T> template void f(int);
295
296 This is erroneous. */
297 return tsk_invalid_expl_inst;
298 else
299 return tsk_expl_inst;
300 }
301
302 if (n_template_parm_scopes < n_class_scopes)
303 /* We've not seen enough template headers to match all the
304 specialized classes present. For example:
305
0cbd7506 306 template <class T> void R<T>::S<T>::f(int);
74b846e0 307
0e339752 308 This is invalid; there needs to be one set of template
74b846e0
MM
309 parameters for each class. */
310 return tsk_insufficient_parms;
311 else if (n_template_parm_scopes == n_class_scopes)
312 /* We're processing a non-template declaration (even though it may
313 be a member of a template class.) For example:
314
0cbd7506 315 template <class T> void S<T>::f(int);
74b846e0
MM
316
317 The `class T' maches the `S<T>', leaving no template headers
318 corresponding to the `f'. */
319 return tsk_none;
320 else if (n_template_parm_scopes > n_class_scopes + 1)
321 /* We've got too many template headers. For example:
322
0cbd7506 323 template <> template <class T> void f (T);
74b846e0
MM
324
325 There need to be more enclosing classes. */
326 return tsk_excessive_parms;
327 else
328 /* This must be a template. It's of the form:
329
0cbd7506 330 template <class T> template <class U> void S<T>::f(U);
74b846e0
MM
331
332 This is a specialization if the innermost level was a
333 specialization; otherwise it's just a definition of the
334 template. */
335 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
8d08fdba
MS
336}
337
74b846e0
MM
338/* Exit the current scope. */
339
340void
11f6b451 341finish_scope (void)
74b846e0
MM
342{
343 poplevel (0, 0, 0);
344}
345
acef433b
MM
346/* When a label goes out of scope, check to see if that label was used
347 in a valid manner, and issue any appropriate warnings or errors. */
348
349static void
11f6b451 350pop_label (tree label, tree old_value)
acef433b 351{
a7e8c268 352 if (!processing_template_decl)
acef433b 353 {
88848bde
MM
354 if (DECL_INITIAL (label) == NULL_TREE)
355 {
5b030314
NS
356 location_t location;
357
dee15844 358 error ("label %q+D used but not defined", label);
93409b8c
PB
359#ifdef USE_MAPPED_LOCATION
360 location = input_location; /* FIXME want (input_filename, (line)0) */
361#else
0cbd7506 362 location.file = input_filename;
5b030314 363 location.line = 0;
93409b8c 364#endif
88848bde 365 /* Avoid crashing later. */
5b030314 366 define_label (location, DECL_NAME (label));
88848bde 367 }
c616e51b
MLI
368 else
369 warn_for_unused_label (label);
acef433b 370 }
acef433b 371
6625cdb5 372 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
acef433b
MM
373}
374
0811ea8f 375/* At the end of a function, all labels declared within the function
68642fb6 376 go out of scope. BLOCK is the top-level block for the
acef433b
MM
377 function. */
378
1799e5d5
RH
379static int
380pop_labels_1 (void **slot, void *data)
381{
382 struct named_label_entry *ent = (struct named_label_entry *) *slot;
383 tree block = (tree) data;
384
385 pop_label (ent->label_decl, NULL_TREE);
386
387 /* Put the labels into the "variables" of the top-level block,
388 so debugger can see them. */
389 TREE_CHAIN (ent->label_decl) = BLOCK_VARS (block);
390 BLOCK_VARS (block) = ent->label_decl;
391
392 htab_clear_slot (named_labels, slot);
393
394 return 1;
395}
396
acef433b 397static void
11f6b451 398pop_labels (tree block)
acef433b 399{
1799e5d5 400 if (named_labels)
acef433b 401 {
1799e5d5
RH
402 htab_traverse (named_labels, pop_labels_1, block);
403 named_labels = NULL;
acef433b 404 }
1799e5d5
RH
405}
406
407/* At the end of a block with local labels, restore the outer definition. */
acef433b 408
1799e5d5
RH
409static void
410pop_local_label (tree label, tree old_value)
411{
412 struct named_label_entry dummy;
413 void **slot;
414
415 pop_label (label, old_value);
416
417 dummy.label_decl = label;
418 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
419 htab_clear_slot (named_labels, slot);
acef433b
MM
420}
421
80aa8340
ZL
422/* The following two routines are used to interface to Objective-C++.
423 The binding level is purposely treated as an opaque type. */
424
425void *
426objc_get_current_scope (void)
427{
428 return current_binding_level;
429}
430
431/* The following routine is used by the NeXT-style SJLJ exceptions;
432 variables get marked 'volatile' so as to not be clobbered by
f749f3c2
ZL
433 _setjmp()/_longjmp() calls. All variables in the current scope,
434 as well as parent scopes up to (but not including) ENCLOSING_BLK
435 shall be thusly marked. */
80aa8340
ZL
436
437void
438objc_mark_locals_volatile (void *enclosing_blk)
439{
440 struct cp_binding_level *scope;
441
442 for (scope = current_binding_level;
e58a9aa1 443 scope && scope != enclosing_blk;
80aa8340
ZL
444 scope = scope->level_chain)
445 {
446 tree decl;
447
448 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
660845bf 449 objc_volatilize_decl (decl);
e58a9aa1
ZL
450
451 /* Do not climb up past the current function. */
452 if (scope->kind == sk_function_parms)
453 break;
80aa8340
ZL
454 }
455}
456
1799e5d5
RH
457/* Update data for defined and undefined labels when leaving a scope. */
458
459static int
460poplevel_named_label_1 (void **slot, void *data)
461{
462 struct named_label_entry *ent = (struct named_label_entry *) *slot;
463 struct cp_binding_level *bl = (struct cp_binding_level *) data;
464 struct cp_binding_level *obl = bl->level_chain;
465
466 if (ent->binding_level == bl)
467 {
468 tree decl;
469
470 for (decl = ent->names_in_scope; decl; decl = TREE_CHAIN (decl))
471 if (decl_jump_unsafe (decl))
472 ent->bad_decls = tree_cons (NULL, decl, ent->bad_decls);
473
474 ent->binding_level = obl;
475 ent->names_in_scope = obl->names;
476 switch (bl->kind)
477 {
478 case sk_try:
479 ent->in_try_scope = true;
480 break;
481 case sk_catch:
482 ent->in_catch_scope = true;
483 break;
484 case sk_omp:
485 ent->in_omp_scope = true;
486 break;
487 default:
488 break;
489 }
490 }
491 else if (ent->uses)
492 {
493 struct named_label_use_entry *use;
494
495 for (use = ent->uses; use ; use = use->next)
496 if (use->binding_level == bl)
497 {
498 use->binding_level = obl;
499 use->names_in_scope = obl->names;
500 if (bl->kind == sk_omp)
501 use->in_omp_scope = true;
502 }
503 }
504
505 return 1;
506}
507
8d08fdba
MS
508/* Exit a binding level.
509 Pop the level off, and restore the state of the identifier-decl mappings
510 that were in effect when this level was entered.
511
512 If KEEP == 1, this level had explicit declarations, so
513 and create a "block" (a BLOCK node) for the level
514 to record its declarations and subblocks for symbol table output.
515
8d08fdba
MS
516 If FUNCTIONBODY is nonzero, this level is the body of a function,
517 so create a block as if KEEP were set and also clear out all
518 label names.
519
520 If REVERSE is nonzero, reverse the order of decls before putting
521 them into the BLOCK. */
522
523tree
11f6b451 524poplevel (int keep, int reverse, int functionbody)
8d08fdba 525{
926ce8bd 526 tree link;
8d08fdba
MS
527 /* The chain of decls was accumulated in reverse order.
528 Put it into forward order, just for cleanliness. */
529 tree decls;
530 int tmp = functionbody;
b35d4555 531 int real_functionbody;
b35d4555 532 tree subblocks;
325c3691 533 tree block;
8d08fdba 534 tree decl;
f181d4ae 535 int leaving_for_scope;
ac20c67a 536 scope_kind kind;
f181d4ae 537
22ffcc6f 538 timevar_push (TV_NAME_LOOKUP);
325c3691
RH
539 restart:
540
541 block = NULL_TREE;
b35d4555 542
50bc768d 543 gcc_assert (current_binding_level->kind != sk_class);
b74a0560 544
ac20c67a 545 real_functionbody = (current_binding_level->kind == sk_cleanup
b35d4555 546 ? ((functionbody = 0), tmp) : functionbody);
b35d4555
MM
547 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
548
50bc768d
NS
549 gcc_assert (!VEC_length(cp_class_binding,
550 current_binding_level->class_shadowed));
8d08fdba 551
536333d4
MM
552 /* We used to use KEEP == 2 to indicate that the new block should go
553 at the beginning of the list of blocks at this binding level,
554 rather than the end. This hack is no longer used. */
50bc768d 555 gcc_assert (keep == 0 || keep == 1);
536333d4 556
ac20c67a 557 if (current_binding_level->keep)
8d08fdba
MS
558 keep = 1;
559
6625cdb5
JM
560 /* Any uses of undefined labels, and any defined labels, now operate
561 under constraints of next binding contour. */
1799e5d5
RH
562 if (cfun && !functionbody && named_labels)
563 htab_traverse (named_labels, poplevel_named_label_1,
564 current_binding_level);
6625cdb5 565
8d08fdba
MS
566 /* Get the decls in the order they were written.
567 Usually current_binding_level->names is in reverse order.
568 But parameter decls were previously put in forward order. */
569
570 if (reverse)
571 current_binding_level->names
572 = decls = nreverse (current_binding_level->names);
573 else
574 decls = current_binding_level->names;
575
8d08fdba
MS
576 /* If there were any declarations or structure tags in that level,
577 or if this level is a function body,
578 create a BLOCK to record them for the life of this function. */
8d08fdba 579 block = NULL_TREE;
f444e36b 580 if (keep == 1 || functionbody)
8d08fdba
MS
581 block = make_node (BLOCK);
582 if (block != NULL_TREE)
583 {
f444e36b
MM
584 BLOCK_VARS (block) = decls;
585 BLOCK_SUBBLOCKS (block) = subblocks;
8d08fdba
MS
586 }
587
588 /* In each subblock, record that this is its superior. */
8d08fdba
MS
589 if (keep >= 0)
590 for (link = subblocks; link; link = TREE_CHAIN (link))
591 BLOCK_SUPERCONTEXT (link) = block;
592
f181d4ae
MM
593 /* We still support the old for-scope rules, whereby the variables
594 in a for-init statement were in scope after the for-statement
92bc1323 595 ended. We only use the new rules if flag_new_for_scope is
f181d4ae 596 nonzero. */
68642fb6 597 leaving_for_scope
a7e8c268 598 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
f181d4ae 599
caf93cb0
EC
600 /* Before we remove the declarations first check for unused variables. */
601 if (warn_unused_variable
602 && !processing_template_decl)
603 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
604 if (TREE_CODE (decl) == VAR_DECL
605 && ! TREE_USED (decl)
606 && ! DECL_IN_SYSTEM_HEADER (decl)
607 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
b323323f 608 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
caf93cb0 609
f181d4ae
MM
610 /* Remove declarations for all the DECLs in this level. */
611 for (link = decls; link; link = TREE_CHAIN (link))
612 {
c3783399 613 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
0cbd7506 614 && DECL_NAME (link))
f181d4ae 615 {
90ea9897
MM
616 tree name = DECL_NAME (link);
617 cxx_binding *ob;
f181d4ae
MM
618 tree ns_binding;
619
90ea9897
MM
620 ob = outer_binding (name,
621 IDENTIFIER_BINDING (name),
622 /*class_p=*/true);
623 if (!ob)
624 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
c7dda1e3
MM
625 else
626 ns_binding = NULL_TREE;
627
90ea9897 628 if (ob && ob->scope == current_binding_level->level_chain)
f181d4ae 629 /* We have something like:
68642fb6 630
0cbd7506
MS
631 int i;
632 for (int i; ;);
68642fb6 633
f181d4ae
MM
634 and we are leaving the `for' scope. There's no reason to
635 keep the binding of the inner `i' in this case. */
90ea9897
MM
636 pop_binding (name, link);
637 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
147135cc 638 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
f181d4ae
MM
639 /* Here, we have something like:
640
641 typedef int I;
642
643 void f () {
644 for (int I; ;);
645 }
646
647 We must pop the for-scope binding so we know what's a
648 type and what isn't. */
90ea9897 649 pop_binding (name, link);
e76a2646 650 else
e76a2646 651 {
f181d4ae
MM
652 /* Mark this VAR_DECL as dead so that we can tell we left it
653 there only for backward compatibility. */
654 DECL_DEAD_FOR_LOCAL (link) = 1;
68642fb6 655
517f3315 656 /* Keep track of what should have happened when we
f181d4ae 657 popped the binding. */
90ea9897 658 if (ob && ob->value)
820cc88f
DB
659 {
660 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
661 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
662 }
f181d4ae
MM
663
664 /* Add it to the list of dead variables in the next
665 outermost binding to that we can remove these when we
666 leave that binding. */
667 current_binding_level->level_chain->dead_vars_from_for
668 = tree_cons (NULL_TREE, link,
669 current_binding_level->level_chain->
670 dead_vars_from_for);
671
af6fd53f 672 /* Although we don't pop the cxx_binding, we do clear
147135cc 673 its SCOPE since the scope is going away now. */
caf93cb0 674 IDENTIFIER_BINDING (name)->scope
90ea9897 675 = current_binding_level->level_chain;
e76a2646 676 }
2ee887f2 677 }
68642fb6 678 else
8d6e462b 679 {
8dc2b103 680 tree name;
c8094d83 681
f181d4ae 682 /* Remove the binding. */
0034cf72 683 decl = link;
caf93cb0 684
0034cf72
JM
685 if (TREE_CODE (decl) == TREE_LIST)
686 decl = TREE_VALUE (decl);
8dc2b103 687 name = decl;
c8094d83 688
8dc2b103
NS
689 if (TREE_CODE (name) == OVERLOAD)
690 name = OVL_FUNCTION (name);
caf93cb0 691
8dc2b103
NS
692 gcc_assert (DECL_P (name));
693 pop_binding (DECL_NAME (name), decl);
8d08fdba 694 }
f181d4ae 695 }
8d08fdba 696
f181d4ae
MM
697 /* Remove declarations for any `for' variables from inner scopes
698 that we kept around. */
699 for (link = current_binding_level->dead_vars_from_for;
700 link; link = TREE_CHAIN (link))
d8f8dca1 701 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
2ee887f2 702
f181d4ae
MM
703 /* Restore the IDENTIFIER_TYPE_VALUEs. */
704 for (link = current_binding_level->type_shadowed;
705 link; link = TREE_CHAIN (link))
706 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
acef433b
MM
707
708 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
709 for (link = current_binding_level->shadowed_labels;
68642fb6 710 link;
acef433b 711 link = TREE_CHAIN (link))
1799e5d5 712 pop_local_label (TREE_VALUE (link), TREE_PURPOSE (link));
acef433b 713
f181d4ae
MM
714 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
715 list if a `using' declaration put them there. The debugging
3b426391 716 back ends won't understand OVERLOAD, so we remove them here.
f181d4ae
MM
717 Because the BLOCK_VARS are (temporarily) shared with
718 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
719 popped all the bindings. */
720 if (block)
721 {
722 tree* d;
8d6e462b 723
a06d48ef
JM
724 for (d = &BLOCK_VARS (block); *d; )
725 {
726 if (TREE_CODE (*d) == TREE_LIST)
727 *d = TREE_CHAIN (*d);
728 else
729 d = &TREE_CHAIN (*d);
730 }
8d6e462b 731 }
8d08fdba
MS
732
733 /* If the level being exited is the top level of a function,
734 check over all the labels. */
8d08fdba
MS
735 if (functionbody)
736 {
acef433b
MM
737 /* Since this is the top level block of a function, the vars are
738 the function's parameters. Don't leave them in the BLOCK
739 because they are found in the FUNCTION_DECL instead. */
8d08fdba 740 BLOCK_VARS (block) = 0;
acef433b 741 pop_labels (block);
8d08fdba
MS
742 }
743
ac20c67a 744 kind = current_binding_level->kind;
325c3691
RH
745 if (kind == sk_cleanup)
746 {
747 tree stmt;
748
749 /* If this is a temporary binding created for a cleanup, then we'll
750 have pushed a statement list level. Pop that, create a new
751 BIND_EXPR for the block, and insert it into the stream. */
752 stmt = pop_stmt_list (current_binding_level->statement_list);
753 stmt = c_build_bind_expr (block, stmt);
754 add_stmt (stmt);
755 }
8d08fdba 756
1a6daf15 757 leave_scope ();
8d08fdba 758 if (functionbody)
72c4a4ca
GK
759 {
760 /* The current function is being defined, so its DECL_INITIAL
761 should be error_mark_node. */
762 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
763 DECL_INITIAL (current_function_decl) = block;
764 }
8d08fdba 765 else if (block)
f444e36b
MM
766 current_binding_level->blocks
767 = chainon (current_binding_level->blocks, block);
768
8d08fdba
MS
769 /* If we did not make a block for the level just exited,
770 any blocks made for inner levels
771 (since they cannot be recorded as subblocks in that level)
772 must be carried forward so they will later become subblocks
773 of something else. */
774 else if (subblocks)
536333d4
MM
775 current_binding_level->blocks
776 = chainon (current_binding_level->blocks, subblocks);
8d08fdba 777
d9b2d9da
MM
778 /* Each and every BLOCK node created here in `poplevel' is important
779 (e.g. for proper debugging information) so if we created one
780 earlier, mark it as "used". */
781 if (block)
782 TREE_USED (block) = 1;
783
325c3691 784 /* All temporary bindings created for cleanups are popped silently. */
ac20c67a 785 if (kind == sk_cleanup)
325c3691 786 goto restart;
8d08fdba 787
22ffcc6f 788 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
8d08fdba
MS
789}
790
8d08fdba
MS
791/* Insert BLOCK at the end of the list of subblocks of the
792 current binding level. This is used when a BIND_EXPR is expanded,
793 to handle the BLOCK node inside the BIND_EXPR. */
794
795void
11f6b451 796insert_block (tree block)
8d08fdba
MS
797{
798 TREE_USED (block) = 1;
799 current_binding_level->blocks
800 = chainon (current_binding_level->blocks, block);
801}
802
0aafb128
MM
803/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
804 itself, calling F for each. The DATA is passed to F as well. */
805
00e8de68
GDR
806static int
807walk_namespaces_r (tree namespace, walk_namespaces_fn f, void* data)
808{
809 int result = 0;
caf93cb0 810 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
8d08fdba 811
00e8de68 812 result |= (*f) (namespace, data);
8d08fdba 813
00e8de68
GDR
814 for (; current; current = TREE_CHAIN (current))
815 result |= walk_namespaces_r (current, f, data);
fc0e7bf5 816
00e8de68 817 return result;
5566b478
MS
818}
819
00e8de68
GDR
820/* Walk all the namespaces, calling F for each. The DATA is passed to
821 F as well. */
822
823int
824walk_namespaces (walk_namespaces_fn f, void* data)
5566b478 825{
00e8de68 826 return walk_namespaces_r (global_namespace, f, data);
8d08fdba
MS
827}
828
00e8de68
GDR
829/* Call wrapup_globals_declarations for the globals in NAMESPACE. If
830 DATA is non-NULL, this is the last time we will call
831 wrapup_global_declarations for this NAMESPACE. */
39c01e4c 832
00e8de68
GDR
833int
834wrapup_globals_for_namespace (tree namespace, void* data)
39c01e4c 835{
00e8de68 836 struct cp_binding_level *level = NAMESPACE_LEVEL (namespace);
9857866d
KH
837 VEC(tree,gc) *statics = level->static_decls;
838 tree *vec = VEC_address (tree, statics);
839 int len = VEC_length (tree, statics);
00e8de68 840 int last_time = (data != 0);
68642fb6 841
00e8de68 842 if (last_time)
39c01e4c 843 {
00e8de68 844 check_global_declarations (vec, len);
db5f8b93 845 emit_debug_global_declarations (vec, len);
00e8de68 846 return 0;
39c01e4c
MM
847 }
848
00e8de68
GDR
849 /* Write out any globals that need to be output. */
850 return wrapup_global_declarations (vec, len);
39c01e4c
MM
851}
852
00e8de68 853\f
9188c363
MM
854/* In C++, you don't have to write `struct S' to refer to `S'; you
855 can just use `S'. We accomplish this by creating a TYPE_DECL as
856 if the user had written `typedef struct S S'. Create and return
857 the TYPE_DECL for TYPE. */
858
859tree
11f6b451 860create_implicit_typedef (tree name, tree type)
9188c363
MM
861{
862 tree decl;
863
864 decl = build_decl (TYPE_DECL, name, type);
c727aa5e 865 DECL_ARTIFICIAL (decl) = 1;
9188c363
MM
866 /* There are other implicit type declarations, like the one *within*
867 a class that allows you to write `S::S'. We must distinguish
868 amongst these. */
869 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
870 TYPE_NAME (type) = decl;
871
872 return decl;
873}
874
8e4ce833
JJ
875/* Remember a local name for name-mangling purposes. */
876
877static void
11f6b451 878push_local_name (tree decl)
8e4ce833
JJ
879{
880 size_t i, nelts;
881 tree t, name;
882
22ffcc6f 883 timevar_push (TV_NAME_LOOKUP);
8e4ce833
JJ
884
885 name = DECL_NAME (decl);
886
9acaf84a 887 nelts = VEC_length (tree, local_names);
8e4ce833
JJ
888 for (i = 0; i < nelts; i++)
889 {
9acaf84a 890 t = VEC_index (tree, local_names, i);
8e4ce833
JJ
891 if (DECL_NAME (t) == name)
892 {
893 if (!DECL_LANG_SPECIFIC (decl))
894 retrofit_lang_decl (decl);
e2500fed 895 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
8e4ce833
JJ
896 if (DECL_LANG_SPECIFIC (t))
897 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
898 else
899 DECL_DISCRIMINATOR (decl) = 1;
900
9acaf84a 901 VEC_replace (tree, local_names, i, decl);
de94b46c
KG
902 timevar_pop (TV_NAME_LOOKUP);
903 return;
8e4ce833
JJ
904 }
905 }
906
9acaf84a 907 VEC_safe_push (tree, gc, local_names, decl);
22ffcc6f 908 timevar_pop (TV_NAME_LOOKUP);
8e4ce833 909}
8d08fdba
MS
910\f
911/* Subroutine of duplicate_decls: return truthvalue of whether
912 or not types of these decls match.
913
914 For C++, we must compare the parameter list so that `int' can match
915 `int&' in a parameter position, but `int&' is not confused with
916 `const int&'. */
e92cc029 917
6060a796 918int
11f6b451 919decls_match (tree newdecl, tree olddecl)
8d08fdba
MS
920{
921 int types_match;
922
347d73d7
ML
923 if (newdecl == olddecl)
924 return 1;
925
6b4b3deb
MM
926 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
927 /* If the two DECLs are not even the same kind of thing, we're not
928 interested in their types. */
929 return 0;
930
931 if (TREE_CODE (newdecl) == FUNCTION_DECL)
8d08fdba
MS
932 {
933 tree f1 = TREE_TYPE (newdecl);
934 tree f2 = TREE_TYPE (olddecl);
935 tree p1 = TYPE_ARG_TYPES (f1);
936 tree p2 = TYPE_ARG_TYPES (f2);
937
4f1c5b7d 938 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
eb68cb58
MM
939 && ! (DECL_EXTERN_C_P (newdecl)
940 && DECL_EXTERN_C_P (olddecl)))
c5a6fc45
JM
941 return 0;
942
8d08fdba 943 if (TREE_CODE (f1) != TREE_CODE (f2))
0cbd7506 944 return 0;
8d08fdba 945
3bfdc719 946 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8926095f 947 {
8b27e9ef
NS
948 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
949 && (DECL_BUILT_IN (olddecl)
950#ifndef NO_IMPLICIT_EXTERN_C
0cbd7506
MS
951 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
952 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
8b27e9ef
NS
953#endif
954 ))
a28e3c7f
MS
955 {
956 types_match = self_promoting_args_p (p1);
957 if (p1 == void_list_node)
958 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
959 }
8b27e9ef
NS
960#ifndef NO_IMPLICIT_EXTERN_C
961 else if (p1 == NULL_TREE
962 && (DECL_EXTERN_C_P (olddecl)
0cbd7506
MS
963 && DECL_IN_SYSTEM_HEADER (olddecl)
964 && !DECL_CLASS_SCOPE_P (olddecl))
8b27e9ef 965 && (DECL_EXTERN_C_P (newdecl)
0cbd7506
MS
966 && DECL_IN_SYSTEM_HEADER (newdecl)
967 && !DECL_CLASS_SCOPE_P (newdecl)))
a28e3c7f
MS
968 {
969 types_match = self_promoting_args_p (p2);
970 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
971 }
8b27e9ef 972#endif
8926095f 973 else
91063b51 974 types_match = compparms (p1, p2);
8926095f 975 }
8d08fdba
MS
976 else
977 types_match = 0;
978 }
6b4b3deb 979 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
51c184be 980 {
2bb5d995
JM
981 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
982 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
983 return 0;
984
ee935db4
MM
985 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
986 DECL_TEMPLATE_PARMS (olddecl)))
987 return 0;
988
f84b4be9 989 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
ee935db4
MM
990 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
991 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
f84b4be9
JM
992 else
993 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
994 DECL_TEMPLATE_RESULT (newdecl));
51c184be 995 }
8d08fdba
MS
996 else
997 {
91a5bc9f
KL
998 /* Need to check scope for variable declaration (VAR_DECL).
999 For typedef (TYPE_DECL), scope is ignored. */
1000 if (TREE_CODE (newdecl) == VAR_DECL
ace4831d
MM
1001 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1002 /* [dcl.link]
1003 Two declarations for an object with C language linkage
1004 with the same name (ignoring the namespace that qualify
1005 it) that appear in different namespace scopes refer to
1006 the same object. */
1007 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
91a5bc9f
KL
1008 return 0;
1009
8d08fdba
MS
1010 if (TREE_TYPE (newdecl) == error_mark_node)
1011 types_match = TREE_TYPE (olddecl) == error_mark_node;
1012 else if (TREE_TYPE (olddecl) == NULL_TREE)
1013 types_match = TREE_TYPE (newdecl) == NULL_TREE;
a0a33927
MS
1014 else if (TREE_TYPE (newdecl) == NULL_TREE)
1015 types_match = 0;
8d08fdba 1016 else
01240200 1017 types_match = comptypes (TREE_TYPE (newdecl),
3bfdc719
MM
1018 TREE_TYPE (olddecl),
1019 COMPARE_REDECLARATION);
8d08fdba
MS
1020 }
1021
1022 return types_match;
1023}
1024
1025/* If NEWDECL is `static' and an `extern' was seen previously,
24f30ed4 1026 warn about it. OLDDECL is the previous declaration.
8d08fdba
MS
1027
1028 Note that this does not apply to the C++ case of declaring
1029 a variable `extern const' and then later `const'.
1030
8d08fdba
MS
1031 Don't complain about built-in functions, since they are beyond
1032 the user's control. */
1033
a5e6b29b 1034void
11f6b451 1035warn_extern_redeclared_static (tree newdecl, tree olddecl)
8d08fdba 1036{
24f30ed4
MM
1037 tree name;
1038
68642fb6 1039 if (TREE_CODE (newdecl) == TYPE_DECL
655dc6ee 1040 || TREE_CODE (newdecl) == TEMPLATE_DECL
a2a9e21c
GDR
1041 || TREE_CODE (newdecl) == CONST_DECL
1042 || TREE_CODE (newdecl) == NAMESPACE_DECL)
8d08fdba 1043 return;
68642fb6 1044
963d5758
MM
1045 /* Don't get confused by static member functions; that's a different
1046 use of `static'. */
1047 if (TREE_CODE (newdecl) == FUNCTION_DECL
1048 && DECL_STATIC_FUNCTION_P (newdecl))
1049 return;
8d08fdba 1050
24f30ed4
MM
1051 /* If the old declaration was `static', or the new one isn't, then
1052 then everything is OK. */
1053 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1054 return;
1055
1056 /* It's OK to declare a builtin function as `static'. */
1057 if (TREE_CODE (olddecl) == FUNCTION_DECL
1058 && DECL_ARTIFICIAL (olddecl))
1059 return;
1060
8d08fdba 1061 name = DECL_ASSEMBLER_NAME (newdecl);
2d01edd7 1062 pedwarn ("%qD was declared %<extern%> and later %<static%>", newdecl);
dee15844 1063 pedwarn ("previous declaration of %q+D", olddecl);
8d08fdba
MS
1064}
1065
e1f0e7a6
MM
1066/* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1067 function templates. If their exception specifications do not
b9704fc5 1068 match, issue a diagnostic. */
e1f0e7a6
MM
1069
1070static void
1071check_redeclaration_exception_specification (tree new_decl,
1072 tree old_decl)
1073{
1074 tree new_type;
1075 tree old_type;
1076 tree new_exceptions;
1077 tree old_exceptions;
1078
1079 new_type = TREE_TYPE (new_decl);
1080 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1081 old_type = TREE_TYPE (old_decl);
1082 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1083
1084 /* [except.spec]
1085
1086 If any declaration of a function has an exception-specification,
1087 all declarations, including the definition and an explicit
1088 specialization, of that function shall have an
1089 exception-specification with the same set of type-ids. */
1090 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1091 && ! DECL_IS_BUILTIN (old_decl)
1092 && flag_exceptions
3db45ab5 1093 && !comp_except_specs (new_exceptions, old_exceptions,
e1f0e7a6
MM
1094 /*exact=*/true))
1095 {
1096 error ("declaration of %qF throws different exceptions", new_decl);
1097 error ("from previous declaration %q+F", old_decl);
1098 }
1099}
1100
3a47c4e4
AO
1101#define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1102 && lookup_attribute ("gnu_inline", \
1103 DECL_ATTRIBUTES (fn)))
1104
b1a19c7c
MM
1105/* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1106 If the redeclaration is invalid, a diagnostic is issued, and the
1107 error_mark_node is returned. Otherwise, OLDDECL is returned.
8d08fdba 1108
b1a19c7c 1109 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
d63d5d0c
ILT
1110 returned.
1111
1112 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
8d08fdba 1113
b1a19c7c 1114tree
d63d5d0c 1115duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
8d08fdba 1116{
8d08fdba 1117 unsigned olddecl_uid = DECL_UID (olddecl);
d63d5d0c 1118 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
0b60dfe3 1119 int new_defines_function = 0;
50b56799 1120 tree new_template;
5566b478
MS
1121
1122 if (newdecl == olddecl)
b1a19c7c 1123 return olddecl;
8d08fdba 1124
8926095f 1125 types_match = decls_match (newdecl, olddecl);
8d08fdba 1126
8d08fdba
MS
1127 /* If either the type of the new decl or the type of the old decl is an
1128 error_mark_node, then that implies that we have already issued an
1129 error (earlier) for some bogus type specification, and in that case,
1130 it is rather pointless to harass the user with yet more error message
0b60dfe3 1131 about the same declaration, so just pretend the types match here. */
bd6dd845
MS
1132 if (TREE_TYPE (newdecl) == error_mark_node
1133 || TREE_TYPE (olddecl) == error_mark_node)
dc5395cc 1134 return error_mark_node;
68642fb6 1135
97055d5c
AO
1136 if (DECL_P (olddecl)
1137 && TREE_CODE (newdecl) == FUNCTION_DECL
1138 && TREE_CODE (olddecl) == FUNCTION_DECL
1139 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1140 {
1141 if (DECL_DECLARED_INLINE_P (newdecl)
1142 && DECL_UNINLINABLE (newdecl)
1143 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1144 /* Already warned elsewhere. */;
1145 else if (DECL_DECLARED_INLINE_P (olddecl)
1146 && DECL_UNINLINABLE (olddecl)
1147 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1148 /* Already warned. */;
1149 else if (DECL_DECLARED_INLINE_P (newdecl)
1150 && DECL_UNINLINABLE (olddecl)
1151 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1152 {
dee15844
JM
1153 warning (OPT_Wattributes, "function %q+D redeclared as inline",
1154 newdecl);
1155 warning (OPT_Wattributes, "previous declaration of %q+D "
1156 "with attribute noinline", olddecl);
97055d5c
AO
1157 }
1158 else if (DECL_DECLARED_INLINE_P (olddecl)
1159 && DECL_UNINLINABLE (newdecl)
1160 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1161 {
dee15844
JM
1162 warning (OPT_Wattributes, "function %q+D redeclared with "
1163 "attribute noinline", newdecl);
1164 warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1165 olddecl);
97055d5c
AO
1166 }
1167 }
1168
a1c65f9f 1169 /* Check for redeclaration and other discrepancies. */
d22c8596 1170 if (TREE_CODE (olddecl) == FUNCTION_DECL
9f33663b
JM
1171 && DECL_ARTIFICIAL (olddecl))
1172 {
d63d5d0c 1173 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
9f33663b
JM
1174 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1175 {
d63d5d0c
ILT
1176 /* Avoid warnings redeclaring built-ins which have not been
1177 explicitly declared. */
0cbd7506
MS
1178 if (DECL_ANTICIPATED (olddecl))
1179 return NULL_TREE;
d52e4867 1180
9f33663b
JM
1181 /* If you declare a built-in or predefined function name as static,
1182 the old definition is overridden, but optionally warn this was a
1183 bad choice of name. */
1184 if (! TREE_PUBLIC (newdecl))
1185 {
b323323f
LM
1186 warning (OPT_Wshadow, "shadowing %s function %q#D",
1187 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1188 olddecl);
9f33663b 1189 /* Discard the old built-in function. */
b1a19c7c 1190 return NULL_TREE;
9f33663b
JM
1191 }
1192 /* If the built-in is not ansi, then programs can override
1193 it even globally without an error. */
1194 else if (! DECL_BUILT_IN (olddecl))
d4ee4d25 1195 warning (0, "library function %q#D redeclared as non-function %q#D",
0cbd7506 1196 olddecl, newdecl);
9f33663b
JM
1197 else
1198 {
2d01edd7
GDR
1199 error ("declaration of %q#D", newdecl);
1200 error ("conflicts with built-in declaration %q#D",
0cbd7506 1201 olddecl);
9f33663b 1202 }
b1a19c7c 1203 return NULL_TREE;
a4443a08 1204 }
9f33663b 1205 else if (!types_match)
8d08fdba 1206 {
d63d5d0c
ILT
1207 /* Avoid warnings redeclaring built-ins which have not been
1208 explicitly declared. */
0cbd7506 1209 if (DECL_ANTICIPATED (olddecl))
498c0f27
JJ
1210 {
1211 /* Deal with fileptr_type_node. FILE type is not known
1212 at the time we create the builtins. */
1213 tree t1, t2;
1214
1215 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1216 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1217 t1 || t2;
1218 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1219 if (!t1 || !t2)
1220 break;
1221 else if (TREE_VALUE (t2) == fileptr_type_node)
1222 {
1223 tree t = TREE_VALUE (t1);
1224
1225 if (TREE_CODE (t) == POINTER_TYPE
1226 && TYPE_NAME (TREE_TYPE (t))
1227 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1228 == get_identifier ("FILE")
1229 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1230 {
1231 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1232
1233 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1234 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1235 types_match = decls_match (newdecl, olddecl);
1236 if (types_match)
d63d5d0c
ILT
1237 return duplicate_decls (newdecl, olddecl,
1238 newdecl_is_friend);
498c0f27
JJ
1239 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1240 }
1241 }
1242 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1243 break;
1244 }
d52e4867 1245 else if ((DECL_EXTERN_C_P (newdecl)
7e99327d
MM
1246 && DECL_EXTERN_C_P (olddecl))
1247 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1248 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
a4443a08 1249 {
9f33663b
JM
1250 /* A near match; override the builtin. */
1251
1252 if (TREE_PUBLIC (newdecl))
a4443a08 1253 {
d4ee4d25
DD
1254 warning (0, "new declaration %q#D", newdecl);
1255 warning (0, "ambiguates built-in declaration %q#D",
0cbd7506 1256 olddecl);
a4443a08 1257 }
b323323f
LM
1258 else
1259 warning (OPT_Wshadow, "shadowing %s function %q#D",
0cbd7506
MS
1260 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1261 olddecl);
a4443a08 1262 }
9f33663b
JM
1263 else
1264 /* Discard the old built-in function. */
b1a19c7c 1265 return NULL_TREE;
04a9d080
RS
1266
1267 /* Replace the old RTL to avoid problems with inlining. */
84b8b0e0 1268 COPY_DECL_RTL (newdecl, olddecl);
8d08fdba 1269 }
d63d5d0c
ILT
1270 /* Even if the types match, prefer the new declarations type for
1271 built-ins which have not been explicitly declared, for
1272 exception lists, etc... */
10326855 1273 else if (DECL_ANTICIPATED (olddecl))
7072018e 1274 {
74869a85
NS
1275 tree type = TREE_TYPE (newdecl);
1276 tree attribs = (*targetm.merge_type_attributes)
1277 (TREE_TYPE (olddecl), type);
1278
e9525111 1279 type = cp_build_type_attribute_variant (type, attribs);
74869a85 1280 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
7072018e 1281 }
68642fb6 1282
62bedd31
JJ
1283 /* If a function is explicitly declared "throw ()", propagate that to
1284 the corresponding builtin. */
1285 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1286 && DECL_ANTICIPATED (olddecl)
1287 && TREE_NOTHROW (newdecl)
1288 && !TREE_NOTHROW (olddecl)
1289 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != NULL_TREE
1290 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != olddecl
1291 && types_match)
1292 TREE_NOTHROW (built_in_decls [DECL_FUNCTION_CODE (olddecl)]) = 1;
1293
7e99327d
MM
1294 /* Whether or not the builtin can throw exceptions has no
1295 bearing on this declarator. */
1296 TREE_NOTHROW (olddecl) = 0;
1297
24f30ed4
MM
1298 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1299 {
1300 /* If a builtin function is redeclared as `static', merge
1301 the declarations, but make the original one static. */
1302 DECL_THIS_STATIC (olddecl) = 1;
1303 TREE_PUBLIC (olddecl) = 0;
9bfadf57 1304
421844e7
MM
1305 /* Make the old declaration consistent with the new one so
1306 that all remnants of the builtin-ness of this function
1307 will be banished. */
5d2ed28c 1308 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
84b8b0e0 1309 COPY_DECL_RTL (newdecl, olddecl);
24f30ed4 1310 }
39211cd5
MS
1311 }
1312 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1313 {
6936461f
OW
1314 /* C++ Standard, 3.3, clause 4:
1315 "[Note: a namespace name or a class template name must be unique
1316 in its declarative region (7.3.2, clause 14). ]" */
1317 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1318 && TREE_CODE (newdecl) != NAMESPACE_DECL
1319 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1320 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1321 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1322 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
9ed182dc 1323 {
6936461f
OW
1324 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1325 && TREE_CODE (newdecl) != TYPE_DECL)
1326 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1327 && TREE_CODE (olddecl) != TYPE_DECL))
1328 {
1329 /* We do nothing special here, because C++ does such nasty
1330 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1331 get shadowed, and know that if we need to find a TYPE_DECL
1332 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1333 slot of the identifier. */
1334 return NULL_TREE;
1335 }
1336
1337 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1338 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1339 || (TREE_CODE (olddecl) == FUNCTION_DECL
1340 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1341 return NULL_TREE;
9ed182dc
JM
1342 }
1343
2d01edd7 1344 error ("%q#D redeclared as different kind of symbol", newdecl);
39211cd5
MS
1345 if (TREE_CODE (olddecl) == TREE_LIST)
1346 olddecl = TREE_VALUE (olddecl);
dee15844 1347 error ("previous declaration of %q+#D", olddecl);
39211cd5 1348
c0694c4b 1349 return error_mark_node;
8d08fdba 1350 }
8d08fdba
MS
1351 else if (!types_match)
1352 {
4f1c5b7d 1353 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
7bdbfa05
MM
1354 /* These are certainly not duplicate declarations; they're
1355 from different scopes. */
b1a19c7c 1356 return NULL_TREE;
7bdbfa05 1357
8926095f 1358 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
f0e01782
MS
1359 {
1360 /* The name of a class template may not be declared to refer to
1361 any other template, class, function, object, namespace, value,
e92cc029 1362 or type in the same scope. */
5566b478
MS
1363 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1364 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
f0e01782 1365 {
2d01edd7 1366 error ("declaration of template %q#D", newdecl);
dee15844 1367 error ("conflicts with previous declaration %q+#D", olddecl);
f0e01782 1368 }
ec255269
MS
1369 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1370 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1371 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
91063b51 1372 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
75650646 1373 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
b9201622
NS
1374 DECL_TEMPLATE_PARMS (olddecl))
1375 /* Template functions can be disambiguated by
1376 return type. */
1377 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1378 TREE_TYPE (TREE_TYPE (olddecl))))
ec255269 1379 {
2d01edd7 1380 error ("new declaration %q#D", newdecl);
dee15844 1381 error ("ambiguates old declaration %q+#D", olddecl);
ec255269 1382 }
b1a19c7c 1383 return NULL_TREE;
f0e01782 1384 }
8926095f
MS
1385 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1386 {
eb68cb58 1387 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
8926095f 1388 {
2d01edd7 1389 error ("declaration of C function %q#D conflicts with",
0cbd7506 1390 newdecl);
dee15844 1391 error ("previous declaration %q+#D here", olddecl);
8926095f 1392 }
00595019 1393 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
91063b51 1394 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
700f8a87 1395 {
2d01edd7 1396 error ("new declaration %q#D", newdecl);
dee15844 1397 error ("ambiguates old declaration %q+#D", olddecl);
492b73bd 1398 return error_mark_node;
700f8a87
MS
1399 }
1400 else
b1a19c7c 1401 return NULL_TREE;
8926095f 1402 }
58ec3cc5 1403 else
8d08fdba 1404 {
2d01edd7 1405 error ("conflicting declaration %q#D", newdecl);
dee15844 1406 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
0cbd7506 1407 return error_mark_node;
8d08fdba
MS
1408 }
1409 }
68642fb6 1410 else if (TREE_CODE (newdecl) == FUNCTION_DECL
75650646
MM
1411 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1412 && (!DECL_TEMPLATE_INFO (newdecl)
68642fb6 1413 || (DECL_TI_TEMPLATE (newdecl)
75650646
MM
1414 != DECL_TI_TEMPLATE (olddecl))))
1415 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1416 && (!DECL_TEMPLATE_INFO (olddecl)
68642fb6 1417 || (DECL_TI_TEMPLATE (olddecl)
75650646 1418 != DECL_TI_TEMPLATE (newdecl))))))
386b8a85
JM
1419 /* It's OK to have a template specialization and a non-template
1420 with the same type, or to have specializations of two
75650646
MM
1421 different templates with the same type. Note that if one is a
1422 specialization, and the other is an instantiation of the same
1423 template, that we do not exit at this point. That situation
1424 can occur if we instantiate a template class, and then
0e339752 1425 specialize one of its methods. This situation is valid, but
75650646 1426 the declarations must be merged in the usual way. */
b1a19c7c 1427 return NULL_TREE;
68642fb6
UD
1428 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1429 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
75650646
MM
1430 && !DECL_USE_TEMPLATE (newdecl))
1431 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1432 && !DECL_USE_TEMPLATE (olddecl))))
1433 /* One of the declarations is a template instantiation, and the
1434 other is not a template at all. That's OK. */
b1a19c7c 1435 return NULL_TREE;
c30b4add
MM
1436 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1437 {
1438 /* In [namespace.alias] we have:
c8094d83 1439
0cbd7506 1440 In a declarative region, a namespace-alias-definition can be
c30b4add
MM
1441 used to redefine a namespace-alias declared in that declarative
1442 region to refer only to the namespace to which it already
1443 refers.
c8094d83 1444
c30b4add
MM
1445 Therefore, if we encounter a second alias directive for the same
1446 alias, we can just ignore the second directive. */
1447 if (DECL_NAMESPACE_ALIAS (newdecl)
c8094d83 1448 && (DECL_NAMESPACE_ALIAS (newdecl)
c30b4add
MM
1449 == DECL_NAMESPACE_ALIAS (olddecl)))
1450 return olddecl;
1451 /* [namespace.alias]
1452
0cbd7506 1453 A namespace-name or namespace-alias shall not be declared as
c30b4add
MM
1454 the name of any other entity in the same declarative region.
1455 A namespace-name defined at global scope shall not be
77880ae4 1456 declared as the name of any other entity in any global scope
c30b4add 1457 of the program. */
2d01edd7 1458 error ("declaration of namespace %qD conflicts with", newdecl);
dee15844 1459 error ("previous declaration of namespace %q+D here", olddecl);
c30b4add
MM
1460 return error_mark_node;
1461 }
8d08fdba
MS
1462 else
1463 {
d8e178a0 1464 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
8251199e 1465 if (errmsg)
8d08fdba 1466 {
33bd39a2 1467 error (errmsg, newdecl);
8d08fdba 1468 if (DECL_NAME (olddecl) != NULL_TREE)
dee15844
JM
1469 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1470 ? "%q+#D previously defined here"
1471 : "%q+#D previously declared here", olddecl);
b1a19c7c 1472 return error_mark_node;
8d08fdba
MS
1473 }
1474 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1475 && DECL_INITIAL (olddecl) != NULL_TREE
1476 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1477 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1478 {
1479 /* Prototype decl follows defn w/o prototype. */
dee15844 1480 warning (0, "prototype for %q+#D", newdecl);
d4ee4d25 1481 warning (0, "%Jfollows non-prototype definition here", olddecl);
8d08fdba 1482 }
ace4831d
MM
1483 else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1484 || TREE_CODE (olddecl) == VAR_DECL)
8d08fdba 1485 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
8926095f 1486 {
ace4831d
MM
1487 /* [dcl.link]
1488 If two declarations of the same function or object
1489 specify different linkage-specifications ..., the program
1490 is ill-formed.... Except for functions with C++ linkage,
1491 a function declaration without a linkage specification
1492 shall not precede the first linkage specification for
1493 that function. A function can be declared without a
1494 linkage specification after an explicit linkage
1495 specification has been seen; the linkage explicitly
1496 specified in the earlier declaration is not affected by
1497 such a function declaration.
1498
1499 DR 563 raises the question why the restrictions on
1500 functions should not also apply to objects. Older
1501 versions of G++ silently ignore the linkage-specification
1502 for this example:
1503
1504 namespace N {
1505 extern int i;
1506 extern "C" int i;
1507 }
1508
1509 which is clearly wrong. Therefore, we now treat objects
1510 like functions. */
46ccf50a 1511 if (current_lang_depth () == 0)
ace4831d
MM
1512 {
1513 /* There is no explicit linkage-specification, so we use
1514 the linkage from the previous declaration. */
1515 if (!DECL_LANG_SPECIFIC (newdecl))
1516 retrofit_lang_decl (newdecl);
1517 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1518 }
8926095f
MS
1519 else
1520 {
dee15844
JM
1521 error ("previous declaration of %q+#D with %qL linkage",
1522 olddecl, DECL_LANGUAGE (olddecl));
2d01edd7 1523 error ("conflicts with new declaration with %qL linkage",
0cbd7506 1524 DECL_LANGUAGE (newdecl));
8926095f
MS
1525 }
1526 }
e1cd6e56 1527
a6f02587 1528 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
c32381b1
JM
1529 ;
1530 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
e1cd6e56
MS
1531 {
1532 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1533 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1534 int i = 1;
1535
1536 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1537 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
68642fb6 1538
e1cd6e56
MS
1539 for (; t1 && t1 != void_list_node;
1540 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1541 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1542 {
2507f3b5
RK
1543 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1544 TREE_PURPOSE (t2)))
e1cd6e56 1545 {
2d01edd7 1546 pedwarn ("default argument given for parameter %d of %q#D",
624a5800 1547 i, newdecl);
dee15844 1548 pedwarn ("after previous specification in %q+#D", olddecl);
e1cd6e56
MS
1549 }
1550 else
1551 {
2d01edd7 1552 error ("default argument given for parameter %d of %q#D",
0cbd7506 1553 i, newdecl);
dee15844 1554 error ("after previous specification in %q+#D",
e1cd6e56
MS
1555 olddecl);
1556 }
1557 }
a5894242 1558
caf93cb0 1559 if (DECL_DECLARED_INLINE_P (newdecl)
79065db2 1560 && ! DECL_DECLARED_INLINE_P (olddecl)
7fcdf4c2 1561 && TREE_ADDRESSABLE (olddecl) && warn_inline)
dff6b454 1562 {
d4ee4d25
DD
1563 warning (0, "%q#D was used before it was declared inline", newdecl);
1564 warning (0, "%Jprevious non-inline declaration here", olddecl);
dff6b454 1565 }
e1cd6e56 1566 }
8d08fdba
MS
1567 }
1568
4782bd5b
RS
1569 /* Do not merge an implicit typedef with an explicit one. In:
1570
1571 class A;
1572 ...
1573 typedef class A A __attribute__ ((foo));
1574
1575 the attribute should apply only to the typedef. */
1576 if (TREE_CODE (olddecl) == TYPE_DECL
1577 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1578 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
b1a19c7c 1579 return NULL_TREE;
4782bd5b 1580
8d08fdba
MS
1581 /* If new decl is `static' and an `extern' was seen previously,
1582 warn about it. */
1583 warn_extern_redeclared_static (newdecl, olddecl);
1584
e92cc029 1585 /* We have committed to returning 1 at this point. */
8d08fdba
MS
1586 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1587 {
1588 /* Now that functions must hold information normally held
1589 by field decls, there is extra work to do so that
1590 declaration information does not get destroyed during
1591 definition. */
1592 if (DECL_VINDEX (olddecl))
1593 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1594 if (DECL_CONTEXT (olddecl))
1595 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
e1cd6e56
MS
1596 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1597 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
fee7654e 1598 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
864b83b9 1599 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
815951d8 1600 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
963d5758 1601 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
e0fff4b3
JM
1602 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1603 SET_OVERLOADED_OPERATOR_CODE
1604 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
0b60dfe3 1605 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
68642fb6 1606
0b60dfe3 1607 /* Optionally warn about more than one declaration for the same
0cbd7506
MS
1608 name, but don't warn about a function declaration followed by a
1609 definition. */
0b60dfe3
BK
1610 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1611 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
a1c65f9f 1612 /* Don't warn about extern decl followed by definition. */
0b60dfe3 1613 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
a1c65f9f 1614 /* Don't warn about friends, let add_friend take care of it. */
d63d5d0c 1615 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
0b60dfe3 1616 {
b323323f
LM
1617 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1618 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
0b60dfe3 1619 }
8d08fdba
MS
1620 }
1621
1622 /* Deal with C++: must preserve virtual function table size. */
1623 if (TREE_CODE (olddecl) == TYPE_DECL)
1624 {
926ce8bd
KH
1625 tree newtype = TREE_TYPE (newdecl);
1626 tree oldtype = TREE_TYPE (olddecl);
8d08fdba
MS
1627
1628 if (newtype != error_mark_node && oldtype != error_mark_node
1629 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
e93ee644
MM
1630 CLASSTYPE_FRIEND_CLASSES (newtype)
1631 = CLASSTYPE_FRIEND_CLASSES (oldtype);
7df87825 1632
970d6386 1633 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
8d08fdba
MS
1634 }
1635
8d08fdba
MS
1636 /* Copy all the DECL_... slots specified in the new decl
1637 except for any that we copy here from the old type. */
91d231cb 1638 DECL_ATTRIBUTES (newdecl)
f6897b10 1639 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
8d08fdba 1640
5566b478
MS
1641 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1642 {
e1f0e7a6
MM
1643 tree old_result;
1644 tree new_result;
1645 old_result = DECL_TEMPLATE_RESULT (olddecl);
1646 new_result = DECL_TEMPLATE_RESULT (newdecl);
1647 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
68642fb6 1648 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
4d85e00e
MM
1649 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1650 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
68642fb6 1651
3a47c4e4
AO
1652 DECL_ATTRIBUTES (old_result)
1653 = (*targetm.merge_decl_attributes) (old_result, new_result);
1654
e1f0e7a6
MM
1655 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1656 {
3a47c4e4
AO
1657 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1658 && DECL_INITIAL (new_result))
1659 {
1660 if (DECL_INITIAL (old_result))
1661 {
1662 DECL_INLINE (old_result) = 0;
1663 DECL_UNINLINABLE (old_result) = 1;
1664 }
1665 else
1666 {
1667 DECL_INLINE (old_result) = DECL_INLINE (new_result);
1668 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1669 }
1670 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1671 DECL_NOT_REALLY_EXTERN (old_result)
1672 = DECL_NOT_REALLY_EXTERN (new_result);
1673 DECL_INTERFACE_KNOWN (old_result)
1674 = DECL_INTERFACE_KNOWN (new_result);
1675 DECL_DECLARED_INLINE_P (old_result)
1676 = DECL_DECLARED_INLINE_P (new_result);
1677 }
1678 else
1679 {
1680 DECL_INLINE (old_result)
1681 |= DECL_INLINE (new_result);
1682 DECL_DECLARED_INLINE_P (old_result)
1683 |= DECL_DECLARED_INLINE_P (new_result);
1684 check_redeclaration_exception_specification (newdecl, olddecl);
1685 }
e1f0e7a6
MM
1686 }
1687
daa8df65 1688 /* If the new declaration is a definition, update the file and
72c4a4ca
GK
1689 line information on the declaration, and also make
1690 the old declaration the same definition. */
3a47c4e4 1691 if (DECL_INITIAL (new_result) != NULL_TREE)
daa8df65 1692 {
caf93cb0 1693 DECL_SOURCE_LOCATION (olddecl)
e1f0e7a6 1694 = DECL_SOURCE_LOCATION (old_result)
f31686a3 1695 = DECL_SOURCE_LOCATION (newdecl);
72c4a4ca 1696 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
26bcf8fc 1697 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
e1f0e7a6
MM
1698 DECL_ARGUMENTS (old_result)
1699 = DECL_ARGUMENTS (new_result);
c11889ce
MM
1700 }
1701
b1a19c7c 1702 return olddecl;
5566b478 1703 }
68642fb6 1704
8d08fdba
MS
1705 if (types_match)
1706 {
1707 /* Automatically handles default parameters. */
1708 tree oldtype = TREE_TYPE (olddecl);
e1cd6e56 1709 tree newtype;
8d08fdba 1710
e1cd6e56 1711 /* Merge the data types specified in the two decls. */
6da794e8 1712 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
e1cd6e56 1713
6da794e8 1714 /* If merge_types produces a non-typedef type, just use the old type. */
9076e292
JM
1715 if (TREE_CODE (newdecl) == TYPE_DECL
1716 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1717 newtype = oldtype;
1718
8d08fdba 1719 if (TREE_CODE (newdecl) == VAR_DECL)
17bbb839
MM
1720 {
1721 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1722 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
3db45ab5 1723 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
6c06fbce 1724 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
39703eb9
MM
1725 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1726 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1799e5d5
RH
1727
1728 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1729 if (DECL_LANG_SPECIFIC (olddecl)
1730 && CP_DECL_THREADPRIVATE_P (olddecl))
1731 {
1732 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1733 if (!DECL_LANG_SPECIFIC (newdecl))
1734 retrofit_lang_decl (newdecl);
1735
1736 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1737 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1738 }
17bbb839
MM
1739 }
1740
6da794e8 1741 /* Do this after calling `merge_types' so that default
8d08fdba 1742 parameters don't confuse us. */
e1f0e7a6
MM
1743 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1744 check_redeclaration_exception_specification (newdecl, olddecl);
8d08fdba
MS
1745 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1746
4a2f6dc0
VR
1747 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1748 check_default_args (newdecl);
1749
8d08fdba 1750 /* Lay the type out, unless already done. */
407f03b8 1751 if (! same_type_p (newtype, oldtype)
5566b478 1752 && TREE_TYPE (newdecl) != error_mark_node
5156628f 1753 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe
MS
1754 layout_type (TREE_TYPE (newdecl));
1755
5566b478
MS
1756 if ((TREE_CODE (newdecl) == VAR_DECL
1757 || TREE_CODE (newdecl) == PARM_DECL
1758 || TREE_CODE (newdecl) == RESULT_DECL
1759 || TREE_CODE (newdecl) == FIELD_DECL
1760 || TREE_CODE (newdecl) == TYPE_DECL)
5156628f 1761 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe 1762 layout_decl (newdecl, 0);
8d08fdba
MS
1763
1764 /* Merge the type qualifiers. */
1765 if (TREE_READONLY (newdecl))
1766 TREE_READONLY (olddecl) = 1;
1767 if (TREE_THIS_VOLATILE (newdecl))
1768 TREE_THIS_VOLATILE (olddecl) = 1;
5cefa0d9
JM
1769 if (TREE_NOTHROW (newdecl))
1770 TREE_NOTHROW (olddecl) = 1;
8d08fdba 1771
302a2cc5
JM
1772 /* Merge deprecatedness. */
1773 if (TREE_DEPRECATED (newdecl))
1774 TREE_DEPRECATED (olddecl) = 1;
1775
8d08fdba 1776 /* Merge the initialization information. */
8926095f
MS
1777 if (DECL_INITIAL (newdecl) == NULL_TREE
1778 && DECL_INITIAL (olddecl) != NULL_TREE)
1779 {
1780 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
f31686a3 1781 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
b0d06515
MM
1782 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1783 && DECL_LANG_SPECIFIC (newdecl)
4d85e00e 1784 && DECL_LANG_SPECIFIC (olddecl))
69ee8086
RH
1785 {
1786 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1da326c3 1787 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
69ee8086 1788 }
8926095f 1789 }
39211cd5
MS
1790
1791 /* Merge the section attribute.
0cbd7506 1792 We want to issue an error if the sections conflict but that must be
39211cd5
MS
1793 done later in decl_attributes since we are called before attributes
1794 are assigned. */
1795 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1796 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1797
a157febd
GK
1798 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1799 {
1800 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1801 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1331d16f 1802 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
220a35cc
RS
1803 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1804 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1805 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1331d16f
RS
1806 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1807 DECL_IS_PURE (newdecl) |= DECL_IS_PURE (olddecl);
c740732f
MM
1808 /* Keep the old RTL. */
1809 COPY_DECL_RTL (olddecl, newdecl);
1810 }
caf93cb0 1811 else if (TREE_CODE (newdecl) == VAR_DECL
c740732f
MM
1812 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1813 {
1814 /* Keep the old RTL. We cannot keep the old RTL if the old
1815 declaration was for an incomplete object and the new
1816 declaration is not since many attributes of the RTL will
1817 change. */
1818 COPY_DECL_RTL (olddecl, newdecl);
a157febd 1819 }
8d08fdba
MS
1820 }
1821 /* If cannot merge, then use the new type and qualifiers,
1822 and don't preserve the old rtl. */
1823 else
1824 {
1825 /* Clean out any memory we had of the old declaration. */
1826 tree oldstatic = value_member (olddecl, static_aggregates);
1827 if (oldstatic)
1828 TREE_VALUE (oldstatic) = error_mark_node;
1829
1830 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1831 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1832 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1833 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1834 }
1835
1836 /* Merge the storage class information. */
45806a3f
FS
1837 merge_weak (newdecl, olddecl);
1838
e92cc029 1839 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
794d4a61 1840 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
a9aedbc2
MS
1841 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1842 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1843 if (! DECL_EXTERNAL (olddecl))
1844 DECL_EXTERNAL (newdecl) = 0;
68642fb6 1845
50b56799 1846 new_template = NULL_TREE;
0b60dfe3 1847 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
8d08fdba 1848 {
fea10e36
AO
1849 bool new_redefines_gnu_inline = false;
1850
1851 if (new_defines_function
1852 && ((DECL_INTERFACE_KNOWN (olddecl)
1853 && TREE_CODE (olddecl) == FUNCTION_DECL)
1854 || (TREE_CODE (olddecl) == TEMPLATE_DECL
1855 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1856 == FUNCTION_DECL))))
3a47c4e4
AO
1857 {
1858 tree fn = olddecl;
1859
1860 if (TREE_CODE (fn) == TEMPLATE_DECL)
1861 fn = DECL_TEMPLATE_RESULT (olddecl);
1862
fea10e36 1863 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
3a47c4e4 1864 }
3a47c4e4 1865
fea10e36 1866 if (!new_redefines_gnu_inline)
3a47c4e4 1867 {
3a47c4e4
AO
1868 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1869 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1870 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1871 }
68642fb6 1872 DECL_TEMPLATE_INSTANTIATED (newdecl)
2b0a63a3 1873 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
c8094d83 1874
58fb06b4
NS
1875 /* If the OLDDECL is an instantiation and/or specialization,
1876 then the NEWDECL must be too. But, it may not yet be marked
1877 as such if the caller has created NEWDECL, but has not yet
1878 figured out that it is a redeclaration. */
1879 if (!DECL_USE_TEMPLATE (newdecl))
1880 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
c8094d83 1881
0b60dfe3
BK
1882 /* Don't really know how much of the language-specific
1883 values we should copy from old to new. */
1884 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
caf93cb0 1885 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
e2500fed 1886 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
0b60dfe3 1887 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
4684cd27 1888 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
50b56799
MM
1889 if (DECL_TEMPLATE_INFO (newdecl))
1890 new_template = DECL_TI_TEMPLATE (newdecl);
fbf1c34b 1891 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3febd123 1892 DECL_INITIALIZED_IN_CLASS_P (newdecl)
0cbd7506 1893 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
0b60dfe3 1894 olddecl_friend = DECL_FRIEND_P (olddecl);
d63d5d0c
ILT
1895 hidden_friend = (DECL_ANTICIPATED (olddecl)
1896 && DECL_HIDDEN_FRIEND_P (olddecl)
1897 && newdecl_is_friend);
6a629cac
MM
1898
1899 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1900 if (TREE_CODE (newdecl) == FUNCTION_DECL
1901 || DECL_FUNCTION_TEMPLATE_P (newdecl))
bb5e8a7f
MM
1902 {
1903 DECL_BEFRIENDING_CLASSES (newdecl)
1904 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1905 DECL_BEFRIENDING_CLASSES (olddecl));
ca9e1382
KL
1906 /* DECL_THUNKS is only valid for virtual functions,
1907 otherwise it is a DECL_FRIEND_CONTEXT. */
1908 if (DECL_VIRTUAL_P (newdecl))
1909 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
bb5e8a7f 1910 }
8d08fdba
MS
1911 }
1912
8d08fdba
MS
1913 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1914 {
68642fb6
UD
1915 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1916 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
75650646
MM
1917 {
1918 /* If newdecl is not a specialization, then it is not a
1919 template-related function at all. And that means that we
bf7c02dd 1920 should have exited above, returning 0. */
50bc768d 1921 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
75650646 1922
68642fb6 1923 if (TREE_USED (olddecl))
75650646 1924 /* From [temp.expl.spec]:
68642fb6 1925
75650646
MM
1926 If a template, a member template or the member of a class
1927 template is explicitly specialized then that
1928 specialization shall be declared before the first use of
1929 that specialization that would cause an implicit
1930 instantiation to take place, in every translation unit in
1931 which such a use occurs. */
9e637a26 1932 error ("explicit specialization of %qD after first use",
75650646
MM
1933 olddecl);
1934
1935 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
d03d18e8 1936
b9e75696
JM
1937 /* Don't propagate visibility from the template to the
1938 specialization here. We'll do that in determine_visibility if
1939 appropriate. */
1940 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
1941
d03d18e8
KL
1942 /* [temp.expl.spec/14] We don't inline explicit specialization
1943 just because the primary template says so. */
75650646 1944 }
3a47c4e4
AO
1945 else if (new_defines_function && DECL_INITIAL (olddecl))
1946 {
1947 /* C++ is always in in unit-at-a-time mode, so we never
1948 inline re-defined extern inline functions. */
1949 DECL_INLINE (newdecl) = 0;
1950 DECL_UNINLINABLE (newdecl) = 1;
1951 }
d03d18e8
KL
1952 else
1953 {
1954 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1955 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
faae18ab 1956
d03d18e8 1957 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
faae18ab 1958
caf93cb0 1959 /* If either decl says `inline', this fn is inline, unless
d03d18e8
KL
1960 its definition was passed already. */
1961 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
1962 DECL_INLINE (olddecl) = 1;
1963 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
1964
1965 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1966 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
c536a6a7
RG
1967
1968 DECL_DISREGARD_INLINE_LIMITS (newdecl)
1969 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
1970 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
1971 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
d03d18e8 1972 }
97055d5c 1973
5daf7c0a
JM
1974 /* Preserve abstractness on cloned [cd]tors. */
1975 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1976
700f8a87
MS
1977 if (! types_match)
1978 {
5d2ed28c 1979 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
92643fea 1980 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
84b8b0e0 1981 COPY_DECL_RTL (newdecl, olddecl);
5566b478
MS
1982 }
1983 if (! types_match || new_defines_function)
1984 {
6f1b4c42
JM
1985 /* These need to be copied so that the names are available.
1986 Note that if the types do match, we'll preserve inline
1987 info and other bits, but if not, we won't. */
700f8a87
MS
1988 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1989 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
700f8a87 1990 }
8d08fdba
MS
1991 if (new_defines_function)
1992 /* If defining a function declared with other language
1993 linkage, use the previously declared language linkage. */
5d2ed28c 1994 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
6f1b4c42 1995 else if (types_match)
8d08fdba
MS
1996 {
1997 /* If redeclaring a builtin function, and not a definition,
1998 it stays built in. */
1999 if (DECL_BUILT_IN (olddecl))
2000 {
26db82d8 2001 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
39211cd5 2002 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
8d08fdba
MS
2003 /* If we're keeping the built-in definition, keep the rtl,
2004 regardless of declaration matches. */
84b8b0e0 2005 COPY_DECL_RTL (olddecl, newdecl);
8d08fdba 2006 }
8d08fdba
MS
2007
2008 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
8d08fdba
MS
2009 /* Don't clear out the arguments if we're redefining a function. */
2010 if (DECL_ARGUMENTS (olddecl))
2011 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2012 }
2013 }
0b1161fc
MM
2014 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2015 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
a9aedbc2 2016
8d08fdba
MS
2017 /* Now preserve various other info from the definition. */
2018 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2019 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2020 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
92643fea 2021 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
8d08fdba 2022
d7afec4b 2023 /* Warn about conflicting visibility specifications. */
c8094d83 2024 if (DECL_VISIBILITY_SPECIFIED (olddecl)
73a8adb6 2025 && DECL_VISIBILITY_SPECIFIED (newdecl)
d7afec4b
ND
2026 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2027 {
dee15844
JM
2028 warning (OPT_Wattributes, "%q+D: visibility attribute ignored "
2029 "because it", newdecl);
5c498b10
DD
2030 warning (OPT_Wattributes, "%Jconflicts with previous "
2031 "declaration here", olddecl);
d7afec4b
ND
2032 }
2033 /* Choose the declaration which specified visibility. */
2034 if (DECL_VISIBILITY_SPECIFIED (olddecl))
facef326 2035 {
facef326 2036 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
d7afec4b
ND
2037 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2038 }
3db45ab5 2039 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
820cc88f
DB
2040 so keep this behavior. */
2041 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2042 {
2043 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2044 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2045 }
facef326 2046
1d786913
MM
2047 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2048 with that from NEWDECL below. */
2049 if (DECL_LANG_SPECIFIC (olddecl))
2050 {
c8094d83 2051 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
1d786913
MM
2052 != DECL_LANG_SPECIFIC (newdecl));
2053 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2054 }
2055
8d08fdba
MS
2056 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2057 {
2058 int function_size;
8d08fdba 2059
820cc88f 2060 function_size = sizeof (struct tree_decl_common);
8d08fdba 2061
730e1556
KG
2062 memcpy ((char *) olddecl + sizeof (struct tree_common),
2063 (char *) newdecl + sizeof (struct tree_common),
2064 function_size - sizeof (struct tree_common));
8d08fdba 2065
820cc88f
DB
2066 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2067 (char *) newdecl + sizeof (struct tree_decl_common),
2068 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
50b56799 2069 if (new_template)
b3445994
MM
2070 /* If newdecl is a template instantiation, it is possible that
2071 the following sequence of events has occurred:
2072
2073 o A friend function was declared in a class template. The
2074 class template was instantiated.
2075
2076 o The instantiation of the friend declaration was
2077 recorded on the instantiation list, and is newdecl.
2078
2079 o Later, however, instantiate_class_template called pushdecl
2080 on the newdecl to perform name injection. But, pushdecl in
2081 turn called duplicate_decls when it discovered that another
2082 declaration of a global function with the same name already
2083 existed.
2084
2085 o Here, in duplicate_decls, we decided to clobber newdecl.
2086
2087 If we're going to do that, we'd better make sure that
2088 olddecl, and not newdecl, is on the list of
2089 instantiations so that if we try to do the instantiation
2090 again we won't get the clobbered declaration. */
caf93cb0 2091 reregister_specialization (newdecl,
50b56799 2092 new_template,
b3445994 2093 olddecl);
8d08fdba
MS
2094 }
2095 else
2096 {
820cc88f 2097 size_t size = tree_code_size (TREE_CODE (olddecl));
730e1556
KG
2098 memcpy ((char *) olddecl + sizeof (struct tree_common),
2099 (char *) newdecl + sizeof (struct tree_common),
820cc88f 2100 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
3db45ab5 2101 switch (TREE_CODE (olddecl))
820cc88f
DB
2102 {
2103 case LABEL_DECL:
2104 case VAR_DECL:
2105 case RESULT_DECL:
2106 case PARM_DECL:
2107 case FIELD_DECL:
2108 case TYPE_DECL:
2109 case CONST_DECL:
2110 {
2111 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2112 (char *) newdecl + sizeof (struct tree_decl_common),
2113 size - sizeof (struct tree_decl_common)
2114 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2115 }
2116 break;
2117 default:
2118 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2119 (char *) newdecl + sizeof (struct tree_decl_common),
2120 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2121 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2122 break;
2123 }
8d08fdba 2124 }
8d08fdba
MS
2125 DECL_UID (olddecl) = olddecl_uid;
2126 if (olddecl_friend)
2127 DECL_FRIEND_P (olddecl) = 1;
d63d5d0c
ILT
2128 if (hidden_friend)
2129 {
2130 DECL_ANTICIPATED (olddecl) = 1;
2131 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2132 }
8d08fdba 2133
d9525bec
BK
2134 /* NEWDECL contains the merged attribute lists.
2135 Update OLDDECL to be the same. */
91d231cb 2136 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
d9525bec 2137
16e31964
DS
2138 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2139 so that encode_section_info has a chance to look at the new decl
2140 flags and attributes. */
caf93cb0 2141 if (DECL_RTL_SET_P (olddecl)
16e31964
DS
2142 && (TREE_CODE (olddecl) == FUNCTION_DECL
2143 || (TREE_CODE (olddecl) == VAR_DECL
2144 && TREE_STATIC (olddecl))))
0e6df31e 2145 make_decl_rtl (olddecl);
16e31964 2146
1d786913
MM
2147 /* The NEWDECL will no longer be needed. Because every out-of-class
2148 declaration of a member results in a call to duplicate_decls,
2149 freeing these nodes represents in a significant savings. */
2150 ggc_free (newdecl);
2151
b1a19c7c 2152 return olddecl;
8d08fdba 2153}
8d08fdba 2154\f
8251199e 2155/* Return zero if the declaration NEWDECL is valid
8d08fdba
MS
2156 when the declaration OLDDECL (assumed to be for the same name)
2157 has already been seen.
2158 Otherwise return an error message format string with a %s
2159 where the identifier should go. */
2160
d8e178a0 2161static const char *
11f6b451 2162redeclaration_error_message (tree newdecl, tree olddecl)
8d08fdba
MS
2163{
2164 if (TREE_CODE (newdecl) == TYPE_DECL)
2165 {
2166 /* Because C++ can put things into name space for free,
2167 constructs like "typedef struct foo { ... } foo"
2168 would look like an erroneous redeclaration. */
3bfdc719 2169 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
6aed477a 2170 return NULL;
8d08fdba 2171 else
2d01edd7 2172 return "redefinition of %q#D";
8d08fdba
MS
2173 }
2174 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2175 {
2176 /* If this is a pure function, its olddecl will actually be
2177 the original initialization to `0' (which we force to call
2178 abort()). Don't complain about redefinition in this case. */
d1fc3bbd
AO
2179 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2180 && DECL_INITIAL (olddecl) == NULL_TREE)
6aed477a 2181 return NULL;
8d08fdba 2182
2c73f9f5 2183 /* If both functions come from different namespaces, this is not
a1c65f9f 2184 a redeclaration - this is a conflict with a used function. */
6eb3bb27 2185 if (DECL_NAMESPACE_SCOPE_P (olddecl)
713101a6
AO
2186 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2187 && ! decls_match (olddecl, newdecl))
2d01edd7 2188 return "%qD conflicts with used function";
2c73f9f5 2189
db5ae43f 2190 /* We'll complain about linkage mismatches in
0cbd7506 2191 warn_extern_redeclared_static. */
db5ae43f 2192
2c73f9f5 2193 /* Defining the same name twice is no good. */
8d08fdba 2194 if (DECL_INITIAL (olddecl) != NULL_TREE
faae18ab 2195 && DECL_INITIAL (newdecl) != NULL_TREE)
8d08fdba
MS
2196 {
2197 if (DECL_NAME (olddecl) == NULL_TREE)
2d01edd7 2198 return "%q#D not declared in class";
3a47c4e4
AO
2199 else if (!GNU_INLINE_P (olddecl)
2200 || GNU_INLINE_P (newdecl))
2d01edd7 2201 return "redefinition of %q#D";
8d08fdba 2202 }
3a47c4e4
AO
2203
2204 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2205 {
2206 bool olda = GNU_INLINE_P (olddecl);
2207 bool newa = GNU_INLINE_P (newdecl);
2208
2209 if (olda != newa)
2210 {
2211 if (newa)
2212 return "%q+D redeclared inline with %<gnu_inline%> attribute";
2213 else
2214 return "%q+D redeclared inline without %<gnu_inline%> attribute";
2215 }
2216 }
2217
6aed477a 2218 return NULL;
8d08fdba 2219 }
51c184be
MS
2220 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2221 {
5bd61841
MM
2222 tree nt, ot;
2223
2224 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2225 {
2226 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2227 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2d01edd7 2228 return "redefinition of %q#D";
5bd61841
MM
2229 return NULL;
2230 }
2231
2232 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
caf93cb0 2233 || (DECL_TEMPLATE_RESULT (newdecl)
5bd61841
MM
2234 == DECL_TEMPLATE_RESULT (olddecl)))
2235 return NULL;
2236
2237 nt = DECL_TEMPLATE_RESULT (newdecl);
2238 if (DECL_TEMPLATE_INFO (nt))
2239 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2240 ot = DECL_TEMPLATE_RESULT (olddecl);
2241 if (DECL_TEMPLATE_INFO (ot))
2242 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
3a47c4e4
AO
2243 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2244 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2d01edd7 2245 return "redefinition of %q#D";
5bd61841 2246
3a47c4e4
AO
2247 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2248 {
2249 bool olda = GNU_INLINE_P (ot);
2250 bool newa = GNU_INLINE_P (nt);
2251
2252 if (olda != newa)
2253 {
2254 if (newa)
2255 return "%q+D redeclared inline with %<gnu_inline%> attribute";
2256 else
2257 return "%q+D redeclared inline without %<gnu_inline%> attribute";
2258 }
2259 }
2260
9b7dd5e8
DG
2261 /* Core issue #226 (C++0x):
2262
2263 If a friend function template declaration specifies a
2264 default template-argument, that declaration shall be a
2265 definition and shall be the only declaration of the
2266 function template in the translation unit. */
c1ae8be5 2267 if ((cxx_dialect != cxx98)
9b7dd5e8
DG
2268 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2269 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2270 /*is_primary=*/1, /*is_partial=*/0,
2271 /*is_friend_decl=*/2))
2272 return "redeclaration of friend %q#D may not have default template arguments";
2273
5bd61841 2274 return NULL;
51c184be 2275 }
31a79236 2276 else if (TREE_CODE (newdecl) == VAR_DECL
1799e5d5
RH
2277 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2278 && (! DECL_LANG_SPECIFIC (olddecl)
2279 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2280 || DECL_THREAD_LOCAL_P (newdecl)))
31a79236
JJ
2281 {
2282 /* Only variables can be thread-local, and all declarations must
2283 agree on this property. */
2284 if (DECL_THREAD_LOCAL_P (newdecl))
2285 return "thread-local declaration of %q#D follows "
2286 "non-thread-local declaration";
2287 else
2288 return "non-thread-local declaration of %q#D follows "
2289 "thread-local declaration";
2290 }
1f51a992 2291 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
8d08fdba 2292 {
555551c2
MM
2293 /* The objects have been declared at namespace scope. If either
2294 is a member of an anonymous union, then this is an invalid
2295 redeclaration. For example:
2296
2297 int i;
2298 union { int i; };
2299
2300 is invalid. */
aedfac0e
PC
2301 if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2302 || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
555551c2
MM
2303 return "redeclaration of %q#D";
2304 /* If at least one declaration is a reference, there is no
2305 conflict. For example:
2306
2307 int i = 3;
2308 extern int i;
2309
2310 is valid. */
8d08fdba 2311 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
6aed477a 2312 return NULL;
8926095f 2313 /* Reject two definitions. */
2d01edd7 2314 return "redefinition of %q#D";
8d08fdba
MS
2315 }
2316 else
2317 {
2318 /* Objects declared with block scope: */
2319 /* Reject two definitions, and reject a definition
2320 together with an external reference. */
2321 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2d01edd7 2322 return "redeclaration of %q#D";
6aed477a 2323 return NULL;
8d08fdba
MS
2324 }
2325}
2326\f
1799e5d5
RH
2327/* Hash and equality functions for the named_label table. */
2328
2329static hashval_t
2330named_label_entry_hash (const void *data)
2331{
2332 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2333 return DECL_UID (ent->label_decl);
2334}
2335
2336static int
2337named_label_entry_eq (const void *a, const void *b)
2338{
2339 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2340 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2341 return ent_a->label_decl == ent_b->label_decl;
2342}
2343
acef433b 2344/* Create a new label, named ID. */
8d08fdba 2345
acef433b 2346static tree
11f6b451 2347make_label_decl (tree id, int local_p)
8d08fdba 2348{
1799e5d5
RH
2349 struct named_label_entry *ent;
2350 void **slot;
acef433b 2351 tree decl;
8d08fdba 2352
acef433b 2353 decl = build_decl (LABEL_DECL, id, void_type_node);
acef433b
MM
2354
2355 DECL_CONTEXT (decl) = current_function_decl;
2356 DECL_MODE (decl) = VOIDmode;
2357 C_DECLARED_LABEL_FLAG (decl) = local_p;
8d08fdba 2358
acef433b
MM
2359 /* Say where one reference is to the label, for the sake of the
2360 error if it is not defined. */
f31686a3 2361 DECL_SOURCE_LOCATION (decl) = input_location;
acef433b
MM
2362
2363 /* Record the fact that this identifier is bound to this label. */
2364 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2365
1799e5d5
RH
2366 /* Create the label htab for the function on demand. */
2367 if (!named_labels)
2368 named_labels = htab_create_ggc (13, named_label_entry_hash,
2369 named_label_entry_eq, NULL);
6625cdb5 2370
1799e5d5
RH
2371 /* Record this label on the list of labels used in this function.
2372 We do this before calling make_label_decl so that we get the
2373 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2374 ent = GGC_CNEW (struct named_label_entry);
2375 ent->label_decl = decl;
6625cdb5 2376
1799e5d5
RH
2377 slot = htab_find_slot (named_labels, ent, INSERT);
2378 gcc_assert (*slot == NULL);
2379 *slot = ent;
2380
2381 return decl;
acef433b 2382}
8d08fdba 2383
acef433b
MM
2384/* Look for a label named ID in the current function. If one cannot
2385 be found, create one. (We keep track of used, but undefined,
2386 labels, and complain about them at the end of a function.) */
8d08fdba 2387
68642fb6 2388tree
11f6b451 2389lookup_label (tree id)
acef433b
MM
2390{
2391 tree decl;
8d08fdba 2392
22ffcc6f 2393 timevar_push (TV_NAME_LOOKUP);
acef433b
MM
2394 /* You can't use labels at global scope. */
2395 if (current_function_decl == NULL_TREE)
2396 {
2d01edd7 2397 error ("label %qE referenced outside of any function", id);
22ffcc6f 2398 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
acef433b 2399 }
68642fb6 2400
acef433b
MM
2401 /* See if we've already got this label. */
2402 decl = IDENTIFIER_LABEL_VALUE (id);
2403 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
22ffcc6f 2404 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba 2405
acef433b 2406 decl = make_label_decl (id, /*local_p=*/0);
22ffcc6f 2407 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba
MS
2408}
2409
acef433b 2410/* Declare a local label named ID. */
8d08fdba
MS
2411
2412tree
11f6b451 2413declare_local_label (tree id)
8d08fdba 2414{
1799e5d5 2415 tree decl, shadow;
8d08fdba 2416
acef433b 2417 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
1799e5d5
RH
2418 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2419 shadow = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2420 current_binding_level->shadowed_labels);
2421 current_binding_level->shadowed_labels = shadow;
2422
acef433b 2423 decl = make_label_decl (id, /*local_p=*/1);
1799e5d5 2424 TREE_VALUE (shadow) = decl;
68642fb6 2425
acef433b 2426 return decl;
8d08fdba
MS
2427}
2428
6625cdb5
JM
2429/* Returns nonzero if it is ill-formed to jump past the declaration of
2430 DECL. Returns 2 if it's also a real problem. */
2431
2432static int
11f6b451 2433decl_jump_unsafe (tree decl)
6625cdb5 2434{
b88b7ced
AP
2435 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2436 || TREE_TYPE (decl) == error_mark_node)
6625cdb5
JM
2437 return 0;
2438
6c06fbce
MM
2439 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
2440 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2441 return 2;
2442
2443 if (pod_type_p (TREE_TYPE (decl)))
6625cdb5
JM
2444 return 0;
2445
6c06fbce 2446 /* The POD stuff is just pedantry; why should it matter if the class
6625cdb5 2447 contains a field of pointer to member type? */
6625cdb5
JM
2448 return 1;
2449}
2450
1799e5d5
RH
2451/* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2452
2453static void
2454identify_goto (tree decl, const location_t *locus)
2455{
2456 if (decl)
2457 pedwarn ("jump to label %qD", decl);
2458 else
2459 pedwarn ("jump to case label");
2460 if (locus)
2461 pedwarn ("%H from here", locus);
2462}
2463
6625cdb5
JM
2464/* Check that a single previously seen jump to a newly defined label
2465 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2466 the jump context; NAMES are the names in scope in LEVEL at the jump
3db45ab5 2467 context; LOCUS is the source position of the jump or 0. Returns
1799e5d5 2468 true if all is well. */
6625cdb5 2469
1799e5d5
RH
2470static bool
2471check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2472 bool exited_omp, const location_t *locus)
2473{
2474 struct cp_binding_level *b;
2475 bool identified = false, saw_eh = false, saw_omp = false;
2476
2477 if (exited_omp)
2478 {
2479 identify_goto (decl, locus);
2480 error (" exits OpenMP structured block");
2481 identified = saw_omp = true;
2482 }
2483
2484 for (b = current_binding_level; b ; b = b->level_chain)
2485 {
2486 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2487
2488 for (new_decls = b->names; new_decls != old_decls;
6625cdb5
JM
2489 new_decls = TREE_CHAIN (new_decls))
2490 {
2491 int problem = decl_jump_unsafe (new_decls);
2492 if (! problem)
2493 continue;
2494
1799e5d5 2495 if (!identified)
6625cdb5 2496 {
1799e5d5
RH
2497 identify_goto (decl, locus);
2498 identified = true;
6625cdb5 2499 }
826840d9 2500 if (problem > 1)
dee15844 2501 error (" crosses initialization of %q+#D", new_decls);
6625cdb5 2502 else
dee15844 2503 pedwarn (" enters scope of non-POD %q+#D", new_decls);
6625cdb5
JM
2504 }
2505
2506 if (b == level)
2507 break;
1799e5d5 2508 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
6625cdb5 2509 {
1799e5d5 2510 if (!identified)
6625cdb5 2511 {
1799e5d5
RH
2512 identify_goto (decl, locus);
2513 identified = true;
6625cdb5 2514 }
a7e8c268 2515 if (b->kind == sk_try)
826840d9
RH
2516 error (" enters try block");
2517 else
2518 error (" enters catch block");
1799e5d5
RH
2519 saw_eh = true;
2520 }
2521 if (b->kind == sk_omp && !saw_omp)
2522 {
2523 if (!identified)
2524 {
2525 identify_goto (decl, locus);
2526 identified = true;
2527 }
2528 error (" enters OpenMP structured block");
2529 saw_omp = true;
6625cdb5
JM
2530 }
2531 }
6625cdb5 2532
1799e5d5 2533 return !identified;
6625cdb5
JM
2534}
2535
2536static void
1799e5d5 2537check_previous_goto (tree decl, struct named_label_use_entry *use)
6625cdb5 2538{
1799e5d5
RH
2539 check_previous_goto_1 (decl, use->binding_level,
2540 use->names_in_scope, use->in_omp_scope,
2541 &use->o_goto_locus);
6625cdb5
JM
2542}
2543
1799e5d5
RH
2544static bool
2545check_switch_goto (struct cp_binding_level* level)
6625cdb5 2546{
1799e5d5 2547 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
6625cdb5
JM
2548}
2549
2550/* Check that a new jump to a label DECL is OK. Called by
2551 finish_goto_stmt. */
2552
2553void
11f6b451 2554check_goto (tree decl)
6625cdb5 2555{
1799e5d5
RH
2556 struct named_label_entry *ent, dummy;
2557 bool saw_catch = false, identified = false;
6625cdb5 2558 tree bad;
6625cdb5 2559
1799e5d5
RH
2560 /* We can't know where a computed goto is jumping.
2561 So we assume that it's OK. */
2562 if (TREE_CODE (decl) != LABEL_DECL)
2563 return;
2564
2565 /* We didn't record any information about this label when we created it,
2566 and there's not much point since it's trivial to analyze as a return. */
2567 if (decl == cdtor_label)
e3cd9945
APB
2568 return;
2569
1799e5d5
RH
2570 dummy.label_decl = decl;
2571 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2572 gcc_assert (ent != NULL);
2573
6625cdb5
JM
2574 /* If the label hasn't been defined yet, defer checking. */
2575 if (! DECL_INITIAL (decl))
2576 {
1799e5d5 2577 struct named_label_use_entry *new_use;
6625cdb5 2578
1799e5d5
RH
2579 /* Don't bother creating another use if the last goto had the
2580 same data, and will therefore create the same set of errors. */
2581 if (ent->uses
2582 && ent->uses->names_in_scope == current_binding_level->names)
2583 return;
6625cdb5 2584
1799e5d5
RH
2585 new_use = GGC_NEW (struct named_label_use_entry);
2586 new_use->binding_level = current_binding_level;
2587 new_use->names_in_scope = current_binding_level->names;
2588 new_use->o_goto_locus = input_location;
2589 new_use->in_omp_scope = false;
2590
2591 new_use->next = ent->uses;
2592 ent->uses = new_use;
2593 return;
2594 }
6625cdb5 2595
1799e5d5
RH
2596 if (ent->in_try_scope || ent->in_catch_scope
2597 || ent->in_omp_scope || ent->bad_decls)
6625cdb5 2598 {
dee15844 2599 pedwarn ("jump to label %q+D", decl);
6625cdb5 2600 pedwarn (" from here");
1799e5d5 2601 identified = true;
6625cdb5
JM
2602 }
2603
1799e5d5 2604 for (bad = ent->bad_decls; bad; bad = TREE_CHAIN (bad))
6625cdb5
JM
2605 {
2606 tree b = TREE_VALUE (bad);
2607 int u = decl_jump_unsafe (b);
2608
2609 if (u > 1 && DECL_ARTIFICIAL (b))
1799e5d5
RH
2610 {
2611 /* Can't skip init of __exception_info. */
2612 error ("%J enters catch block", b);
2613 saw_catch = true;
2614 }
6625cdb5 2615 else if (u > 1)
dee15844 2616 error (" skips initialization of %q+#D", b);
6625cdb5 2617 else
dee15844 2618 pedwarn (" enters scope of non-POD %q+#D", b);
6625cdb5
JM
2619 }
2620
1799e5d5 2621 if (ent->in_try_scope)
6625cdb5 2622 error (" enters try block");
1799e5d5 2623 else if (ent->in_catch_scope && !saw_catch)
826840d9 2624 error (" enters catch block");
1799e5d5
RH
2625
2626 if (ent->in_omp_scope)
2627 error (" enters OpenMP structured block");
2628 else if (flag_openmp)
2629 {
2630 struct cp_binding_level *b;
2631 for (b = current_binding_level; b ; b = b->level_chain)
2632 {
2633 if (b == ent->binding_level)
2634 break;
2635 if (b->kind == sk_omp)
2636 {
2637 if (!identified)
2638 {
2639 pedwarn ("jump to label %q+D", decl);
2640 pedwarn (" from here");
2641 identified = true;
2642 }
2643 error (" exits OpenMP structured block");
2644 break;
2645 }
2646 }
2647 }
2648}
2649
2650/* Check that a return is ok wrt OpenMP structured blocks.
2651 Called by finish_return_stmt. Returns true if all is well. */
2652
2653bool
2654check_omp_return (void)
2655{
2656 struct cp_binding_level *b;
2657 for (b = current_binding_level; b ; b = b->level_chain)
2658 if (b->kind == sk_omp)
2659 {
2660 error ("invalid exit from OpenMP structured block");
2661 return false;
2662 }
2663 return true;
6625cdb5
JM
2664}
2665
8d08fdba 2666/* Define a label, specifying the location in the source file.
b9c87401 2667 Return the LABEL_DECL node for the label. */
8d08fdba
MS
2668
2669tree
5b030314 2670define_label (location_t location, tree name)
8d08fdba 2671{
1799e5d5 2672 struct named_label_entry *ent, dummy;
926ce8bd 2673 struct cp_binding_level *p;
1799e5d5 2674 tree decl;
6625cdb5 2675
22ffcc6f 2676 timevar_push (TV_NAME_LOOKUP);
1799e5d5
RH
2677
2678 decl = lookup_label (name);
2679
2680 dummy.label_decl = decl;
2681 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2682 gcc_assert (ent != NULL);
8d08fdba 2683
3dc9aec6 2684 /* After labels, make any new cleanups in the function go into their
8d08fdba 2685 own new (temporary) binding contour. */
caf93cb0
EC
2686 for (p = current_binding_level;
2687 p->kind != sk_function_parms;
a7e8c268 2688 p = p->level_chain)
3dc9aec6 2689 p->more_cleanups_ok = 0;
8d08fdba 2690
e1cd6e56 2691 if (name == get_identifier ("wchar_t"))
33bd39a2 2692 pedwarn ("label named wchar_t");
e1cd6e56 2693
8d08fdba 2694 if (DECL_INITIAL (decl) != NULL_TREE)
417fa55b
LM
2695 {
2696 error ("duplicate label %qD", decl);
2697 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
2698 }
8d08fdba
MS
2699 else
2700 {
1799e5d5
RH
2701 struct named_label_use_entry *use;
2702
8d08fdba
MS
2703 /* Mark label as having been defined. */
2704 DECL_INITIAL (decl) = error_mark_node;
2705 /* Say where in the source. */
f31686a3 2706 DECL_SOURCE_LOCATION (decl) = location;
1799e5d5
RH
2707
2708 ent->binding_level = current_binding_level;
2709 ent->names_in_scope = current_binding_level->names;
2710
2711 for (use = ent->uses; use ; use = use->next)
2712 check_previous_goto (decl, use);
2713 ent->uses = NULL;
8d08fdba 2714 }
b9c87401 2715
be99edf8 2716 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba
MS
2717}
2718
a5894242
MS
2719struct cp_switch
2720{
e2500fed 2721 struct cp_binding_level *level;
a5894242 2722 struct cp_switch *next;
56cb9733
MM
2723 /* The SWITCH_STMT being built. */
2724 tree switch_stmt;
2725 /* A splay-tree mapping the low element of a case range to the high
2726 element, or NULL_TREE if there is no high element. Used to
2727 determine whether or not a new case label duplicates an old case
2728 label. We need a tree, rather than simply a hash table, because
2729 of the GNU case range extension. */
2730 splay_tree cases;
a5894242
MS
2731};
2732
56cb9733
MM
2733/* A stack of the currently active switch statements. The innermost
2734 switch statement is on the top of the stack. There is no need to
2735 mark the stack for garbage collection because it is only active
2736 during the processing of the body of a function, and we never
2737 collect at that point. */
5362b086 2738
a5894242
MS
2739static struct cp_switch *switch_stack;
2740
56cb9733
MM
2741/* Called right after a switch-statement condition is parsed.
2742 SWITCH_STMT is the switch statement being parsed. */
2743
a5894242 2744void
11f6b451 2745push_switch (tree switch_stmt)
a5894242 2746{
0ac1b889 2747 struct cp_switch *p = XNEW (struct cp_switch);
a5894242
MS
2748 p->level = current_binding_level;
2749 p->next = switch_stack;
56cb9733
MM
2750 p->switch_stmt = switch_stmt;
2751 p->cases = splay_tree_new (case_compare, NULL, NULL);
a5894242
MS
2752 switch_stack = p;
2753}
2754
2755void
11f6b451 2756pop_switch (void)
a5894242 2757{
6de9cd9a 2758 struct cp_switch *cs = switch_stack;
fbc315db 2759 location_t switch_location;
6de9cd9a
DN
2760
2761 /* Emit warnings as needed. */
fbc315db
ILT
2762 if (EXPR_HAS_LOCATION (cs->switch_stmt))
2763 switch_location = EXPR_LOCATION (cs->switch_stmt);
2764 else
2765 switch_location = input_location;
dddf9a0a
AP
2766 if (!processing_template_decl)
2767 c_do_switch_warnings (cs->cases, switch_location,
2768 SWITCH_STMT_TYPE (cs->switch_stmt),
2769 SWITCH_STMT_COND (cs->switch_stmt));
5362b086 2770
56cb9733 2771 splay_tree_delete (cs->cases);
a5894242 2772 switch_stack = switch_stack->next;
bedda2da 2773 free (cs);
a5894242
MS
2774}
2775
b0a1da19
JM
2776/* Note that we've seen a definition of a case label, and complain if this
2777 is a bad place for one. */
e92cc029 2778
3e4d04a1 2779tree
11f6b451 2780finish_case_label (tree low_value, tree high_value)
8d08fdba 2781{
3e4d04a1 2782 tree cond, r;
926ce8bd 2783 struct cp_binding_level *p;
a5894242 2784
56cb9733
MM
2785 if (processing_template_decl)
2786 {
8f17b5c5
MM
2787 tree label;
2788
56cb9733
MM
2789 /* For templates, just add the case label; we'll do semantic
2790 analysis at instantiation-time. */
8f17b5c5 2791 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
3e4d04a1 2792 return add_stmt (build_case_label (low_value, high_value, label));
56cb9733
MM
2793 }
2794
2795 /* Find the condition on which this switch statement depends. */
ebaae582 2796 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
56cb9733
MM
2797 if (cond && TREE_CODE (cond) == TREE_LIST)
2798 cond = TREE_VALUE (cond);
56cb9733 2799
1799e5d5
RH
2800 if (!check_switch_goto (switch_stack->level))
2801 return error_mark_node;
2802
a6c0a76c
SB
2803 r = c_add_case_label (switch_stack->cases, cond, TREE_TYPE (cond),
2804 low_value, high_value);
8d08fdba 2805
3dc9aec6 2806 /* After labels, make any new cleanups in the function go into their
8d08fdba 2807 own new (temporary) binding contour. */
caf93cb0
EC
2808 for (p = current_binding_level;
2809 p->kind != sk_function_parms;
a7e8c268 2810 p = p->level_chain)
3dc9aec6 2811 p->more_cleanups_ok = 0;
3e4d04a1
RH
2812
2813 return r;
8d08fdba
MS
2814}
2815\f
7ddedda4
MM
2816/* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2817
e2500fed 2818static hashval_t
11f6b451 2819typename_hash (const void* k)
7ddedda4 2820{
e2500fed 2821 hashval_t hash;
741ac903 2822 const_tree const t = (const_tree) k;
7ddedda4 2823
7bdfd72e
KG
2824 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2825 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
7ddedda4
MM
2826
2827 return hash;
2828}
2829
fc6a28d7
MM
2830typedef struct typename_info {
2831 tree scope;
2832 tree name;
2833 tree template_id;
2834 bool enum_p;
2835 bool class_p;
2836} typename_info;
2837
06d40de8
DG
2838/* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
2839 really of type `typename_info*' */
7ddedda4 2840
e2500fed 2841static int
11f6b451 2842typename_compare (const void * k1, const void * k2)
7ddedda4 2843{
741ac903
KG
2844 const_tree const t1 = (const_tree) k1;
2845 const typename_info *const t2 = (const typename_info *) k2;
fc6a28d7
MM
2846
2847 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2848 && TYPE_CONTEXT (t1) == t2->scope
2849 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2850 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2851 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
7ddedda4
MM
2852}
2853
45869a6c 2854/* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
fc6a28d7 2855 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
c8094d83 2856
45869a6c
MM
2857 Returns the new TYPENAME_TYPE. */
2858
e2500fed
GK
2859static GTY ((param_is (union tree_node))) htab_t typename_htab;
2860
8ce33230 2861static tree
fc6a28d7
MM
2862build_typename_type (tree context, tree name, tree fullname,
2863 enum tag_types tag_type)
45869a6c
MM
2864{
2865 tree t;
2866 tree d;
fc6a28d7 2867 typename_info ti;
fad205ff 2868 void **e;
fc6a28d7 2869 hashval_t hash;
45869a6c 2870
e2500fed 2871 if (typename_htab == NULL)
fc6a28d7
MM
2872 typename_htab = htab_create_ggc (61, &typename_hash,
2873 &typename_compare, NULL);
2874
c8094d83 2875 ti.scope = FROB_CONTEXT (context);
fc6a28d7
MM
2876 ti.name = name;
2877 ti.template_id = fullname;
2878 ti.enum_p = tag_type == enum_type;
2879 ti.class_p = (tag_type == class_type
2880 || tag_type == record_type
2881 || tag_type == union_type);
2882 hash = (htab_hash_pointer (ti.scope)
2883 ^ htab_hash_pointer (ti.name));
45869a6c 2884
7ddedda4 2885 /* See if we already have this type. */
fc6a28d7 2886 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
e2500fed
GK
2887 if (*e)
2888 t = (tree) *e;
7ddedda4 2889 else
fc6a28d7
MM
2890 {
2891 /* Build the TYPENAME_TYPE. */
2892 t = make_aggr_type (TYPENAME_TYPE);
2893 TYPE_CONTEXT (t) = ti.scope;
2894 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2895 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2896 TYPENAME_IS_CLASS_P (t) = ti.class_p;
c8094d83 2897
fc6a28d7
MM
2898 /* Build the corresponding TYPE_DECL. */
2899 d = build_decl (TYPE_DECL, name, t);
2900 TYPE_NAME (TREE_TYPE (d)) = d;
2901 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2902 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2903 DECL_ARTIFICIAL (d) = 1;
2904
2905 /* Store it in the hash table. */
2906 *e = t;
06d40de8
DG
2907
2908 /* TYPENAME_TYPEs must always be compared structurally, because
2909 they may or may not resolve down to another type depending on
2910 the currently open classes. */
2911 SET_TYPE_STRUCTURAL_EQUALITY (t);
fc6a28d7 2912 }
c8094d83 2913
45869a6c
MM
2914 return t;
2915}
2916
fc6a28d7
MM
2917/* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
2918 provided to name the type. Returns an appropriate type, unless an
2919 error occurs, in which case error_mark_node is returned. If we
2920 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2921 return that, rather than the _TYPE it corresponds to, in other
2922 cases we look through the type decl. If TF_ERROR is set, complain
2923 about errors, otherwise be quiet. */
3baa501d 2924
5566b478 2925tree
fc6a28d7
MM
2926make_typename_type (tree context, tree name, enum tag_types tag_type,
2927 tsubst_flags_t complain)
5566b478 2928{
b2b7d40a 2929 tree fullname;
7d3bec9d
NS
2930 tree t;
2931 bool want_template;
a80e4195 2932
5dc5d13c
KL
2933 if (name == error_mark_node
2934 || context == NULL_TREE
2935 || context == error_mark_node)
2936 return error_mark_node;
2937
2f939d94 2938 if (TYPE_P (name))
78638e24 2939 {
68642fb6
UD
2940 if (!(TYPE_LANG_SPECIFIC (name)
2941 && (CLASSTYPE_IS_TEMPLATE (name)
78638e24
MM
2942 || CLASSTYPE_USE_TEMPLATE (name))))
2943 name = TYPE_IDENTIFIER (name);
2944 else
2945 /* Create a TEMPLATE_ID_EXPR for the type. */
2946 name = build_nt (TEMPLATE_ID_EXPR,
2947 CLASSTYPE_TI_TEMPLATE (name),
2948 CLASSTYPE_TI_ARGS (name));
2949 }
653cc74a 2950 else if (TREE_CODE (name) == TYPE_DECL)
a80e4195 2951 name = DECL_NAME (name);
b2b7d40a
JM
2952
2953 fullname = name;
2954
2955 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11686454
JM
2956 {
2957 name = TREE_OPERAND (name, 0);
2958 if (TREE_CODE (name) == TEMPLATE_DECL)
2959 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
50ef2c18
MM
2960 else if (TREE_CODE (name) == OVERLOAD)
2961 {
2962 error ("%qD is not a type", name);
2963 return error_mark_node;
2964 }
11686454 2965 }
8a2b77e7
JM
2966 if (TREE_CODE (name) == TEMPLATE_DECL)
2967 {
2d01edd7 2968 error ("%qD used without template parameters", name);
8a2b77e7
JM
2969 return error_mark_node;
2970 }
50bc768d 2971 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
0c88d886 2972 gcc_assert (TYPE_P (context));
04ddee1b 2973
7d3bec9d
NS
2974 /* When the CONTEXT is a dependent type, NAME could refer to a
2975 dependent base class of CONTEXT. So we cannot peek inside it,
2976 even if CONTEXT is a currently open scope. */
2977 if (dependent_type_p (context))
2978 return build_typename_type (context, name, fullname, tag_type);
caf93cb0 2979
7d3bec9d
NS
2980 if (!IS_AGGR_TYPE (context))
2981 {
2982 if (complain & tf_error)
2983 error ("%q#T is not a class", context);
2984 return error_mark_node;
5566b478 2985 }
7d3bec9d
NS
2986
2987 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
2988
2989 /* We should only set WANT_TYPE when we're a nested typename type.
2990 Then we can give better diagnostics if we find a non-type. */
2991 t = lookup_field (context, name, 0, /*want_type=*/true);
2992 if (!t)
11249cf0 2993 {
4f2b0fb2 2994 if (complain & tf_error)
7d3bec9d
NS
2995 error (want_template ? "no class template named %q#T in %q#T"
2996 : "no type named %q#T in %q#T", name, context);
11249cf0
MM
2997 return error_mark_node;
2998 }
7d3bec9d
NS
2999
3000 if (want_template && !DECL_CLASS_TEMPLATE_P (t))
3001 {
3002 if (complain & tf_error)
3003 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3004 context, name, t);
3005 return error_mark_node;
3006 }
3007 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3008 {
3009 if (complain & tf_error)
3010 error ("%<typename %T::%D%> names %q#T, which is not a type",
3011 context, name, t);
3012 return error_mark_node;
3013 }
3014
3015 if (complain & tf_error)
02022f3a 3016 perform_or_defer_access_check (TYPE_BINFO (context), t, t);
7d3bec9d
NS
3017
3018 if (want_template)
3019 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3020 NULL_TREE, context,
3021 /*entering_scope=*/0,
3022 tf_warning_or_error | tf_user);
3023
3024 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3025 t = TREE_TYPE (t);
3026
3027 return t;
5566b478
MS
3028}
3029
b939a023 3030/* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
c8094d83 3031 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
b939a023
KL
3032 in which case error_mark_node is returned.
3033
3034 If PARM_LIST is non-NULL, also make sure that the template parameter
3035 list of TEMPLATE_DECL matches.
3036
3037 If COMPLAIN zero, don't complain about any errors that occur. */
b8c6534b
KL
3038
3039tree
b939a023
KL
3040make_unbound_class_template (tree context, tree name, tree parm_list,
3041 tsubst_flags_t complain)
b8c6534b
KL
3042{
3043 tree t;
3044 tree d;
3045
3046 if (TYPE_P (name))
3047 name = TYPE_IDENTIFIER (name);
3048 else if (DECL_P (name))
3049 name = DECL_NAME (name);
8dc2b103 3050 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
b8c6534b 3051
9579624e 3052 if (!dependent_type_p (context)
b8c6534b
KL
3053 || currently_open_class (context))
3054 {
3055 tree tmpl = NULL_TREE;
3056
3057 if (IS_AGGR_TYPE (context))
86ac0575 3058 tmpl = lookup_field (context, name, 0, false);
b8c6534b
KL
3059
3060 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
3061 {
4f09be91 3062 if (complain & tf_error)
2d01edd7 3063 error ("no class template named %q#T in %q#T", name, context);
b8c6534b
KL
3064 return error_mark_node;
3065 }
caf93cb0 3066
b939a023
KL
3067 if (parm_list
3068 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3069 {
3070 if (complain & tf_error)
3071 {
3072 error ("template parameters do not match template");
dee15844 3073 error ("%q+D declared here", tmpl);
b939a023
KL
3074 }
3075 return error_mark_node;
3076 }
3077
2b59fc25 3078 if (complain & tf_error)
02022f3a 3079 perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
b8c6534b
KL
3080
3081 return tmpl;
3082 }
3083
3084 /* Build the UNBOUND_CLASS_TEMPLATE. */
3085 t = make_aggr_type (UNBOUND_CLASS_TEMPLATE);
3086 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3087 TREE_TYPE (t) = NULL_TREE;
06d40de8 3088 SET_TYPE_STRUCTURAL_EQUALITY (t);
b8c6534b
KL
3089
3090 /* Build the corresponding TEMPLATE_DECL. */
3091 d = build_decl (TEMPLATE_DECL, name, t);
3092 TYPE_NAME (TREE_TYPE (d)) = d;
3093 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3094 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3095 DECL_ARTIFICIAL (d) = 1;
b939a023 3096 DECL_TEMPLATE_PARMS (d) = parm_list;
b8c6534b
KL
3097
3098 return t;
3099}
3100
8d08fdba 3101\f
47aa0df4 3102
8d08fdba 3103/* Push the declarations of builtin types into the namespace.
4b0d3cbe
MM
3104 RID_INDEX is the index of the builtin type in the array
3105 RID_POINTERS. NAME is the name used when looking up the builtin
3106 type. TYPE is the _TYPE node for the builtin type. */
8d08fdba 3107
eaa7c03f 3108void
caf93cb0 3109record_builtin_type (enum rid rid_index,
0cbd7506
MS
3110 const char* name,
3111 tree type)
8d08fdba
MS
3112{
3113 tree rname = NULL_TREE, tname = NULL_TREE;
a703fb38 3114 tree tdecl = NULL_TREE;
8d08fdba 3115
0e5921e8 3116 if ((int) rid_index < (int) RID_MAX)
8d08fdba
MS
3117 rname = ridpointers[(int) rid_index];
3118 if (name)
3119 tname = get_identifier (name);
3120
4b0d3cbe
MM
3121 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3122 eliminated. Built-in types should not be looked up name; their
3123 names are keywords that the parser can recognize. However, there
3124 is code in c-common.c that uses identifier_global_value to look
3125 up built-in types by name. */
8d08fdba
MS
3126 if (tname)
3127 {
4b0d3cbe
MM
3128 tdecl = build_decl (TYPE_DECL, tname, type);
3129 DECL_ARTIFICIAL (tdecl) = 1;
a7e8c268 3130 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
8d08fdba 3131 }
4b0d3cbe 3132 if (rname)
8d08fdba 3133 {
4b0d3cbe 3134 if (!tdecl)
8d08fdba 3135 {
4b0d3cbe
MM
3136 tdecl = build_decl (TYPE_DECL, rname, type);
3137 DECL_ARTIFICIAL (tdecl) = 1;
8d08fdba 3138 }
4b0d3cbe 3139 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
8d08fdba 3140 }
4b0d3cbe
MM
3141
3142 if (!TYPE_NAME (type))
3143 TYPE_NAME (type) = tdecl;
47aa0df4
MM
3144
3145 if (tdecl)
21d13d83 3146 debug_hooks->type_decl (tdecl, 0);
8d08fdba
MS
3147}
3148
eff71ab0 3149/* Record one of the standard Java types.
4d8a1dd6
MM
3150 * Declare it as having the given NAME.
3151 * If SIZE > 0, it is the size of one of the integral types;
3152 * otherwise it is the negative of the size of one of the other types. */
eff71ab0
PB
3153
3154static tree
11f6b451 3155record_builtin_java_type (const char* name, int size)
eff71ab0
PB
3156{
3157 tree type, decl;
3158 if (size > 0)
3159 type = make_signed_type (size);
3160 else if (size > -32)
a1c65f9f 3161 { /* "__java_char" or ""__java_boolean". */
eff71ab0
PB
3162 type = make_unsigned_type (-size);
3163 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3164 }
3165 else
a1c65f9f 3166 { /* "__java_float" or ""__java_double". */
eff71ab0
PB
3167 type = make_node (REAL_TYPE);
3168 TYPE_PRECISION (type) = - size;
3169 layout_type (type);
3170 }
0e5921e8 3171 record_builtin_type (RID_MAX, name, type);
eff71ab0 3172 decl = TYPE_NAME (type);
e229f2cd
PB
3173
3174 /* Suppress generate debug symbol entries for these types,
3175 since for normal C++ they are just clutter.
a1c65f9f 3176 However, push_lang_context undoes this if extern "Java" is seen. */
eff71ab0 3177 DECL_IGNORED_P (decl) = 1;
e229f2cd 3178
eff71ab0
PB
3179 TYPE_FOR_JAVA (type) = 1;
3180 return type;
3181}
3182
3b426391 3183/* Push a type into the namespace so that the back ends ignore it. */
036407f7
ML
3184
3185static void
11f6b451 3186record_unknown_type (tree type, const char* name)
036407f7
ML
3187{
3188 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
3189 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3190 DECL_IGNORED_P (decl) = 1;
3191 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3192 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3193 TYPE_ALIGN (type) = 1;
11cf4d18 3194 TYPE_USER_ALIGN (type) = 0;
036407f7 3195 TYPE_MODE (type) = TYPE_MODE (void_type_node);
68642fb6 3196}
036407f7 3197
13a44ee0 3198/* A string for which we should create an IDENTIFIER_NODE at
d43829f9
MM
3199 startup. */
3200
3201typedef struct predefined_identifier
3202{
3203 /* The name of the identifier. */
8b60264b 3204 const char *const name;
d43829f9 3205 /* The place where the IDENTIFIER_NODE should be stored. */
8b60264b 3206 tree *const node;
838dfd8a 3207 /* Nonzero if this is the name of a constructor or destructor. */
8b60264b 3208 const int ctor_or_dtor_p;
d43829f9
MM
3209} predefined_identifier;
3210
3211/* Create all the predefined identifiers. */
3212
3213static void
11f6b451 3214initialize_predefined_identifiers (void)
d43829f9 3215{
8b60264b 3216 const predefined_identifier *pid;
d43829f9
MM
3217
3218 /* A table of identifiers to create at startup. */
8b60264b 3219 static const predefined_identifier predefined_identifiers[] = {
298d6f60
MM
3220 { "C++", &lang_name_cplusplus, 0 },
3221 { "C", &lang_name_c, 0 },
3222 { "Java", &lang_name_java, 0 },
d6eec208
MM
3223 /* Some of these names have a trailing space so that it is
3224 impossible for them to conflict with names written by users. */
3225 { "__ct ", &ctor_identifier, 1 },
3226 { "__base_ctor ", &base_ctor_identifier, 1 },
3227 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3228 { "__dt ", &dtor_identifier, 1 },
3229 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3230 { "__base_dtor ", &base_dtor_identifier, 1 },
3231 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
298d6f60 3232 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
298d6f60
MM
3233 { "nelts", &nelts_identifier, 0 },
3234 { THIS_NAME, &this_identifier, 0 },
c4372ef4 3235 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
298d6f60 3236 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
298d6f60 3237 { "_vptr", &vptr_identifier, 0 },
3ec6bad3 3238 { "__vtt_parm", &vtt_parm_identifier, 0 },
82a2669e 3239 { "::", &global_scope_name, 0 },
1f6e1acc 3240 { "std", &std_identifier, 0 },
298d6f60 3241 { NULL, NULL, 0 }
d43829f9
MM
3242 };
3243
3244 for (pid = predefined_identifiers; pid->name; ++pid)
298d6f60
MM
3245 {
3246 *pid->node = get_identifier (pid->name);
3247 if (pid->ctor_or_dtor_p)
3248 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3249 }
d43829f9
MM
3250}
3251
8d08fdba
MS
3252/* Create the predefined scalar types of C,
3253 and some nodes representing standard constants (0, 1, (void *)0).
3254 Initialize the global binding level.
3255 Make definitions for built-in primitive functions. */
3256
3257void
11f6b451 3258cxx_init_decl_processing (void)
8d08fdba 3259{
10841285
MM
3260 tree void_ftype;
3261 tree void_ftype_ptr;
8d08fdba 3262
8c1d6d62 3263 build_common_tree_nodes (flag_signed_char, false);
6de66680 3264
d43829f9
MM
3265 /* Create all the identifiers we need. */
3266 initialize_predefined_identifiers ();
8d08fdba 3267
9cd64686
MM
3268 /* Create the global variables. */
3269 push_to_top_level ();
8012c983 3270
82a2669e 3271 current_function_decl = NULL_TREE;
1ec57cf0 3272 current_binding_level = NULL;
a1c65f9f 3273 /* Enter the global namespace. */
50bc768d 3274 gcc_assert (global_namespace == NULL_TREE);
82a2669e 3275 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
0cbd7506 3276 void_type_node);
b9e75696 3277 TREE_PUBLIC (global_namespace) = 1;
ac20c67a 3278 begin_scope (sk_namespace, global_namespace);
82a2669e 3279
30394414
JM
3280 current_lang_name = NULL_TREE;
3281
ddbfd28d
GK
3282 if (flag_visibility_ms_compat)
3283 default_visibility = VISIBILITY_HIDDEN;
3284
8d08fdba
MS
3285 /* Initially, C. */
3286 current_lang_name = lang_name_c;
3287
6bcedb4e 3288 /* Create the `std' namespace. */
1dbb6023
NS
3289 push_namespace (std_identifier);
3290 std_node = current_namespace;
3291 pop_namespace ();
5362b086 3292
eaa7c03f 3293 c_common_nodes_and_builtins ();
37c46b43 3294
4d8a1dd6
MM
3295 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3296 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3297 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3298 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3299 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3300 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3301 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3302 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
eff71ab0 3303
7d60be94
NS
3304 integer_two_node = build_int_cst (NULL_TREE, 2);
3305 integer_three_node = build_int_cst (NULL_TREE, 3);
8d08fdba 3306
255512c1 3307 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
de7df9eb
JM
3308 truthvalue_type_node = boolean_type_node;
3309 truthvalue_false_node = boolean_false_node;
3310 truthvalue_true_node = boolean_true_node;
2986ae00 3311
4cc1d462 3312 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
5fd8e536
JM
3313
3314#if 0
3e411c3f 3315 record_builtin_type (RID_MAX, NULL, string_type_node);
5fd8e536
JM
3316#endif
3317
1f84ec23
MM
3318 delta_type_node = ptrdiff_type_node;
3319 vtable_index_type = ptrdiff_type_node;
c7e266a6 3320
3ec6bad3 3321 vtt_parm_type = build_pointer_type (const_ptr_type_node);
10841285
MM
3322 void_ftype = build_function_type (void_type_node, void_list_node);
3323 void_ftype_ptr = build_function_type (void_type_node,
3324 tree_cons (NULL_TREE,
caf93cb0 3325 ptr_type_node,
10841285 3326 void_list_node));
824b9a4c 3327 void_ftype_ptr
4cc1d462 3328 = build_exception_variant (void_ftype_ptr, empty_except_spec);
8d08fdba 3329
8d08fdba
MS
3330 /* C++ extensions */
3331
3332 unknown_type_node = make_node (UNKNOWN_TYPE);
036407f7
ML
3333 record_unknown_type (unknown_type_node, "unknown type");
3334
8d08fdba
MS
3335 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3336 TREE_TYPE (unknown_type_node) = unknown_type_node;
a6967cc0 3337
a6967cc0
JM
3338 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3339 result. */
8d08fdba
MS
3340 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3341 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3342
c4372ef4
NS
3343 {
3344 /* Make sure we get a unique function type, so we can give
3345 its pointer type a name. (This wins for gdb.) */
3346 tree vfunc_type = make_node (FUNCTION_TYPE);
3347 TREE_TYPE (vfunc_type) = integer_type_node;
3348 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3349 layout_type (vfunc_type);
3350
3351 vtable_entry_type = build_pointer_type (vfunc_type);
3352 }
0e5921e8 3353 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
8d08fdba 3354
8d08fdba 3355 vtbl_type_node
52bf7d5d 3356 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
8d08fdba 3357 layout_type (vtbl_type_node);
91063b51 3358 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3e411c3f 3359 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
849da744
MM
3360 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3361 layout_type (vtbl_ptr_type_node);
3e411c3f 3362 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
8d08fdba 3363
1f84ec23
MM
3364 push_namespace (get_identifier ("__cxxabiv1"));
3365 abi_node = current_namespace;
3366 pop_namespace ();
6633d636 3367
2c73f9f5 3368 global_type_node = make_node (LANG_TYPE);
036407f7 3369 record_unknown_type (global_type_node, "global type");
2c73f9f5 3370
db5ae43f
MS
3371 /* Now, C++. */
3372 current_lang_name = lang_name_cplusplus;
8d08fdba 3373
ced78d8b 3374 {
4b0d3cbe
MM
3375 tree bad_alloc_id;
3376 tree bad_alloc_type_node;
3377 tree bad_alloc_decl;
3378 tree newtype, deltype;
10841285
MM
3379 tree ptr_ftype_sizetype;
3380
1dbb6023 3381 push_namespace (std_identifier);
4b0d3cbe
MM
3382 bad_alloc_id = get_identifier ("bad_alloc");
3383 bad_alloc_type_node = make_aggr_type (RECORD_TYPE);
3384 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
caf93cb0 3385 bad_alloc_decl
4b0d3cbe
MM
3386 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3387 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3388 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
1dbb6023 3389 pop_namespace ();
caf93cb0
EC
3390
3391 ptr_ftype_sizetype
10841285
MM
3392 = build_function_type (ptr_type_node,
3393 tree_cons (NULL_TREE,
c9f8536c 3394 size_type_node,
10841285 3395 void_list_node));
2c73f9f5 3396 newtype = build_exception_variant
0ba8a114
NS
3397 (ptr_ftype_sizetype, add_exception_specifier
3398 (NULL_TREE, bad_alloc_type_node, -1));
4cc1d462 3399 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
596ea4e5
AS
3400 push_cp_library_fn (NEW_EXPR, newtype);
3401 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3402 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3403 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
ced78d8b 3404 }
8d08fdba
MS
3405
3406 abort_fndecl
1f84ec23 3407 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
8d08fdba 3408
8d08fdba
MS
3409 /* Perform other language dependent initializations. */
3410 init_class_processing ();
db48b831 3411 init_rtti_processing ();
8d08fdba 3412
6467930b 3413 if (flag_exceptions)
8d2733ca 3414 init_exception_processing ();
9e9ff709 3415
7fcdf4c2 3416 if (! supports_one_only ())
72b7eeff 3417 flag_weak = 0;
8d08fdba 3418
2ce07e2d 3419 make_fname_decl = cp_make_fname_decl;
0ba8a114 3420 start_fname_decls ();
8d08fdba 3421
e9a25f70 3422 /* Show we use EH for cleanups. */
6de9cd9a
DN
3423 if (flag_exceptions)
3424 using_eh_for_cleanups ();
62c154ed
JM
3425}
3426
0ba8a114 3427/* Generate an initializer for a function naming variable from
bb885938 3428 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
f4f206f4 3429 filled in with the type of the init. */
0ba8a114
NS
3430
3431tree
bb885938 3432cp_fname_init (const char* name, tree *type_p)
0ba8a114
NS
3433{
3434 tree domain = NULL_TREE;
3435 tree type;
3436 tree init = NULL_TREE;
3437 size_t length = 0;
3438
3439 if (name)
3440 {
3441 length = strlen (name);
3442 domain = build_index_type (size_int (length));
3443 init = build_string (length + 1, name);
3444 }
caf93cb0 3445
0ba8a114
NS
3446 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3447 type = build_cplus_array_type (type, domain);
3448
bb885938 3449 *type_p = type;
caf93cb0 3450
0ba8a114
NS
3451 if (init)
3452 TREE_TYPE (init) = type;
3453 else
bb885938 3454 init = error_mark_node;
caf93cb0 3455
0ba8a114
NS
3456 return init;
3457}
3458
2ce07e2d
NS
3459/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3460 decl, NAME is the initialization string and TYPE_DEP indicates whether
3461 NAME depended on the type of the function. We make use of that to detect
0ba8a114 3462 __PRETTY_FUNCTION__ inside a template fn. This is being done
a692ad2e 3463 lazily at the point of first use, so we mustn't push the decl now. */
2ce07e2d
NS
3464
3465static tree
11f6b451 3466cp_make_fname_decl (tree id, int type_dep)
2ce07e2d 3467{
83182544 3468 const char *const name = (type_dep && processing_template_decl
e913996d 3469 ? NULL : fname_as_string (type_dep));
bb885938
NS
3470 tree type;
3471 tree init = cp_fname_init (name, &type);
3472 tree decl = build_decl (VAR_DECL, id, type);
2ce07e2d 3473
9e6f2e7d 3474 if (name)
b1d5455a 3475 free (CONST_CAST (char *, name));
9e6f2e7d 3476
6cce57b0 3477 /* As we're using pushdecl_with_scope, we must set the context. */
0ba8a114
NS
3478 DECL_CONTEXT (decl) = current_function_decl;
3479 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
caf93cb0 3480
2ce07e2d
NS
3481 TREE_STATIC (decl) = 1;
3482 TREE_READONLY (decl) = 1;
2ce07e2d 3483 DECL_ARTIFICIAL (decl) = 1;
caf93cb0 3484
0ba8a114 3485 TREE_USED (decl) = 1;
5362b086 3486
6cce57b0
JM
3487 if (current_function_decl)
3488 {
3489 struct cp_binding_level *b = current_binding_level;
a7e8c268 3490 while (b->level_chain->kind != sk_function_parms)
6cce57b0 3491 b = b->level_chain;
d63d5d0c 3492 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3db45ab5 3493 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
d174af6c 3494 LOOKUP_ONLYCONVERTING);
e913996d 3495 }
ad16ae7f
MM
3496 else
3497 pushdecl_top_level_and_finish (decl, init);
caf93cb0 3498
2ce07e2d
NS
3499 return decl;
3500}
3501
c79efc4d
RÁE
3502static tree
3503builtin_function_1 (tree decl, tree context)
3504{
3505 tree id = DECL_NAME (decl);
3506 const char *name = IDENTIFIER_POINTER (id);
8d08fdba 3507
c79efc4d 3508 retrofit_lang_decl (decl);
0c11ada6 3509
c79efc4d
RÁE
3510 /* All nesting of C++ functions is lexical; there is never a "static
3511 chain" in the sense of GNU C nested functions. */
3512 DECL_NO_STATIC_CHAIN (decl) = 1;
3513
3514 DECL_ARTIFICIAL (decl) = 1;
3515 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3516 SET_DECL_LANGUAGE (decl, lang_c);
3517 /* Runtime library routines are, by definition, available in an
3518 external shared object. */
3519 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3520 DECL_VISIBILITY_SPECIFIED (decl) = 1;
8d08fdba 3521
d52e4867 3522 DECL_CONTEXT (decl) = context;
12a22e76 3523
6bcedb4e 3524 pushdecl (decl);
6bcedb4e 3525
d63d5d0c
ILT
3526 /* A function in the user's namespace should have an explicit
3527 declaration before it is used. Mark the built-in function as
3528 anticipated but not actually declared. */
935d1834
ZW
3529 if (name[0] != '_' || name[1] != '_')
3530 DECL_ANTICIPATED (decl) = 1;
012c4da9
JJ
3531 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3532 {
3533 size_t len = strlen (name);
3534
3535 /* Treat __*_chk fortification functions as anticipated as well,
3536 unless they are __builtin_*. */
3537 if (len > strlen ("___chk")
3538 && memcmp (name + len - strlen ("_chk"),
3539 "_chk", strlen ("_chk") + 1) == 0)
3540 DECL_ANTICIPATED (decl) = 1;
3541 }
935d1834 3542
8d08fdba
MS
3543 return decl;
3544}
7f4edbcb 3545
d52e4867 3546tree
c79efc4d 3547cxx_builtin_function (tree decl)
d52e4867 3548{
c79efc4d
RÁE
3549 tree id = DECL_NAME (decl);
3550 const char *name = IDENTIFIER_POINTER (id);
d52e4867
RS
3551 /* All builtins that don't begin with an '_' should additionally
3552 go in the 'std' namespace. */
3553 if (name[0] != '_')
3554 {
e5b44dfb 3555 tree decl2 = copy_node(decl);
d52e4867 3556 push_namespace (std_identifier);
e5b44dfb 3557 builtin_function_1 (decl2, std_node);
d52e4867
RS
3558 pop_namespace ();
3559 }
3560
e5b44dfb 3561 return builtin_function_1 (decl, NULL_TREE);
d52e4867
RS
3562}
3563
0c11ada6
JM
3564/* Generate a FUNCTION_DECL with the typical flags for a runtime library
3565 function. Not called directly. */
3566
3567static tree
11f6b451 3568build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
0c11ada6
JM
3569{
3570 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3571 DECL_EXTERNAL (fn) = 1;
3572 TREE_PUBLIC (fn) = 1;
3573 DECL_ARTIFICIAL (fn) = 1;
596ea4e5 3574 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
5d2ed28c 3575 SET_DECL_LANGUAGE (fn, lang_c);
73a8adb6
MM
3576 /* Runtime library routines are, by definition, available in an
3577 external shared object. */
3578 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3579 DECL_VISIBILITY_SPECIFIED (fn) = 1;
0c11ada6
JM
3580 return fn;
3581}
c2a37c55 3582
0c11ada6
JM
3583/* Returns the _DECL for a library function with C linkage.
3584 We assume that such functions never throw; if this is incorrect,
3585 callers should unset TREE_NOTHROW. */
c2a37c55 3586
7f4edbcb 3587tree
11f6b451 3588build_library_fn (tree name, tree type)
0c11ada6 3589{
f59d2aad
RH
3590 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3591 TREE_NOTHROW (fn) = 1;
3592 return fn;
0c11ada6
JM
3593}
3594
3595/* Returns the _DECL for a library function with C++ linkage. */
3596
596ea4e5 3597static tree
11f6b451 3598build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
0c11ada6 3599{
596ea4e5 3600 tree fn = build_library_fn_1 (name, operator_code, type);
0c11ada6 3601 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6bbf1598 3602 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
5d2ed28c 3603 SET_DECL_LANGUAGE (fn, lang_cplusplus);
0c11ada6
JM
3604 return fn;
3605}
3606
3607/* Like build_library_fn, but takes a C string instead of an
3608 IDENTIFIER_NODE. */
3609
3610tree
11f6b451 3611build_library_fn_ptr (const char* name, tree type)
7f4edbcb 3612{
0c11ada6
JM
3613 return build_library_fn (get_identifier (name), type);
3614}
3615
3616/* Like build_cp_library_fn, but takes a C string instead of an
3617 IDENTIFIER_NODE. */
3618
3619tree
11f6b451 3620build_cp_library_fn_ptr (const char* name, tree type)
0c11ada6 3621{
596ea4e5 3622 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
3623}
3624
3625/* Like build_library_fn, but also pushes the function so that we will
3626 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
3627
3628tree
11f6b451 3629push_library_fn (tree name, tree type)
0c11ada6
JM
3630{
3631 tree fn = build_library_fn (name, type);
3632 pushdecl_top_level (fn);
3633 return fn;
3634}
3635
3636/* Like build_cp_library_fn, but also pushes the function so that it
3637 will be found by normal lookup. */
3638
596ea4e5 3639static tree
11f6b451 3640push_cp_library_fn (enum tree_code operator_code, tree type)
0c11ada6 3641{
5362b086 3642 tree fn = build_cp_library_fn (ansi_opname (operator_code),
596ea4e5
AS
3643 operator_code,
3644 type);
0c11ada6
JM
3645 pushdecl (fn);
3646 return fn;
3647}
3648
3649/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3650 a FUNCTION_TYPE. */
3651
3652tree
11f6b451 3653push_void_library_fn (tree name, tree parmtypes)
0c11ada6
JM
3654{
3655 tree type = build_function_type (void_type_node, parmtypes);
3656 return push_library_fn (name, type);
3657}
3658
cf74fb86 3659/* Like push_library_fn, but also note that this function throws
0c11ada6
JM
3660 and does not return. Used for __throw_foo and the like. */
3661
3662tree
11f6b451 3663push_throw_library_fn (tree name, tree type)
0c11ada6 3664{
cf74fb86 3665 tree fn = push_library_fn (name, type);
0c11ada6
JM
3666 TREE_THIS_VOLATILE (fn) = 1;
3667 TREE_NOTHROW (fn) = 0;
3668 return fn;
7f4edbcb 3669}
8d08fdba 3670\f
61a127b3
MM
3671/* When we call finish_struct for an anonymous union, we create
3672 default copy constructors and such. But, an anonymous union
3673 shouldn't have such things; this function undoes the damage to the
3674 anonymous union type T.
3675
3676 (The reason that we create the synthesized methods is that we don't
3677 distinguish `union { int i; }' from `typedef union { int i; } U'.
3678 The first is an anonymous union; the second is just an ordinary
3679 union type.) */
3680
3681void
11f6b451 3682fixup_anonymous_aggr (tree t)
61a127b3
MM
3683{
3684 tree *q;
3685
f4f206f4 3686 /* Wipe out memory of synthesized methods. */
61a127b3
MM
3687 TYPE_HAS_CONSTRUCTOR (t) = 0;
3688 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3689 TYPE_HAS_INIT_REF (t) = 0;
3690 TYPE_HAS_CONST_INIT_REF (t) = 0;
3691 TYPE_HAS_ASSIGN_REF (t) = 0;
61a127b3
MM
3692 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3693
3694 /* Splice the implicitly generated functions out of the TYPE_METHODS
3695 list. */
3696 q = &TYPE_METHODS (t);
3697 while (*q)
3698 {
3699 if (DECL_ARTIFICIAL (*q))
3700 *q = TREE_CHAIN (*q);
3701 else
3702 q = &TREE_CHAIN (*q);
3703 }
3704
cab1f180 3705 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
61a127b3 3706 if (TYPE_METHODS (t))
24f58e74
PC
3707 {
3708 tree decl = TYPE_MAIN_DECL (t);
3709
3710 if (TREE_CODE (t) != UNION_TYPE)
3711 error ("%Jan anonymous struct cannot have function members", decl);
3712 else
3713 error ("%Jan anonymous union cannot have function members", decl);
3714 }
a1c2b86d
JJ
3715
3716 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3717 assignment operators (because they cannot have these methods themselves).
3718 For anonymous unions this is already checked because they are not allowed
3719 in any union, otherwise we have to check it. */
3720 if (TREE_CODE (t) != UNION_TYPE)
3721 {
3722 tree field, type;
3723
3724 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3725 if (TREE_CODE (field) == FIELD_DECL)
3726 {
3727 type = TREE_TYPE (field);
3728 if (CLASS_TYPE_P (type))
3729 {
0cbd7506 3730 if (TYPE_NEEDS_CONSTRUCTING (type))
dee15844
JM
3731 error ("member %q+#D with constructor not allowed "
3732 "in anonymous aggregate", field);
a1c2b86d 3733 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
dee15844
JM
3734 error ("member %q+#D with destructor not allowed "
3735 "in anonymous aggregate", field);
a1c2b86d 3736 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
dee15844
JM
3737 error ("member %q+#D with copy assignment operator "
3738 "not allowed in anonymous aggregate", field);
a1c2b86d
JJ
3739 }
3740 }
3741 }
61a127b3
MM
3742}
3743
72a93143 3744/* Make sure that a declaration with no declarator is well-formed, i.e.
a723baf1 3745 just declares a tagged type or anonymous union.
8d08fdba 3746
a723baf1 3747 Returns the type declared; or NULL_TREE if none. */
8d08fdba 3748
72a93143 3749tree
62d1db17 3750check_tag_decl (cp_decl_specifier_seq *declspecs)
8d08fdba 3751{
62d1db17
MM
3752 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3753 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
a723baf1
MM
3754 /* If a class, struct, or enum type is declared by the DECLSPECS
3755 (i.e, if a class-specifier, enum-specifier, or non-typename
3756 elaborated-type-specifier appears in the DECLSPECS),
3757 DECLARED_TYPE is set to the corresponding type. */
3758 tree declared_type = NULL_TREE;
3759 bool error_p = false;
8d08fdba 3760
62d1db17 3761 if (declspecs->multiple_types_p)
72a93143 3762 error ("multiple types in one declaration");
62d1db17
MM
3763 else if (declspecs->redefined_builtin_type)
3764 {
3765 if (!in_system_header)
82b5e52a 3766 pedwarn ("redeclaration of C++ built-in type %qT",
62d1db17
MM
3767 declspecs->redefined_builtin_type);
3768 return NULL_TREE;
3769 }
7e2067ca 3770
c827f22f
MM
3771 if (declspecs->type
3772 && TYPE_P (declspecs->type)
caf93cb0 3773 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
62d1db17
MM
3774 && IS_AGGR_TYPE (declspecs->type))
3775 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3776 declared_type = declspecs->type;
3777 else if (declspecs->type == error_mark_node)
3778 error_p = true;
a723baf1 3779 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
7e2067ca 3780 pedwarn ("declaration does not declare anything");
1951a1b6 3781 /* Check for an anonymous union. */
a723baf1
MM
3782 else if (declared_type && IS_AGGR_TYPE_CODE (TREE_CODE (declared_type))
3783 && TYPE_ANONYMOUS_P (declared_type))
0dd3962d 3784 {
e8186ecf 3785 /* 7/3 In a simple-declaration, the optional init-declarator-list
0cbd7506
MS
3786 can be omitted only when declaring a class (clause 9) or
3787 enumeration (7.2), that is, when the decl-specifier-seq contains
3788 either a class-specifier, an elaborated-type-specifier with
3789 a class-key (9.1), or an enum-specifier. In these cases and
3790 whenever a class-specifier or enum-specifier is present in the
3791 decl-specifier-seq, the identifiers in these specifiers are among
3792 the names being declared by the declaration (as class-name,
3793 enum-names, or enumerators, depending on the syntax). In such
3794 cases, and except for the declaration of an unnamed bit-field (9.6),
3795 the decl-specifier-seq shall introduce one or more names into the
3796 program, or shall redeclare a name introduced by a previous
3797 declaration. [Example:
3798 enum { }; // ill-formed
3799 typedef class { }; // ill-formed
3800 --end example] */
e8186ecf 3801 if (saw_typedef)
0cbd7506
MS
3802 {
3803 error ("missing type-name in typedef-declaration");
3804 return NULL_TREE;
3805 }
0dd3962d 3806 /* Anonymous unions are objects, so they can have specifiers. */;
a723baf1 3807 SET_ANON_AGGR_TYPE_P (declared_type);
6bdb8141 3808
caf93cb0 3809 if (TREE_CODE (declared_type) != UNION_TYPE && pedantic
a723baf1 3810 && !in_system_header)
6bdb8141 3811 pedwarn ("ISO C++ prohibits anonymous structs");
0dd3962d
JM
3812 }
3813
62d1db17 3814 else
8d08fdba 3815 {
62d1db17
MM
3816 if (declspecs->specs[(int)ds_inline]
3817 || declspecs->specs[(int)ds_virtual])
2d01edd7 3818 error ("%qs can only be specified for functions",
caf93cb0 3819 declspecs->specs[(int)ds_inline]
62d1db17
MM
3820 ? "inline" : "virtual");
3821 else if (saw_friend
caf93cb0 3822 && (!current_class_type
62d1db17 3823 || current_scope () != current_class_type))
2d01edd7 3824 error ("%<friend%> can only be specified inside a class");
62d1db17 3825 else if (declspecs->specs[(int)ds_explicit])
2d01edd7 3826 error ("%<explicit%> can only be specified for constructors");
62d1db17
MM
3827 else if (declspecs->storage_class)
3828 error ("a storage class can only be specified for objects "
3829 "and functions");
3830 else if (declspecs->specs[(int)ds_const]
3831 || declspecs->specs[(int)ds_volatile]
3832 || declspecs->specs[(int)ds_restrict]
3833 || declspecs->specs[(int)ds_thread])
3834 error ("qualifiers can only be specified for objects "
3835 "and functions");
41dc91a8
SB
3836 else if (saw_typedef)
3837 warning (0, "%<typedef%> was ignored in this declaration");
72a93143 3838 }
8d08fdba 3839
a723baf1 3840 return declared_type;
72a93143
JM
3841}
3842
3843/* Called when a declaration is seen that contains no names to declare.
3844 If its type is a reference to a structure, union or enum inherited
3845 from a containing scope, shadow that tag name for the current scope
3846 with a forward reference.
3847 If its type defines a new named structure or union
3848 or defines an enum, it is valid but we need not do anything here.
3849 Otherwise, it is an error.
3850
3851 C++: may have to grok the declspecs to learn about static,
caf93cb0 3852 complain for anonymous unions.
72a93143 3853
a723baf1
MM
3854 Returns the TYPE declared -- or NULL_TREE if none. */
3855
3856tree
62d1db17 3857shadow_tag (cp_decl_specifier_seq *declspecs)
72a93143
JM
3858{
3859 tree t = check_tag_decl (declspecs);
3860
a723baf1
MM
3861 if (!t)
3862 return NULL_TREE;
3863
3cabd8f9
MA
3864 if (declspecs->attributes)
3865 {
dee15844
JM
3866 warning (0, "attribute ignored in declaration of %q+#T", t);
3867 warning (0, "attribute for %q+#T must follow the %qs keyword",
3868 t, class_key_or_enum_as_string (t));
3cabd8f9
MA
3869
3870 }
3871
d2a8ac2c
LM
3872 if (maybe_process_partial_specialization (t) == error_mark_node)
3873 return NULL_TREE;
72a93143
JM
3874
3875 /* This is where the variables in an anonymous union are
3876 declared. An anonymous union declaration looks like:
3877 union { ... } ;
3878 because there is no declarator after the union, the parser
3879 sends that declaration here. */
a723baf1 3880 if (ANON_AGGR_TYPE_P (t))
72a93143 3881 {
6bdb8141 3882 fixup_anonymous_aggr (t);
72a93143
JM
3883
3884 if (TYPE_FIELDS (t))
3885 {
caf93cb0 3886 tree decl = grokdeclarator (/*declarator=*/NULL,
058b15c1 3887 declspecs, NORMAL, 0, NULL);
72a93143
JM
3888 finish_anon_union (decl);
3889 }
8d08fdba 3890 }
a723baf1
MM
3891
3892 return t;
8d08fdba
MS
3893}
3894\f
3895/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3896
3897tree
caf93cb0 3898groktypename (cp_decl_specifier_seq *type_specifiers,
62d1db17 3899 const cp_declarator *declarator)
8d08fdba 3900{
62d1db17 3901 tree attrs;
98884b26 3902 tree type;
62d1db17
MM
3903 attrs = type_specifiers->attributes;
3904 type_specifiers->attributes = NULL_TREE;
3905 type = grokdeclarator (declarator, type_specifiers, TYPENAME, 0, &attrs);
98884b26 3906 if (attrs)
c206a697
JM
3907 {
3908 if (CLASS_TYPE_P (type))
3909 warning (OPT_Wattributes, "ignoring attributes applied to class type "
3910 "outside of definition");
3911 else
3912 cplus_decl_attributes (&type, attrs, 0);
3913 }
98884b26 3914 return type;
8d08fdba
MS
3915}
3916
15896502
MM
3917/* Process a DECLARATOR for a function-scope variable declaration,
3918 namespace-scope variable declaration, or function declaration.
3919 (Function definitions go through start_function; class member
3920 declarations appearing in the body of the class go through
3921 grokfield.) The DECL corresponding to the DECLARATOR is returned.
3922 If an error occurs, the error_mark_node is returned instead.
3923
3924 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED
3925 is true if an explicit initializer is present, but false if this is
3926 a variable implicitly initialized via a default constructor.
3927 ATTRIBUTES and PREFIX_ATTRIBUTES are GNU attributes associated with
3928 this declaration. *PUSHED_SCOPE_P is set to the scope entered in
3929 this function, if any; if set, the caller is responsible for
3930 calling pop_scope. */
8d08fdba 3931
8d08fdba 3932tree
caf93cb0 3933start_decl (const cp_declarator *declarator,
62d1db17 3934 cp_decl_specifier_seq *declspecs,
0cbd7506
MS
3935 int initialized,
3936 tree attributes,
3937 tree prefix_attributes,
4514aa8c 3938 tree *pushed_scope_p)
8d08fdba 3939{
59387d2e 3940 tree decl;
15896502 3941 tree type;
8d08fdba 3942 tree context;
c3b7031d 3943 bool was_public;
8d08fdba 3944
4514aa8c 3945 *pushed_scope_p = NULL_TREE;
c8094d83 3946
e23bd218
IR
3947 /* An object declared as __attribute__((deprecated)) suppresses
3948 warnings of uses of other deprecated items. */
3949 if (lookup_attribute ("deprecated", attributes))
3950 deprecated_state = DEPRECATED_SUPPRESS;
3951
91d231cb 3952 attributes = chainon (attributes, prefix_attributes);
b17e2870 3953
c11b6f21 3954 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
91d231cb 3955 &attributes);
68642fb6 3956
e23bd218
IR
3957 deprecated_state = DEPRECATED_NORMAL;
3958
2d00b4f2
AP
3959 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
3960 || decl == error_mark_node)
44370687 3961 return error_mark_node;
8d08fdba
MS
3962
3963 type = TREE_TYPE (decl);
3964
4f1c5b7d 3965 context = DECL_CONTEXT (decl);
8d08fdba 3966
73a8adb6 3967 if (context)
4514aa8c
NS
3968 {
3969 *pushed_scope_p = push_scope (context);
c8094d83 3970
4514aa8c
NS
3971 /* We are only interested in class contexts, later. */
3972 if (TREE_CODE (context) == NAMESPACE_DECL)
3973 context = NULL_TREE;
3974 }
2c73f9f5 3975
8d08fdba
MS
3976 if (initialized)
3977 /* Is it valid for this decl to have an initializer at all?
3978 If not, set INITIALIZED to zero, which will indirectly
82580166 3979 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba
MS
3980 switch (TREE_CODE (decl))
3981 {
3982 case TYPE_DECL:
2d01edd7 3983 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
cc011e7f 3984 return error_mark_node;
8d08fdba
MS
3985
3986 case FUNCTION_DECL:
2d01edd7 3987 error ("function %q#D is initialized like a variable", decl);
650fcd07 3988 return error_mark_node;
8d08fdba
MS
3989
3990 default:
3e41d13b 3991 break;
8d08fdba
MS
3992 }
3993
8d08fdba
MS
3994 if (initialized)
3995 {
a9aedbc2 3996 if (! toplevel_bindings_p ()
8d08fdba 3997 && DECL_EXTERNAL (decl))
d4ee4d25 3998 warning (0, "declaration of %q#D has %<extern%> and is initialized",
0cbd7506 3999 decl);
8d08fdba 4000 DECL_EXTERNAL (decl) = 0;
5566b478 4001 if (toplevel_bindings_p ())
8d08fdba 4002 TREE_STATIC (decl) = 1;
8d08fdba
MS
4003 }
4004
fa20888b 4005 /* Set attributes here so if duplicate decl, will have proper attributes. */
91d231cb 4006 cplus_decl_attributes (&decl, attributes, 0);
fa20888b 4007
4e2bb0a4
DS
4008 /* Dllimported symbols cannot be defined. Static data members (which
4009 can be initialized in-class and dllimported) go through grokfield,
4010 not here, so we don't need to exclude those decls when checking for
4011 a definition. */
4012 if (initialized && DECL_DLLIMPORT_P (decl))
4013 {
4014 error ("definition of %q#D is marked %<dllimport%>", decl);
4015 DECL_DLLIMPORT_P (decl) = 0;
4016 }
4017
ecb0eece 4018 /* If #pragma weak was used, mark the decl weak now. */
3693d46c 4019 maybe_apply_pragma_weak (decl);
ecb0eece 4020
97055d5c
AO
4021 if (TREE_CODE (decl) == FUNCTION_DECL
4022 && DECL_DECLARED_INLINE_P (decl)
4023 && DECL_UNINLINABLE (decl)
4024 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
dee15844 4025 warning (0, "inline function %q+D given attribute noinline", decl);
97055d5c 4026
d0f062fb 4027 if (context && COMPLETE_TYPE_P (complete_type (context)))
5b605f68
MS
4028 {
4029 if (TREE_CODE (decl) == VAR_DECL)
4030 {
86ac0575 4031 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5b605f68 4032 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
2d01edd7 4033 error ("%q#D is not a static member of %q#T", decl, context);
e349ee73
MS
4034 else
4035 {
4036 if (DECL_CONTEXT (field) != context)
f2d773a2 4037 {
a723baf1 4038 if (!same_type_p (DECL_CONTEXT (field), context))
2d01edd7 4039 pedwarn ("ISO C++ does not permit %<%T::%D%> "
0cbd7506 4040 "to be defined as %<%T::%D%>",
a723baf1
MM
4041 DECL_CONTEXT (field), DECL_NAME (decl),
4042 context, DECL_NAME (decl));
f2d773a2
JM
4043 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4044 }
91146169
GB
4045 if (processing_specialization
4046 && template_class_depth (context) == 0
4047 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4048 error ("template header not allowed in member definition "
4049 "of explicitly specialized class");
75650646
MM
4050 /* Static data member are tricky; an in-class initialization
4051 still doesn't provide a definition, so the in-class
4052 declaration will have DECL_EXTERNAL set, but will have an
4053 initialization. Thus, duplicate_decls won't warn
4054 about this situation, and so we check here. */
e92fb501 4055 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
9e637a26 4056 error ("duplicate initialization of %qD", decl);
d63d5d0c 4057 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
e349ee73
MS
4058 decl = field;
4059 }
5b605f68 4060 }
f30432d7
MS
4061 else
4062 {
d43f603d 4063 tree field = check_classfn (context, decl,
44021471
GB
4064 (processing_template_decl
4065 > template_class_depth (context))
4066 ? current_template_parms
4067 : NULL_TREE);
f8c3b097
PC
4068 if (field && field != error_mark_node
4069 && duplicate_decls (decl, field,
4070 /*newdecl_is_friend=*/false))
f30432d7
MS
4071 decl = field;
4072 }
4073
4074 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
dff3e828 4075 DECL_IN_AGGR_P (decl) = 0;
9267ee62
NS
4076 /* Do not mark DECL as an explicit specialization if it was not
4077 already marked as an instantiation; a declaration should
4078 never be marked as a specialization unless we know what
c8094d83 4079 template is being specialized. */
9267ee62 4080 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
84e6233f 4081 {
9267ee62 4082 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
c8094d83 4083
84e6233f
JM
4084 /* [temp.expl.spec] An explicit specialization of a static data
4085 member of a template is a definition if the declaration
4086 includes an initializer; otherwise, it is a declaration.
c8094d83 4087
84e6233f
JM
4088 We check for processing_specialization so this only applies
4089 to the new specialization syntax. */
e92fb501 4090 if (!initialized && processing_specialization)
84e6233f
JM
4091 DECL_EXTERNAL (decl) = 1;
4092 }
f30432d7 4093
b7698cf0 4094 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
2d01edd7 4095 pedwarn ("declaration of %q#D outside of class is not definition",
0cbd7506 4096 decl);
5b605f68
MS
4097 }
4098
c3b7031d
JM
4099 was_public = TREE_PUBLIC (decl);
4100
9188c363 4101 /* Enter this declaration into the symbol table. */
15896502 4102 decl = maybe_push_decl (decl);
2ee887f2 4103
5156628f 4104 if (processing_template_decl)
15896502
MM
4105 decl = push_template_decl (decl);
4106 if (decl == error_mark_node)
156fc2bb 4107 return error_mark_node;
5566b478 4108
3b426391 4109 /* Tell the back end to use or not use .common as appropriate. If we say
a50f0918
MS
4110 -fconserve-space, we want this to save .data space, at the expense of
4111 wrong semantics. If we say -fno-conserve-space, we want this to
4112 produce errors about redefs; to do this we force variables into the
4113 data segment. */
434aeebb 4114 if (flag_conserve_space
15896502
MM
4115 && TREE_CODE (decl) == VAR_DECL
4116 && TREE_PUBLIC (decl)
4117 && !DECL_THREAD_LOCAL_P (decl)
434aeebb 4118 && !have_global_bss_p ())
15896502 4119 DECL_COMMON (decl) = 1;
68642fb6 4120
15896502
MM
4121 if (TREE_CODE (decl) == VAR_DECL
4122 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4123 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
c3b7031d
JM
4124 {
4125 /* This is a const variable with implicit 'static'. Set
4126 DECL_THIS_STATIC so we can tell it from variables that are
4127 !TREE_PUBLIC because of the anonymous namespace. */
15896502
MM
4128 gcc_assert (cp_type_readonly (TREE_TYPE (decl)));
4129 DECL_THIS_STATIC (decl) = 1;
c3b7031d
JM
4130 }
4131
15896502
MM
4132 if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4133 start_decl_1 (decl, initialized);
8d08fdba 4134
15896502 4135 return decl;
8d08fdba
MS
4136}
4137
15896502
MM
4138/* Process the declaration of a variable DECL. INITIALIZED is true
4139 iff DECL is explicitly initialized. (INITIALIZED is false if the
4140 variable is initialized via an implicitly-called constructor.)
4141 This function must be called for ordinary variables (including, for
4142 example, implicit instantiations of templates), but must not be
4143 called for template declarations. */
4144
5566b478 4145void
e92fb501 4146start_decl_1 (tree decl, bool initialized)
8d08fdba 4147{
e92fb501 4148 tree type;
15896502
MM
4149 bool complete_p;
4150 bool aggregate_definition_p;
8d08fdba 4151
e92fb501
MM
4152 gcc_assert (!processing_template_decl);
4153
4154 if (error_operand_p (decl))
44689c12
ML
4155 return;
4156
e92fb501 4157 gcc_assert (TREE_CODE (decl) == VAR_DECL);
15896502 4158
e92fb501 4159 type = TREE_TYPE (decl);
15896502
MM
4160 complete_p = COMPLETE_TYPE_P (type);
4161 aggregate_definition_p = IS_AGGR_TYPE (type) && !DECL_EXTERNAL (decl);
4162
4163 /* If an explicit initializer is present, or if this is a definition
4164 of an aggregate, then we need a complete type at this point.
4165 (Scalars are always complete types, so there is nothing to
4166 check.) This code just sets COMPLETE_P; errors (if necessary)
4167 are issued below. */
4168 if ((initialized || aggregate_definition_p)
4169 && !complete_p
4170 && COMPLETE_TYPE_P (complete_type (type)))
4171 {
4172 complete_p = true;
4173 /* We will not yet have set TREE_READONLY on DECL if the type
4174 was "const", but incomplete, before this point. But, now, we
4175 have a complete type, so we can try again. */
4176 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4177 }
e92fb501 4178
5566b478 4179 if (initialized)
15896502 4180 /* Is it valid for this decl to have an initializer at all? */
8d08fdba 4181 {
5566b478
MS
4182 /* Don't allow initializations for incomplete types except for
4183 arrays which might be completed by the initialization. */
15896502 4184 if (complete_p)
5566b478
MS
4185 ; /* A complete type is ok. */
4186 else if (TREE_CODE (type) != ARRAY_TYPE)
8d08fdba 4187 {
2d01edd7 4188 error ("variable %q#D has initializer but incomplete type", decl);
25eb19ff 4189 type = TREE_TYPE (decl) = error_mark_node;
5566b478 4190 }
d0f062fb 4191 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5566b478
MS
4192 {
4193 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
2d01edd7 4194 error ("elements of array %q#D have incomplete type", decl);
5566b478 4195 /* else we already gave an error in start_decl. */
8d08fdba 4196 }
8d08fdba 4197 }
15896502 4198 else if (aggregate_definition_p && !complete_p)
8d08fdba 4199 {
15896502
MM
4200 error ("aggregate %q#D has incomplete type and cannot be defined",
4201 decl);
4202 /* Change the type so that assemble_variable will give
4203 DECL an rtl we can live with: (mem (const_int 0)). */
4204 type = TREE_TYPE (decl) = error_mark_node;
5566b478
MS
4205 }
4206
c6671cbb
MM
4207 /* Create a new scope to hold this declaration if necessary.
4208 Whether or not a new scope is necessary cannot be determined
4209 until after the type has been completed; if the type is a
4210 specialization of a class template it is not until after
4211 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4212 will be set correctly. */
4213 maybe_push_cleanup_level (type);
5566b478
MS
4214}
4215
7e99327d
MM
4216/* Handle initialization of references. DECL, TYPE, and INIT have the
4217 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4218 but will be set to a new CLEANUP_STMT if a temporary is created
cd0be382 4219 that must be destroyed subsequently.
7e99327d
MM
4220
4221 Returns an initializer expression to use to initialize DECL, or
4222 NULL if the initialization can be performed statically.
e92cc029
MS
4223
4224 Quotes on semantics can be found in ARM 8.4.3. */
4225
8e4ce833 4226static tree
7e99327d 4227grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
5566b478
MS
4228{
4229 tree tmp;
4230
4231 if (init == NULL_TREE)
4232 {
4233 if ((DECL_LANG_SPECIFIC (decl) == 0
4234 || DECL_IN_AGGR_P (decl) == 0)
4235 && ! DECL_THIS_EXTERN (decl))
c4f73174 4236 error ("%qD declared as reference but not initialized", decl);
8e4ce833 4237 return NULL_TREE;
5566b478
MS
4238 }
4239
ed5511d9 4240 if (TREE_CODE (init) == CONSTRUCTOR)
5566b478 4241 {
2d01edd7 4242 error ("ISO C++ forbids use of initializer list to "
0cbd7506 4243 "initialize reference %qD", decl);
8e4ce833 4244 return NULL_TREE;
8d08fdba
MS
4245 }
4246
4247 if (TREE_CODE (init) == TREE_LIST)
c7b62f14 4248 init = build_x_compound_expr_from_list (init, "initializer");
8d08fdba
MS
4249
4250 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4251 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
0a72704b
MM
4252 /* Note: default conversion is only called in very special cases. */
4253 init = decay_conversion (init);
68642fb6 4254
24bef158
MM
4255 /* Convert INIT to the reference type TYPE. This may involve the
4256 creation of a temporary, whose lifetime must be the same as that
350fae66
RK
4257 of the reference. If so, a DECL_EXPR for the temporary will be
4258 added just after the DECL_EXPR for DECL. That's why we don't set
24bef158
MM
4259 DECL_INITIAL for local references (instead assigning to them
4260 explicitly); we need to allow the temporary to be initialized
4261 first. */
7e99327d 4262 tmp = initialize_reference (type, init, decl, cleanup);
8d08fdba 4263
a3203465 4264 if (tmp == error_mark_node)
8e4ce833
JJ
4265 return NULL_TREE;
4266 else if (tmp == NULL_TREE)
8d08fdba 4267 {
2d01edd7 4268 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
8e4ce833 4269 return NULL_TREE;
8d08fdba 4270 }
8d08fdba 4271
8e4ce833
JJ
4272 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4273 return tmp;
4274
08ac397c 4275 DECL_INITIAL (decl) = tmp;
8e4ce833
JJ
4276
4277 return NULL_TREE;
8d08fdba
MS
4278}
4279
76239779
MM
4280/* Designated initializers in arrays are not supported in GNU C++.
4281 The parser cannot detect this error since it does not know whether
4282 a given brace-enclosed initializer is for a class type or for an
4283 array. This function checks that CE does not use a designated
4284 initializer. If it does, an error is issued. Returns true if CE
4285 is valid, i.e., does not have a designated initializer. */
4286
4287static bool
4288check_array_designated_initializer (const constructor_elt *ce)
4289{
48c9a7f0 4290 /* Designated initializers for array elements are not supported. */
76239779
MM
4291 if (ce->index)
4292 {
4293 /* The parser only allows identifiers as designated
4294 intializers. */
4295 gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4296 error ("name %qD used in a GNU-style designated "
4297 "initializer for an array", ce->index);
4298 return false;
4299 }
4300
4301 return true;
4302}
4303
27778b73
MM
4304/* When parsing `int a[] = {1, 2};' we don't know the size of the
4305 array until we finish parsing the initializer. If that's the
4306 situation we're in, update DECL accordingly. */
4307
4308static void
11f6b451 4309maybe_deduce_size_from_array_init (tree decl, tree init)
27778b73
MM
4310{
4311 tree type = TREE_TYPE (decl);
4312
4313 if (TREE_CODE (type) == ARRAY_TYPE
4314 && TYPE_DOMAIN (type) == NULL_TREE
4315 && TREE_CODE (decl) != TYPE_DECL)
4316 {
f2ae0c45
JM
4317 /* do_default is really a C-ism to deal with tentative definitions.
4318 But let's leave it here to ease the eventual merge. */
4319 int do_default = !DECL_EXTERNAL (decl);
27778b73 4320 tree initializer = init ? init : DECL_INITIAL (decl);
76239779 4321 int failure = 0;
27778b73 4322
76239779
MM
4323 /* Check that there are no designated initializers in INIT, as
4324 those are not supported in GNU C++, and as the middle-end
4325 will crash if presented with a non-numeric designated
4326 initializer. */
4327 if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
2b643eda 4328 {
76239779
MM
4329 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4330 constructor_elt *ce;
4331 HOST_WIDE_INT i;
4332 for (i = 0;
4333 VEC_iterate (constructor_elt, v, i, ce);
4334 ++i)
4335 if (!check_array_designated_initializer (ce))
4336 failure = 1;
2b643eda 4337 }
76239779
MM
4338
4339 if (!failure)
27778b73 4340 {
76239779
MM
4341 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4342 do_default);
4343 if (failure == 1)
2b643eda 4344 {
76239779
MM
4345 error ("initializer fails to determine size of %qD", decl);
4346 TREE_TYPE (decl) = error_mark_node;
4347 }
4348 else if (failure == 2)
4349 {
4350 if (do_default)
4351 {
4352 error ("array size missing in %qD", decl);
4353 TREE_TYPE (decl) = error_mark_node;
4354 }
4355 /* If a `static' var's size isn't known, make it extern as
4356 well as static, so it does not get allocated. If it's not
4357 `static', then don't mark it extern; finish_incomplete_decl
4358 will give it a default size and it will get allocated. */
4359 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4360 DECL_EXTERNAL (decl) = 1;
4361 }
4362 else if (failure == 3)
4363 {
4364 error ("zero-size array %qD", decl);
2b643eda
MM
4365 TREE_TYPE (decl) = error_mark_node;
4366 }
2b643eda 4367 }
27778b73 4368
f23b8501
JJ
4369 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4370
27778b73
MM
4371 layout_decl (decl, 0);
4372 }
4373}
4374
4375/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
57b52417 4376 any appropriate error messages regarding the layout. */
27778b73 4377
57b52417 4378static void
11f6b451 4379layout_var_decl (tree decl)
27778b73 4380{
2b643eda
MM
4381 tree type;
4382
2b643eda
MM
4383 type = TREE_TYPE (decl);
4384 if (type == error_mark_node)
4385 return;
57b52417
MM
4386
4387 /* If we haven't already layed out this declaration, do so now.
4388 Note that we must not call complete type for an external object
4389 because it's type might involve templates that we are not
34cd5ae7 4390 supposed to instantiate yet. (And it's perfectly valid to say
57b52417
MM
4391 `extern X x' for some incomplete type `X'.) */
4392 if (!DECL_EXTERNAL (decl))
4393 complete_type (type);
caf93cb0 4394 if (!DECL_SIZE (decl)
328de7c2 4395 && TREE_TYPE (decl) != error_mark_node
7de85f7e 4396 && (COMPLETE_TYPE_P (type)
caf93cb0 4397 || (TREE_CODE (type) == ARRAY_TYPE
7de85f7e
MM
4398 && !TYPE_DOMAIN (type)
4399 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
27778b73
MM
4400 layout_decl (decl, 0);
4401
c82dbd95 4402 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
27778b73
MM
4403 {
4404 /* An automatic variable with an incomplete type: that is an error.
4405 Don't talk about array types here, since we took care of that
4406 message in grokdeclarator. */
2d01edd7 4407 error ("storage size of %qD isn't known", decl);
27778b73
MM
4408 TREE_TYPE (decl) = error_mark_node;
4409 }
ae673f14
JM
4410#if 0
4411 /* Keep this code around in case we later want to control debug info
4412 based on whether a type is "used". (jason 1999-11-11) */
4413
27778b73
MM
4414 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
4415 /* Let debugger know it should output info for this type. */
4416 note_debug_info_needed (ttype);
4417
4418 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4419 note_debug_info_needed (DECL_CONTEXT (decl));
ae673f14 4420#endif
27778b73
MM
4421
4422 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4423 && DECL_SIZE (decl) != NULL_TREE
4424 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4425 {
4426 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4427 constant_expression_warning (DECL_SIZE (decl));
4428 else
2d01edd7 4429 error ("storage size of %qD isn't constant", decl);
27778b73
MM
4430 }
4431}
4432
27778b73
MM
4433/* If a local static variable is declared in an inline function, or if
4434 we have a weak definition, we must endeavor to create only one
4435 instance of the variable at link-time. */
4436
4437static void
11f6b451 4438maybe_commonize_var (tree decl)
27778b73
MM
4439{
4440 /* Static data in a function with comdat linkage also has comdat
4441 linkage. */
4442 if (TREE_STATIC (decl)
4443 /* Don't mess with __FUNCTION__. */
cf74fb86 4444 && ! DECL_ARTIFICIAL (decl)
0b50d7f1
MM
4445 && DECL_FUNCTION_SCOPE_P (decl)
4446 /* Unfortunately, import_export_decl has not always been called
4447 before the function is processed, so we cannot simply check
caf93cb0 4448 DECL_COMDAT. */
9e6aaf5e 4449 && (DECL_COMDAT (DECL_CONTEXT (decl))
0b50d7f1
MM
4450 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4451 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4452 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
27778b73 4453 {
0dbc5cd3 4454 if (flag_weak)
27778b73 4455 {
0dbc5cd3
MM
4456 /* With weak symbols, we simply make the variable COMDAT;
4457 that will cause copies in multiple translations units to
4458 be merged. */
4459 comdat_linkage (decl);
4460 }
4461 else
4462 {
4463 if (DECL_INITIAL (decl) == NULL_TREE
4464 || DECL_INITIAL (decl) == error_mark_node)
27778b73 4465 {
0dbc5cd3
MM
4466 /* Without weak symbols, we can use COMMON to merge
4467 uninitialized variables. */
27778b73
MM
4468 TREE_PUBLIC (decl) = 1;
4469 DECL_COMMON (decl) = 1;
4470 }
0dbc5cd3 4471 else
27778b73 4472 {
0dbc5cd3
MM
4473 /* While for initialized variables, we must use internal
4474 linkage -- which means that multiple copies will not
4475 be merged. */
4476 TREE_PUBLIC (decl) = 0;
4477 DECL_COMMON (decl) = 0;
dee15844
JM
4478 warning (0, "sorry: semantics of inline function static "
4479 "data %q+#D are wrong (you'll wind up "
4480 "with multiple copies)", decl);
d4ee4d25 4481 warning (0, "%J you can work around this by removing "
0cbd7506 4482 "the initializer",
ddd2d57e 4483 decl);
27778b73
MM
4484 }
4485 }
4486 }
4487 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4488 /* Set it up again; we might have set DECL_INITIAL since the last
4489 time. */
4490 comdat_linkage (decl);
4491}
4492
91063b51
MM
4493/* Issue an error message if DECL is an uninitialized const variable. */
4494
4495static void
11f6b451 4496check_for_uninitialized_const_var (tree decl)
91063b51
MM
4497{
4498 tree type = TREE_TYPE (decl);
4499
4500 /* ``Unless explicitly declared extern, a const object does not have
4501 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4502 7.1.6 */
4503 if (TREE_CODE (decl) == VAR_DECL
4504 && TREE_CODE (type) != REFERENCE_TYPE
4505 && CP_TYPE_CONST_P (type)
4506 && !TYPE_NEEDS_CONSTRUCTING (type)
4507 && !DECL_INITIAL (decl))
2d01edd7 4508 error ("uninitialized const %qD", decl);
91063b51
MM
4509}
4510
4038c495
GB
4511\f
4512/* Structure holding the current initializer being processed by reshape_init.
4513 CUR is a pointer to the current element being processed, END is a pointer
4514 after the last element present in the initializer. */
4515typedef struct reshape_iterator_t
4516{
4517 constructor_elt *cur;
4518 constructor_elt *end;
4519} reshape_iter;
4520
4521static tree reshape_init_r (tree, reshape_iter *, bool);
4522
8e3df2de
MM
4523/* FIELD is a FIELD_DECL or NULL. In the former case, the value
4524 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4525 initialized. If there are no more such fields, the return value
4526 will be NULL. */
4527
4528static tree
4529next_initializable_field (tree field)
4530{
4531 while (field
4532 && (TREE_CODE (field) != FIELD_DECL
4533 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4534 || DECL_ARTIFICIAL (field)))
4535 field = TREE_CHAIN (field);
4536
4537 return field;
4538}
4539
4038c495
GB
4540/* Subroutine of reshape_init_array and reshape_init_vector, which does
4541 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4542 INTEGER_CST representing the size of the array minus one (the maximum index),
4543 or NULL_TREE if the array was declared without specifying the size. D is
4544 the iterator within the constructor. */
4545
4546static tree
4547reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
3d142be2 4548{
4038c495 4549 tree new_init;
3d142be2 4550 bool sized_array_p = (max_index != NULL_TREE);
004c400a
JJ
4551 unsigned HOST_WIDE_INT max_index_cst = 0;
4552 unsigned HOST_WIDE_INT index;
3d142be2 4553
4038c495
GB
4554 /* The initializer for an array is always a CONSTRUCTOR. */
4555 new_init = build_constructor (NULL_TREE, NULL);
4556
3d142be2 4557 if (sized_array_p)
004c400a 4558 {
d7d93837
AH
4559 /* Minus 1 is used for zero sized arrays. */
4560 if (integer_all_onesp (max_index))
4561 return new_init;
4562
004c400a
JJ
4563 if (host_integerp (max_index, 1))
4564 max_index_cst = tree_low_cst (max_index, 1);
4565 /* sizetype is sign extended, not zero extended. */
4566 else
4567 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4568 1);
4569 }
3d142be2
GB
4570
4571 /* Loop until there are no more initializers. */
4572 for (index = 0;
4038c495 4573 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
3d142be2
GB
4574 ++index)
4575 {
4038c495
GB
4576 tree elt_init;
4577
76239779 4578 check_array_designated_initializer (d->cur);
4038c495 4579 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
07471dfb
MM
4580 if (elt_init == error_mark_node)
4581 return error_mark_node;
4038c495 4582 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
3d142be2
GB
4583 }
4584
4038c495 4585 return new_init;
3d142be2
GB
4586}
4587
4038c495
GB
4588/* Subroutine of reshape_init_r, processes the initializers for arrays.
4589 Parameters are the same of reshape_init_r. */
8e3df2de 4590
4038c495
GB
4591static tree
4592reshape_init_array (tree type, reshape_iter *d)
4593{
4594 tree max_index = NULL_TREE;
caf93cb0 4595
4038c495 4596 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
8e3df2de 4597
4038c495
GB
4598 if (TYPE_DOMAIN (type))
4599 max_index = array_type_nelts (type);
4600
4601 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4602}
4603
4604/* Subroutine of reshape_init_r, processes the initializers for vectors.
4605 Parameters are the same of reshape_init_r. */
8e3df2de
MM
4606
4607static tree
4038c495 4608reshape_init_vector (tree type, reshape_iter *d)
8e3df2de 4609{
4038c495
GB
4610 tree max_index = NULL_TREE;
4611 tree rtype;
4612
4613 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4614
3b2db49f 4615 if (COMPOUND_LITERAL_P (d->cur->value))
4038c495
GB
4616 {
4617 tree value = d->cur->value;
4618 if (!same_type_p (TREE_TYPE (value), type))
4619 {
4620 error ("invalid type %qT as initializer for a vector of type %qT",
4621 TREE_TYPE (d->cur->value), type);
3db45ab5 4622 value = error_mark_node;
4038c495
GB
4623 }
4624 ++d->cur;
4625 return value;
4626 }
4627
4628 /* For a vector, the representation type is a struct
4629 containing a single member which is an array of the
4630 appropriate size. */
4631 rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4632 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4633 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4634
4635 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4636}
4637
4638/* Subroutine of reshape_init_r, processes the initializers for classes
4639 or union. Parameters are the same of reshape_init_r. */
4640
4641static tree
4642reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4643{
4644 tree field;
8e3df2de 4645 tree new_init;
8e3df2de 4646
4038c495 4647 gcc_assert (CLASS_TYPE_P (type));
8e3df2de 4648
4038c495
GB
4649 /* The initializer for a class is always a CONSTRUCTOR. */
4650 new_init = build_constructor (NULL_TREE, NULL);
4651 field = next_initializable_field (TYPE_FIELDS (type));
ee7ecb29 4652
4038c495 4653 if (!field)
8e3df2de 4654 {
4038c495
GB
4655 /* [dcl.init.aggr]
4656
4657 An initializer for an aggregate member that is an
4658 empty class shall have the form of an empty
4659 initializer-list {}. */
4660 if (!first_initializer_p)
4661 {
4662 error ("initializer for %qT must be brace-enclosed", type);
4663 return error_mark_node;
4664 }
4665 return new_init;
8e3df2de 4666 }
4038c495
GB
4667
4668 /* Loop through the initializable fields, gathering initializers. */
4669 while (d->cur != d->end)
8e3df2de 4670 {
4038c495
GB
4671 tree field_init;
4672
4673 /* Handle designated initializers, as an extension. */
4674 if (d->cur->index)
4675 {
4038c495
GB
4676 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4677
4678 if (!field || TREE_CODE (field) != FIELD_DECL)
77bffd4c
SE
4679 {
4680 error ("%qT has no non-static data member named %qD", type,
4681 d->cur->index);
4682 return error_mark_node;
4683 }
4038c495
GB
4684 }
4685
4686 /* If we processed all the member of the class, we are done. */
4687 if (!field)
4688 break;
4689
4690 field_init = reshape_init_r (TREE_TYPE (field), d,
4691 /*first_initializer_p=*/false);
4692 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4693
4694 /* [dcl.init.aggr]
4695
4696 When a union is initialized with a brace-enclosed
4697 initializer, the braces shall only contain an
4698 initializer for the first member of the union. */
4699 if (TREE_CODE (type) == UNION_TYPE)
4700 break;
4701
4702 field = next_initializable_field (TREE_CHAIN (field));
8e3df2de
MM
4703 }
4704
4038c495
GB
4705 return new_init;
4706}
4707
4708/* Subroutine of reshape_init, which processes a single initializer (part of
4709 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4710 iterator within the CONSTRUCTOR which points to the initializer to process.
4711 FIRST_INITIALIZER_P is true if this is the first initializer of the
4712 CONSTRUCTOR node. */
4713
4714static tree
4715reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4716{
4717 tree init = d->cur->value;
4718
8e3df2de
MM
4719 /* A non-aggregate type is always initialized with a single
4720 initializer. */
4721 if (!CP_AGGREGATE_TYPE_P (type))
4038c495
GB
4722 {
4723 /* It is invalid to initialize a non-aggregate type with a
4724 brace-enclosed initializer.
4725 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4726 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4727 a CONSTRUCTOR (with a record type). */
4728 if (TREE_CODE (init) == CONSTRUCTOR
4729 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
4730 {
4731 error ("braces around scalar initializer for type %qT", type);
4732 init = error_mark_node;
4733 }
3db45ab5 4734
4038c495
GB
4735 d->cur++;
4736 return init;
4737 }
8e3df2de
MM
4738
4739 /* [dcl.init.aggr]
4740
4741 All implicit type conversions (clause _conv_) are considered when
4742 initializing the aggregate member with an initializer from an
4743 initializer-list. If the initializer can initialize a member,
4744 the member is initialized. Otherwise, if the member is itself a
4745 non-empty subaggregate, brace elision is assumed and the
4746 initializer is considered for the initialization of the first
4747 member of the subaggregate. */
4038c495 4748 if (TREE_CODE (init) != CONSTRUCTOR
30f86ec3 4749 && can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL))
8e3df2de 4750 {
4038c495
GB
4751 d->cur++;
4752 return init;
8e3df2de
MM
4753 }
4754
4038c495
GB
4755 /* [dcl.init.string]
4756
4757 A char array (whether plain char, signed char, or unsigned char)
4758 can be initialized by a string-literal (optionally enclosed in
4759 braces); a wchar_t array can be initialized by a wide
4760 string-literal (optionally enclosed in braces). */
4761 if (TREE_CODE (type) == ARRAY_TYPE
42328048 4762 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
8e3df2de 4763 {
4038c495 4764 tree str_init = init;
8e3df2de 4765
4038c495 4766 /* Strip one level of braces if and only if they enclose a single
3db45ab5 4767 element (as allowed by [dcl.init.string]). */
4038c495
GB
4768 if (!first_initializer_p
4769 && TREE_CODE (str_init) == CONSTRUCTOR
4770 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
8e3df2de 4771 {
4038c495
GB
4772 str_init = VEC_index (constructor_elt,
4773 CONSTRUCTOR_ELTS (str_init), 0)->value;
4774 }
3db45ab5 4775
4038c495 4776 /* If it's a string literal, then it's the initializer for the array
3db45ab5 4777 as a whole. Otherwise, continue with normal initialization for
4038c495
GB
4778 array types (one value per array element). */
4779 if (TREE_CODE (str_init) == STRING_CST)
4780 {
4781 d->cur++;
4782 return str_init;
4783 }
4784 }
8e3df2de 4785
4038c495
GB
4786 /* The following cases are about aggregates. If we are not within a full
4787 initializer already, and there is not a CONSTRUCTOR, it means that there
4788 is a missing set of braces (that is, we are processing the case for
4789 which reshape_init exists). */
4790 if (!first_initializer_p)
4791 {
4792 if (TREE_CODE (init) == CONSTRUCTOR)
4793 {
70ec16f7
AP
4794 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
4795 /* There is no need to reshape pointer-to-member function
4796 initializers, as they are always constructed correctly
4797 by the front end. */
4798 ;
4799 else if (COMPOUND_LITERAL_P (init))
4038c495
GB
4800 /* For a nested compound literal, there is no need to reshape since
4801 brace elision is not allowed. Even if we decided to allow it,
4802 we should add a call to reshape_init in finish_compound_literal,
4803 before calling digest_init, so changing this code would still
4804 not be necessary. */
70ec16f7
AP
4805 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
4806 else
8e3df2de 4807 {
4038c495
GB
4808 ++d->cur;
4809 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4810 return reshape_init (type, init);
8e3df2de 4811 }
8e3df2de 4812 }
f8e7a389 4813
4038c495
GB
4814 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
4815 type);
4816 }
8e3df2de 4817
4038c495
GB
4818 /* Dispatch to specialized routines. */
4819 if (CLASS_TYPE_P (type))
4820 return reshape_init_class (type, d, first_initializer_p);
4821 else if (TREE_CODE (type) == ARRAY_TYPE)
4822 return reshape_init_array (type, d);
4823 else if (TREE_CODE (type) == VECTOR_TYPE)
4824 return reshape_init_vector (type, d);
4825 else
4826 gcc_unreachable();
4827}
8e3df2de 4828
4038c495
GB
4829/* Undo the brace-elision allowed by [dcl.init.aggr] in a
4830 brace-enclosed aggregate initializer.
8e3df2de 4831
4038c495
GB
4832 INIT is the CONSTRUCTOR containing the list of initializers describing
4833 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
4834 It may not presently match the shape of the TYPE; for example:
4835
4836 struct S { int a; int b; };
4837 struct S a[] = { 1, 2, 3, 4 };
4838
4839 Here INIT will hold a VEC of four elements, rather than a
4840 VEC of two elements, each itself a VEC of two elements. This
4841 routine transforms INIT from the former form into the latter. The
4842 revised CONSTRUCTOR node is returned. */
4843
3b2db49f 4844tree
4038c495
GB
4845reshape_init (tree type, tree init)
4846{
4847 VEC(constructor_elt, gc) *v;
4848 reshape_iter d;
4849 tree new_init;
4850
4038c495
GB
4851 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4852
4853 v = CONSTRUCTOR_ELTS (init);
4854
4855 /* An empty constructor does not need reshaping, and it is always a valid
4856 initializer. */
4857 if (VEC_empty (constructor_elt, v))
4858 return init;
4859
4860 /* Recurse on this CONSTRUCTOR. */
4861 d.cur = VEC_index (constructor_elt, v, 0);
4862 d.end = d.cur + VEC_length (constructor_elt, v);
4863
4864 new_init = reshape_init_r (type, &d, true);
07471dfb
MM
4865 if (new_init == error_mark_node)
4866 return error_mark_node;
4038c495
GB
4867
4868 /* Make sure all the element of the constructor were used. Otherwise,
4869 issue an error about exceeding initializers. */
4870 if (d.cur != d.end)
4871 error ("too many initializers for %qT", type);
8e3df2de
MM
4872
4873 return new_init;
4874}
4875
c82dbd95 4876/* Verify INIT (the initializer for DECL), and record the
7e99327d
MM
4877 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
4878 grok_reference_init.
8e3df2de
MM
4879
4880 If the return value is non-NULL, it is an expression that must be
4881 evaluated dynamically to initialize DECL. */
27778b73 4882
c82dbd95 4883static tree
7e99327d 4884check_initializer (tree decl, tree init, int flags, tree *cleanup)
27778b73 4885{
17bbb839 4886 tree type = TREE_TYPE (decl);
25ebb82a 4887 tree init_code = NULL;
fc0e7bf5 4888
328de7c2
MM
4889 /* Things that are going to be initialized need to have complete
4890 type. */
4891 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
c82dbd95 4892
328de7c2
MM
4893 if (type == error_mark_node)
4894 /* We will have already complained. */
f724eac4
MM
4895 return NULL_TREE;
4896
4897 if (TREE_CODE (type) == ARRAY_TYPE)
328de7c2 4898 {
f724eac4
MM
4899 tree element_type = TREE_TYPE (type);
4900
4901 /* The array type itself need not be complete, because the
4902 initializer may tell us how many elements are in the array.
4903 But, the elements of the array must be complete. */
4904 if (!COMPLETE_TYPE_P (complete_type (element_type)))
4905 {
4906 error ("elements of array %q#D have incomplete type", decl);
4907 return NULL_TREE;
4908 }
b9704fc5 4909 /* It is not valid to initialize a VLA. */
f724eac4
MM
4910 if (init
4911 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
4912 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
4913 {
4914 error ("variable-sized object %qD may not be initialized", decl);
4915 return NULL_TREE;
4916 }
328de7c2 4917 }
f724eac4 4918 else if (!COMPLETE_TYPE_P (type))
328de7c2 4919 {
2d01edd7 4920 error ("%qD has incomplete type", decl);
328de7c2 4921 TREE_TYPE (decl) = error_mark_node;
f724eac4 4922 return NULL_TREE;
27778b73 4923 }
f724eac4
MM
4924 else
4925 /* There is no way to make a variable-sized class type in GNU C++. */
4926 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
c1ae8be5
SM
4927
4928 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
f47165c9 4929 {
c1ae8be5
SM
4930 int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
4931 if (SCALAR_TYPE_P (type))
4932 {
4933 if (init_len != 1)
4934 {
4935 error ("scalar object %qD requires one element in initializer",
4936 decl);
4937 TREE_TYPE (decl) = error_mark_node;
4938 return NULL_TREE;
4939 }
4940 }
4941 else if ((cxx_dialect == cxx98) && !CP_AGGREGATE_TYPE_P (type))
4942 {
4943 /* A non-aggregate that is not a scalar cannot be initialized
4944 via an initializer-list in C++98. */
4945 error ("braces around initializer for non-aggregate type %qT",
4946 type);
4947 TREE_TYPE (decl) = error_mark_node;
4948 return NULL_TREE;
4949 }
f47165c9 4950 }
27778b73
MM
4951
4952 if (TREE_CODE (decl) == CONST_DECL)
4953 {
7525db03 4954 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
27778b73
MM
4955
4956 DECL_INITIAL (decl) = init;
4957
50bc768d 4958 gcc_assert (init != NULL_TREE);
27778b73
MM
4959 init = NULL_TREE;
4960 }
c82dbd95 4961 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7e99327d 4962 init = grok_reference_init (decl, type, init, cleanup);
27778b73
MM
4963 else if (init)
4964 {
4038c495 4965 /* Do not reshape constructors of vectors (they don't need to be
3db45ab5 4966 reshaped. */
caf93cb0 4967 if (TREE_CODE (init) == CONSTRUCTOR
3b2db49f 4968 && !COMPOUND_LITERAL_P (init)
4038c495 4969 && !TREE_TYPE (init)) /* ptrmemfunc */
a16f2357 4970 {
4038c495 4971 init = reshape_init (type, init);
6e1b3a7c
AH
4972
4973 if ((*targetm.vector_opaque_p) (type))
4974 {
4975 error ("opaque vector types cannot be initialized");
4976 init = error_mark_node;
4977 }
a16f2357 4978 }
8e3df2de
MM
4979
4980 /* If DECL has an array type without a specific bound, deduce the
4981 array size from the initializer. */
4982 maybe_deduce_size_from_array_init (decl, init);
4983 type = TREE_TYPE (decl);
2b643eda
MM
4984 if (type == error_mark_node)
4985 return NULL_TREE;
8e3df2de 4986
27778b73
MM
4987 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
4988 {
4989 if (TREE_CODE (type) == ARRAY_TYPE)
8e3df2de 4990 goto initialize_aggr;
4038c495 4991 else if (TREE_CODE (init) == CONSTRUCTOR)
27778b73
MM
4992 {
4993 if (TYPE_NON_AGGREGATE_CLASS (type))
4994 {
2d01edd7 4995 error ("%qD must be initialized by constructor, "
0cbd7506 4996 "not by %<{...}%>",
8e3df2de 4997 decl);
27778b73
MM
4998 init = error_mark_node;
4999 }
5000 else
5001 goto dont_use_constructor;
5002 }
8e3df2de
MM
5003 else
5004 {
5005 int saved_stmts_are_full_exprs_p;
5006
5007 initialize_aggr:
5008 saved_stmts_are_full_exprs_p = 0;
5009 if (building_stmt_tree ())
5010 {
5011 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5012 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5013 }
5014 init = build_aggr_init (decl, init, flags);
5015 if (building_stmt_tree ())
5016 current_stmt_tree ()->stmts_are_full_exprs_p =
5017 saved_stmts_are_full_exprs_p;
5018 return init;
5019 }
27778b73
MM
5020 }
5021 else
5022 {
5023 dont_use_constructor:
5024 if (TREE_CODE (init) != TREE_VEC)
25ebb82a
RH
5025 {
5026 init_code = store_init_value (decl, init);
7a8380ae
NS
5027 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5028 && DECL_INITIAL (decl)
5029 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5030 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
d4ee4d25 5031 warning (0, "array %qD initialized by parenthesized string literal %qE",
7a8380ae 5032 decl, DECL_INITIAL (decl));
25ebb82a
RH
5033 init = NULL;
5034 }
27778b73 5035 }
27778b73
MM
5036 }
5037 else if (DECL_EXTERNAL (decl))
5038 ;
8e3df2de
MM
5039 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
5040 goto initialize_aggr;
5041 else if (IS_AGGR_TYPE (type))
27778b73
MM
5042 {
5043 tree core_type = strip_array_types (type);
5044
8e3df2de 5045 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
2d01edd7 5046 error ("structure %qD with uninitialized const members", decl);
8e3df2de 5047 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
2d01edd7 5048 error ("structure %qD with uninitialized reference members", decl);
27778b73
MM
5049
5050 check_for_uninitialized_const_var (decl);
27778b73
MM
5051 }
5052 else
5053 check_for_uninitialized_const_var (decl);
68642fb6 5054
8e3df2de 5055 if (init && init != error_mark_node)
f293ce4b 5056 init_code = build2 (INIT_EXPR, type, decl, init);
8e3df2de 5057
25ebb82a 5058 return init_code;
27778b73
MM
5059}
5060
5061/* If DECL is not a local variable, give it RTL. */
5062
5063static void
11f6b451 5064make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
27778b73 5065{
95ee998c
MM
5066 int toplev = toplevel_bindings_p ();
5067 int defer_p;
9f12b095 5068 const char *filename;
27778b73 5069
0e6df31e
GK
5070 /* Set the DECL_ASSEMBLER_NAME for the object. */
5071 if (asmspec)
5072 {
5073 /* The `register' keyword, when used together with an
5074 asm-specification, indicates that the variable should be
5075 placed in a particular register. */
5076 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5077 {
11e3f4b6 5078 set_user_assembler_name (decl, asmspec);
0e6df31e
GK
5079 DECL_HARD_REGISTER (decl) = 1;
5080 }
5081 else
b482789c
MA
5082 {
5083 if (TREE_CODE (decl) == FUNCTION_DECL
5084 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5085 set_builtin_user_assembler_name (decl, asmspec);
5086 set_user_assembler_name (decl, asmspec);
5087 }
0e6df31e
GK
5088 }
5089
f39ee884
MM
5090 /* Handle non-variables up front. */
5091 if (TREE_CODE (decl) != VAR_DECL)
5092 {
0e6df31e 5093 rest_of_decl_compilation (decl, toplev, at_eof);
f39ee884
MM
5094 return;
5095 }
5096
95ee998c
MM
5097 /* If we see a class member here, it should be a static data
5098 member. */
5099 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5100 {
50bc768d 5101 gcc_assert (TREE_STATIC (decl));
95ee998c
MM
5102 /* An in-class declaration of a static data member should be
5103 external; it is only a declaration, and not a definition. */
5104 if (init == NULL_TREE)
dc472c59 5105 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
95ee998c
MM
5106 }
5107
95ee998c
MM
5108 /* We don't create any RTL for local variables. */
5109 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5110 return;
27778b73 5111
95ee998c 5112 /* We defer emission of local statics until the corresponding
350fae66 5113 DECL_EXPR is expanded. */
95ee998c
MM
5114 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5115
b602511f
JM
5116 /* We try to defer namespace-scope static constants so that they are
5117 not emitted into the object file unnecessarily. */
9f12b095 5118 filename = input_filename;
b602511f
JM
5119 if (!DECL_VIRTUAL_P (decl)
5120 && TREE_READONLY (decl)
5121 && DECL_INITIAL (decl) != NULL_TREE
5122 && DECL_INITIAL (decl) != error_mark_node
9f12b095 5123 && filename != NULL
b602511f
JM
5124 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5125 && toplev
5126 && !TREE_PUBLIC (decl))
5cc90635
JM
5127 {
5128 /* Fool with the linkage of static consts according to #pragma
5129 interface. */
c533e34d 5130 struct c_fileinfo *finfo = get_fileinfo (filename);
5d709b00 5131 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
27778b73 5132 {
95ee998c 5133 TREE_PUBLIC (decl) = 1;
5d709b00 5134 DECL_EXTERNAL (decl) = finfo->interface_only;
27778b73 5135 }
27778b73 5136
95ee998c 5137 defer_p = 1;
27778b73 5138 }
b602511f 5139 /* Likewise for template instantiations. */
4684cd27
MM
5140 else if (DECL_LANG_SPECIFIC (decl)
5141 && DECL_IMPLICIT_INSTANTIATION (decl))
b602511f 5142 defer_p = 1;
95ee998c 5143
95ee998c 5144 /* If we're not deferring, go ahead and assemble the variable. */
0e6df31e
GK
5145 if (!defer_p)
5146 rest_of_decl_compilation (decl, toplev, at_eof);
27778b73
MM
5147}
5148
a24549d4
JM
5149/* walk_tree helper for wrap_temporary_cleanups, below. */
5150
5151static tree
5152wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5153{
5154 if (TYPE_P (*stmt_p))
5155 {
5156 *walk_subtrees = 0;
5157 return NULL_TREE;
5158 }
5159
5160 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5161 {
5162 tree guard = (tree)data;
5163 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5164
5165 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5166
5167 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5168 }
5169
5170 return NULL_TREE;
5171}
5172
5173/* We're initializing a local variable which has a cleanup GUARD. If there
5174 are any temporaries used in the initializer INIT of this variable, we
5175 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5176 variable will be cleaned up properly if one of them throws. */
5177
5178static void
5179wrap_temporary_cleanups (tree init, tree guard)
5180{
5181 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5182}
5183
ed5511d9 5184/* Generate code to initialize DECL (a local variable). */
27778b73 5185
8e3df2de 5186static void
11f6b451 5187initialize_local_var (tree decl, tree init)
27778b73 5188{
9ed9e79a 5189 tree type = TREE_TYPE (decl);
170b020f 5190 tree cleanup;
a24549d4 5191 int already_used;
27778b73 5192
50bc768d
NS
5193 gcc_assert (TREE_CODE (decl) == VAR_DECL
5194 || TREE_CODE (decl) == RESULT_DECL);
5195 gcc_assert (!TREE_STATIC (decl));
b7b8bcd2 5196
8e3df2de 5197 if (DECL_SIZE (decl) == NULL_TREE)
b7b8bcd2
MM
5198 {
5199 /* If we used it already as memory, it must stay in memory. */
5200 DECL_INITIAL (decl) = NULL_TREE;
5201 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
a24549d4 5202 return;
b7b8bcd2
MM
5203 }
5204
a24549d4
JM
5205 if (type == error_mark_node)
5206 return;
68642fb6 5207
a24549d4
JM
5208 /* Compute and store the initial value. */
5209 already_used = TREE_USED (decl) || TREE_USED (type);
27778b73 5210
a24549d4
JM
5211 /* Generate a cleanup, if necessary. */
5212 cleanup = cxx_maybe_build_cleanup (decl);
27778b73 5213
a24549d4
JM
5214 /* Perform the initialization. */
5215 if (init)
5216 {
5217 int saved_stmts_are_full_exprs_p;
5218
5219 /* If we're only initializing a single object, guard the destructors
5220 of any temporaries used in its initializer with its destructor.
5221 This isn't right for arrays because each element initialization is
5222 a full-expression. */
5223 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5224 wrap_temporary_cleanups (init, cleanup);
5225
5226 gcc_assert (building_stmt_tree ());
5227 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5228 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5229 finish_expr_stmt (init);
5230 current_stmt_tree ()->stmts_are_full_exprs_p =
5231 saved_stmts_are_full_exprs_p;
27778b73 5232 }
24bef158 5233
a24549d4
JM
5234 /* Set this to 0 so we can tell whether an aggregate which was
5235 initialized was ever used. Don't do this if it has a
5236 destructor, so we don't complain about the 'resource
5237 allocation is initialization' idiom. Now set
5238 attribute((unused)) on types so decls of that type will be
5239 marked used. (see TREE_USED, above.) */
5240 if (TYPE_NEEDS_CONSTRUCTING (type)
5241 && ! already_used
5242 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5243 && DECL_NAME (decl))
5244 TREE_USED (decl) = 0;
5245 else if (already_used)
5246 TREE_USED (decl) = 1;
5247
5248 if (cleanup)
170b020f 5249 finish_decl_cleanup (decl, cleanup);
24bef158
MM
5250}
5251
19c29b2f
MM
5252/* DECL is a VAR_DECL for a compiler-generated variable with static
5253 storage duration (like a virtual table) whose initializer is a
3b2db49f
MM
5254 compile-time constant. INIT must be either a TREE_LIST of values,
5255 or a CONSTRUCTOR. Initialize the variable and provide it to the
5256 back end. */
19c29b2f
MM
5257
5258void
5259initialize_artificial_var (tree decl, tree init)
5260{
d23f3d60 5261 gcc_assert (DECL_ARTIFICIAL (decl));
3b2db49f
MM
5262 if (TREE_CODE (init) == TREE_LIST)
5263 init = build_constructor_from_list (NULL_TREE, init);
5264 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5265 DECL_INITIAL (decl) = init;
19c29b2f
MM
5266 DECL_INITIALIZED_P (decl) = 1;
5267 determine_visibility (decl);
5268 layout_var_decl (decl);
5269 maybe_commonize_var (decl);
5270 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5271}
5272
32a11c08
MM
5273/* INIT is the initializer for a variable, as represented by the
5274 parser. Returns true iff INIT is value-dependent. */
5275
5276static bool
5277value_dependent_init_p (tree init)
5278{
5279 if (TREE_CODE (init) == TREE_LIST)
5280 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5281 return any_value_dependent_elements_p (init);
5282 else if (TREE_CODE (init) == CONSTRUCTOR)
5283 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5284 {
5285 VEC(constructor_elt, gc) *elts;
5286 size_t nelts;
5287 size_t i;
5288
5289 elts = CONSTRUCTOR_ELTS (init);
5290 nelts = VEC_length (constructor_elt, elts);
5291 for (i = 0; i < nelts; ++i)
5292 if (value_dependent_init_p (VEC_index (constructor_elt,
5293 elts, i)->value))
5294 return true;
5295 }
5296 else
5297 /* It must be a simple expression, e.g., int i = 3; */
5298 return value_dependent_expression_p (init);
5299
5300 return false;
5301}
5302
8d08fdba
MS
5303/* Finish processing of a declaration;
5304 install its line number and initial value.
5305 If the length of an array type is not known before,
5306 it must be determined now, from the initial value, or it is an error.
5307
d174af6c
MM
5308 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
5309 true, then INIT is an integral constant expression.
8d08fdba 5310
920f9474 5311 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
f78c7bc6 5312 if the (init) syntax was used. */
8d08fdba
MS
5313
5314void
3db45ab5 5315cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
d174af6c 5316 tree asmspec_tree, int flags)
8d08fdba 5317{
7e99327d 5318 tree type;
7e99327d 5319 tree cleanup;
9c0758dd 5320 const char *asmspec = NULL;
8d08fdba 5321 int was_readonly = 0;
745d26d9 5322 bool var_definition_p = false;
2b643eda 5323 int saved_processing_template_decl;
8d08fdba 5324
11325dcd
KL
5325 if (decl == error_mark_node)
5326 return;
5327 else if (! decl)
8d08fdba
MS
5328 {
5329 if (init)
8251199e 5330 error ("assignment (not initialization) in declaration");
8d08fdba
MS
5331 return;
5332 }
5333
50bc768d 5334 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
2b643eda
MM
5335 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5336 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5337
5338 type = TREE_TYPE (decl);
5339 if (type == error_mark_node)
5340 return;
170b020f 5341
7e99327d
MM
5342 /* Assume no cleanup is required. */
5343 cleanup = NULL_TREE;
2b643eda 5344 saved_processing_template_decl = processing_template_decl;
7e99327d 5345
a4443a08 5346 /* If a name was specified, get the string. */
5f52c0e0 5347 if (global_scope_p (current_binding_level))
41c64394 5348 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4f543d15 5349 if (asmspec_tree && asmspec_tree != error_mark_node)
5cc90635 5350 asmspec = TREE_STRING_POINTER (asmspec_tree);
8d08fdba 5351
6ba89f8e 5352 if (current_class_type
4f1c5b7d 5353 && CP_DECL_CONTEXT (decl) == current_class_type
6ba89f8e
MM
5354 && TYPE_BEING_DEFINED (current_class_type)
5355 && (DECL_INITIAL (decl) || init))
3febd123 5356 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6ba89f8e 5357
5156628f 5358 if (processing_template_decl)
5566b478 5359 {
2b643eda
MM
5360 bool type_dependent_p;
5361
08ac397c 5362 /* Add this declaration to the statement-tree. */
170b020f 5363 if (at_function_scope_p ())
350fae66 5364 add_decl_expr (decl);
08ac397c 5365
2b643eda
MM
5366 type_dependent_p = dependent_type_p (type);
5367
5368 if (init && init_const_expr_p)
d174af6c 5369 {
2b643eda
MM
5370 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5371 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5372 TREE_CONSTANT (decl) = 1;
d174af6c
MM
5373 }
5374
32a11c08
MM
5375 /* Generally, initializers in templates are expanded when the
5376 template is instantiated. But, if DECL is an integral
5377 constant static data member, then it can be used in future
5378 integral constant expressions, and its value must be
5379 available. */
5380 if (!(init
5381 && DECL_CLASS_SCOPE_P (decl)
5382 && DECL_INTEGRAL_CONSTANT_VAR_P (decl)
5383 && !type_dependent_p
5384 && !value_dependent_init_p (init)))
2b643eda
MM
5385 {
5386 if (init)
5387 DECL_INITIAL (decl) = init;
5388 if (TREE_CODE (decl) == VAR_DECL
5389 && !DECL_PRETTY_FUNCTION_P (decl)
5390 && !type_dependent_p)
5391 maybe_deduce_size_from_array_init (decl, init);
5392 goto finish_end;
5393 }
c8094d83 5394
a125de0c
PC
5395 if (TREE_CODE (init) == TREE_LIST)
5396 {
5397 /* If the parenthesized-initializer form was used (e.g.,
5398 "int A<N>::i(X)"), then INIT will be a TREE_LIST of initializer
5399 arguments. (There is generally only one.) We convert them
5400 individually. */
5401 tree list = init;
5402 for (; list; list = TREE_CHAIN (list))
5403 {
5404 tree elt = TREE_VALUE (list);
5405 TREE_VALUE (list) = fold_non_dependent_expr (elt);
5406 }
5407 }
5408 else
5409 init = fold_non_dependent_expr (init);
2b643eda 5410 processing_template_decl = 0;
5566b478 5411 }
3e41d13b 5412
8d08fdba
MS
5413 /* Take care of TYPE_DECLs up front. */
5414 if (TREE_CODE (decl) == TYPE_DECL)
5415 {
a0a33927
MS
5416 if (type != error_mark_node
5417 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
8d08fdba
MS
5418 {
5419 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
d4ee4d25 5420 warning (0, "shadowing previous type declaration of %q#D", decl);
4b0d3cbe 5421 set_identifier_type_value (DECL_NAME (decl), decl);
8d08fdba 5422 }
cffa8729
MS
5423
5424 /* If we have installed this as the canonical typedef for this
5425 type, and that type has not been defined yet, delay emitting
956d6950 5426 the debug information for it, as we will emit it later. */
d2e5ee5c 5427 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
d0f062fb 5428 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
cffa8729
MS
5429 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5430
0e6df31e
GK
5431 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5432 at_eof);
8d08fdba
MS
5433 goto finish_end;
5434 }
3e41d13b 5435
67935995 5436 /* A reference will be modified here, as it is initialized. */
c8094d83 5437 if (! DECL_EXTERNAL (decl)
67935995
MM
5438 && TREE_READONLY (decl)
5439 && TREE_CODE (type) == REFERENCE_TYPE)
8d08fdba 5440 {
8d08fdba 5441 was_readonly = 1;
67935995 5442 TREE_READONLY (decl) = 0;
8d08fdba
MS
5443 }
5444
437081d7 5445 if (TREE_CODE (decl) == VAR_DECL)
17bbb839
MM
5446 {
5447 /* Only PODs can have thread-local storage. Other types may require
5448 various kinds of non-trivial initialization. */
c2f7fa15 5449 if (DECL_THREAD_LOCAL_P (decl) && !pod_type_p (TREE_TYPE (decl)))
2d01edd7 5450 error ("%qD cannot be thread-local because it has non-POD type %qT",
17bbb839 5451 decl, TREE_TYPE (decl));
d23f3d60
MM
5452 /* If this is a local variable that will need a mangled name,
5453 register it now. We must do this before processing the
5454 initializer for the variable, since the initialization might
5455 require a guard variable, and since the mangled name of the
5456 guard variable will depend on the mangled name of this
5457 variable. */
b0eb6a8f 5458 if (DECL_FUNCTION_SCOPE_P (decl)
d23f3d60
MM
5459 && TREE_STATIC (decl)
5460 && !DECL_ARTIFICIAL (decl))
5461 push_local_name (decl);
17bbb839
MM
5462 /* Convert the initializer to the type of DECL, if we have not
5463 already initialized DECL. */
5464 if (!DECL_INITIALIZED_P (decl)
5465 /* If !DECL_EXTERNAL then DECL is being defined. In the
8e3df2de 5466 case of a static data member initialized inside the
17bbb839
MM
5467 class-specifier, there can be an initializer even if DECL
5468 is *not* defined. */
5469 && (!DECL_EXTERNAL (decl) || init))
5470 {
6c06fbce 5471 if (init)
d174af6c
MM
5472 {
5473 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5474 if (init_const_expr_p)
5475 {
5476 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5477 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5478 TREE_CONSTANT (decl) = 1;
5479 }
5480 }
7e99327d 5481 init = check_initializer (decl, init, flags, &cleanup);
b4c20e52 5482 /* Thread-local storage cannot be dynamically initialized. */
c2f7fa15 5483 if (DECL_THREAD_LOCAL_P (decl) && init)
b4c20e52 5484 {
2d01edd7 5485 error ("%qD is thread-local and so cannot be dynamically "
b4c20e52
MM
5486 "initialized", decl);
5487 init = NULL_TREE;
5488 }
b794e321
MM
5489
5490 /* Check that the initializer for a static data member was a
1634705d 5491 constant. Although we check in the parser that the
b794e321
MM
5492 initializer is an integral constant expression, we do not
5493 simplify division-by-zero at the point at which it
5494 occurs. Therefore, in:
5495
5496 struct S { static const int i = 7 / 0; };
3db45ab5 5497
b794e321
MM
5498 we issue an error at this point. It would
5499 probably be better to forbid division by zero in
5500 integral constant expressions. */
8fe4d24b
NS
5501 if (DECL_EXTERNAL (decl) && init)
5502 {
8fe4d24b
NS
5503 error ("%qD cannot be initialized by a non-constant expression"
5504 " when being declared", decl);
5505 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5506 init = NULL_TREE;
5507 }
c8094d83 5508
17bbb839 5509 /* Handle:
caf93cb0 5510
17bbb839 5511 [dcl.init]
caf93cb0 5512
17bbb839
MM
5513 The memory occupied by any object of static storage
5514 duration is zero-initialized at program startup before
5515 any other initialization takes place.
caf93cb0 5516
17bbb839
MM
5517 We cannot create an appropriate initializer until after
5518 the type of DECL is finalized. If DECL_INITIAL is set,
5519 then the DECL is statically initialized, and any
5520 necessary zero-initialization has already been performed. */
5521 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5522 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
1cb8292f 5523 /*nelts=*/NULL_TREE,
17bbb839
MM
5524 /*static_storage_p=*/true);
5525 /* Remember that the initialization for this variable has
5526 taken place. */
5527 DECL_INITIALIZED_P (decl) = 1;
745d26d9
MM
5528 /* This declaration is the definition of this variable,
5529 unless we are initializing a static data member within
5530 the class specifier. */
5531 if (!DECL_EXTERNAL (decl))
5532 var_definition_p = true;
17bbb839 5533 }
d881ff25
MM
5534 /* If the variable has an array type, lay out the type, even if
5535 there is no initializer. It is valid to index through the
5536 array, and we must get TYPE_ALIGN set correctly on the array
5537 type. */
5538 else if (TREE_CODE (type) == ARRAY_TYPE)
5539 layout_type (type);
17bbb839 5540 }
3e41d13b 5541
57cf57fb 5542 /* Add this declaration to the statement-tree. This needs to happen
350fae66
RK
5543 after the call to check_initializer so that the DECL_EXPR for a
5544 reference temp is added before the DECL_EXPR for the reference itself. */
170b020f 5545 if (at_function_scope_p ())
350fae66 5546 add_decl_expr (decl);
08ac397c 5547
da71e18c
MM
5548 /* Let the middle end know about variables and functions -- but not
5549 static data members in uninstantiated class templates. */
5550 if (!saved_processing_template_decl
5551 && (TREE_CODE (decl) == VAR_DECL
5552 || TREE_CODE (decl) == FUNCTION_DECL))
8d08fdba 5553 {
27778b73 5554 if (TREE_CODE (decl) == VAR_DECL)
da71e18c
MM
5555 {
5556 layout_var_decl (decl);
5557 maybe_commonize_var (decl);
5558 }
8d08fdba 5559
4c5bae34
RS
5560 /* This needs to happen after the linkage is set. */
5561 determine_visibility (decl);
5562
b0eb6a8f
JJ
5563 if (var_definition_p && TREE_STATIC (decl))
5564 {
5565 /* If a TREE_READONLY variable needs initialization
5566 at runtime, it is no longer readonly and we need to
5567 avoid MEM_READONLY_P being set on RTL created for it. */
5568 if (init)
5569 {
5570 if (TREE_READONLY (decl))
5571 TREE_READONLY (decl) = 0;
5572 was_readonly = 0;
5573 }
5574 else if (was_readonly)
5575 TREE_READONLY (decl) = 1;
5576 }
5577
27778b73 5578 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8d08fdba 5579
7fb213d8
GB
5580 /* Check for abstractness of the type. Notice that there is no
5581 need to strip array types here since the check for those types
5582 is already done within create_array_type_for_decl. */
68642fb6 5583 if (TREE_CODE (type) == FUNCTION_TYPE
27778b73 5584 || TREE_CODE (type) == METHOD_TYPE)
7fb213d8 5585 abstract_virtuals_error (decl, TREE_TYPE (type));
68642fb6 5586 else
cfb91b67 5587 abstract_virtuals_error (decl, type);
8d08fdba 5588
caf93cb0 5589 if (TREE_CODE (decl) == FUNCTION_DECL
8e3df2de
MM
5590 || TREE_TYPE (decl) == error_mark_node)
5591 /* No initialization required. */
faae18ab 5592 ;
67d743fe
MS
5593 else if (DECL_EXTERNAL (decl)
5594 && ! (DECL_LANG_SPECIFIC (decl)
5595 && DECL_NOT_REALLY_EXTERN (decl)))
5566b478
MS
5596 {
5597 if (init)
5598 DECL_INITIAL (decl) = init;
5599 }
b0eb6a8f
JJ
5600 /* A variable definition. */
5601 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5602 /* Initialize the local variable. */
5603 initialize_local_var (decl, init);
5604
5605 /* If a variable is defined, and then a subsequent
5606 definition with external linkage is encountered, we will
5607 get here twice for the same variable. We want to avoid
5608 calling expand_static_init more than once. For variables
5609 that are not static data members, we can call
5610 expand_static_init only when we actually process the
5611 initializer. It is not legal to redeclare a static data
5612 member, so this issue does not arise in that case. */
5613 else if (var_definition_p && TREE_STATIC (decl))
5614 expand_static_init (decl, init);
8d08fdba
MS
5615 }
5616
7e99327d
MM
5617 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5618 reference, insert it in the statement-tree now. */
5619 if (cleanup)
325c3691 5620 push_cleanup (decl, cleanup, false);
7e99327d 5621
8d08fdba 5622 finish_end:
2b643eda 5623 processing_template_decl = saved_processing_template_decl;
8d08fdba 5624
8d08fdba
MS
5625 if (was_readonly)
5626 TREE_READONLY (decl) = 1;
d1bd0ded
GK
5627
5628 /* If this was marked 'used', be sure it will be output. */
5629 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
bb9a388d 5630 mark_decl_referenced (decl);
8d08fdba
MS
5631}
5632
f4f206f4 5633/* This is here for a midend callback from c-common.c. */
e92cc029 5634
82580166 5635void
11f6b451 5636finish_decl (tree decl, tree init, tree asmspec_tree)
82580166 5637{
d174af6c 5638 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, asmspec_tree, 0);
82580166
MS
5639}
5640
db4283a0
MM
5641/* Returns a declaration for a VAR_DECL as if:
5642
5643 extern "C" TYPE NAME;
5644
5645 had been seen. Used to create compiler-generated global
5646 variables. */
5647
993acaec 5648static tree
11f6b451 5649declare_global_var (tree name, tree type)
db4283a0
MM
5650{
5651 tree decl;
5652
5653 push_to_top_level ();
5654 decl = build_decl (VAR_DECL, name, type);
5655 TREE_PUBLIC (decl) = 1;
5656 DECL_EXTERNAL (decl) = 1;
5657 DECL_ARTIFICIAL (decl) = 1;
de3fe73c
MM
5658 /* If the user has explicitly declared this variable (perhaps
5659 because the code we are compiling is part of a low-level runtime
5660 library), then it is possible that our declaration will be merged
5661 with theirs by pushdecl. */
5662 decl = pushdecl (decl);
d174af6c 5663 finish_decl (decl, NULL_TREE, NULL_TREE);
db4283a0
MM
5664 pop_from_top_level ();
5665
5666 return decl;
5667}
5668
46a9e521
MM
5669/* Returns the type for the argument to "__cxa_atexit" (or "atexit",
5670 if "__cxa_atexit" is not being used) corresponding to the function
5671 to be called when the program exits. */
5672
5673static tree
5674get_atexit_fn_ptr_type (void)
5675{
5676 tree arg_types;
5677 tree fn_type;
5678
5679 if (!atexit_fn_ptr_type_node)
5680 {
5681 if (flag_use_cxa_atexit
5682 && !targetm.cxx.use_atexit_for_cxa_atexit ())
5683 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
5684 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5685 else
5686 /* The parameter to "atexit" is "void (*)(void)". */
5687 arg_types = void_list_node;
5688
5689 fn_type = build_function_type (void_type_node, arg_types);
5690 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
5691 }
5692
5693 return atexit_fn_ptr_type_node;
5694}
5695
db4283a0 5696/* Returns a pointer to the `atexit' function. Note that if
838dfd8a 5697 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
db4283a0
MM
5698 `__cxa_atexit' function specified in the IA64 C++ ABI. */
5699
5700static tree
11f6b451 5701get_atexit_node (void)
db4283a0
MM
5702{
5703 tree atexit_fndecl;
5704 tree arg_types;
5705 tree fn_type;
5706 tree fn_ptr_type;
5707 const char *name;
9f62c3e3 5708 bool use_aeabi_atexit;
db4283a0
MM
5709
5710 if (atexit_node)
5711 return atexit_node;
5712
97388150 5713 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
db4283a0
MM
5714 {
5715 /* The declaration for `__cxa_atexit' is:
5716
5717 int __cxa_atexit (void (*)(void *), void *, void *)
5718
5719 We build up the argument types and then then function type
5720 itself. */
68642fb6 5721
9f62c3e3 5722 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
db4283a0
MM
5723 /* First, build the pointer-to-function type for the first
5724 argument. */
46a9e521 5725 fn_ptr_type = get_atexit_fn_ptr_type ();
db4283a0
MM
5726 /* Then, build the rest of the argument types. */
5727 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
9f62c3e3
PB
5728 if (use_aeabi_atexit)
5729 {
5730 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5731 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5732 }
5733 else
5734 {
5735 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5736 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5737 }
db4283a0
MM
5738 /* And the final __cxa_atexit type. */
5739 fn_type = build_function_type (integer_type_node, arg_types);
5740 fn_ptr_type = build_pointer_type (fn_type);
9f62c3e3
PB
5741 if (use_aeabi_atexit)
5742 name = "__aeabi_atexit";
5743 else
5744 name = "__cxa_atexit";
db4283a0
MM
5745 }
5746 else
5747 {
5748 /* The declaration for `atexit' is:
68642fb6 5749
0cbd7506 5750 int atexit (void (*)());
db4283a0
MM
5751
5752 We build up the argument types and then then function type
5753 itself. */
46a9e521 5754 fn_ptr_type = get_atexit_fn_ptr_type ();
db4283a0
MM
5755 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5756 /* Build the final atexit type. */
5757 fn_type = build_function_type (integer_type_node, arg_types);
5758 name = "atexit";
5759 }
5760
5761 /* Now, build the function declaration. */
5762 push_lang_context (lang_name_c);
0c11ada6 5763 atexit_fndecl = build_library_fn_ptr (name, fn_type);
db4283a0
MM
5764 mark_used (atexit_fndecl);
5765 pop_lang_context ();
0a72704b 5766 atexit_node = decay_conversion (atexit_fndecl);
db4283a0
MM
5767
5768 return atexit_node;
5769}
5770
5771/* Returns the __dso_handle VAR_DECL. */
5772
5773static tree
11f6b451 5774get_dso_handle_node (void)
db4283a0
MM
5775{
5776 if (dso_handle_node)
5777 return dso_handle_node;
5778
5779 /* Declare the variable. */
5780 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5781 ptr_type_node);
5782
5783 return dso_handle_node;
5784}
5785
5786/* Begin a new function with internal linkage whose job will be simply
5787 to destroy some particular variable. */
5788
d192828a
GK
5789static GTY(()) int start_cleanup_cnt;
5790
db4283a0 5791static tree
11f6b451 5792start_cleanup_fn (void)
db4283a0 5793{
db4283a0 5794 char name[32];
db4283a0
MM
5795 tree fntype;
5796 tree fndecl;
97388150
DS
5797 bool use_cxa_atexit = flag_use_cxa_atexit
5798 && !targetm.cxx.use_atexit_for_cxa_atexit ();
db4283a0
MM
5799
5800 push_to_top_level ();
5801
5802 /* No need to mangle this. */
5803 push_lang_context (lang_name_c);
5804
db4283a0 5805 /* Build the name of the function. */
d192828a 5806 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
db4283a0 5807 /* Build the function declaration. */
46a9e521 5808 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
db4283a0
MM
5809 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5810 /* It's a function with internal linkage, generated by the
5811 compiler. */
5812 TREE_PUBLIC (fndecl) = 0;
5813 DECL_ARTIFICIAL (fndecl) = 1;
5a728aca
MM
5814 /* Make the function `inline' so that it is only emitted if it is
5815 actually needed. It is unlikely that it will be inlined, since
aba649ba 5816 it is only called via a function pointer, but we avoid unnecessary
5a728aca
MM
5817 emissions this way. */
5818 DECL_INLINE (fndecl) = 1;
d4d1ebc1
JH
5819 DECL_DECLARED_INLINE_P (fndecl) = 1;
5820 DECL_INTERFACE_KNOWN (fndecl) = 1;
db4283a0 5821 /* Build the parameter. */
97388150 5822 if (use_cxa_atexit)
db4283a0
MM
5823 {
5824 tree parmdecl;
5825
8e51619a 5826 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
db4283a0 5827 DECL_CONTEXT (parmdecl) = fndecl;
db4283a0
MM
5828 TREE_USED (parmdecl) = 1;
5829 DECL_ARGUMENTS (fndecl) = parmdecl;
5830 }
5831
09ed39ad 5832 pushdecl (fndecl);
058b15c1 5833 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
db4283a0 5834
db4283a0
MM
5835 pop_lang_context ();
5836
5837 return current_function_decl;
5838}
5839
5840/* Finish the cleanup function begun by start_cleanup_fn. */
5841
5842static void
11f6b451 5843end_cleanup_fn (void)
db4283a0 5844{
8cd2462c 5845 expand_or_defer_fn (finish_function (0));
db4283a0
MM
5846
5847 pop_from_top_level ();
5848}
5849
bf419747
MM
5850/* Generate code to handle the destruction of DECL, an object with
5851 static storage duration. */
f0105ed3 5852
40aac948 5853tree
11f6b451 5854register_dtor_fn (tree decl)
f0105ed3 5855{
db4283a0 5856 tree cleanup;
f0105ed3 5857 tree compound_stmt;
db4283a0
MM
5858 tree args;
5859 tree fcall;
46a9e521
MM
5860 tree type;
5861 bool use_dtor;
f0105ed3 5862
46a9e521
MM
5863 type = TREE_TYPE (decl);
5864 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
40aac948 5865 return void_zero_node;
bf419747 5866
46a9e521
MM
5867 /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
5868 a class object, we can just pass the destructor to
5869 "__cxa_atexit"; we don't have to build a temporary function to do
5870 the cleanup. */
5871 use_dtor = (flag_use_cxa_atexit
5872 && !targetm.cxx.use_atexit_for_cxa_atexit ()
5873 && CLASS_TYPE_P (type));
5874 if (use_dtor)
5875 {
5876 int idx;
5877
5878 /* Find the destructor. */
5879 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
5880 gcc_assert (idx >= 0);
5881 cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
5882 /* Make sure it is accessible. */
5883 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
5884 }
5885 else
5886 {
5887 /* Call build_cleanup before we enter the anonymous function so
5888 that any access checks will be done relative to the current
5889 scope, rather than the scope of the anonymous function. */
5890 build_cleanup (decl);
5891
5892 /* Now start the function. */
5893 cleanup = start_cleanup_fn ();
5894
5895 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
5896 to the original function, rather than the anonymous one. That
5897 will make the back end think that nested functions are in use,
5898 which causes confusion. */
5899 push_deferring_access_checks (dk_no_check);
5900 fcall = build_cleanup (decl);
5901 pop_deferring_access_checks ();
5902
5903 /* Create the body of the anonymous function. */
5904 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
5905 finish_expr_stmt (fcall);
5906 finish_compound_stmt (compound_stmt);
5907 end_cleanup_fn ();
5908 }
f0105ed3
MM
5909
5910 /* Call atexit with the cleanup function. */
bb4f6e6b 5911 mark_used (cleanup);
46a9e521 5912 cleanup = build_address (cleanup);
97388150 5913 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
db4283a0 5914 {
46a9e521
MM
5915 tree addr;
5916
5917 if (use_dtor)
5918 {
5919 /* We must convert CLEANUP to the type that "__cxa_atexit"
5920 expects. */
5921 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
5922 /* "__cxa_atexit" will pass the address of DECL to the
5923 cleanup function. */
5924 mark_used (decl);
5925 addr = build_address (decl);
5926 /* The declared type of the parameter to "__cxa_atexit" is
5927 "void *". For plain "T*", we could just let the
5928 machinery in build_function_call convert it -- but if the
5929 type is "cv-qualified T *", then we need to convert it
5930 before passing it in, to avoid spurious errors. */
5931 addr = build_nop (ptr_type_node, addr);
5932 }
5933 else
5934 /* Since the cleanup functions we build ignore the address
5935 they're given, there's no reason to pass the actual address
5936 in, and, in general, it's cheaper to pass NULL than any
5937 other value. */
5938 addr = null_pointer_node;
caf93cb0 5939 args = tree_cons (NULL_TREE,
0f268005
MM
5940 build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
5941 NULL_TREE);
9f62c3e3
PB
5942 if (targetm.cxx.use_aeabi_atexit ())
5943 {
5944 args = tree_cons (NULL_TREE, cleanup, args);
46a9e521 5945 args = tree_cons (NULL_TREE, addr, args);
9f62c3e3
PB
5946 }
5947 else
5948 {
46a9e521 5949 args = tree_cons (NULL_TREE, addr, args);
9f62c3e3
PB
5950 args = tree_cons (NULL_TREE, cleanup, args);
5951 }
db4283a0
MM
5952 }
5953 else
5954 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
40aac948 5955 return build_function_call (get_atexit_node (), args);
f0105ed3
MM
5956}
5957
8e3df2de
MM
5958/* DECL is a VAR_DECL with static storage duration. INIT, if present,
5959 is its initializer. Generate code to handle the construction
5960 and destruction of DECL. */
5961
5962static void
11f6b451 5963expand_static_init (tree decl, tree init)
8d08fdba 5964{
50bc768d
NS
5965 gcc_assert (TREE_CODE (decl) == VAR_DECL);
5966 gcc_assert (TREE_STATIC (decl));
8e3df2de
MM
5967
5968 /* Some variables require no initialization. */
caf93cb0 5969 if (!init
8e3df2de
MM
5970 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
5971 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5972 return;
5973
eba6cfb6 5974 if (DECL_FUNCTION_SCOPE_P (decl))
8d08fdba
MS
5975 {
5976 /* Emit code to perform this initialization but once. */
445cf5eb
JM
5977 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
5978 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
94a0dd7b 5979 tree guard, guard_addr;
40aac948
JM
5980 tree acquire_fn, release_fn, abort_fn;
5981 tree flag, begin;
8d08fdba 5982
2036a15c
MM
5983 /* Emit code to perform this initialization but once. This code
5984 looks like:
5985
0cbd7506
MS
5986 static <type> guard;
5987 if (!guard.first_byte) {
40aac948
JM
5988 if (__cxa_guard_acquire (&guard)) {
5989 bool flag = false;
5990 try {
0cbd7506
MS
5991 // Do initialization.
5992 flag = true; __cxa_guard_release (&guard);
5993 // Register variable for destruction at end of program.
40aac948 5994 } catch {
0cbd7506 5995 if (!flag) __cxa_guard_abort (&guard);
40aac948 5996 }
2036a15c
MM
5997 }
5998
40aac948 5999 Note that the `flag' variable is only set to 1 *after* the
2036a15c
MM
6000 initialization is complete. This ensures that an exception,
6001 thrown during the construction, will cause the variable to
6002 reinitialized when we pass through this code again, as per:
68642fb6 6003
2036a15c
MM
6004 [stmt.dcl]
6005
c8094d83 6006 If the initialization exits by throwing an exception, the
2036a15c
MM
6007 initialization is not complete, so it will be tried again
6008 the next time control enters the declaration.
6009
0cbd7506 6010 This process should be thread-safe, too; multiple threads
40aac948
JM
6011 should not be able to initialize the variable more than
6012 once. */
c395453c
MM
6013
6014 /* Create the guard variable. */
6015 guard = get_guard (decl);
2036a15c 6016
445cf5eb
JM
6017 /* This optimization isn't safe on targets with relaxed memory
6018 consistency. On such targets we force synchronization in
6019 __cxa_guard_acquire. */
6020 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6021 {
6022 /* Begin the conditional initialization. */
6023 if_stmt = begin_if_stmt ();
6024 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6025 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6026 }
40aac948
JM
6027
6028 if (flag_threadsafe_statics)
6029 {
6030 guard_addr = build_address (guard);
40aac948
JM
6031
6032 acquire_fn = get_identifier ("__cxa_guard_acquire");
6033 release_fn = get_identifier ("__cxa_guard_release");
6034 abort_fn = get_identifier ("__cxa_guard_abort");
6035 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
6036 {
6037 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
6038 void_list_node);
6039 tree vfntype = build_function_type (void_type_node, argtypes);
6040 acquire_fn = push_library_fn
6041 (acquire_fn, build_function_type (integer_type_node, argtypes));
6042 release_fn = push_library_fn (release_fn, vfntype);
6043 abort_fn = push_library_fn (abort_fn, vfntype);
6044 }
6045 else
6046 {
6047 release_fn = identifier_global_value (release_fn);
6048 abort_fn = identifier_global_value (abort_fn);
6049 }
6050
6051 inner_if_stmt = begin_if_stmt ();
94a0dd7b 6052 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
40aac948
JM
6053 inner_if_stmt);
6054
6055 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6056 begin = get_target_expr (boolean_false_node);
6057 flag = TARGET_EXPR_SLOT (begin);
6058
6059 TARGET_EXPR_CLEANUP (begin)
81eba3a8
KH
6060 = build3 (COND_EXPR, void_type_node, flag,
6061 void_zero_node,
94a0dd7b 6062 build_call_n (abort_fn, 1, guard_addr));
40aac948
JM
6063 CLEANUP_EH_ONLY (begin) = 1;
6064
6065 /* Do the initialization itself. */
6066 init = add_stmt_to_compound (begin, init);
6067 init = add_stmt_to_compound
81eba3a8 6068 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
40aac948 6069 init = add_stmt_to_compound
94a0dd7b 6070 (init, build_call_n (release_fn, 1, guard_addr));
40aac948 6071 }
f1dedc31 6072 else
40aac948 6073 init = add_stmt_to_compound (init, set_guard (guard));
72b7eeff 6074
2036a15c
MM
6075 /* Use atexit to register a function for destroying this static
6076 variable. */
40aac948
JM
6077 init = add_stmt_to_compound (init, register_dtor_fn (decl));
6078
6079 finish_expr_stmt (init);
6080
6081 if (flag_threadsafe_statics)
6082 {
6083 finish_compound_stmt (inner_then_clause);
6084 finish_then_clause (inner_if_stmt);
6085 finish_if_stmt (inner_if_stmt);
6086 }
72b7eeff 6087
445cf5eb
JM
6088 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6089 {
6090 finish_compound_stmt (then_clause);
6091 finish_then_clause (if_stmt);
6092 finish_if_stmt (if_stmt);
6093 }
8d08fdba
MS
6094 }
6095 else
bbd15aac 6096 static_aggregates = tree_cons (init, decl, static_aggregates);
8d08fdba 6097}
3c5c0849 6098
8d08fdba
MS
6099\f
6100/* Make TYPE a complete type based on INITIAL_VALUE.
6101 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
07900878
PC
6102 2 if there was no information (in which case assume 0 if DO_DEFAULT),
6103 3 if the initializer list is empty (in pedantic mode). */
8d08fdba
MS
6104
6105int
aab038d5 6106cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8d08fdba 6107{
aab038d5
RH
6108 int failure;
6109 tree type, elt_type;
68642fb6 6110
8d08fdba
MS
6111 if (initial_value)
6112 {
7b019c19 6113 /* An array of character type can be initialized from a
4038c495
GB
6114 brace-enclosed string constant.
6115
6116 FIXME: this code is duplicated from reshape_init. Probably
6117 we should just call reshape_init here? */
aab038d5 6118 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7b019c19 6119 && TREE_CODE (initial_value) == CONSTRUCTOR
4038c495
GB
6120 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6121 {
6122 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6123 tree value = VEC_index (constructor_elt, v, 0)->value;
6124
6125 if (TREE_CODE (value) == STRING_CST
6126 && VEC_length (constructor_elt, v) == 1)
6127 initial_value = value;
6128 }
8d08fdba
MS
6129 }
6130
aab038d5 6131 failure = complete_array_type (ptype, initial_value, do_default);
8d08fdba 6132
aab038d5
RH
6133 /* We can create the array before the element type is complete, which
6134 means that we didn't have these two bits set in the original type
6135 either. In completing the type, we are expected to propagate these
6136 bits. See also complete_type which does the same thing for arrays
6137 of fixed size. */
6138 type = *ptype;
6139 if (TYPE_DOMAIN (type))
8d08fdba 6140 {
81b4398d 6141 elt_type = TREE_TYPE (type);
aab038d5 6142 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
81b4398d 6143 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
aab038d5 6144 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8d08fdba
MS
6145 }
6146
aab038d5 6147 return failure;
8d08fdba
MS
6148}
6149\f
6150/* Return zero if something is declared to be a member of type
6151 CTYPE when in the context of CUR_TYPE. STRING is the error
6152 message to print in that case. Otherwise, quietly return 1. */
e92cc029 6153
8d08fdba 6154static int
11f6b451 6155member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8d08fdba
MS
6156{
6157 if (ctype && ctype != cur_type)
6158 {
4dacf5bd 6159 if (flags == DTOR_FLAG)
2d01edd7 6160 error ("destructor for alien class %qT cannot be a member", ctype);
4dacf5bd 6161 else
2d01edd7 6162 error ("constructor for alien class %qT cannot be a member", ctype);
8d08fdba
MS
6163 return 0;
6164 }
6165 return 1;
6166}
6167\f
6168/* Subroutine of `grokdeclarator'. */
6169
6170/* Generate errors possibly applicable for a given set of specifiers.
6171 This is for ARM $7.1.2. */
e92cc029 6172
8d08fdba 6173static void
11f6b451 6174bad_specifiers (tree object,
0cbd7506
MS
6175 const char* type,
6176 int virtualp,
6177 int quals,
6178 int inlinep,
6179 int friendp,
6180 int raises)
8d08fdba
MS
6181{
6182 if (virtualp)
2d01edd7 6183 error ("%qD declared as a %<virtual%> %s", object, type);
8d08fdba 6184 if (inlinep)
2d01edd7 6185 error ("%qD declared as an %<inline%> %s", object, type);
8d08fdba 6186 if (quals)
2d01edd7 6187 error ("%<const%> and %<volatile%> function specifiers on "
0cbd7506
MS
6188 "%qD invalid in %s declaration",
6189 object, type);
8d08fdba 6190 if (friendp)
dee15844 6191 error ("%q+D declared as a friend", object);
e1be26f4
RS
6192 if (raises
6193 && (TREE_CODE (object) == TYPE_DECL
6194 || (!TYPE_PTRFN_P (TREE_TYPE (object))
742a37d5 6195 && !TYPE_REFFN_P (TREE_TYPE (object))
e1be26f4 6196 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
dee15844 6197 error ("%q+D declared with an exception specification", object);
8d08fdba
MS
6198}
6199
9c12301f
MM
6200/* DECL is a member function or static data member and is presently
6201 being defined. Check that the definition is taking place in a
6202 valid namespace. */
6203
6204static void
6205check_class_member_definition_namespace (tree decl)
6206{
6207 /* These checks only apply to member functions and static data
6208 members. */
6209 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6210 || TREE_CODE (decl) == VAR_DECL);
6211 /* We check for problems with specializations in pt.c in
6212 check_specialization_namespace, where we can issue better
6213 diagnostics. */
6214 if (processing_specialization)
6215 return;
6216 /* There are no restrictions on the placement of
6217 explicit instantiations. */
6218 if (processing_explicit_instantiation)
6219 return;
6220 /* [class.mfct]
6221
6222 A member function definition that appears outside of the
6223 class definition shall appear in a namespace scope enclosing
6224 the class definition.
6225
6226 [class.static.data]
6227
6228 The definition for a static data member shall appear in a
6229 namespace scope enclosing the member's class definition. */
6230 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
6231 pedwarn ("definition of %qD is not in namespace enclosing %qT",
6232 decl, DECL_CONTEXT (decl));
6233}
6234
e2537f2c
MM
6235/* Build a PARM_DECL for the "this" parameter. TYPE is the
6236 METHOD_TYPE for a non-static member function; QUALS are the
6237 cv-qualifiers that apply to the function. */
3db45ab5 6238
e2537f2c
MM
6239tree
6240build_this_parm (tree type, cp_cv_quals quals)
6241{
6242 tree this_type;
6243 tree qual_type;
6244 tree parm;
6245 cp_cv_quals this_quals;
6246
6247 this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
6248 /* The `this' parameter is implicitly `const'; it cannot be
6249 assigned to. */
6250 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
6251 qual_type = cp_build_qualified_type (this_type, this_quals);
6252 parm = build_artificial_parm (this_identifier, qual_type);
6253 cp_apply_type_quals_to_decl (this_quals, parm);
6254 return parm;
3db45ab5 6255}
e2537f2c 6256
8d08fdba
MS
6257/* CTYPE is class type, or null if non-class.
6258 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
6259 or METHOD_TYPE.
6260 DECLARATOR is the function's name.
4546865e 6261 PARMS is a chain of PARM_DECLs for the function.
8d08fdba
MS
6262 VIRTUALP is truthvalue of whether the function is virtual or not.
6263 FLAGS are to be passed through to `grokclassfn'.
6264 QUALS are qualifiers indicating whether the function is `const'
6265 or `volatile'.
6266 RAISES is a list of exceptions that this function can raise.
6267 CHECK is 1 if we must find this method in CTYPE, 0 if we should
68642fb6 6268 not look, and -1 if we should not call `grokclassfn' at all.
3ddfb0e6 6269
27d6592c
MM
6270 SFK is the kind of special function (if any) for the new function.
6271
20496fa2 6272 Returns `NULL_TREE' if something goes wrong, after issuing
3ddfb0e6 6273 applicable error messages. */
e92cc029 6274
8d08fdba 6275static tree
caf93cb0 6276grokfndecl (tree ctype,
0cbd7506
MS
6277 tree type,
6278 tree declarator,
4546865e 6279 tree parms,
0cbd7506
MS
6280 tree orig_declarator,
6281 int virtualp,
6282 enum overload_flags flags,
3c01e5df 6283 cp_cv_quals quals,
0cbd7506
MS
6284 tree raises,
6285 int check,
6286 int friendp,
6287 int publicp,
6288 int inlinep,
27d6592c 6289 special_function_kind sfk,
357d956e 6290 bool funcdef_flag,
0cbd7506
MS
6291 int template_count,
6292 tree in_namespace,
037cc9c5 6293 tree* attrlist)
8d08fdba 6294{
1951a1b6 6295 tree decl;
8d08fdba 6296 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
42976354 6297 tree t;
8d08fdba 6298
8d08fdba 6299 if (raises)
271e6f02 6300 type = build_exception_variant (type, raises);
c11b6f21 6301
8d08fdba 6302 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
e2537f2c
MM
6303 if (TREE_CODE (type) == METHOD_TYPE)
6304 {
6305 tree parm;
6306 parm = build_this_parm (type, quals);
6307 TREE_CHAIN (parm) = parms;
6308 parms = parm;
6309 }
4546865e 6310 DECL_ARGUMENTS (decl) = parms;
a1c65f9f 6311 /* Propagate volatile out from type to decl. */
8d08fdba 6312 if (TYPE_VOLATILE (type))
893de33c 6313 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba 6314
71aea5f2
SM
6315 /* Setup decl according to sfk. */
6316 switch (sfk)
6317 {
6318 case sfk_constructor:
6319 case sfk_copy_constructor:
6320 DECL_CONSTRUCTOR_P (decl) = 1;
6321 break;
6322 case sfk_destructor:
6323 DECL_DESTRUCTOR_P (decl) = 1;
6324 break;
6325 default:
6326 break;
6327 }
6328
837edd5f
GK
6329 /* If pointers to member functions use the least significant bit to
6330 indicate whether a function is virtual, ensure a pointer
6331 to this function will have that bit clear. */
6332 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6333 && TREE_CODE (type) == METHOD_TYPE
6334 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
6335 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
6336
abc088aa
MM
6337 if (friendp
6338 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
6339 {
6340 if (funcdef_flag)
6341 error
6342 ("defining explicit specialization %qD in friend declaration",
6343 orig_declarator);
6344 else
6345 {
6346 tree fns = TREE_OPERAND (orig_declarator, 0);
6347 tree args = TREE_OPERAND (orig_declarator, 1);
6348
6349 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
6350 {
6351 /* Something like `template <class T> friend void f<T>()'. */
6352 error ("invalid use of template-id %qD in declaration "
6353 "of primary template",
6354 orig_declarator);
6355 return NULL_TREE;
6356 }
6357
6358
6359 /* A friend declaration of the form friend void f<>(). Record
6360 the information in the TEMPLATE_ID_EXPR. */
6361 SET_DECL_IMPLICIT_INSTANTIATION (decl);
6362
6363 if (TREE_CODE (fns) == COMPONENT_REF)
6364 {
6365 /* Due to bison parser ickiness, we will have already looked
6366 up an operator_name or PFUNCNAME within the current class
6367 (see template_id in parse.y). If the current class contains
6368 such a name, we'll get a COMPONENT_REF here. Undo that. */
6369
6370 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
6371 == current_class_type);
6372 fns = TREE_OPERAND (fns, 1);
6373 }
6374 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
6375 || TREE_CODE (fns) == OVERLOAD);
6376 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
6377
6378 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
6379 if (TREE_PURPOSE (t)
6380 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
6381 {
6382 error ("default arguments are not allowed in declaration "
6383 "of friend template specialization %qD",
6384 decl);
6385 return NULL_TREE;
6386 }
6387
6388 if (inlinep)
6389 {
6390 error ("%<inline%> is not allowed in declaration of friend "
6391 "template specialization %qD",
6392 decl);
6393 return NULL_TREE;
6394 }
6395 }
6396 }
6397
79c4d4b7 6398 /* If this decl has namespace scope, set that up. */
2c73f9f5 6399 if (in_namespace)
b262d64c 6400 set_decl_namespace (decl, in_namespace, friendp);
adae082f 6401 else if (!ctype)
79c4d4b7 6402 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 6403
0f8766b8
JM
6404 /* `main' and builtins have implicit 'C' linkage. */
6405 if ((MAIN_NAME_P (declarator)
6406 || (IDENTIFIER_LENGTH (declarator) > 10
6407 && IDENTIFIER_POINTER (declarator)[0] == '_'
6408 && IDENTIFIER_POINTER (declarator)[1] == '_'
6409 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
6410 && current_lang_name == lang_name_cplusplus
94706a5c 6411 && ctype == NULL_TREE
79c4d4b7
JM
6412 /* NULL_TREE means global namespace. */
6413 && DECL_CONTEXT (decl) == NULL_TREE)
5d2ed28c 6414 SET_DECL_LANGUAGE (decl, lang_c);
0f8766b8 6415
8d08fdba
MS
6416 /* Should probably propagate const out from type to decl I bet (mrs). */
6417 if (staticp)
6418 {
6419 DECL_STATIC_FUNCTION_P (decl) = 1;
6420 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
6421 }
6422
e76a2646 6423 if (ctype)
9c12301f
MM
6424 {
6425 DECL_CONTEXT (decl) = ctype;
6426 if (funcdef_flag)
6427 check_class_member_definition_namespace (decl);
6428 }
e76a2646 6429
0f8766b8 6430 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
faae18ab 6431 {
848b92e1 6432 if (processing_template_decl)
2d01edd7 6433 error ("cannot declare %<::main%> to be a template");
faae18ab 6434 if (inlinep)
2d01edd7 6435 error ("cannot declare %<::main%> to be inline");
f22967f3 6436 if (!publicp)
2d01edd7 6437 error ("cannot declare %<::main%> to be static");
faae18ab
MS
6438 inlinep = 0;
6439 publicp = 1;
6440 }
50a6dbd7 6441
59e76fc6 6442 /* Members of anonymous types and local classes have no linkage; make
9fc444cc 6443 them internal. If a typedef is made later, this will be changed. */
1951a1b6 6444 if (ctype && (TYPE_ANONYMOUS_P (ctype)
4f1c5b7d 6445 || decl_function_context (TYPE_MAIN_DECL (ctype))))
50a6dbd7
JM
6446 publicp = 0;
6447
6448 if (publicp)
6449 {
6450 /* [basic.link]: A name with no linkage (notably, the name of a class
6451 or enumeration declared in a local scope) shall not be used to
6452 declare an entity with linkage.
6453
50b97e0f 6454 Only check this for public decls for now. See core 319, 389. */
4684cd27
MM
6455 t = no_linkage_check (TREE_TYPE (decl),
6456 /*relaxed_p=*/false);
50a6dbd7
JM
6457 if (t)
6458 {
1951a1b6 6459 if (TYPE_ANONYMOUS_P (t))
7f7c930e 6460 {
eb68cb58 6461 if (DECL_EXTERN_C_P (decl))
7f7c930e
JM
6462 /* Allow this; it's pretty common in C. */;
6463 else
1951a1b6 6464 {
2d01edd7 6465 pedwarn ("non-local function %q#D uses anonymous type",
1951a1b6
JM
6466 decl);
6467 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
dee15844
JM
6468 pedwarn ("%q+#D does not refer to the unqualified "
6469 "type, so it is not used for linkage",
6470 TYPE_NAME (t));
1951a1b6 6471 }
7f7c930e 6472 }
50a6dbd7 6473 else
2d01edd7 6474 pedwarn ("non-local function %q#D uses local type %qT", decl, t);
50a6dbd7
JM
6475 }
6476 }
6477
893de33c 6478 TREE_PUBLIC (decl) = publicp;
faae18ab 6479 if (! publicp)
893de33c
JM
6480 {
6481 DECL_INTERFACE_KNOWN (decl) = 1;
6482 DECL_NOT_REALLY_EXTERN (decl) = 1;
6483 }
faae18ab 6484
acc72c37 6485 /* If the declaration was declared inline, mark it as such. */
faae18ab 6486 if (inlinep)
acc72c37
MM
6487 DECL_DECLARED_INLINE_P (decl) = 1;
6488 /* We inline functions that are explicitly declared inline, or, when
6489 the user explicitly asks us to, all functions. */
b3c3af2f
SB
6490 if (DECL_DECLARED_INLINE_P (decl)
6491 || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
acc72c37 6492 DECL_INLINE (decl) = 1;
8d08fdba
MS
6493
6494 DECL_EXTERNAL (decl) = 1;
3c01e5df 6495 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba 6496 {
e7c41c99
DM
6497 error (ctype
6498 ? G_("static member function %qD cannot have cv-qualifier")
32b1d579 6499 : G_("non-member function %qD cannot have cv-qualifier"),
e7c41c99 6500 decl);
3c01e5df 6501 quals = TYPE_UNQUALIFIED;
8d08fdba
MS
6502 }
6503
398cd199
VR
6504 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
6505 && !grok_op_properties (decl, /*complain=*/true))
6506 return NULL_TREE;
8d08fdba 6507
4f1c5b7d 6508 if (ctype && decl_function_context (decl))
893de33c 6509 DECL_NO_STATIC_CHAIN (decl) = 1;
e76a2646 6510
1eb0072d
JM
6511 if (funcdef_flag)
6512 /* Make the init_value nonzero so pushdecl knows this is not
6513 tentative. error_mark_node is replaced later with the BLOCK. */
6514 DECL_INITIAL (decl) = error_mark_node;
6515
93ca4ba7 6516 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
1660cb3a
JM
6517 TREE_NOTHROW (decl) = 1;
6518
75650646 6519 /* Caller will do the rest of this. */
8d08fdba
MS
6520 if (check < 0)
6521 return decl;
6522
74b846e0 6523 if (ctype != NULL_TREE)
71aea5f2 6524 grokclassfn (ctype, decl, flags);
74b846e0
MM
6525
6526 decl = check_explicit_specialization (orig_declarator, decl,
6527 template_count,
357d956e 6528 2 * funcdef_flag +
74b846e0
MM
6529 4 * (friendp != 0));
6530 if (decl == error_mark_node)
6531 return NULL_TREE;
98c1c668 6532
037cc9c5
FJ
6533 if (attrlist)
6534 {
6535 cplus_decl_attributes (&decl, *attrlist, 0);
6536 *attrlist = NULL_TREE;
6537 }
6538
da337784
JJ
6539 /* Check main's type after attributes have been applied. */
6540 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6541 {
6542 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
6543 integer_type_node))
6544 {
6545 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
6546 tree newtype;
6547 error ("%<::main%> must return %<int%>");
6548 newtype = build_function_type (integer_type_node, oldtypeargs);
6549 TREE_TYPE (decl) = newtype;
6550 }
6551 check_main_parameter_types (decl);
6552 }
6553
74b846e0
MM
6554 if (ctype != NULL_TREE
6555 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6556 && check)
8d08fdba 6557 {
f8c3b097
PC
6558 tree old_decl = check_classfn (ctype, decl,
6559 (processing_template_decl
6560 > template_class_depth (ctype))
6561 ? current_template_parms
6562 : NULL_TREE);
6563
6564 if (old_decl == error_mark_node)
6565 return NULL_TREE;
8d08fdba 6566
74b846e0 6567 if (old_decl)
8d08fdba 6568 {
79ae853c 6569 tree ok;
4514aa8c 6570 tree pushed_scope;
316a2456 6571
357d956e
MM
6572 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6573 /* Because grokfndecl is always supposed to return a
6574 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6575 here. We depend on our callers to figure out that its
6576 really a template that's being returned. */
6577 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6578
6579 if (DECL_STATIC_FUNCTION_P (old_decl)
6580 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6581 /* Remove the `this' parm added by grokclassfn.
6582 XXX Isn't this done in start_function, too? */
6583 revert_static_member_fn (decl);
6584 if (DECL_ARTIFICIAL (old_decl))
db160137
AP
6585 {
6586 error ("definition of implicitly-declared %qD", old_decl);
6587 return NULL_TREE;
6588 }
357d956e 6589
74b846e0
MM
6590 /* Since we've smashed OLD_DECL to its
6591 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
6592 if (TREE_CODE (decl) == TEMPLATE_DECL)
6593 decl = DECL_TEMPLATE_RESULT (decl);
6594
6595 /* Attempt to merge the declarations. This can fail, in
0e339752 6596 the case of some invalid specialization declarations. */
4514aa8c 6597 pushed_scope = push_scope (ctype);
d63d5d0c 6598 ok = duplicate_decls (decl, old_decl, friendp);
4514aa8c
NS
6599 if (pushed_scope)
6600 pop_scope (pushed_scope);
316a2456
MM
6601 if (!ok)
6602 {
2d01edd7 6603 error ("no %q#D member function declared in class %qT",
316a2456
MM
6604 decl, ctype);
6605 return NULL_TREE;
6606 }
74b846e0 6607 return old_decl;
8d08fdba
MS
6608 }
6609 }
74b846e0
MM
6610
6611 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6612 return NULL_TREE;
6613
6614 if (ctype == NULL_TREE || check)
6615 return decl;
6616
6617 if (virtualp)
cbb40945 6618 DECL_VIRTUAL_P (decl) = 1;
74b846e0 6619
8d08fdba
MS
6620 return decl;
6621}
6622
4684cd27
MM
6623/* DECL is a VAR_DECL for a static data member. Set flags to reflect
6624 the linkage that DECL will receive in the object file. */
6625
6626static void
6627set_linkage_for_static_data_member (tree decl)
6628{
6629 /* A static data member always has static storage duration and
6630 external linkage. Note that static data members are forbidden in
6631 local classes -- the only situation in which a class has
6632 non-external linkage. */
6633 TREE_PUBLIC (decl) = 1;
6634 TREE_STATIC (decl) = 1;
6635 /* For non-template classes, static data members are always put
6636 out in exactly those files where they are defined, just as
77880ae4 6637 with ordinary namespace-scope variables. */
4684cd27
MM
6638 if (!processing_template_decl)
6639 DECL_INTERFACE_KNOWN (decl) = 1;
6640}
6641
caf93cb0 6642/* Create a VAR_DECL named NAME with the indicated TYPE.
9e259dd1
MM
6643
6644 If SCOPE is non-NULL, it is the class type or namespace containing
6645 the variable. If SCOPE is NULL, the variable should is created in
6646 the innermost enclosings scope. */
6647
8d08fdba 6648static tree
11f6b451 6649grokvardecl (tree type,
0cbd7506 6650 tree name,
1ff3c076 6651 const cp_decl_specifier_seq *declspecs,
0cbd7506
MS
6652 int initialized,
6653 int constp,
6654 tree scope)
8d08fdba
MS
6655{
6656 tree decl;
5ae9ba3e 6657 tree explicit_scope;
f7da6097 6658
50bc768d 6659 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
9e259dd1 6660
5ae9ba3e
MM
6661 /* Compute the scope in which to place the variable, but remember
6662 whether or not that scope was explicitly specified by the user. */
6663 explicit_scope = scope;
9e259dd1 6664 if (!scope)
8d08fdba 6665 {
9e259dd1
MM
6666 /* An explicit "extern" specifier indicates a namespace-scope
6667 variable. */
62d1db17 6668 if (declspecs->storage_class == sc_extern)
9e259dd1
MM
6669 scope = current_namespace;
6670 else if (!at_function_scope_p ())
a5201a91 6671 scope = current_scope ();
9e259dd1
MM
6672 }
6673
6674 if (scope
6675 && (/* If the variable is a namespace-scope variable declared in a
6676 template, we need DECL_LANG_SPECIFIC. */
6677 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6678 /* Similarly for namespace-scope variables with language linkage
6679 other than C++. */
caf93cb0 6680 || (TREE_CODE (scope) == NAMESPACE_DECL
9e259dd1
MM
6681 && current_lang_name != lang_name_cplusplus)
6682 /* Similarly for static data members. */
6683 || TYPE_P (scope)))
6684 decl = build_lang_decl (VAR_DECL, name, type);
8d08fdba 6685 else
9e259dd1 6686 decl = build_decl (VAR_DECL, name, type);
79c4d4b7 6687
5ae9ba3e
MM
6688 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6689 set_decl_namespace (decl, explicit_scope, 0);
9e259dd1 6690 else
74b0d490 6691 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
6060a796 6692
62d1db17 6693 if (declspecs->storage_class == sc_extern)
8d08fdba
MS
6694 {
6695 DECL_THIS_EXTERN (decl) = 1;
6696 DECL_EXTERNAL (decl) = !initialized;
6697 }
6698
2b9dc906 6699 if (DECL_CLASS_SCOPE_P (decl))
8d08fdba 6700 {
4684cd27
MM
6701 set_linkage_for_static_data_member (decl);
6702 /* This function is only called with out-of-class definitions. */
5b605f68 6703 DECL_EXTERNAL (decl) = 0;
9c12301f 6704 check_class_member_definition_namespace (decl);
8d08fdba
MS
6705 }
6706 /* At top level, either `static' or no s.c. makes a definition
6707 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 6708 else if (toplevel_bindings_p ())
8d08fdba 6709 {
62d1db17 6710 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9fffd093 6711 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
6712 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
6713 }
6714 /* Not at top level, only `static' makes a static definition. */
6715 else
6716 {
62d1db17 6717 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
8d08fdba
MS
6718 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
6719 }
50a6dbd7 6720
62d1db17 6721 if (declspecs->specs[(int)ds_thread])
8893239d 6722 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7a1f3f5f 6723
50a6dbd7
JM
6724 if (TREE_PUBLIC (decl))
6725 {
6726 /* [basic.link]: A name with no linkage (notably, the name of a class
6727 or enumeration declared in a local scope) shall not be used to
6728 declare an entity with linkage.
6729
03fd3f84 6730 Only check this for public decls for now. */
6b211746 6731 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
50a6dbd7
JM
6732 if (t)
6733 {
1951a1b6 6734 if (TYPE_ANONYMOUS_P (t))
9fc444cc
GK
6735 {
6736 if (DECL_EXTERN_C_P (decl))
6bdb98d1
MA
6737 /* Allow this; it's pretty common in C. */
6738 ;
9fc444cc
GK
6739 else
6740 {
6b211746
AO
6741 /* DRs 132, 319 and 389 seem to indicate types with
6742 no linkage can only be used to declare extern "C"
6743 entities. Since it's not always an error in the
6744 ISO C++ 90 Standard, we only issue a warning. */
d4ee4d25 6745 warning (0, "non-local variable %q#D uses anonymous type",
9fc444cc
GK
6746 decl);
6747 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
dee15844
JM
6748 warning (0, "%q+#D does not refer to the unqualified "
6749 "type, so it is not used for linkage",
6750 TYPE_NAME (t));
9fc444cc
GK
6751 }
6752 }
50a6dbd7 6753 else
d4ee4d25 6754 warning (0, "non-local variable %q#D uses local type %qT", decl, t);
50a6dbd7
JM
6755 }
6756 }
1ceb02be
MM
6757 else
6758 DECL_INTERFACE_KNOWN (decl) = 1;
50a6dbd7 6759
8d08fdba
MS
6760 return decl;
6761}
6762
d8f8dca1
MM
6763/* Create and return a canonical pointer to member function type, for
6764 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8d08fdba
MS
6765
6766tree
11f6b451 6767build_ptrmemfunc_type (tree type)
8d08fdba 6768{
4977bab6 6769 tree field, fields;
8d08fdba 6770 tree t;
46cbda4a 6771 tree unqualified_variant = NULL_TREE;
8d08fdba 6772
d48ebde1
NS
6773 if (type == error_mark_node)
6774 return type;
d363e7bf 6775
8d08fdba
MS
6776 /* If a canonical type already exists for this type, use it. We use
6777 this method instead of type_hash_canon, because it only does a
6778 simple equality check on the list of field members. */
6779
6780 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
6781 return t;
6782
46cbda4a
MM
6783 /* Make sure that we always have the unqualified pointer-to-member
6784 type first. */
89d684bb 6785 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
68642fb6 6786 unqualified_variant
46cbda4a
MM
6787 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
6788
33848bb0 6789 t = make_aggr_type (RECORD_TYPE);
cad7e87b 6790 xref_basetypes (t, NULL_TREE);
caf93cb0 6791
3b426391 6792 /* Let the front end know this is a pointer to member function... */
db5ae43f 6793 TYPE_PTRMEMFUNC_FLAG (t) = 1;
2c73f9f5 6794 /* ... and not really an aggregate. */
7ddedda4 6795 SET_IS_AGGR_TYPE (t, 0);
8d08fdba 6796
4977bab6
ZW
6797 field = build_decl (FIELD_DECL, pfn_identifier, type);
6798 fields = field;
caf93cb0 6799
4977bab6
ZW
6800 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
6801 TREE_CHAIN (field) = fields;
6802 fields = field;
caf93cb0 6803
4977bab6 6804 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8d08fdba 6805
3b426391 6806 /* Zap out the name so that the back end will give us the debugging
8d08fdba
MS
6807 information for this anonymous RECORD_TYPE. */
6808 TYPE_NAME (t) = NULL_TREE;
6809
46cbda4a
MM
6810 /* If this is not the unqualified form of this pointer-to-member
6811 type, set the TYPE_MAIN_VARIANT for this type to be the
6812 unqualified type. Since they are actually RECORD_TYPEs that are
6813 not variants of each other, we must do this manually. */
89d684bb 6814 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
46cbda4a 6815 {
89d684bb 6816 t = build_qualified_type (t, cp_type_quals (type));
46cbda4a
MM
6817 TYPE_MAIN_VARIANT (t) = unqualified_variant;
6818 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
6819 TYPE_NEXT_VARIANT (unqualified_variant) = t;
6820 }
6821
6822 /* Cache this pointer-to-member type so that we can find it again
6823 later. */
8d08fdba
MS
6824 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
6825
8de08f4c
DG
6826 /* Managing canonical types for the RECORD_TYPE behind a
6827 pointer-to-member function is a nightmare, so use structural
6828 equality for now. */
6829 SET_TYPE_STRUCTURAL_EQUALITY (t);
06d40de8 6830
8d08fdba
MS
6831 return t;
6832}
6833
9e259dd1
MM
6834/* Create and return a pointer to data member type. */
6835
6836tree
6837build_ptrmem_type (tree class_type, tree member_type)
6838{
a5ac359a
MM
6839 if (TREE_CODE (member_type) == METHOD_TYPE)
6840 {
6841 tree arg_types;
6842
6843 arg_types = TYPE_ARG_TYPES (member_type);
caf93cb0 6844 class_type = (cp_build_qualified_type
a5ac359a
MM
6845 (class_type,
6846 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
caf93cb0
EC
6847 member_type
6848 = build_method_type_directly (class_type,
43dc123f
MM
6849 TREE_TYPE (member_type),
6850 TREE_CHAIN (arg_types));
a5ac359a
MM
6851 return build_ptrmemfunc_type (build_pointer_type (member_type));
6852 }
6853 else
6854 {
50bc768d 6855 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
a5ac359a
MM
6856 return build_offset_type (class_type, member_type);
6857 }
9e259dd1
MM
6858}
6859
b17e2870
JM
6860/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
6861 Check to see that the definition is valid. Issue appropriate error
6862 messages. Return 1 if the definition is particularly bad, or 0
6863 otherwise. */
6864
6865int
11f6b451 6866check_static_variable_definition (tree decl, tree type)
b17e2870
JM
6867{
6868 /* Motion 10 at San Diego: If a static const integral data member is
6869 initialized with an integral constant expression, the initializer
6870 may appear either in the declaration (within the class), or in
6871 the definition, but not both. If it appears in the class, the
6872 member is a member constant. The file-scope definition is always
6873 required. */
dcba9b0f 6874 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
b17e2870 6875 {
2d01edd7 6876 error ("invalid in-class initialization of static data member "
0cbd7506 6877 "of non-integral type %qT",
dcba9b0f 6878 type);
b17e2870 6879 /* If we just return the declaration, crashes will sometimes
852dcbdd 6880 occur. We therefore return void_type_node, as if this were a
b17e2870
JM
6881 friend declaration, to cause callers to completely ignore
6882 this declaration. */
6883 return 1;
6884 }
6885 else if (!CP_TYPE_CONST_P (type))
2d01edd7 6886 error ("ISO C++ forbids in-class initialization of non-const "
0cbd7506
MS
6887 "static member %qD",
6888 decl);
b17e2870 6889 else if (pedantic && !INTEGRAL_TYPE_P (type))
2d01edd7 6890 pedwarn ("ISO C++ forbids initialization of member constant "
0cbd7506 6891 "%qD of non-integral type %qT", decl, type);
b17e2870
JM
6892
6893 return 0;
6894}
6895
2848ad0f
MM
6896/* Given the SIZE (i.e., number of elements) in an array, compute an
6897 appropriate index type for the array. If non-NULL, NAME is the
6898 name of the thing being declared. */
6899
c95cd22e 6900tree
11f6b451 6901compute_array_index_type (tree name, tree size)
2848ad0f 6902{
d174af6c 6903 tree type;
2848ad0f 6904 tree itype;
06d40de8 6905 tree abi_1_itype = NULL_TREE;
2848ad0f 6906
d174af6c
MM
6907 if (error_operand_p (size))
6908 return error_mark_node;
6909
6910 type = TREE_TYPE (size);
d63b5e9f
NS
6911 /* The array bound must be an integer type. */
6912 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
2848ad0f 6913 {
d63b5e9f 6914 if (name)
2d01edd7 6915 error ("size of array %qD has non-integral type %qT", name, type);
d63b5e9f 6916 else
2d01edd7 6917 error ("size of array has non-integral type %qT", type);
d63b5e9f
NS
6918 size = integer_one_node;
6919 type = TREE_TYPE (size);
2848ad0f
MM
6920 }
6921
06d40de8
DG
6922 if (value_dependent_expression_p (size))
6923 {
6924 /* We cannot do any checking for a value-dependent SIZE. Just
6925 build the index type and mark that it requires structural
6926 equality checks. */
6927 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
6928 size, integer_one_node));
6929 SET_TYPE_STRUCTURAL_EQUALITY (itype);
6930 return itype;
6931 }
6932
6933 if (!abi_version_at_least (2) && processing_template_decl)
6934 /* For abi-1, we handled all instances in templates the same way,
6935 even when they were non-dependent. This effects the manglings
6936 produced. So, we do the normal checking for non-dependent
6937 sizes, but at the end we'll return the same type that abi-1
6938 would have, but with TYPE_CANONICAL set to the "right"
6939 value that the current ABI would provide. */
6940 abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
6941 size, integer_one_node));
d63b5e9f 6942
a1c65f9f 6943 /* The size might be the result of a cast. */
80f5bb34
MM
6944 STRIP_TYPE_NOPS (size);
6945
6946 /* It might be a const variable or enumeration constant. */
8a784e4a 6947 size = integral_constant_value (size);
80f5bb34 6948
2848ad0f 6949 /* Normally, the array-bound will be a constant. */
2bb5d995 6950 if (TREE_CODE (size) == INTEGER_CST)
2848ad0f
MM
6951 {
6952 /* Check to see if the array bound overflowed. Make that an
6953 error, no matter how generous we're being. */
6954 int old_flag_pedantic_errors = flag_pedantic_errors;
6955 int old_pedantic = pedantic;
6956 pedantic = flag_pedantic_errors = 1;
6957 constant_expression_warning (size);
6958 pedantic = old_pedantic;
6959 flag_pedantic_errors = old_flag_pedantic_errors;
6960
6961 /* An array must have a positive number of elements. */
6962 if (INT_CST_LT (size, integer_zero_node))
6963 {
d67cdbc3 6964 if (name)
2d01edd7 6965 error ("size of array %qD is negative", name);
d67cdbc3 6966 else
33bd39a2 6967 error ("size of array is negative");
2848ad0f
MM
6968 size = integer_one_node;
6969 }
a8e6c82a
MM
6970 /* As an extension we allow zero-sized arrays. We always allow
6971 them in system headers because glibc uses them. */
2848ad0f 6972 else if (integer_zerop (size) && pedantic && !in_system_header)
d67cdbc3
JM
6973 {
6974 if (name)
2d01edd7 6975 pedwarn ("ISO C++ forbids zero-size array %qD", name);
d67cdbc3 6976 else
33bd39a2 6977 pedwarn ("ISO C++ forbids zero-size array");
d67cdbc3 6978 }
2848ad0f 6979 }
2bb5d995
JM
6980 else if (TREE_CONSTANT (size))
6981 {
6982 /* `(int) &fn' is not a valid array bound. */
6983 if (name)
2d01edd7 6984 error ("size of array %qD is not an integral constant-expression",
0cbd7506 6985 name);
2bb5d995 6986 else
33bd39a2 6987 error ("size of array is not an integral constant-expression");
3aa2ddb8 6988 size = integer_one_node;
2bb5d995 6989 }
50d50fc7 6990 else if (pedantic && warn_vla != 0)
d63b5e9f
NS
6991 {
6992 if (name)
50d50fc7 6993 pedwarn ("ISO C++ forbids variable length array %qD", name);
d63b5e9f 6994 else
50d50fc7
SP
6995 pedwarn ("ISO C++ forbids variable length array");
6996 }
6997 else if (warn_vla > 0)
6998 {
6999 if (name)
7000 warning (OPT_Wvla,
7001 "variable length array %qD is used", name);
7002 else
7003 warning (OPT_Wvla,
7004 "variable length array is used");
d63b5e9f 7005 }
2848ad0f 7006
d63b5e9f
NS
7007 if (processing_template_decl && !TREE_CONSTANT (size))
7008 /* A variable sized array. */
7009 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7010 else
2848ad0f 7011 {
455f19cb
MM
7012 HOST_WIDE_INT saved_processing_template_decl;
7013
d63b5e9f 7014 /* Compute the index of the largest element in the array. It is
0cbd7506
MS
7015 one less than the number of elements in the array. We save
7016 and restore PROCESSING_TEMPLATE_DECL so that computations in
7017 cp_build_binary_op will be appropriately folded. */
455f19cb
MM
7018 saved_processing_template_decl = processing_template_decl;
7019 processing_template_decl = 0;
7020 itype = cp_build_binary_op (MINUS_EXPR,
7021 cp_convert (ssizetype, size),
7022 cp_convert (ssizetype, integer_one_node));
7023 itype = fold (itype);
7024 processing_template_decl = saved_processing_template_decl;
7025
d63b5e9f 7026 if (!TREE_CONSTANT (itype))
f4f206f4 7027 /* A variable sized array. */
d63b5e9f
NS
7028 itype = variable_size (itype);
7029 /* Make sure that there was no overflow when creating to a signed
0cbd7506
MS
7030 index type. (For example, on a 32-bit machine, an array with
7031 size 2^32 - 1 is too big.) */
9116d529
RS
7032 else if (TREE_CODE (itype) == INTEGER_CST
7033 && TREE_OVERFLOW (itype))
2848ad0f 7034 {
d63b5e9f
NS
7035 error ("overflow in array dimension");
7036 TREE_OVERFLOW (itype) = 0;
2848ad0f 7037 }
2848ad0f 7038 }
68642fb6 7039
2848ad0f 7040 /* Create and return the appropriate index type. */
06d40de8
DG
7041 if (abi_1_itype)
7042 {
7043 tree t = build_index_type (itype);
7044 TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
7045 return abi_1_itype;
7046 }
7047 else
7048 return build_index_type (itype);
2848ad0f
MM
7049}
7050
a723baf1
MM
7051/* Returns the scope (if any) in which the entity declared by
7052 DECLARATOR will be located. If the entity was declared with an
7053 unqualified name, NULL_TREE is returned. */
7054
7055tree
058b15c1 7056get_scope_of_declarator (const cp_declarator *declarator)
a723baf1 7057{
058b15c1
MM
7058 while (declarator && declarator->kind != cdk_id)
7059 declarator = declarator->declarator;
7060
7061 /* If the declarator-id is a SCOPE_REF, the scope in which the
7062 declaration occurs is the first operand. */
7063 if (declarator
1d786913
MM
7064 && declarator->u.id.qualifying_scope)
7065 return declarator->u.id.qualifying_scope;
058b15c1 7066
77880ae4 7067 /* Otherwise, the declarator is not a qualified name; the entity will
058b15c1
MM
7068 be declared in the current scope. */
7069 return NULL_TREE;
a723baf1
MM
7070}
7071
2848ad0f
MM
7072/* Returns an ARRAY_TYPE for an array with SIZE elements of the
7073 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
7074 with this type. */
7075
7076static tree
11f6b451 7077create_array_type_for_decl (tree name, tree type, tree size)
2848ad0f
MM
7078{
7079 tree itype = NULL_TREE;
7080 const char* error_msg;
7081
7082 /* If things have already gone awry, bail now. */
7083 if (type == error_mark_node || size == error_mark_node)
7084 return error_mark_node;
7085
7086 /* Assume that everything will go OK. */
7087 error_msg = NULL;
7088
7089 /* There are some types which cannot be array elements. */
7090 switch (TREE_CODE (type))
7091 {
7092 case VOID_TYPE:
7093 error_msg = "array of void";
7094 break;
7095
7096 case FUNCTION_TYPE:
7097 error_msg = "array of functions";
7098 break;
7099
7100 case REFERENCE_TYPE:
7101 error_msg = "array of references";
7102 break;
7103
2848ad0f
MM
7104 case METHOD_TYPE:
7105 error_msg = "array of function members";
7106 break;
7107
7108 default:
7109 break;
7110 }
7111
7112 /* If something went wrong, issue an error-message and return. */
7113 if (error_msg)
7114 {
7115 if (name)
2d01edd7 7116 error ("declaration of %qD as %s", name, error_msg);
2848ad0f 7117 else
33bd39a2 7118 error ("creating %s", error_msg);
2848ad0f
MM
7119
7120 return error_mark_node;
7121 }
7122
7123 /* [dcl.array]
68642fb6 7124
2848ad0f
MM
7125 The constant expressions that specify the bounds of the arrays
7126 can be omitted only for the first member of the sequence. */
7127 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
7128 {
b3faacfd 7129 if (name)
2d01edd7 7130 error ("declaration of %qD as multidimensional array must "
0cbd7506
MS
7131 "have bounds for all dimensions except the first",
7132 name);
b3faacfd 7133 else
2d01edd7 7134 error ("multidimensional array must have bounds for all "
0cbd7506 7135 "dimensions except the first");
2848ad0f
MM
7136
7137 return error_mark_node;
7138 }
7139
7140 /* Figure out the index type for the array. */
7141 if (size)
7142 itype = compute_array_index_type (name, size);
7143
7fb213d8
GB
7144 /* [dcl.array]
7145 T is called the array element type; this type shall not be [...] an
7146 abstract class type. */
7147 abstract_virtuals_error (name, type);
7148
2848ad0f
MM
7149 return build_cplus_array_type (type, itype);
7150}
7151
3dbc07b6
MM
7152/* Check that it's OK to declare a function with the indicated TYPE.
7153 SFK indicates the kind of special function (if any) that this
1f84ec23 7154 function is. OPTYPE is the type given in a conversion operator
44d10c10
PB
7155 declaration, or the class type for a constructor/destructor.
7156 Returns the actual return type of the function; that
3dbc07b6
MM
7157 may be different than TYPE if an error occurs, or for certain
7158 special functions. */
7159
7160static tree
11f6b451 7161check_special_function_return_type (special_function_kind sfk,
0cbd7506
MS
7162 tree type,
7163 tree optype)
3dbc07b6
MM
7164{
7165 switch (sfk)
7166 {
7167 case sfk_constructor:
7168 if (type)
33bd39a2 7169 error ("return type specification for constructor invalid");
5362b086 7170
44d10c10
PB
7171 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7172 type = build_pointer_type (optype);
7173 else
7174 type = void_type_node;
3dbc07b6
MM
7175 break;
7176
7177 case sfk_destructor:
7178 if (type)
33bd39a2 7179 error ("return type specification for destructor invalid");
44d10c10 7180 /* We can't use the proper return type here because we run into
77880ae4 7181 problems with ambiguous bases and covariant returns.
44d10c10
PB
7182 Java classes are left unchanged because (void *) isn't a valid
7183 Java type, and we don't want to change the Java ABI. */
7184 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7185 type = build_pointer_type (void_type_node);
7186 else
7187 type = void_type_node;
3dbc07b6
MM
7188 break;
7189
7190 case sfk_conversion:
caba2081
PC
7191 if (type)
7192 error ("return type specified for %<operator %T%>", optype);
3dbc07b6
MM
7193 type = optype;
7194 break;
7195
7196 default:
8dc2b103 7197 gcc_unreachable ();
3dbc07b6
MM
7198 }
7199
7200 return type;
7201}
7202
62e19030
MM
7203/* A variable or data member (whose unqualified name is IDENTIFIER)
7204 has been declared with the indicated TYPE. If the TYPE is not
7205 acceptable, issue an error message and return a type to use for
03fd3f84 7206 error-recovery purposes. */
62e19030
MM
7207
7208tree
7209check_var_type (tree identifier, tree type)
7210{
7211 if (VOID_TYPE_P (type))
7212 {
7213 if (!identifier)
7214 error ("unnamed variable or field declared void");
7215 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
7216 {
7217 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
7218 error ("variable or field %qE declared void", identifier);
7219 }
7220 else
7221 error ("variable or field declared void");
650fcd07 7222 type = error_mark_node;
62e19030 7223 }
c8094d83 7224
62e19030
MM
7225 return type;
7226}
7227
a723baf1
MM
7228/* Given declspecs and a declarator (abstract or otherwise), determine
7229 the name and type of the object declared and construct a DECL node
7230 for it.
8d08fdba 7231
5e32a5cf
GDR
7232 DECLSPECS points to the representation of declaration-specifier
7233 sequence that precedes declarator.
8d08fdba
MS
7234
7235 DECL_CONTEXT says which syntactic context this declaration is in:
7236 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7237 FUNCDEF for a function definition. Like NORMAL but a few different
7238 error messages in each case. Return value may be zero meaning
7239 this definition is too screwy to try to parse.
7240 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
7241 handle member functions (which have FIELD context).
7242 Return value may be zero meaning this definition is too screwy to
7243 try to parse.
7244 PARM for a parameter declaration (either within a function prototype
7245 or before a function body). Make a PARM_DECL, or return void_type_node.
db5ae43f 7246 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
7247 TYPENAME if for a typename (in a cast or sizeof).
7248 Don't make a DECL node; just return the ..._TYPE node.
7249 FIELD for a struct or union field; make a FIELD_DECL.
7250 BITFIELD for a field with specified width.
7251 INITIALIZED is 1 if the decl has an initializer.
7252
91d231cb
JM
7253 ATTRLIST is a pointer to the list of attributes, which may be NULL
7254 if there are none; *ATTRLIST may be modified if attributes from inside
7255 the declarator should be applied to the declaration.
b17e2870 7256
a723baf1
MM
7257 When this function is called, scoping variables (such as
7258 CURRENT_CLASS_TYPE) should reflect the scope in which the
7259 declaration occurs, not the scope in which the new declaration will
7260 be placed. For example, on:
8d08fdba 7261
a723baf1 7262 void S::f() { ... }
8d08fdba 7263
a723baf1 7264 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
344f237b
LM
7265 should not be `S'.
7266
7267 Returns a DECL (if a declarator is present), a TYPE (if there is no
7268 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
7269 error occurs. */
8d08fdba 7270
8d08fdba 7271tree
058b15c1 7272grokdeclarator (const cp_declarator *declarator,
1ff3c076 7273 const cp_decl_specifier_seq *declspecs,
0cbd7506
MS
7274 enum decl_context decl_context,
7275 int initialized,
7276 tree* attrlist)
8d08fdba 7277{
8d08fdba
MS
7278 tree type = NULL_TREE;
7279 int longlong = 0;
db5ae43f 7280 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
7281 int explicit_int = 0;
7282 int explicit_char = 0;
37c46b43 7283 int defaulted_int = 0;
d1c78882 7284 tree dependent_name = NULL_TREE;
caf93cb0 7285
8d08fdba 7286 tree typedef_decl = NULL_TREE;
058b15c1 7287 const char *name = NULL;
8d08fdba 7288 tree typedef_type = NULL_TREE;
357d956e
MM
7289 /* True if this declarator is a function definition. */
7290 bool funcdef_flag = false;
058b15c1 7291 cp_declarator_kind innermost_code = cdk_error;
8d08fdba 7292 int bitfield = 0;
6125f3be
DE
7293#if 0
7294 /* See the code below that used this. */
91d231cb 7295 tree decl_attr = NULL_TREE;
6125f3be 7296#endif
8d08fdba
MS
7297
7298 /* Keep track of what sort of function is being processed
7299 so that we can warn about default return values, or explicit
7300 return values which do not match prescribed defaults. */
3dbc07b6 7301 special_function_kind sfk = sfk_none;
8d08fdba
MS
7302
7303 tree dname = NULL_TREE;
8d08fdba
MS
7304 tree ctor_return_type = NULL_TREE;
7305 enum overload_flags flags = NO_SPECIAL;
e2537f2c
MM
7306 /* cv-qualifiers that apply to the declarator, for a declaration of
7307 a member function. */
7308 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
7309 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
7310 int type_quals;
c11b6f21 7311 tree raises = NULL_TREE;
386b8a85 7312 int template_count = 0;
91d231cb 7313 tree returned_attrs = NULL_TREE;
4546865e 7314 tree parms = NULL_TREE;
058b15c1
MM
7315 const cp_declarator *id_declarator;
7316 /* The unqualified name of the declarator; either an
7317 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
7318 tree unqualified_id;
7319 /* The class type, if any, in which this entity is located,
7320 or NULL_TREE if none. Note that this value may be different from
7321 the current class type; for example if an attempt is made to declare
7322 "A::f" inside "B", this value will be "A". */
7323 tree ctype = current_class_type;
7324 /* The NAMESPACE_DECL for the namespace in which this entity is
7325 located. If an unqualified name is used to declare the entity,
7326 this value will be NULL_TREE, even if the entity is located at
caf93cb0 7327 namespace scope. */
058b15c1 7328 tree in_namespace = NULL_TREE;
1ff3c076
MM
7329 cp_storage_class storage_class;
7330 bool unsigned_p, signed_p, short_p, long_p, thread_p;
2cfe82fe 7331 bool type_was_error_mark_node = false;
5d80a306 7332 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
1891dec4 7333 bool set_no_warning = false;
1ff3c076
MM
7334
7335 signed_p = declspecs->specs[(int)ds_signed];
7336 unsigned_p = declspecs->specs[(int)ds_unsigned];
7337 short_p = declspecs->specs[(int)ds_short];
7338 long_p = declspecs->specs[(int)ds_long];
28c84d63 7339 longlong = declspecs->specs[(int)ds_long] >= 2;
1ff3c076 7340 thread_p = declspecs->specs[(int)ds_thread];
8d08fdba 7341
8d08fdba 7342 if (decl_context == FUNCDEF)
357d956e 7343 funcdef_flag = true, decl_context = NORMAL;
8d08fdba 7344 else if (decl_context == MEMFUNCDEF)
357d956e 7345 funcdef_flag = true, decl_context = FIELD;
8d08fdba
MS
7346 else if (decl_context == BITFIELD)
7347 bitfield = 1, decl_context = FIELD;
7348
8d08fdba
MS
7349 /* Look inside a declarator for the name being declared
7350 and get it as a string, for an error message. */
caf93cb0
EC
7351 for (id_declarator = declarator;
7352 id_declarator;
058b15c1
MM
7353 id_declarator = id_declarator->declarator)
7354 {
7355 if (id_declarator->kind != cdk_id)
7356 innermost_code = id_declarator->kind;
8d08fdba 7357
058b15c1
MM
7358 switch (id_declarator->kind)
7359 {
7360 case cdk_function:
7361 if (id_declarator->declarator
7362 && id_declarator->declarator->kind == cdk_id)
8d08fdba 7363 {
058b15c1
MM
7364 sfk = id_declarator->declarator->u.id.sfk;
7365 if (sfk == sfk_destructor)
7366 flags = DTOR_FLAG;
51c184be 7367 }
058b15c1 7368 break;
be99da77 7369
058b15c1
MM
7370 case cdk_id:
7371 {
1d786913
MM
7372 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
7373 tree decl = id_declarator->u.id.unqualified_name;
058b15c1
MM
7374 if (!decl)
7375 break;
1d786913 7376 if (qualifying_scope)
8d08fdba 7377 {
2884e22c
MM
7378 if (at_function_scope_p ())
7379 {
7380 /* [dcl.meaning]
7381
7382 A declarator-id shall not be qualified except
7383 for ...
7384
7385 None of the cases are permitted in block
7386 scope. */
7387 if (qualifying_scope == global_namespace)
7388 error ("invalid use of qualified-name %<::%D%>",
7389 decl);
7390 else if (TYPE_P (qualifying_scope))
7391 error ("invalid use of qualified-name %<%T::%D%>",
7392 qualifying_scope, decl);
7393 else
7394 error ("invalid use of qualified-name %<%D::%D%>",
7395 qualifying_scope, decl);
7396 return error_mark_node;
7397 }
7398 else if (TYPE_P (qualifying_scope))
058b15c1 7399 {
1d786913 7400 ctype = qualifying_scope;
058b15c1
MM
7401 if (innermost_code != cdk_function
7402 && current_class_type
caf93cb0 7403 && !UNIQUELY_DERIVED_FROM_P (ctype,
058b15c1
MM
7404 current_class_type))
7405 {
2d01edd7 7406 error ("type %qT is not derived from type %qT",
058b15c1 7407 ctype, current_class_type);
1d786913 7408 return error_mark_node;
058b15c1 7409 }
058b15c1
MM
7410 }
7411 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
7412 in_namespace = qualifying_scope;
058b15c1 7413 }
058b15c1
MM
7414 switch (TREE_CODE (decl))
7415 {
7416 case BIT_NOT_EXPR:
be99da77 7417 {
88e95ee3
MM
7418 tree type;
7419
7420 if (innermost_code != cdk_function)
7421 {
7422 error ("declaration of %qD as non-function", decl);
7423 return error_mark_node;
7424 }
c8094d83 7425 else if (!qualifying_scope
88e95ee3
MM
7426 && !(current_class_type && at_class_scope_p ()))
7427 {
7428 error ("declaration of %qD as non-member", decl);
7429 return error_mark_node;
7430 }
c8094d83 7431
88e95ee3
MM
7432 type = TREE_OPERAND (decl, 0);
7433 name = IDENTIFIER_POINTER (constructor_name (type));
af02935e 7434 dname = decl;
058b15c1
MM
7435 }
7436 break;
633221db 7437
058b15c1
MM
7438 case TEMPLATE_ID_EXPR:
7439 {
7440 tree fns = TREE_OPERAND (decl, 0);
633221db 7441
058b15c1 7442 dname = fns;
058b15c1 7443 if (TREE_CODE (dname) != IDENTIFIER_NODE)
be99da77 7444 {
50bc768d 7445 gcc_assert (is_overloaded_fn (dname));
058b15c1 7446 dname = DECL_NAME (get_first_fn (dname));
be99da77
MS
7447 }
7448 }
058b15c1 7449 /* Fall through. */
be99da77 7450
058b15c1
MM
7451 case IDENTIFIER_NODE:
7452 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7453 dname = decl;
be99da77 7454
058b15c1
MM
7455 if (C_IS_RESERVED_WORD (dname))
7456 {
2d01edd7 7457 error ("declarator-id missing; using reserved word %qD",
058b15c1
MM
7458 dname);
7459 name = IDENTIFIER_POINTER (dname);
7460 }
7461 else if (!IDENTIFIER_TYPENAME_P (dname))
7462 name = IDENTIFIER_POINTER (dname);
7463 else
7464 {
50bc768d 7465 gcc_assert (flags == NO_SPECIAL);
058b15c1
MM
7466 flags = TYPENAME_FLAG;
7467 ctor_return_type = TREE_TYPE (dname);
7468 sfk = sfk_conversion;
7469 if (is_typename_at_global_scope (dname))
7470 name = IDENTIFIER_POINTER (dname);
7471 else
7472 name = "<invalid operator>";
7473 }
7474 break;
7475
058b15c1 7476 default:
8dc2b103 7477 gcc_unreachable ();
058b15c1 7478 }
45537677 7479 break;
b08f991d 7480 }
45537677 7481
b08f991d
SB
7482 case cdk_array:
7483 case cdk_pointer:
7484 case cdk_reference:
7485 case cdk_ptrmem:
7486 break;
2ee366b5 7487
b08f991d
SB
7488 case cdk_error:
7489 return error_mark_node;
058b15c1 7490
b08f991d
SB
7491 default:
7492 gcc_unreachable ();
058b15c1
MM
7493 }
7494 if (id_declarator->kind == cdk_id)
7495 break;
7496 }
8d08fdba 7497
fa6098f8 7498 /* [dcl.fct.edf]
3db45ab5 7499
fa6098f8
MM
7500 The declarator in a function-definition shall have the form
7501 D1 ( parameter-declaration-clause) ... */
058b15c1 7502 if (funcdef_flag && innermost_code != cdk_function)
fa6098f8
MM
7503 {
7504 error ("function definition does not declare parameters");
7505 return error_mark_node;
7506 }
8d08fdba 7507
e1cd6e56 7508 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
058b15c1 7509 && innermost_code != cdk_function
62d1db17 7510 && ! (ctype && !declspecs->any_specifiers_p))
e1cd6e56 7511 {
2d01edd7 7512 error ("declaration of %qD as non-function", dname);
943e3ede 7513 return error_mark_node;
e1cd6e56
MS
7514 }
7515
8d08fdba
MS
7516 /* Anything declared one level down from the top level
7517 must be one of the parameters of a function
7518 (because the body is at least two levels down). */
7519
7520 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7521 by not allowing C++ class definitions to specify their parameters
7522 with xdecls (must be spec.d in the parmlist).
7523
7524 Since we now wait to push a class scope until we are sure that
7525 we are in a legitimate method context, we must set oldcname
a9aedbc2
MS
7526 explicitly (since current_class_name is not yet alive).
7527
7528 We also want to avoid calling this a PARM if it is in a namespace. */
8d08fdba 7529
9188c363 7530 if (decl_context == NORMAL && !toplevel_bindings_p ())
a9aedbc2 7531 {
e2500fed 7532 struct cp_binding_level *b = current_binding_level;
ff955512 7533 current_binding_level = b->level_chain;
a9aedbc2
MS
7534 if (current_binding_level != 0 && toplevel_bindings_p ())
7535 decl_context = PARM;
ff955512 7536 current_binding_level = b;
a9aedbc2 7537 }
8d08fdba 7538
34fc957d
NS
7539 if (name == NULL)
7540 name = decl_context == PARM ? "parameter" : "type name";
68642fb6 7541
62d1db17
MM
7542 /* If there were multiple types specified in the decl-specifier-seq,
7543 issue an error message. */
7544 if (declspecs->multiple_types_p)
32273f9f
LM
7545 {
7546 error ("two or more data types in declaration of %qs", name);
7547 return error_mark_node;
7548 }
7549
9b70c6b0
PC
7550 if (declspecs->conflicting_specifiers_p)
7551 {
7552 error ("conflicting specifiers in declaration of %qs", name);
7553 return error_mark_node;
7554 }
7555
62d1db17
MM
7556 /* Extract the basic type from the decl-specifier-seq. */
7557 type = declspecs->type;
7558 if (type == error_mark_node)
2cfe82fe
ZW
7559 {
7560 type = NULL_TREE;
7561 type_was_error_mark_node = true;
7562 }
62d1db17
MM
7563 /* If the entire declaration is itself tagged as deprecated then
7564 suppress reports of deprecated items. */
7565 if (type && TREE_DEPRECATED (type)
7566 && deprecated_state != DEPRECATED_SUPPRESS)
7567 warn_deprecated_use (type);
7568 if (type && TREE_CODE (type) == TYPE_DECL)
8d08fdba 7569 {
62d1db17
MM
7570 typedef_decl = type;
7571 type = TREE_TYPE (typedef_decl);
823dd937
JM
7572 if (TREE_DEPRECATED (type)
7573 && DECL_ARTIFICIAL (typedef_decl)
7574 && deprecated_state != DEPRECATED_SUPPRESS)
7575 warn_deprecated_use (type);
62d1db17
MM
7576 }
7577 /* No type at all: default to `int', and set DEFAULTED_INT
7578 because it was not a user-defined typedef. */
1ff3c076 7579 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
62d1db17
MM
7580 {
7581 /* These imply 'int'. */
7582 type = integer_type_node;
7583 defaulted_int = 1;
7584 }
7585 /* Gather flags. */
7586 explicit_int = declspecs->explicit_int_p;
7587 explicit_char = declspecs->explicit_char_p;
7a1f3f5f 7588
8d6e459d
NS
7589#if 0
7590 /* See the code below that used this. */
7591 if (typedef_decl)
7592 decl_attr = DECL_ATTRIBUTES (typedef_decl);
7593#endif
8d08fdba
MS
7594 typedef_type = type;
7595
a3203465 7596
44d10c10
PB
7597 if (sfk != sfk_conversion)
7598 ctor_return_type = ctype;
7599
3dbc07b6
MM
7600 if (sfk != sfk_none)
7601 type = check_special_function_return_type (sfk, type,
3dbc07b6
MM
7602 ctor_return_type);
7603 else if (type == NULL_TREE)
8d08fdba 7604 {
3dbc07b6
MM
7605 int is_main;
7606
8d08fdba 7607 explicit_int = -1;
3dbc07b6 7608
0fd0b7ee
JM
7609 /* We handle `main' specially here, because 'main () { }' is so
7610 common. With no options, it is allowed. With -Wreturn-type,
7611 it is a warning. It is only an error with -pedantic-errors. */
3dbc07b6 7612 is_main = (funcdef_flag
7437519c 7613 && dname && MAIN_NAME_P (dname)
3dbc07b6
MM
7614 && ctype == NULL_TREE
7615 && in_namespace == NULL_TREE
7616 && current_namespace == global_namespace);
7617
2cfe82fe
ZW
7618 if (type_was_error_mark_node)
7619 /* We've already issued an error, don't complain more. */;
7620 else if (in_system_header || flag_ms_extensions)
3dbc07b6
MM
7621 /* Allow it, sigh. */;
7622 else if (pedantic || ! is_main)
2d01edd7 7623 pedwarn ("ISO C++ forbids declaration of %qs with no type", name);
b10fc6f5
GDR
7624 else
7625 warning (OPT_Wreturn_type,
7626 "ISO C++ forbids declaration of %qs with no type", name);
41eff652 7627
3dbc07b6 7628 type = integer_type_node;
51c184be 7629 }
caf93cb0 7630
8d08fdba
MS
7631 ctype = NULL_TREE;
7632
7633 /* Now process the modifiers that were specified
7634 and check for invalid combinations. */
7635
7636 /* Long double is a special combination. */
3cc189f5 7637 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8d08fdba 7638 {
1ff3c076 7639 long_p = false;
68642fb6 7640 type = build_qualified_type (long_double_type_node,
89d684bb 7641 cp_type_quals (type));
8d08fdba
MS
7642 }
7643
7644 /* Check all other uses of type modifiers. */
7645
1ff3c076 7646 if (unsigned_p || signed_p || long_p || short_p)
8d08fdba
MS
7647 {
7648 int ok = 0;
7649
3cc189f5
VR
7650 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
7651 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
1ff3c076 7652 else if (signed_p && unsigned_p)
3cc189f5
VR
7653 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
7654 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
7655 error ("%<long long%> invalid for %qs", name);
7656 else if (long_p && TREE_CODE (type) == REAL_TYPE)
7657 error ("%<long%> invalid for %qs", name);
7658 else if (short_p && TREE_CODE (type) == REAL_TYPE)
7659 error ("%<short%> invalid for %qs", name);
5d48268f
VR
7660 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
7661 error ("%<long%> or %<short%> invalid for %qs", name);
3cc189f5
VR
7662 else if ((long_p || short_p) && explicit_char)
7663 error ("%<long%> or %<short%> specified with char for %qs", name);
7664 else if (long_p && short_p)
7665 error ("%<long%> and %<short%> specified together for %qs", name);
8d08fdba
MS
7666 else
7667 {
7668 ok = 1;
37c46b43 7669 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8d08fdba 7670 {
2d01edd7 7671 pedwarn ("long, short, signed or unsigned used invalidly for %qs",
8d08fdba
MS
7672 name);
7673 if (flag_pedantic_errors)
7674 ok = 0;
7675 }
7676 }
7677
7678 /* Discard the type modifiers if they are invalid. */
7679 if (! ok)
7680 {
1ff3c076
MM
7681 unsigned_p = false;
7682 signed_p = false;
7683 long_p = false;
7684 short_p = false;
8d08fdba
MS
7685 longlong = 0;
7686 }
7687 }
7688
7689 /* Decide whether an integer type is signed or not.
7690 Optionally treat bitfields as signed by default. */
1ff3c076 7691 if (unsigned_p
b89c5a7b
MM
7692 /* [class.bit]
7693
7694 It is implementation-defined whether a plain (neither
7695 explicitly signed or unsigned) char, short, int, or long
7696 bit-field is signed or unsigned.
68642fb6 7697
b89c5a7b
MM
7698 Naturally, we extend this to long long as well. Note that
7699 this does not include wchar_t. */
7700 || (bitfield && !flag_signed_bitfields
1ff3c076 7701 && !signed_p
b89c5a7b
MM
7702 /* A typedef for plain `int' without `signed' can be
7703 controlled just like plain `int', but a typedef for
7704 `signed int' cannot be so controlled. */
68642fb6 7705 && !(typedef_decl
29bbeb1c 7706 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
b38a05d0 7707 && TREE_CODE (type) == INTEGER_TYPE
29bbeb1c 7708 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8d08fdba
MS
7709 {
7710 if (longlong)
7711 type = long_long_unsigned_type_node;
1ff3c076 7712 else if (long_p)
8d08fdba 7713 type = long_unsigned_type_node;
1ff3c076 7714 else if (short_p)
8d08fdba
MS
7715 type = short_unsigned_type_node;
7716 else if (type == char_type_node)
7717 type = unsigned_char_type_node;
7718 else if (typedef_decl)
ca5ba2a3 7719 type = unsigned_type_for (type);
8d08fdba
MS
7720 else
7721 type = unsigned_type_node;
7722 }
1ff3c076 7723 else if (signed_p && type == char_type_node)
8d08fdba
MS
7724 type = signed_char_type_node;
7725 else if (longlong)
7726 type = long_long_integer_type_node;
1ff3c076 7727 else if (long_p)
8d08fdba 7728 type = long_integer_type_node;
1ff3c076 7729 else if (short_p)
8d08fdba
MS
7730 type = short_integer_type_node;
7731
62d1db17 7732 if (declspecs->specs[(int)ds_complex])
37c46b43 7733 {
1ff3c076 7734 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
2d01edd7 7735 error ("complex invalid for %qs", name);
37c46b43
MS
7736 /* If we just have "complex", it is equivalent to
7737 "complex double", but if any modifiers at all are specified it is
7738 the complex form of TYPE. E.g, "complex short" is
7739 "complex short int". */
7740
1ff3c076
MM
7741 else if (defaulted_int && ! longlong
7742 && ! (long_p || short_p || signed_p || unsigned_p))
37c46b43
MS
7743 type = complex_double_type_node;
7744 else if (type == integer_type_node)
7745 type = complex_integer_type_node;
7746 else if (type == float_type_node)
7747 type = complex_float_type_node;
7748 else if (type == double_type_node)
7749 type = complex_double_type_node;
7750 else if (type == long_double_type_node)
7751 type = complex_long_double_type_node;
7752 else
7753 type = build_complex_type (type);
7754 }
7755
4f2b0fb2 7756 type_quals = TYPE_UNQUALIFIED;
62d1db17 7757 if (declspecs->specs[(int)ds_const])
4f2b0fb2 7758 type_quals |= TYPE_QUAL_CONST;
62d1db17 7759 if (declspecs->specs[(int)ds_volatile])
4f2b0fb2 7760 type_quals |= TYPE_QUAL_VOLATILE;
62d1db17 7761 if (declspecs->specs[(int)ds_restrict])
4f2b0fb2
NS
7762 type_quals |= TYPE_QUAL_RESTRICT;
7763 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
2d01edd7 7764 error ("qualifiers are not allowed on declaration of %<operator %T%>",
0cbd7506 7765 ctor_return_type);
3ac3d9ea 7766
c8094d83 7767 if (TREE_CODE (type) == FUNCTION_TYPE
9804209d
DG
7768 && type_quals != TYPE_UNQUALIFIED)
7769 {
7770 /* This was an error in C++98 (cv-qualifiers cannot be added to
0cbd7506
MS
7771 a function type), but DR 295 makes the code well-formed by
7772 dropping the extra qualifiers. */
9804209d 7773 if (pedantic)
0cbd7506
MS
7774 {
7775 tree bad_type = build_qualified_type (type, type_quals);
7776 pedwarn ("ignoring %qV qualifiers added to function type %qT",
7777 bad_type, type);
7778 }
9804209d
DG
7779 type_quals = TYPE_UNQUALIFIED;
7780 }
4f2b0fb2
NS
7781 type_quals |= cp_type_quals (type);
7782 type = cp_build_qualified_type_real
7783 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
23fca1f5 7784 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
4f2b0fb2
NS
7785 /* We might have ignored or rejected some of the qualifiers. */
7786 type_quals = cp_type_quals (type);
caf93cb0 7787
8d08fdba 7788 staticp = 0;
62d1db17
MM
7789 inlinep = !! declspecs->specs[(int)ds_inline];
7790 virtualp = !! declspecs->specs[(int)ds_virtual];
7791 explicitp = !! declspecs->specs[(int)ds_explicit];
8d08fdba 7792
1ff3c076
MM
7793 storage_class = declspecs->storage_class;
7794 if (storage_class == sc_static)
8d08fdba
MS
7795 staticp = 1 + (decl_context == FIELD);
7796
7797 if (virtualp && staticp == 2)
7798 {
2d01edd7 7799 error ("member %qD cannot be declared both virtual and static", dname);
7e1e0765 7800 storage_class = sc_none;
8d08fdba
MS
7801 staticp = 0;
7802 }
62d1db17 7803 friendp = !! declspecs->specs[(int)ds_friend];
8d08fdba 7804
d1c78882 7805 if (dependent_name && !friendp)
d5614afb 7806 {
d1c78882 7807 error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
13dbe691 7808 return error_mark_node;
d5614afb 7809 }
8d08fdba 7810
62d1db17
MM
7811 /* Issue errors about use of storage classes for parameters. */
7812 if (decl_context == PARM)
8d08fdba 7813 {
62d1db17 7814 if (declspecs->specs[(int)ds_typedef])
709f9dcf
VR
7815 {
7816 error ("typedef declaration invalid in parameter declaration");
7817 return error_mark_node;
7818 }
1ff3c076
MM
7819 else if (storage_class == sc_static
7820 || storage_class == sc_extern
7821 || thread_p)
8251199e 7822 error ("storage class specifiers invalid in parameter declarations");
8d08fdba
MS
7823 }
7824
7825 /* Give error if `virtual' is used outside of class declaration. */
b7484fbe
MS
7826 if (virtualp
7827 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba 7828 {
8251199e 7829 error ("virtual outside class declaration");
8d08fdba
MS
7830 virtualp = 0;
7831 }
8d08fdba
MS
7832
7833 /* Static anonymous unions are dealt with here. */
7834 if (staticp && decl_context == TYPENAME
62d1db17
MM
7835 && declspecs->type
7836 && ANON_AGGR_TYPE_P (declspecs->type))
8d08fdba
MS
7837 decl_context = FIELD;
7838
8d08fdba
MS
7839 /* Warn about storage classes that are invalid for certain
7840 kinds of declarations (parameters, typenames, etc.). */
3e66d096
JJ
7841 if (thread_p
7842 && ((storage_class
7843 && storage_class != sc_extern
7844 && storage_class != sc_static)
7845 || declspecs->specs[(int)ds_typedef]))
7846 {
7847 error ("multiple storage classes in declaration of %qs", name);
7848 thread_p = false;
7849 }
9b70c6b0
PC
7850 if (decl_context != NORMAL
7851 && ((storage_class != sc_none
7852 && storage_class != sc_mutable)
7853 || thread_p))
8d08fdba 7854 {
db5ae43f 7855 if ((decl_context == PARM || decl_context == CATCHPARM)
1ff3c076
MM
7856 && (storage_class == sc_register
7857 || storage_class == sc_auto))
8d08fdba 7858 ;
62d1db17 7859 else if (declspecs->specs[(int)ds_typedef])
fc378698 7860 ;
8d08fdba 7861 else if (decl_context == FIELD
f4f206f4 7862 /* C++ allows static class elements. */
1ff3c076 7863 && storage_class == sc_static)
d363e7bf
AJ
7864 /* C++ also allows inlines and signed and unsigned elements,
7865 but in those cases we don't come in here. */
8d08fdba
MS
7866 ;
7867 else
7868 {
7869 if (decl_context == FIELD)
389c6c8b 7870 error ("storage class specified for %qs", name);
8d08fdba 7871 else
b9d12519
KG
7872 {
7873 if (decl_context == PARM || decl_context == CATCHPARM)
2d01edd7 7874 error ("storage class specified for parameter %qs", name);
b9d12519
KG
7875 else
7876 error ("storage class specified for typename");
7877 }
1ff3c076
MM
7878 if (storage_class == sc_register
7879 || storage_class == sc_auto
7880 || storage_class == sc_extern
7881 || thread_p)
7882 storage_class = sc_none;
8d08fdba
MS
7883 }
7884 }
caf93cb0 7885 else if (storage_class == sc_extern && initialized
62d1db17 7886 && !funcdef_flag)
8d08fdba 7887 {
a9aedbc2 7888 if (toplevel_bindings_p ())
8d08fdba 7889 {
59be0cdd 7890 /* It's common practice (and completely valid) to have a const
8d08fdba 7891 be initialized and declared extern. */
950ad3c3 7892 if (!(type_quals & TYPE_QUAL_CONST))
d4ee4d25 7893 warning (0, "%qs initialized and declared %<extern%>", name);
8d08fdba
MS
7894 }
7895 else
2d01edd7 7896 error ("%qs has both %<extern%> and initializer", name);
8d08fdba 7897 }
1ff3c076 7898 else if (storage_class == sc_extern && funcdef_flag
a9aedbc2 7899 && ! toplevel_bindings_p ())
2d01edd7 7900 error ("nested function %qs declared %<extern%>", name);
a9aedbc2 7901 else if (toplevel_bindings_p ())
8d08fdba 7902 {
1ff3c076 7903 if (storage_class == sc_auto)
2d01edd7 7904 error ("top-level declaration of %qs specifies %<auto%>", name);
8d08fdba 7905 }
1ff3c076
MM
7906 else if (thread_p
7907 && storage_class != sc_extern
7908 && storage_class != sc_static)
7a1f3f5f 7909 {
2d01edd7 7910 error ("function-scope %qs implicitly auto and declared %<__thread%>",
7a1f3f5f 7911 name);
1ff3c076 7912 thread_p = false;
7a1f3f5f 7913 }
8d08fdba 7914
1ff3c076 7915 if (storage_class && friendp)
8251199e 7916 error ("storage class specifiers invalid in friend function declarations");
909e536a 7917
058b15c1
MM
7918 if (!id_declarator)
7919 unqualified_id = NULL_TREE;
7920 else
8d08fdba 7921 {
1d786913 7922 unqualified_id = id_declarator->u.id.unqualified_name;
058b15c1 7923 switch (TREE_CODE (unqualified_id))
8d08fdba 7924 {
058b15c1 7925 case BIT_NOT_EXPR:
caf93cb0 7926 unqualified_id
058b15c1
MM
7927 = constructor_name (TREE_OPERAND (unqualified_id, 0));
7928 break;
caf93cb0 7929
058b15c1
MM
7930 case IDENTIFIER_NODE:
7931 case TEMPLATE_ID_EXPR:
52fbc847 7932 break;
caf93cb0 7933
058b15c1 7934 default:
8dc2b103 7935 gcc_unreachable ();
058b15c1
MM
7936 }
7937 }
52fbc847 7938
058b15c1
MM
7939 /* Determine the type of the entity declared by recurring on the
7940 declarator. */
f4f18103 7941 for (; declarator; declarator = declarator->declarator)
058b15c1
MM
7942 {
7943 const cp_declarator *inner_declarator;
7944 tree attrs;
8d08fdba 7945
058b15c1
MM
7946 if (type == error_mark_node)
7947 return error_mark_node;
c1b177ec 7948
058b15c1
MM
7949 attrs = declarator->attributes;
7950 if (attrs)
7951 {
7952 int attr_flags;
caf93cb0 7953
058b15c1
MM
7954 attr_flags = 0;
7955 if (declarator == NULL || declarator->kind == cdk_id)
7956 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
7957 if (declarator->kind == cdk_function)
7958 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
7959 if (declarator->kind == cdk_array)
7960 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
7961 returned_attrs = decl_attributes (&type,
7962 chainon (returned_attrs, attrs),
7963 attr_flags);
7964 }
7965
f4f18103
MM
7966 if (declarator->kind == cdk_id)
7967 break;
7968
7969 inner_declarator = declarator->declarator;
7970
058b15c1
MM
7971 switch (declarator->kind)
7972 {
7973 case cdk_array:
caf93cb0 7974 type = create_array_type_for_decl (dname, type,
058b15c1 7975 declarator->u.array.bounds);
8d08fdba
MS
7976 break;
7977
058b15c1 7978 case cdk_function:
8d08fdba
MS
7979 {
7980 tree arg_types;
f376e137 7981 int funcdecl_p;
8d08fdba
MS
7982
7983 /* Declaring a function type.
7984 Make sure we have a valid type for the function to return. */
8d08fdba 7985
1891dec4
DM
7986 if (type_quals != TYPE_UNQUALIFIED)
7987 {
7988 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
7989 warning (OPT_Wreturn_type,
7990 "type qualifiers ignored on function return type");
7991 /* We now know that the TYPE_QUALS don't apply to the
7992 decl, but to its return type. */
7993 type_quals = TYPE_UNQUALIFIED;
7994 set_no_warning = true;
7995 }
8d08fdba
MS
7996
7997 /* Warn about some types functions can't return. */
7998
7999 if (TREE_CODE (type) == FUNCTION_TYPE)
8000 {
2d01edd7 8001 error ("%qs declared as function returning a function", name);
8d08fdba
MS
8002 type = integer_type_node;
8003 }
8004 if (TREE_CODE (type) == ARRAY_TYPE)
8005 {
2d01edd7 8006 error ("%qs declared as function returning an array", name);
8d08fdba
MS
8007 type = integer_type_node;
8008 }
8009
b7484fbe 8010 /* Pick up type qualifiers which should be applied to `this'. */
e2537f2c 8011 memfn_quals = declarator->u.function.qualifiers;
b7484fbe 8012
c11b6f21 8013 /* Pick up the exception specifications. */
058b15c1 8014 raises = declarator->u.function.exception_specification;
c11b6f21 8015
f376e137
MS
8016 /* Say it's a definition only for the CALL_EXPR
8017 closest to the identifier. */
058b15c1 8018 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
68642fb6 8019
8d08fdba
MS
8020 if (ctype == NULL_TREE
8021 && decl_context == FIELD
f376e137 8022 && funcdecl_p
8d08fdba
MS
8023 && (friendp == 0 || dname == current_class_name))
8024 ctype = current_class_type;
8025
058b15c1
MM
8026 if (ctype && (sfk == sfk_constructor
8027 || sfk == sfk_destructor))
8d08fdba
MS
8028 {
8029 /* We are within a class's scope. If our declarator name
8030 is the same as the class name, and we are defining
8031 a function, then it is a constructor/destructor, and
8032 therefore returns a void type. */
3db45ab5 8033
e2537f2c
MM
8034 /* ISO C++ 12.4/2. A destructor may not be declared
8035 const or volatile. A destructor may not be
8036 static.
3db45ab5 8037
e2537f2c
MM
8038 ISO C++ 12.1. A constructor may not be declared
8039 const or volatile. A constructor may not be
8040 virtual. A constructor may not be static. */
3db45ab5 8041 if (staticp == 2)
e2537f2c
MM
8042 error ((flags == DTOR_FLAG)
8043 ? "destructor cannot be static member function"
8044 : "constructor cannot be static member function");
8045 if (memfn_quals)
8d08fdba 8046 {
e2537f2c
MM
8047 error ((flags == DTOR_FLAG)
8048 ? "destructors may not be cv-qualified"
8049 : "constructors may not be cv-qualified");
8050 memfn_quals = TYPE_UNQUALIFIED;
8d08fdba 8051 }
e2537f2c
MM
8052
8053 if (decl_context == FIELD
8054 && !member_function_or_else (ctype,
8055 current_class_type,
8056 flags))
13dbe691 8057 return error_mark_node;
e2537f2c
MM
8058
8059 if (flags != DTOR_FLAG)
8d08fdba 8060 {
e2537f2c 8061 /* It's a constructor. */
db5ae43f
MS
8062 if (explicitp == 1)
8063 explicitp = 2;
8d08fdba
MS
8064 if (virtualp)
8065 {
8251199e 8066 pedwarn ("constructors cannot be declared virtual");
8d08fdba
MS
8067 virtualp = 0;
8068 }
7137605e
MM
8069 if (decl_context == FIELD
8070 && sfk != sfk_constructor)
13dbe691 8071 return error_mark_node;
8d08fdba
MS
8072 }
8073 if (decl_context == FIELD)
8074 staticp = 0;
8075 }
b7484fbe 8076 else if (friendp)
8d08fdba 8077 {
b7484fbe 8078 if (initialized)
2d01edd7 8079 error ("can't initialize friend function %qs", name);
b7484fbe
MS
8080 if (virtualp)
8081 {
8082 /* Cannot be both friend and virtual. */
8251199e 8083 error ("virtual functions cannot be friends");
b7484fbe
MS
8084 friendp = 0;
8085 }
28cbf42c 8086 if (decl_context == NORMAL)
8251199e 8087 error ("friend declaration not in class definition");
28cbf42c 8088 if (current_function_decl && funcdef_flag)
2d01edd7 8089 error ("can't define friend function %qs in a local "
0cbd7506
MS
8090 "class definition",
8091 name);
8d08fdba
MS
8092 }
8093
caf93cb0 8094 arg_types = grokparms (declarator->u.function.parameters,
058b15c1 8095 &parms);
8d08fdba 8096
058b15c1
MM
8097 if (inner_declarator
8098 && inner_declarator->kind == cdk_id
8099 && inner_declarator->u.id.sfk == sfk_destructor
8100 && arg_types != void_list_node)
8d08fdba 8101 {
058b15c1
MM
8102 error ("destructors may not have parameters");
8103 arg_types = void_list_node;
8104 parms = NULL_TREE;
8d08fdba 8105 }
caf93cb0 8106
d22c8596 8107 type = build_function_type (type, arg_types);
8d08fdba
MS
8108 }
8109 break;
8110
058b15c1
MM
8111 case cdk_pointer:
8112 case cdk_reference:
8113 case cdk_ptrmem:
8d08fdba
MS
8114 /* Filter out pointers-to-references and references-to-references.
8115 We can get these if a TYPE_DECL is used. */
8116
8117 if (TREE_CODE (type) == REFERENCE_TYPE)
8118 {
8af2fec4
RY
8119 if (declarator->kind != cdk_reference)
8120 {
8121 error ("cannot declare pointer to %q#T", type);
8122 type = TREE_TYPE (type);
8123 }
8124
8125 /* In C++0x, we allow reference to reference declarations
8126 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
8127 and template type arguments [14.3.1/4 temp.arg.type]. The
8128 check for direct reference to reference declarations, which
8129 are still forbidden, occurs below. Reasoning behind the change
8130 can be found in DR106, DR540, and the rvalue reference
8131 proposals. */
c1ae8be5 8132 else if (cxx_dialect == cxx98)
8af2fec4
RY
8133 {
8134 error ("cannot declare reference to %q#T", type);
8135 type = TREE_TYPE (type);
8136 }
a5894242 8137 }
058b15c1
MM
8138 else if (VOID_TYPE_P (type))
8139 {
8140 if (declarator->kind == cdk_reference)
2d01edd7 8141 error ("cannot declare reference to %q#T", type);
058b15c1 8142 else if (declarator->kind == cdk_ptrmem)
2d01edd7 8143 error ("cannot declare pointer to %q#T member", type);
058b15c1 8144 }
61a127b3 8145
91063b51
MM
8146 /* We now know that the TYPE_QUALS don't apply to the decl,
8147 but to the target of the pointer. */
8148 type_quals = TYPE_UNQUALIFIED;
8d08fdba 8149
058b15c1 8150 if (declarator->kind == cdk_ptrmem
1b021ff4
JJ
8151 && (TREE_CODE (type) == FUNCTION_TYPE
8152 || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
058b15c1 8153 {
e2537f2c 8154 memfn_quals |= cp_type_quals (type);
3db45ab5 8155 type = build_memfn_type (type,
e2537f2c
MM
8156 declarator->u.pointer.class_type,
8157 memfn_quals);
8158 memfn_quals = TYPE_UNQUALIFIED;
058b15c1
MM
8159 }
8160
8161 if (declarator->kind == cdk_reference)
8d08fdba 8162 {
8af2fec4
RY
8163 /* In C++0x, the type we are creating a reference to might be
8164 a typedef which is itself a reference type. In that case,
8165 we follow the reference collapsing rules in
8166 [7.1.3/8 dcl.typedef] to create the final reference type:
8167
8168 "If a typedef TD names a type that is a reference to a type
8169 T, an attempt to create the type 'lvalue reference to cv TD'
8170 creates the type 'lvalue reference to T,' while an attempt
8171 to create the type "rvalue reference to cv TD' creates the
8172 type TD."
8173 */
dd29188b 8174 if (!VOID_TYPE_P (type))
8af2fec4
RY
8175 type = cp_build_reference_type
8176 ((TREE_CODE (type) == REFERENCE_TYPE
8177 ? TREE_TYPE (type) : type),
8178 (declarator->u.reference.rvalue_ref
8179 && (TREE_CODE(type) != REFERENCE_TYPE
8180 || TYPE_REF_IS_RVALUE (type))));
8181
8182 /* In C++0x, we need this check for direct reference to
8183 reference declarations, which are forbidden by
8184 [8.3.2/5 dcl.ref]. Reference to reference declarations
8185 are only allowed indirectly through typedefs and template
8186 type arguments. Example:
8187
8188 void foo(int & &); // invalid ref-to-ref decl
8189
8190 typedef int & int_ref;
8191 void foo(int_ref &); // valid ref-to-ref decl
8192 */
8193 if (inner_declarator && inner_declarator->kind == cdk_reference)
8194 error ("cannot declare reference to %q#T, which is not "
8195 "a typedef or a template type argument", type);
8d08fdba
MS
8196 }
8197 else if (TREE_CODE (type) == METHOD_TYPE)
d8f8dca1 8198 type = build_ptrmemfunc_type (build_pointer_type (type));
058b15c1 8199 else if (declarator->kind == cdk_ptrmem)
f4ed7d21 8200 {
63c9a190
MM
8201 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
8202 != NAMESPACE_DECL);
8203 if (declarator->u.pointer.class_type == error_mark_node)
4230cec2
NS
8204 /* We will already have complained. */
8205 type = error_mark_node;
f4ed7d21
NS
8206 else
8207 type = build_ptrmem_type (declarator->u.pointer.class_type,
8208 type);
8209 }
8d08fdba
MS
8210 else
8211 type = build_pointer_type (type);
8212
8213 /* Process a list of type modifier keywords (such as
8214 const or volatile) that were given inside the `*' or `&'. */
8215
058b15c1 8216 if (declarator->u.pointer.qualifiers)
8d08fdba 8217 {
caf93cb0
EC
8218 type
8219 = cp_build_qualified_type (type,
3c01e5df 8220 declarator->u.pointer.qualifiers);
4f2b0fb2 8221 type_quals = cp_type_quals (type);
8d08fdba 8222 }
8d08fdba
MS
8223 ctype = NULL_TREE;
8224 break;
8225
058b15c1
MM
8226 case cdk_error:
8227 break;
8d08fdba 8228
058b15c1 8229 default:
8dc2b103 8230 gcc_unreachable ();
058b15c1
MM
8231 }
8232 }
caf93cb0 8233
058b15c1
MM
8234 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
8235 && TREE_CODE (type) != FUNCTION_TYPE
8236 && TREE_CODE (type) != METHOD_TYPE)
8237 {
2d01edd7 8238 error ("template-id %qD used as a declarator",
058b15c1
MM
8239 unqualified_id);
8240 unqualified_id = dname;
8241 }
386b8a85 8242
9c12301f
MM
8243 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
8244 qualified with a class-name, turn it into a METHOD_TYPE, unless
8245 we know that the function is static. We take advantage of this
8246 opportunity to do other processing that pertains to entities
8247 explicitly declared to be class members. Note that if DECLARATOR
8248 is non-NULL, we know it is a cdk_id declarator; otherwise, we
8249 would not have exited the loop above. */
caf93cb0 8250 if (declarator
1d786913
MM
8251 && declarator->u.id.qualifying_scope
8252 && TYPE_P (declarator->u.id.qualifying_scope))
058b15c1
MM
8253 {
8254 tree t;
8d08fdba 8255
1d786913
MM
8256 ctype = declarator->u.id.qualifying_scope;
8257 ctype = TYPE_MAIN_VARIANT (ctype);
058b15c1
MM
8258 t = ctype;
8259 while (t != NULL_TREE && CLASS_TYPE_P (t))
8260 {
8261 /* You're supposed to have one `template <...>' for every
8262 template class, but you don't need one for a full
8263 specialization. For example:
8d08fdba 8264
058b15c1
MM
8265 template <class T> struct S{};
8266 template <> struct S<int> { void f(); };
8267 void S<int>::f () {}
28cbf42c 8268
058b15c1
MM
8269 is correct; there shouldn't be a `template <>' for the
8270 definition of `S<int>::f'. */
f0d60e22
MM
8271 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
8272 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
8273 /* T is an explicit (not partial) specialization. All
8274 containing classes must therefore also be explicitly
8275 specialized. */
8276 break;
8277 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
058b15c1
MM
8278 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
8279 template_count += 1;
28cbf42c 8280
058b15c1
MM
8281 t = TYPE_MAIN_DECL (t);
8282 t = DECL_CONTEXT (t);
8283 }
8d08fdba 8284
058b15c1 8285 if (ctype == current_class_type)
59e7c84c
VR
8286 {
8287 if (friendp)
b46ce77f
SM
8288 {
8289 pedwarn ("member functions are implicitly friends of their class");
8290 friendp = 0;
8291 }
59e7c84c
VR
8292 else
8293 pedwarn ("extra qualification %<%T::%> on member %qs",
8294 ctype, name);
8295 }
fa6098f8
MM
8296 else if (/* If the qualifying type is already complete, then we
8297 can skip the following checks. */
8298 !COMPLETE_TYPE_P (ctype)
cc328145
MM
8299 && (/* If the function is being defined, then
8300 qualifying type must certainly be complete. */
3db45ab5 8301 funcdef_flag
cc328145
MM
8302 /* A friend declaration of "T::f" is OK, even if
8303 "T" is a template parameter. But, if this
8304 function is not a friend, the qualifying type
8305 must be a class. */
8306 || (!friendp && !CLASS_TYPE_P (ctype))
8307 /* For a declaration, the type need not be
8308 complete, if either it is dependent (since there
8309 is no meaningful definition of complete in that
8310 case) or the qualifying class is currently being
8311 defined. */
fa6098f8
MM
8312 || !(dependent_type_p (ctype)
8313 || currently_open_class (ctype)))
9f9a713e 8314 /* Check that the qualifying type is complete. */
fa6098f8
MM
8315 && !complete_type_or_else (ctype, NULL_TREE))
8316 return error_mark_node;
058b15c1
MM
8317 else if (TREE_CODE (type) == FUNCTION_TYPE)
8318 {
1d786913 8319 tree sname = declarator->u.id.unqualified_name;
50ad9642 8320
357d956e
MM
8321 if (current_class_type
8322 && (!friendp || funcdef_flag))
8323 {
8324 error (funcdef_flag
8325 ? "cannot define member function %<%T::%s%> within %<%T%>"
8326 : "cannot declare member function %<%T::%s%> within %<%T%>",
8327 ctype, name, current_class_type);
8328 return error_mark_node;
8329 }
8330
058b15c1
MM
8331 if (TREE_CODE (sname) == IDENTIFIER_NODE
8332 && NEW_DELETE_OPNAME_P (sname))
8333 /* Overloaded operator new and operator delete
8334 are always static functions. */
8335 ;
058b15c1 8336 else
e2537f2c 8337 type = build_memfn_type (type, ctype, memfn_quals);
058b15c1 8338 }
62d1db17 8339 else if (declspecs->specs[(int)ds_typedef]
fa6098f8 8340 && current_class_type)
058b15c1 8341 {
fa6098f8
MM
8342 error ("cannot declare member %<%T::%s%> within %qT",
8343 ctype, name, current_class_type);
058b15c1 8344 return error_mark_node;
8d08fdba
MS
8345 }
8346 }
8347
9c12301f
MM
8348 /* Now TYPE has the actual type. */
8349
91d231cb 8350 if (returned_attrs)
1eab9b56 8351 {
91d231cb
JM
8352 if (attrlist)
8353 *attrlist = chainon (returned_attrs, *attrlist);
1eab9b56 8354 else
91d231cb 8355 attrlist = &returned_attrs;
1eab9b56
JM
8356 }
8357
5d80a306
DG
8358 /* Handle parameter packs. */
8359 if (parameter_pack_p)
8360 {
8361 if (decl_context == PARM)
8362 /* Turn the type into a pack expansion.*/
8363 type = make_pack_expansion (type);
8364 else
8365 error ("non-parameter %qs cannot be a parameter pack", name);
8366 }
8367
55b3d665
JM
8368 /* Did array size calculations overflow? */
8369
8370 if (TREE_CODE (type) == ARRAY_TYPE
8371 && COMPLETE_TYPE_P (type)
96ce2ac9
JW
8372 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8373 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
55b3d665 8374 {
2d01edd7 8375 error ("size of array %qs is too large", name);
aba649ba 8376 /* If we proceed with the array type as it is, we'll eventually
55b3d665
JM
8377 crash in tree_low_cst(). */
8378 type = error_mark_node;
8379 }
8380
2fff6d71 8381 if ((decl_context == FIELD || decl_context == PARM)
caf93cb0 8382 && !processing_template_decl
5377d5ba 8383 && variably_modified_type_p (type, NULL_TREE))
dac45b5c 8384 {
2fff6d71 8385 if (decl_context == FIELD)
2d01edd7 8386 error ("data member may not have variably modified type %qT", type);
2fff6d71 8387 else
2d01edd7 8388 error ("parameter may not have variably modified type %qT", type);
dac45b5c
MM
8389 type = error_mark_node;
8390 }
8391
34fc957d 8392 if (explicitp == 1 || (explicitp && friendp))
db5ae43f 8393 {
34fc957d 8394 /* [dcl.fct.spec] The explicit specifier shall only be used in
0cbd7506 8395 declarations of constructors within a class definition. */
2d01edd7 8396 error ("only declarations of constructors can be %<explicit%>");
db5ae43f
MS
8397 explicitp = 0;
8398 }
8399
1ff3c076 8400 if (storage_class == sc_mutable)
f30432d7 8401 {
4223f82f 8402 if (decl_context != FIELD || friendp)
0cbd7506 8403 {
2d01edd7 8404 error ("non-member %qs cannot be declared %<mutable%>", name);
1ff3c076 8405 storage_class = sc_none;
0cbd7506 8406 }
62d1db17 8407 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
f30432d7 8408 {
2d01edd7 8409 error ("non-object member %qs cannot be declared %<mutable%>", name);
1ff3c076 8410 storage_class = sc_none;
f30432d7 8411 }
34fc957d 8412 else if (TREE_CODE (type) == FUNCTION_TYPE
0cbd7506
MS
8413 || TREE_CODE (type) == METHOD_TYPE)
8414 {
2d01edd7 8415 error ("function %qs cannot be declared %<mutable%>", name);
1ff3c076 8416 storage_class = sc_none;
0cbd7506 8417 }
f30432d7
MS
8418 else if (staticp)
8419 {
2d01edd7 8420 error ("static %qs cannot be declared %<mutable%>", name);
1ff3c076 8421 storage_class = sc_none;
f30432d7 8422 }
34fc957d
NS
8423 else if (type_quals & TYPE_QUAL_CONST)
8424 {
2d01edd7 8425 error ("const %qs cannot be declared %<mutable%>", name);
1ff3c076 8426 storage_class = sc_none;
34fc957d 8427 }
f30432d7
MS
8428 }
8429
419c6212 8430 /* If this is declaring a typedef name, return a TYPE_DECL. */
62d1db17 8431 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
8d08fdba
MS
8432 {
8433 tree decl;
8434
8435 /* Note that the grammar rejects storage classes
8436 in typenames, fields or parameters. */
eff71ab0
PB
8437 if (current_lang_name == lang_name_java)
8438 TYPE_FOR_JAVA (type) = 1;
3db45ab5 8439
e2537f2c
MM
8440 /* This declaration:
8441
3db45ab5 8442 typedef void f(int) const;
e2537f2c 8443
3db45ab5 8444 declares a function type which is not a member of any
e2537f2c 8445 particular class, but which is cv-qualified; for
3db45ab5 8446 example "f S::*" declares a pointer to a const-qualified
e2537f2c
MM
8447 member function of S. We record the cv-qualification in the
8448 function type. */
8449 if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
771026dd
DG
8450 {
8451 type = cp_build_qualified_type (type, memfn_quals);
8452
8453 /* We have now dealt with these qualifiers. */
8454 memfn_quals = TYPE_UNQUALIFIED;
8455 }
8d08fdba 8456
d2e5ee5c 8457 if (decl_context == FIELD)
e3016344 8458 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
d2e5ee5c 8459 else
e3016344
MM
8460 decl = build_decl (TYPE_DECL, unqualified_id, type);
8461 if (id_declarator && declarator->u.id.qualifying_scope)
8462 error ("%Jtypedef name may not be a nested-name-specifier", decl);
8463
8464 if (decl_context != FIELD)
6bda7a5e 8465 {
6bda7a5e
NS
8466 if (!current_function_decl)
8467 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
1dc82a99 8468 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
c8094d83 8469 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
1dc82a99
MM
8470 (current_function_decl)))
8471 /* The TYPE_DECL is "abstract" because there will be
8472 clones of this constructor/destructor, and there will
8473 be copies of this TYPE_DECL generated in those
8474 clones. */
8475 DECL_ABSTRACT (decl) = 1;
6bda7a5e 8476 }
e3016344
MM
8477 else if (constructor_name_p (unqualified_id, current_class_type))
8478 pedwarn ("ISO C++ forbids nested type %qD with same name "
8479 "as enclosing class",
8480 unqualified_id);
caf93cb0 8481
9188c363
MM
8482 /* If the user declares "typedef struct {...} foo" then the
8483 struct will have an anonymous name. Fill that name in now.
8484 Nothing can refer to it, so nothing needs know about the name
8485 change. */
8d08fdba 8486 if (type != error_mark_node
058b15c1 8487 && unqualified_id
8d08fdba
MS
8488 && TYPE_NAME (type)
8489 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1951a1b6 8490 && TYPE_ANONYMOUS_P (type)
ac905924
JM
8491 /* Don't do this if there are attributes. */
8492 && (!attrlist || !*attrlist)
89d684bb 8493 && cp_type_quals (type) == TYPE_UNQUALIFIED)
8d08fdba 8494 {
dcd08efc
JM
8495 tree oldname = TYPE_NAME (type);
8496 tree t;
8497
2c73f9f5 8498 /* Replace the anonymous name with the real name everywhere. */
dcd08efc
JM
8499 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
8500 if (TYPE_NAME (t) == oldname)
8501 TYPE_NAME (t) = decl;
8d08fdba
MS
8502
8503 if (TYPE_LANG_SPECIFIC (type))
8504 TYPE_WAS_ANONYMOUS (type) = 1;
8505
33964bf4
MM
8506 /* If this is a typedef within a template class, the nested
8507 type is a (non-primary) template. The name for the
8508 template needs updating as well. */
8509 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
68642fb6 8510 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
33964bf4
MM
8511 = TYPE_IDENTIFIER (type);
8512
50a6dbd7
JM
8513 /* FIXME remangle member functions; member functions of a
8514 type with external linkage have external linkage. */
fc378698 8515 }
fc378698 8516
1ff3c076 8517 if (signed_p
8d08fdba
MS
8518 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8519 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
8520
3db45ab5 8521 bad_specifiers (decl, "type", virtualp,
e2537f2c 8522 memfn_quals != TYPE_UNQUALIFIED,
c91a56d2
MS
8523 inlinep, friendp, raises != NULL_TREE);
8524
8d08fdba
MS
8525 return decl;
8526 }
8527
8528 /* Detect the case of an array type of unspecified size
8529 which came, as such, direct from a typedef name.
8d6e459d
NS
8530 We must copy the type, so that the array's domain can be
8531 individually set by the object's initializer. */
8d08fdba 8532
8d6e459d
NS
8533 if (type && typedef_type
8534 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
55b3d665 8535 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8d6e459d 8536 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
8d08fdba 8537
969fd501 8538 /* Detect where we're using a typedef of function type to declare a
4546865e 8539 function. PARMS will not be set, so we must create it now. */
caf93cb0 8540
969fd501
NS
8541 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
8542 {
8543 tree decls = NULL_TREE;
8544 tree args;
8545
8546 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
8547 {
8e51619a 8548 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
969fd501
NS
8549
8550 TREE_CHAIN (decl) = decls;
8551 decls = decl;
8552 }
caf93cb0 8553
4546865e 8554 parms = nreverse (decls);
9804209d
DG
8555
8556 if (decl_context != TYPENAME)
0cbd7506
MS
8557 {
8558 /* A cv-qualifier-seq shall only be part of the function type
8559 for a non-static member function. [8.3.5/4 dcl.fct] */
8560 if (cp_type_quals (type) != TYPE_UNQUALIFIED
8561 && (current_class_type == NULL_TREE || staticp) )
8562 {
ebbc3ce1 8563 error (staticp
f88d05c0
DM
8564 ? G_("qualified function types cannot be used to "
8565 "declare static member functions")
8566 : G_("qualified function types cannot be used to "
8567 "declare free functions"));
0cbd7506
MS
8568 type = TYPE_MAIN_VARIANT (type);
8569 }
8570
8571 /* The qualifiers on the function type become the qualifiers on
8572 the non-static member function. */
e2537f2c 8573 memfn_quals |= cp_type_quals (type);
0cbd7506 8574 }
969fd501
NS
8575 }
8576
8d08fdba
MS
8577 /* If this is a type name (such as, in a cast or sizeof),
8578 compute the type and return it now. */
8579
8580 if (decl_context == TYPENAME)
8581 {
8582 /* Note that the grammar rejects storage classes
8583 in typenames, fields or parameters. */
91063b51 8584 if (type_quals != TYPE_UNQUALIFIED)
6eabb241 8585 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
8586
8587 /* Special case: "friend class foo" looks like a TYPENAME context. */
8588 if (friendp)
8589 {
91063b51 8590 if (type_quals != TYPE_UNQUALIFIED)
b7484fbe 8591 {
33bd39a2 8592 error ("type qualifiers specified for friend class declaration");
91063b51 8593 type_quals = TYPE_UNQUALIFIED;
b7484fbe
MS
8594 }
8595 if (inlinep)
8596 {
2d01edd7 8597 error ("%<inline%> specified for friend class declaration");
b7484fbe
MS
8598 inlinep = 0;
8599 }
f2ae0c45 8600
218e0eb6 8601 if (!current_aggr)
4b054b80 8602 {
218e0eb6 8603 /* Don't allow friend declaration without a class-key. */
4b054b80 8604 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
218e0eb6 8605 pedwarn ("template parameters cannot be friends");
f2ae0c45 8606 else if (TREE_CODE (type) == TYPENAME_TYPE)
0cbd7506 8607 pedwarn ("friend declaration requires class-key, "
2d01edd7 8608 "i.e. %<friend class %T::%D%>",
218e0eb6 8609 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
4b054b80 8610 else
0cbd7506 8611 pedwarn ("friend declaration requires class-key, "
2d01edd7 8612 "i.e. %<friend %#T%>",
218e0eb6 8613 type);
4b054b80 8614 }
b7484fbe
MS
8615
8616 /* Only try to do this stuff if we didn't already give up. */
8617 if (type != integer_type_node)
8618 {
8619 /* A friendly class? */
8620 if (current_class_type)
19db77ce
KL
8621 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8622 /*complain=*/true);
b7484fbe 8623 else
2d01edd7 8624 error ("trying to make class %qT a friend of global scope",
0cbd7506 8625 type);
d363e7bf 8626
b7484fbe
MS
8627 type = void_type_node;
8628 }
8d08fdba 8629 }
e2537f2c 8630 else if (memfn_quals)
8d08fdba 8631 {
8d08fdba
MS
8632 if (ctype == NULL_TREE)
8633 {
41cbc04c 8634 if (TREE_CODE (type) != METHOD_TYPE)
0cbd7506 8635 error ("invalid qualifiers on non-member function type");
41cbc04c 8636 else
0cbd7506 8637 ctype = TYPE_METHOD_BASETYPE (type);
41cbc04c
NS
8638 }
8639 if (ctype)
e2537f2c 8640 type = build_memfn_type (type, ctype, memfn_quals);
8d08fdba
MS
8641 }
8642
8643 return type;
8644 }
058b15c1 8645 else if (unqualified_id == NULL_TREE && decl_context != PARM
db5ae43f 8646 && decl_context != CATCHPARM
8d08fdba
MS
8647 && TREE_CODE (type) != UNION_TYPE
8648 && ! bitfield)
8649 {
2d01edd7 8650 error ("abstract declarator %qT used as declaration", type);
22ab714d 8651 return error_mark_node;
8d08fdba
MS
8652 }
8653
62e19030
MM
8654 /* Only functions may be declared using an operator-function-id. */
8655 if (unqualified_id
8656 && IDENTIFIER_OPNAME_P (unqualified_id)
8657 && TREE_CODE (type) != FUNCTION_TYPE
8658 && TREE_CODE (type) != METHOD_TYPE)
8d08fdba 8659 {
62e19030
MM
8660 error ("declaration of %qD as non-function", unqualified_id);
8661 return error_mark_node;
8d08fdba
MS
8662 }
8663
62e19030
MM
8664 /* We don't check parameter types here because we can emit a better
8665 error message later. */
8666 if (decl_context != PARM)
650fcd07
LM
8667 {
8668 type = check_var_type (unqualified_id, type);
8669 if (type == error_mark_node)
8670 return error_mark_node;
8671 }
62e19030 8672
8d08fdba
MS
8673 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
8674 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
8675
14ae7e7d
JM
8676 if (decl_context == PARM || decl_context == CATCHPARM)
8677 {
8678 if (ctype || in_namespace)
2d01edd7 8679 error ("cannot use %<::%> in parameter declaration");
14ae7e7d
JM
8680
8681 /* A parameter declared as an array of T is really a pointer to T.
8682 One declared as a function is really a pointer to a function.
8683 One declared as a member is really a pointer to member. */
8684
8685 if (TREE_CODE (type) == ARRAY_TYPE)
8686 {
8687 /* Transfer const-ness of array into that of type pointed to. */
8688 type = build_pointer_type (TREE_TYPE (type));
91063b51 8689 type_quals = TYPE_UNQUALIFIED;
14ae7e7d
JM
8690 }
8691 else if (TREE_CODE (type) == FUNCTION_TYPE)
8692 type = build_pointer_type (type);
14ae7e7d 8693 }
68642fb6 8694
8d08fdba 8695 {
926ce8bd 8696 tree decl;
8d08fdba
MS
8697
8698 if (decl_context == PARM)
8699 {
058b15c1 8700 decl = cp_build_parm_decl (unqualified_id, type);
8d08fdba 8701
3db45ab5 8702 bad_specifiers (decl, "parameter", virtualp,
e2537f2c 8703 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba 8704 inlinep, friendp, raises != NULL_TREE);
8d08fdba
MS
8705 }
8706 else if (decl_context == FIELD)
8707 {
01bf0f3e
JM
8708 /* The C99 flexible array extension. */
8709 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8710 && TYPE_DOMAIN (type) == NULL_TREE)
8711 {
8712 tree itype = compute_array_index_type (dname, integer_zero_node);
8713 type = build_cplus_array_type (TREE_TYPE (type), itype);
8714 }
8715
8d08fdba
MS
8716 if (type == error_mark_node)
8717 {
8718 /* Happens when declaring arrays of sizes which
8719 are error_mark_node, for example. */
8720 decl = NULL_TREE;
8721 }
997a088c 8722 else if (in_namespace && !friendp)
05008fb9
MM
8723 {
8724 /* Something like struct S { int N::j; }; */
2d01edd7 8725 error ("invalid use of %<::%>");
9a171ca4 8726 return error_mark_node;
05008fb9 8727 }
8d08fdba
MS
8728 else if (TREE_CODE (type) == FUNCTION_TYPE)
8729 {
8730 int publicp = 0;
e1467ff2 8731 tree function_context;
8d08fdba
MS
8732
8733 if (friendp == 0)
8734 {
8735 if (ctype == NULL_TREE)
8736 ctype = current_class_type;
8737
8738 if (ctype == NULL_TREE)
8739 {
2d01edd7 8740 error ("can't make %qD into a method -- not in a class",
058b15c1 8741 unqualified_id);
13dbe691 8742 return error_mark_node;
8d08fdba
MS
8743 }
8744
8745 /* ``A union may [ ... ] not [ have ] virtual functions.''
8746 ARM 9.5 */
8747 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
8748 {
2d01edd7 8749 error ("function %qD declared virtual inside a union",
058b15c1 8750 unqualified_id);
13dbe691 8751 return error_mark_node;
8d08fdba
MS
8752 }
8753
058b15c1 8754 if (NEW_DELETE_OPNAME_P (unqualified_id))
8d08fdba
MS
8755 {
8756 if (virtualp)
8757 {
2d01edd7 8758 error ("%qD cannot be declared virtual, since it "
0cbd7506 8759 "is always static",
058b15c1 8760 unqualified_id);
8d08fdba
MS
8761 virtualp = 0;
8762 }
8763 }
8764 else if (staticp < 2)
e2537f2c 8765 type = build_memfn_type (type, ctype, memfn_quals);
8d08fdba
MS
8766 }
8767
88e95ee3 8768 /* Check that the name used for a destructor makes sense. */
6d2989e1 8769 if (sfk == sfk_destructor)
88e95ee3 8770 {
6d2989e1
VR
8771 if (!ctype)
8772 {
8773 gcc_assert (friendp);
8774 error ("expected qualified name in friend declaration "
8775 "for destructor %qD",
8776 id_declarator->u.id.unqualified_name);
8777 return error_mark_node;
8778 }
8779
8780 if (!same_type_p (TREE_OPERAND
8781 (id_declarator->u.id.unqualified_name, 0),
8782 ctype))
8783 {
8784 error ("declaration of %qD as member of %qT",
8785 id_declarator->u.id.unqualified_name, ctype);
8786 return error_mark_node;
8787 }
88e95ee3
MM
8788 }
8789
8d08fdba 8790 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
68642fb6 8791 function_context = (ctype != NULL_TREE) ?
4f1c5b7d 8792 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
e1467ff2
MM
8793 publicp = (! friendp || ! staticp)
8794 && function_context == NULL_TREE;
68642fb6 8795 decl = grokfndecl (ctype, type,
058b15c1
MM
8796 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8797 ? unqualified_id : dname,
4546865e 8798 parms,
058b15c1 8799 unqualified_id,
e2537f2c 8800 virtualp, flags, memfn_quals, raises,
386b8a85 8801 friendp ? -1 : 0, friendp, publicp, inlinep,
27d6592c 8802 sfk,
037cc9c5 8803 funcdef_flag, template_count, in_namespace, attrlist);
20496fa2 8804 if (decl == NULL_TREE)
ba5719d9 8805 return error_mark_node;
6125f3be
DE
8806#if 0
8807 /* This clobbers the attrs stored in `decl' from `attrlist'. */
91d231cb
JM
8808 /* The decl and setting of decl_attr is also turned off. */
8809 decl = build_decl_attribute_variant (decl, decl_attr);
6125f3be 8810#endif
f0e01782 8811
cc804e51
MM
8812 /* [class.conv.ctor]
8813
8814 A constructor declared without the function-specifier
8815 explicit that can be called with a single parameter
8816 specifies a conversion from the type of its first
8817 parameter to the type of its class. Such a constructor
8818 is called a converting constructor. */
db5ae43f
MS
8819 if (explicitp == 2)
8820 DECL_NONCONVERTING_P (decl) = 1;
cc804e51
MM
8821 else if (DECL_CONSTRUCTOR_P (decl))
8822 {
8823 /* The constructor can be called with exactly one
8824 parameter if there is at least one parameter, and
8825 any subsequent parameters have default arguments.
e0fff4b3
JM
8826 Ignore any compiler-added parms. */
8827 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
cc804e51
MM
8828
8829 if (arg_types == void_list_node
68642fb6
UD
8830 || (arg_types
8831 && TREE_CHAIN (arg_types)
cc804e51
MM
8832 && TREE_CHAIN (arg_types) != void_list_node
8833 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
8834 DECL_NONCONVERTING_P (decl) = 1;
8835 }
8d08fdba
MS
8836 }
8837 else if (TREE_CODE (type) == METHOD_TYPE)
8838 {
faae18ab
MS
8839 /* We only get here for friend declarations of
8840 members of other classes. */
8d08fdba
MS
8841 /* All method decls are public, so tell grokfndecl to set
8842 TREE_PUBLIC, also. */
866eb556 8843 decl = grokfndecl (ctype, type,
058b15c1
MM
8844 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8845 ? unqualified_id : dname,
4546865e 8846 parms,
058b15c1 8847 unqualified_id,
e2537f2c 8848 virtualp, flags, memfn_quals, raises,
27d6592c 8849 friendp ? -1 : 0, friendp, 1, 0, sfk,
c8094d83
MS
8850 funcdef_flag, template_count, in_namespace,
8851 attrlist);
f0e01782 8852 if (decl == NULL_TREE)
13dbe691 8853 return error_mark_node;
8d08fdba 8854 }
a9f46cbb 8855 else if (!staticp && !dependent_type_p (type)
d0f062fb 8856 && !COMPLETE_TYPE_P (complete_type (type))
8d08fdba
MS
8857 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
8858 {
058b15c1 8859 if (unqualified_id)
2d01edd7 8860 error ("field %qD has incomplete type", unqualified_id);
b7484fbe 8861 else
2d01edd7 8862 error ("name %qT has incomplete type", type);
8d08fdba
MS
8863
8864 /* If we're instantiating a template, tell them which
8865 instantiation made the field's type be incomplete. */
8866 if (current_class_type
8867 && TYPE_NAME (current_class_type)
d2e5ee5c 8868 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
62d1db17
MM
8869 && declspecs->type
8870 && declspecs->type == type)
2d01edd7 8871 error (" in instantiation of template %qT",
0cbd7506 8872 current_class_type);
db5ae43f 8873
623c65f1 8874 return error_mark_node;
8d08fdba
MS
8875 }
8876 else
8877 {
8878 if (friendp)
8879 {
2d01edd7 8880 error ("%qE is neither function nor member function; "
0cbd7506 8881 "cannot be declared friend", unqualified_id);
8d08fdba
MS
8882 friendp = 0;
8883 }
8884 decl = NULL_TREE;
8885 }
8886
8887 if (friendp)
8888 {
8889 /* Friends are treated specially. */
8890 if (ctype == current_class_type)
59e7c84c 8891 ; /* We already issued a pedwarn. */
0cbd7506 8892 else if (decl && DECL_NAME (decl))
8db1028e
NS
8893 {
8894 if (template_class_depth (current_class_type) == 0)
8895 {
8896 decl = check_explicit_specialization
058b15c1 8897 (unqualified_id, decl, template_count,
357d956e 8898 2 * funcdef_flag + 4);
8db1028e
NS
8899 if (decl == error_mark_node)
8900 return error_mark_node;
8901 }
caf93cb0 8902
058b15c1 8903 decl = do_friend (ctype, unqualified_id, decl,
3db45ab5 8904 *attrlist, flags,
e2537f2c 8905 funcdef_flag);
8db1028e
NS
8906 return decl;
8907 }
8908 else
13dbe691 8909 return error_mark_node;
8d08fdba
MS
8910 }
8911
f4f206f4 8912 /* Structure field. It may not be a function, except for C++. */
8d08fdba
MS
8913
8914 if (decl == NULL_TREE)
8915 {
8d08fdba
MS
8916 if (initialized)
8917 {
3ac3d9ea
MM
8918 if (!staticp)
8919 {
8920 /* An attempt is being made to initialize a non-static
8921 member. But, from [class.mem]:
68642fb6 8922
3ac3d9ea
MM
8923 4 A member-declarator can contain a
8924 constant-initializer only if it declares a static
8925 member (_class.static_) of integral or enumeration
68642fb6 8926 type, see _class.static.data_.
3ac3d9ea
MM
8927
8928 This used to be relatively common practice, but
8929 the rest of the compiler does not correctly
8930 handle the initialization unless the member is
8931 static so we make it static below. */
2d01edd7 8932 pedwarn ("ISO C++ forbids initialization of member %qD",
058b15c1 8933 unqualified_id);
2d01edd7 8934 pedwarn ("making %qD static", unqualified_id);
3ac3d9ea
MM
8935 staticp = 1;
8936 }
8937
6ba89f8e
MM
8938 if (uses_template_parms (type))
8939 /* We'll check at instantiation time. */
8940 ;
058b15c1 8941 else if (check_static_variable_definition (unqualified_id,
6ba89f8e
MM
8942 type))
8943 /* If we just return the declaration, crashes
8944 will sometimes occur. We therefore return
72a93143
JM
8945 void_type_node, as if this was a friend
8946 declaration, to cause callers to completely
8947 ignore this declaration. */
13dbe691 8948 return error_mark_node;
8d08fdba
MS
8949 }
8950
3ac3d9ea 8951 if (staticp)
8d08fdba 8952 {
f18a14bc
MM
8953 /* C++ allows static class members. All other work
8954 for this is done by grokfield. */
058b15c1 8955 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
4684cd27
MM
8956 set_linkage_for_static_data_member (decl);
8957 /* Even if there is an in-class initialization, DECL
8958 is considered undefined until an out-of-class
8959 definition is provided. */
8960 DECL_EXTERNAL (decl) = 1;
31a79236
JJ
8961
8962 if (thread_p)
8893239d 8963 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8d08fdba
MS
8964 }
8965 else
8966 {
058b15c1 8967 decl = build_decl (FIELD_DECL, unqualified_id, type);
2bf105ab 8968 DECL_NONADDRESSABLE_P (decl) = bitfield;
ab53bae2
AO
8969 if (bitfield && !unqualified_id)
8970 TREE_NO_WARNING (decl) = 1;
8971
1ff3c076 8972 if (storage_class == sc_mutable)
8d08fdba
MS
8973 {
8974 DECL_MUTABLE_P (decl) = 1;
1ff3c076 8975 storage_class = sc_none;
8d08fdba
MS
8976 }
8977 }
8978
3db45ab5 8979 bad_specifiers (decl, "field", virtualp,
e2537f2c 8980 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba
MS
8981 inlinep, friendp, raises != NULL_TREE);
8982 }
8983 }
fd9aef9d
NS
8984 else if (TREE_CODE (type) == FUNCTION_TYPE
8985 || TREE_CODE (type) == METHOD_TYPE)
8d08fdba 8986 {
386b8a85 8987 tree original_name;
8d08fdba
MS
8988 int publicp = 0;
8989
058b15c1 8990 if (!unqualified_id)
13dbe691 8991 return error_mark_node;
8d08fdba 8992
058b15c1 8993 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
386b8a85
JM
8994 original_name = dname;
8995 else
058b15c1 8996 original_name = unqualified_id;
386b8a85 8997
1ff3c076 8998 if (storage_class == sc_auto)
2d01edd7 8999 error ("storage class %<auto%> invalid for function %qs", name);
1ff3c076 9000 else if (storage_class == sc_register)
2d01edd7 9001 error ("storage class %<register%> invalid for function %qs", name);
1ff3c076 9002 else if (thread_p)
2d01edd7 9003 error ("storage class %<__thread%> invalid for function %qs", name);
8d08fdba
MS
9004
9005 /* Function declaration not at top level.
9006 Storage classes other than `extern' are not allowed
9007 and `extern' makes no difference. */
a9aedbc2 9008 if (! toplevel_bindings_p ()
1ff3c076 9009 && (storage_class == sc_static
62d1db17 9010 || declspecs->specs[(int)ds_inline])
8d08fdba 9011 && pedantic)
8926095f 9012 {
1ff3c076 9013 if (storage_class == sc_static)
2d01edd7 9014 pedwarn ("%<static%> specified invalid for function %qs "
0cbd7506 9015 "declared out of global scope", name);
8926095f 9016 else
2d01edd7 9017 pedwarn ("%<inline%> specifier invalid for function %qs "
0cbd7506 9018 "declared out of global scope", name);
8926095f 9019 }
68642fb6 9020
8d08fdba
MS
9021 if (ctype == NULL_TREE)
9022 {
9023 if (virtualp)
9024 {
2d01edd7 9025 error ("virtual non-class function %qs", name);
8d08fdba
MS
9026 virtualp = 0;
9027 }
8d08fdba 9028 }
4546865e
MM
9029 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9030 && !NEW_DELETE_OPNAME_P (original_name))
caf93cb0 9031 type = build_method_type_directly (ctype,
43dc123f
MM
9032 TREE_TYPE (type),
9033 TYPE_ARG_TYPES (type));
8d08fdba 9034
eb66be0e 9035 /* Record presence of `static'. */
faae18ab 9036 publicp = (ctype != NULL_TREE
1ff3c076
MM
9037 || storage_class == sc_extern
9038 || storage_class != sc_static);
8d08fdba 9039
058b15c1 9040 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
e2537f2c 9041 virtualp, flags, memfn_quals, raises,
75650646 9042 1, friendp,
27d6592c 9043 publicp, inlinep, sfk, funcdef_flag,
037cc9c5 9044 template_count, in_namespace, attrlist);
f0e01782 9045 if (decl == NULL_TREE)
13dbe691 9046 return error_mark_node;
8d08fdba 9047
8d08fdba
MS
9048 if (staticp == 1)
9049 {
0e339752 9050 int invalid_static = 0;
8d08fdba
MS
9051
9052 /* Don't allow a static member function in a class, and forbid
9053 declaring main to be static. */
9054 if (TREE_CODE (type) == METHOD_TYPE)
9055 {
2d01edd7 9056 pedwarn ("cannot declare member function %qD to have "
0cbd7506 9057 "static linkage", decl);
0e339752 9058 invalid_static = 1;
8d08fdba 9059 }
8d08fdba
MS
9060 else if (current_function_decl)
9061 {
9062 /* FIXME need arm citation */
8251199e 9063 error ("cannot declare static function inside another function");
0e339752 9064 invalid_static = 1;
8d08fdba
MS
9065 }
9066
0e339752 9067 if (invalid_static)
8d08fdba
MS
9068 {
9069 staticp = 0;
1ff3c076 9070 storage_class = sc_none;
8d08fdba
MS
9071 }
9072 }
8d08fdba
MS
9073 }
9074 else
9075 {
9076 /* It's a variable. */
9077
9078 /* An uninitialized decl with `extern' is a reference. */
caf93cb0 9079 decl = grokvardecl (type, unqualified_id,
62d1db17 9080 declspecs,
68642fb6
UD
9081 initialized,
9082 (type_quals & TYPE_QUAL_CONST) != 0,
9e259dd1 9083 ctype ? ctype : in_namespace);
3db45ab5 9084 bad_specifiers (decl, "variable", virtualp,
e2537f2c 9085 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba
MS
9086 inlinep, friendp, raises != NULL_TREE);
9087
9088 if (ctype)
9089 {
f0e01782 9090 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
9091 if (staticp == 1)
9092 {
0cbd7506
MS
9093 pedwarn ("%<static%> may not be used when defining "
9094 "(as opposed to declaring) a static data member");
9095 staticp = 0;
1ff3c076 9096 storage_class = sc_none;
8d08fdba 9097 }
1ff3c076 9098 if (storage_class == sc_register && TREE_STATIC (decl))
b7484fbe 9099 {
2d01edd7 9100 error ("static member %qD declared %<register%>", decl);
1ff3c076 9101 storage_class = sc_none;
b7484fbe 9102 }
1ff3c076 9103 if (storage_class == sc_extern && pedantic)
8d08fdba 9104 {
0cbd7506
MS
9105 pedwarn ("cannot explicitly declare member %q#D to have "
9106 "extern linkage",
9107 decl);
1ff3c076 9108 storage_class = sc_none;
8d08fdba
MS
9109 }
9110 }
9111 }
9112
8d08fdba
MS
9113 /* Record `register' declaration for warnings on &
9114 and in case doing stupid register allocation. */
9115
1ff3c076 9116 if (storage_class == sc_register)
8d08fdba 9117 DECL_REGISTER (decl) = 1;
1ff3c076 9118 else if (storage_class == sc_extern)
8926095f 9119 DECL_THIS_EXTERN (decl) = 1;
1ff3c076 9120 else if (storage_class == sc_static)
faae18ab
MS
9121 DECL_THIS_STATIC (decl) = 1;
9122
15896502
MM
9123 /* Record constancy and volatility on the DECL itself . There's
9124 no need to do this when processing a template; we'll do this
9125 for the instantiated declaration based on the type of DECL. */
adecb3f4 9126 if (!processing_template_decl)
9804209d 9127 cp_apply_type_quals_to_decl (type_quals, decl);
8d08fdba 9128
1891dec4
DM
9129 if (set_no_warning)
9130 TREE_NO_WARNING (decl) = 1;
9131
8d08fdba
MS
9132 return decl;
9133 }
9134}
9135\f
f181d4ae
MM
9136/* Subroutine of start_function. Ensure that each of the parameter
9137 types (as listed in PARMS) is complete, as is required for a
9138 function definition. */
e92cc029 9139
8d08fdba 9140static void
11f6b451 9141require_complete_types_for_parms (tree parms)
8d08fdba 9142{
07c88314 9143 for (; parms; parms = TREE_CHAIN (parms))
8d08fdba 9144 {
c9387915
GB
9145 if (dependent_type_p (TREE_TYPE (parms)))
9146 continue;
dff1b563
VR
9147 if (!VOID_TYPE_P (TREE_TYPE (parms))
9148 && complete_type_or_else (TREE_TYPE (parms), parms))
753225c1 9149 {
7523dc31 9150 relayout_decl (parms);
753225c1
JM
9151 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9152 }
dff1b563
VR
9153 else
9154 /* grokparms or complete_type_or_else will have already issued
9155 an error. */
9156 TREE_TYPE (parms) = error_mark_node;
8d08fdba
MS
9157 }
9158}
9159
838dfd8a 9160/* Returns nonzero if T is a local variable. */
297e73d8 9161
46e8c075 9162int
ac7d7749 9163local_variable_p (const_tree t)
297e73d8 9164{
68642fb6 9165 if ((TREE_CODE (t) == VAR_DECL
297e73d8
MM
9166 /* A VAR_DECL with a context that is a _TYPE is a static data
9167 member. */
9168 && !TYPE_P (CP_DECL_CONTEXT (t))
9169 /* Any other non-local variable must be at namespace scope. */
46e8c075 9170 && !DECL_NAMESPACE_SCOPE_P (t))
297e73d8 9171 || (TREE_CODE (t) == PARM_DECL))
46e8c075 9172 return 1;
297e73d8 9173
46e8c075
MM
9174 return 0;
9175}
9176
46e8c075
MM
9177/* Like local_variable_p, but suitable for use as a tree-walking
9178 function. */
9179
9180static tree
44de5aeb
RK
9181local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9182 void *data ATTRIBUTE_UNUSED)
46e8c075 9183{
44de5aeb
RK
9184 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
9185 return *tp;
9186 else if (TYPE_P (*tp))
9187 *walk_subtrees = 0;
9188
9189 return NULL_TREE;
297e73d8
MM
9190}
9191
44de5aeb 9192
297e73d8 9193/* Check that ARG, which is a default-argument expression for a
0e339752 9194 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
297e73d8
MM
9195 something goes wrong. DECL may also be a _TYPE node, rather than a
9196 DECL, if there is no DECL available. */
9197
9198tree
11f6b451 9199check_default_argument (tree decl, tree arg)
297e73d8
MM
9200{
9201 tree var;
9202 tree decl_type;
9203
9204 if (TREE_CODE (arg) == DEFAULT_ARG)
9205 /* We get a DEFAULT_ARG when looking at an in-class declaration
9206 with a default argument. Ignore the argument for now; we'll
9207 deal with it after the class is complete. */
9208 return arg;
9209
297e73d8
MM
9210 if (TYPE_P (decl))
9211 {
9212 decl_type = decl;
9213 decl = NULL_TREE;
9214 }
9215 else
9216 decl_type = TREE_TYPE (decl);
9217
68642fb6 9218 if (arg == error_mark_node
297e73d8
MM
9219 || decl == error_mark_node
9220 || TREE_TYPE (arg) == error_mark_node
9221 || decl_type == error_mark_node)
9222 /* Something already went wrong. There's no need to check
9223 further. */
9224 return error_mark_node;
9225
9226 /* [dcl.fct.default]
68642fb6 9227
297e73d8
MM
9228 A default argument expression is implicitly converted to the
9229 parameter type. */
9230 if (!TREE_TYPE (arg)
30f86ec3 9231 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
297e73d8
MM
9232 {
9233 if (decl)
2d01edd7 9234 error ("default argument for %q#D has type %qT",
0cbd7506 9235 decl, TREE_TYPE (arg));
297e73d8 9236 else
2d01edd7 9237 error ("default argument for parameter of type %qT has type %qT",
0cbd7506 9238 decl_type, TREE_TYPE (arg));
297e73d8
MM
9239
9240 return error_mark_node;
9241 }
9242
9243 /* [dcl.fct.default]
9244
9245 Local variables shall not be used in default argument
68642fb6 9246 expressions.
297e73d8
MM
9247
9248 The keyword `this' shall not be used in a default argument of a
9249 member function. */
14588106 9250 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
297e73d8
MM
9251 if (var)
9252 {
2d01edd7 9253 error ("default argument %qE uses local variable %qD", arg, var);
297e73d8
MM
9254 return error_mark_node;
9255 }
9256
9257 /* All is well. */
9258 return arg;
9259}
9260
8d08fdba
MS
9261/* Decode the list of parameter types for a function type.
9262 Given the list of things declared inside the parens,
9263 return a list of types.
9264
058b15c1
MM
9265 If this parameter does not end with an ellipsis, we append
9266 void_list_node.
5cce22b6 9267
4546865e 9268 *PARMS is set to the chain of PARM_DECLs created. */
8d08fdba
MS
9269
9270static tree
62d1db17 9271grokparms (cp_parameter_declarator *first_parm, tree *parms)
8d08fdba
MS
9272{
9273 tree result = NULL_TREE;
9274 tree decls = NULL_TREE;
058b15c1 9275 int ellipsis = !first_parm || first_parm->ellipsis_p;
62d1db17 9276 cp_parameter_declarator *parm;
5cce22b6 9277 int any_error = 0;
0d83bf5a 9278 struct pointer_set_t *unique_decls = pointer_set_create ();
8d08fdba 9279
058b15c1 9280 for (parm = first_parm; parm != NULL; parm = parm->next)
8d08fdba 9281 {
0657c69c 9282 tree type = NULL_TREE;
058b15c1 9283 tree init = parm->default_argument;
62d1db17 9284 tree attrs;
058b15c1 9285 tree decl;
8d08fdba 9286
058b15c1 9287 if (parm == no_parameters)
0cbd7506 9288 break;
8d08fdba 9289
62d1db17
MM
9290 attrs = parm->decl_specifiers.attributes;
9291 parm->decl_specifiers.attributes = NULL_TREE;
9292 decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
98884b26 9293 PARM, init != NULL_TREE, &attrs);
5cce22b6 9294 if (! decl || TREE_TYPE (decl) == error_mark_node)
0cbd7506 9295 continue;
d363e7bf 9296
98884b26
JM
9297 if (attrs)
9298 cplus_decl_attributes (&decl, attrs, 0);
9299
5cce22b6
NS
9300 type = TREE_TYPE (decl);
9301 if (VOID_TYPE_P (type))
0cbd7506
MS
9302 {
9303 if (same_type_p (type, void_type_node)
e7e53192 9304 && DECL_SELF_REFERENCE_P (type)
0cbd7506
MS
9305 && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
9306 /* this is a parmlist of `(void)', which is ok. */
9307 break;
9308 cxx_incomplete_type_error (decl, type);
0657c69c
MM
9309 /* It's not a good idea to actually create parameters of
9310 type `void'; other parts of the compiler assume that a
9311 void type terminates the parameter list. */
04f3dc2b 9312 type = error_mark_node;
0657c69c 9313 TREE_TYPE (decl) = error_mark_node;
0cbd7506 9314 }
8d08fdba 9315
d363e7bf 9316 if (type != error_mark_node)
04f3dc2b
MM
9317 {
9318 /* Top-level qualifiers on the parameters are
9319 ignored for function types. */
79a1a736 9320 type = cp_build_qualified_type (type, 0);
04f3dc2b
MM
9321 if (TREE_CODE (type) == METHOD_TYPE)
9322 {
2d01edd7 9323 error ("parameter %qD invalidly declared method type", decl);
04f3dc2b
MM
9324 type = build_pointer_type (type);
9325 TREE_TYPE (decl) = type;
9326 }
04f3dc2b 9327 else if (abstract_virtuals_error (decl, type))
a1c65f9f 9328 any_error = 1; /* Seems like a good idea. */
04f3dc2b
MM
9329 else if (POINTER_TYPE_P (type))
9330 {
9331 /* [dcl.fct]/6, parameter types cannot contain pointers
9332 (references) to arrays of unknown bound. */
98979fe0
NS
9333 tree t = TREE_TYPE (type);
9334 int ptr = TYPE_PTR_P (type);
9335
0cbd7506
MS
9336 while (1)
9337 {
9338 if (TYPE_PTR_P (t))
9339 ptr = 1;
9340 else if (TREE_CODE (t) != ARRAY_TYPE)
9341 break;
9342 else if (!TYPE_DOMAIN (t))
9343 break;
9344 t = TREE_TYPE (t);
9345 }
04f3dc2b 9346 if (TREE_CODE (t) == ARRAY_TYPE)
2d01edd7 9347 error ("parameter %qD includes %s to array of unknown "
0cbd7506
MS
9348 "bound %qT",
9349 decl, ptr ? "pointer" : "reference", t);
04f3dc2b
MM
9350 }
9351
c3ee4651 9352 if (any_error)
04f3dc2b 9353 init = NULL_TREE;
c3ee4651
NS
9354 else if (init && !processing_template_decl)
9355 init = check_default_argument (decl, init);
04f3dc2b 9356 }
8d08fdba 9357
5d80a306
DG
9358 if (TREE_CODE (decl) == PARM_DECL
9359 && FUNCTION_PARAMETER_PACK_P (decl)
9360 && parm->next)
9361 error ("parameter packs must be at the end of the parameter list");
9362
0d83bf5a
SB
9363 if (DECL_NAME (decl))
9364 {
9365 if (pointer_set_contains (unique_decls, DECL_NAME (decl)))
631ee856 9366 error ("multiple parameters named %qE", DECL_NAME (decl));
0d83bf5a
SB
9367 else
9368 pointer_set_insert (unique_decls, DECL_NAME (decl));
9369 }
9370
5cce22b6
NS
9371 TREE_CHAIN (decl) = decls;
9372 decls = decl;
0657c69c 9373 result = tree_cons (init, type, result);
8d08fdba 9374 }
5cce22b6
NS
9375 decls = nreverse (decls);
9376 result = nreverse (result);
9377 if (!ellipsis)
9378 result = chainon (result, void_list_node);
4546865e 9379 *parms = decls;
8d08fdba 9380
0d83bf5a 9381 pointer_set_destroy (unique_decls);
8d08fdba
MS
9382 return result;
9383}
42976354 9384
8d08fdba 9385\f
271e6f02
NS
9386/* D is a constructor or overloaded `operator='.
9387
9388 Let T be the class in which D is declared. Then, this function
9389 returns:
9390
9391 -1 if D's is an ill-formed constructor or copy assignment operator
9392 whose first parameter is of type `T'.
9393 0 if D is not a copy constructor or copy assignment
9394 operator.
9395 1 if D is a copy constructor or copy assignment operator whose
9396 first parameter is a reference to const qualified T.
9397 2 if D is a copy constructor or copy assignment operator whose
9398 first parameter is a reference to non-const qualified T.
9399
9400 This function can be used as a predicate. Positive values indicate
838dfd8a 9401 a copy constructor and nonzero values indicate a copy assignment
4f1c5b7d
MM
9402 operator. */
9403
c11b6f21 9404int
58f9752a 9405copy_fn_p (const_tree d)
c11b6f21 9406{
271e6f02
NS
9407 tree args;
9408 tree arg_type;
9409 int result = 1;
caf93cb0 9410
398cd199 9411 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
4f1c5b7d 9412
7137605e
MM
9413 if (TREE_CODE (d) == TEMPLATE_DECL
9414 || (DECL_TEMPLATE_INFO (d)
9415 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
271e6f02
NS
9416 /* Instantiations of template member functions are never copy
9417 functions. Note that member functions of templated classes are
9418 represented as template functions internally, and we must
9419 accept those as copy functions. */
9420 return 0;
caf93cb0 9421
271e6f02
NS
9422 args = FUNCTION_FIRST_USER_PARMTYPE (d);
9423 if (!args)
4f1c5b7d
MM
9424 return 0;
9425
271e6f02 9426 arg_type = TREE_VALUE (args);
139a78c7
VR
9427 if (arg_type == error_mark_node)
9428 return 0;
271e6f02
NS
9429
9430 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
9431 {
9432 /* Pass by value copy assignment operator. */
9433 result = -1;
9434 }
9435 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8af2fec4 9436 && !TYPE_REF_IS_RVALUE (arg_type)
271e6f02
NS
9437 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
9438 {
9439 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
9440 result = 2;
9441 }
9442 else
9443 return 0;
caf93cb0 9444
271e6f02
NS
9445 args = TREE_CHAIN (args);
9446
9447 if (args && args != void_list_node && !TREE_PURPOSE (args))
9448 /* There are more non-optional args. */
9449 return 0;
9450
9451 return result;
9452}
9453
8af2fec4
RY
9454/* D is a constructor or overloaded `operator='.
9455
9456 Let T be the class in which D is declared. Then, this function
9457 returns true when D is a move constructor or move assignment
9458 operator, false otherwise. */
9459
9460bool
58f9752a 9461move_fn_p (const_tree d)
8af2fec4
RY
9462{
9463 tree args;
9464 tree arg_type;
9465 bool result = false;
9466
9467 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9468
c1ae8be5
SM
9469 if (cxx_dialect == cxx98)
9470 /* There are no move constructors if we are in C++98 mode. */
8af2fec4
RY
9471 return false;
9472
9473 if (TREE_CODE (d) == TEMPLATE_DECL
9474 || (DECL_TEMPLATE_INFO (d)
9475 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9476 /* Instantiations of template member functions are never copy
9477 functions. Note that member functions of templated classes are
9478 represented as template functions internally, and we must
9479 accept those as copy functions. */
9480 return 0;
9481
9482 args = FUNCTION_FIRST_USER_PARMTYPE (d);
9483 if (!args)
9484 return 0;
9485
9486 arg_type = TREE_VALUE (args);
9487 if (arg_type == error_mark_node)
9488 return 0;
9489
9490 if (TREE_CODE (arg_type) == REFERENCE_TYPE
9491 && TYPE_REF_IS_RVALUE (arg_type)
9492 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
9493 DECL_CONTEXT (d)))
9494 result = true;
9495
9496 args = TREE_CHAIN (args);
9497
9498 if (args && args != void_list_node && !TREE_PURPOSE (args))
9499 /* There are more non-optional args. */
9500 return false;
9501
9502 return result;
9503}
9504
271e6f02
NS
9505/* Remember any special properties of member function DECL. */
9506
11f6b451 9507void grok_special_member_properties (tree decl)
271e6f02 9508{
7137605e
MM
9509 tree class_type;
9510
6d69fe27 9511 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
7137605e
MM
9512 return;
9513
9514 class_type = DECL_CONTEXT (decl);
9515 if (DECL_CONSTRUCTOR_P (decl))
271e6f02
NS
9516 {
9517 int ctor = copy_fn_p (decl);
caf93cb0 9518
7137605e
MM
9519 TYPE_HAS_CONSTRUCTOR (class_type) = 1;
9520
271e6f02
NS
9521 if (ctor > 0)
9522 {
9523 /* [class.copy]
caf93cb0 9524
0cbd7506
MS
9525 A non-template constructor for class X is a copy
9526 constructor if its first parameter is of type X&, const
9527 X&, volatile X& or const volatile X&, and either there
9528 are no other parameters or else all other parameters have
9529 default arguments. */
7137605e 9530 TYPE_HAS_INIT_REF (class_type) = 1;
271e6f02 9531 if (ctor > 1)
7137605e 9532 TYPE_HAS_CONST_INIT_REF (class_type) = 1;
271e6f02
NS
9533 }
9534 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
7137605e 9535 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
271e6f02
NS
9536 }
9537 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
9538 {
9539 /* [class.copy]
caf93cb0 9540
0cbd7506
MS
9541 A non-template assignment operator for class X is a copy
9542 assignment operator if its parameter is of type X, X&, const
9543 X&, volatile X& or const volatile X&. */
caf93cb0 9544
271e6f02 9545 int assop = copy_fn_p (decl);
caf93cb0 9546
271e6f02
NS
9547 if (assop)
9548 {
7137605e 9549 TYPE_HAS_ASSIGN_REF (class_type) = 1;
271e6f02 9550 if (assop != 1)
7137605e 9551 TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
271e6f02
NS
9552 }
9553 }
c11b6f21
MS
9554}
9555
271e6f02
NS
9556/* Check a constructor DECL has the correct form. Complains
9557 if the class has a constructor of the form X(X). */
e92cc029 9558
a0a33927 9559int
58f9752a 9560grok_ctor_properties (const_tree ctype, const_tree decl)
8d08fdba 9561{
271e6f02
NS
9562 int ctor_parm = copy_fn_p (decl);
9563
9564 if (ctor_parm < 0)
9565 {
9566 /* [class.copy]
caf93cb0 9567
0cbd7506
MS
9568 A declaration of a constructor for a class X is ill-formed if
9569 its first parameter is of type (optionally cv-qualified) X
9570 and either there are no other parameters or else all other
9571 parameters have default arguments.
9572
9573 We *don't* complain about member template instantiations that
9574 have this form, though; they can occur as we try to decide
9575 what constructor to use during overload resolution. Since
9576 overload resolution will never prefer such a constructor to
9577 the non-template copy constructor (which is either explicitly
9578 or implicitly defined), there's no need to worry about their
9579 existence. Theoretically, they should never even be
9580 instantiated, but that's hard to forestall. */
2d01edd7 9581 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
0b41abe6 9582 ctype, ctype);
0b41abe6 9583 return 0;
8d08fdba 9584 }
caf93cb0 9585
a0a33927 9586 return 1;
8d08fdba
MS
9587}
9588
596ea4e5 9589/* An operator with this code is unary, but can also be binary. */
e92cc029 9590
a28e3c7f 9591static int
11f6b451 9592ambi_op_p (enum tree_code code)
8d08fdba 9593{
596ea4e5
AS
9594 return (code == INDIRECT_REF
9595 || code == ADDR_EXPR
392e3d51 9596 || code == UNARY_PLUS_EXPR
596ea4e5
AS
9597 || code == NEGATE_EXPR
9598 || code == PREINCREMENT_EXPR
9599 || code == PREDECREMENT_EXPR);
8d08fdba
MS
9600}
9601
9602/* An operator with this name can only be unary. */
e92cc029 9603
a28e3c7f 9604static int
11f6b451 9605unary_op_p (enum tree_code code)
8d08fdba 9606{
596ea4e5
AS
9607 return (code == TRUTH_NOT_EXPR
9608 || code == BIT_NOT_EXPR
9609 || code == COMPONENT_REF
9610 || code == TYPE_EXPR);
8d08fdba
MS
9611}
9612
f2a79152 9613/* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
4b0d3cbe 9614 errors are issued for invalid declarations. */
e92cc029 9615
398cd199 9616bool
7e45bd18 9617grok_op_properties (tree decl, bool complain)
8d08fdba
MS
9618{
9619 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
596ea4e5 9620 tree argtype;
8d08fdba
MS
9621 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
9622 tree name = DECL_NAME (decl);
596ea4e5
AS
9623 enum tree_code operator_code;
9624 int arity;
64844139 9625 bool ellipsis_p;
7e45bd18 9626 tree class_type;
596ea4e5 9627
64844139 9628 /* Count the number of arguments and check for ellipsis. */
596ea4e5
AS
9629 for (argtype = argtypes, arity = 0;
9630 argtype && argtype != void_list_node;
9631 argtype = TREE_CHAIN (argtype))
9632 ++arity;
64844139 9633 ellipsis_p = !argtype;
8d08fdba 9634
7e45bd18
MM
9635 class_type = DECL_CONTEXT (decl);
9636 if (class_type && !CLASS_TYPE_P (class_type))
9637 class_type = NULL_TREE;
8d08fdba 9638
596ea4e5
AS
9639 if (DECL_CONV_FN_P (decl))
9640 operator_code = TYPE_EXPR;
9641 else
9642 do
9643 {
0c918ce5
MM
9644#define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
9645 if (ansi_opname (CODE) == name) \
9646 { \
75ac8dec 9647 operator_code = (CODE); \
0c918ce5
MM
9648 break; \
9649 } \
9650 else if (ansi_assopname (CODE) == name) \
9651 { \
75ac8dec 9652 operator_code = (CODE); \
0c918ce5
MM
9653 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
9654 break; \
596ea4e5
AS
9655 }
9656
9657#include "operators.def"
9658#undef DEF_OPERATOR
9659
8dc2b103 9660 gcc_unreachable ();
596ea4e5
AS
9661 }
9662 while (0);
50bc768d 9663 gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
596ea4e5
AS
9664 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9665
7e45bd18
MM
9666 if (class_type)
9667 switch (operator_code)
9668 {
9669 case NEW_EXPR:
9670 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
9671 break;
5362b086 9672
7e45bd18
MM
9673 case DELETE_EXPR:
9674 TYPE_GETS_DELETE (class_type) |= 1;
9675 break;
5362b086 9676
7e45bd18
MM
9677 case VEC_NEW_EXPR:
9678 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
9679 break;
5362b086 9680
7e45bd18
MM
9681 case VEC_DELETE_EXPR:
9682 TYPE_GETS_DELETE (class_type) |= 2;
9683 break;
596ea4e5 9684
7e45bd18
MM
9685 default:
9686 break;
9687 }
596ea4e5 9688
3143d517
GB
9689 /* [basic.std.dynamic.allocation]/1:
9690
9691 A program is ill-formed if an allocation function is declared
9692 in a namespace scope other than global scope or declared static
9693 in global scope.
9694
9695 The same also holds true for deallocation functions. */
9696 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
9697 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9698 {
9699 if (DECL_NAMESPACE_SCOPE_P (decl))
9700 {
9701 if (CP_DECL_CONTEXT (decl) != global_namespace)
398cd199
VR
9702 {
9703 error ("%qD may not be declared within a namespace", decl);
9704 return false;
9705 }
3143d517 9706 else if (!TREE_PUBLIC (decl))
398cd199
VR
9707 {
9708 error ("%qD may not be declared as static", decl);
9709 return false;
9710 }
3143d517
GB
9711 }
9712 }
9713
596ea4e5 9714 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
4546865e 9715 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
596ea4e5 9716 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
4546865e 9717 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8d08fdba
MS
9718 else
9719 {
9720 /* An operator function must either be a non-static member function
9721 or have at least one parameter of a class, a reference to a class,
9722 an enumeration, or a reference to an enumeration. 13.4.0.6 */
700f8a87 9723 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba 9724 {
596ea4e5
AS
9725 if (operator_code == TYPE_EXPR
9726 || operator_code == CALL_EXPR
9727 || operator_code == COMPONENT_REF
9728 || operator_code == ARRAY_REF
9729 || operator_code == NOP_EXPR)
f2a79152
PC
9730 {
9731 error ("%qD must be a nonstatic member function", decl);
398cd199 9732 return false;
f2a79152 9733 }
8d08fdba
MS
9734 else
9735 {
4b0d3cbe 9736 tree p;
8d08fdba 9737
700f8a87 9738 if (DECL_STATIC_FUNCTION_P (decl))
f2a79152
PC
9739 {
9740 error ("%qD must be either a non-static member "
9741 "function or a non-member function", decl);
398cd199 9742 return false;
f2a79152 9743 }
700f8a87 9744
4b0d3cbe
MM
9745 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
9746 {
9747 tree arg = non_reference (TREE_VALUE (p));
85990800 9748 if (arg == error_mark_node)
398cd199 9749 return false;
85990800 9750
4b0d3cbe
MM
9751 /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
9752 because these checks are performed even on
9753 template functions. */
9754 if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
9755 break;
9756 }
9757
9758 if (!p || p == void_list_node)
9759 {
398cd199
VR
9760 if (complain)
9761 error ("%qD must have an argument of class or "
9762 "enumerated type", decl);
9763 return false;
4b0d3cbe 9764 }
8d08fdba
MS
9765 }
9766 }
68642fb6 9767
4b0d3cbe
MM
9768 /* There are no restrictions on the arguments to an overloaded
9769 "operator ()". */
596ea4e5 9770 if (operator_code == CALL_EXPR)
398cd199 9771 return true;
8d08fdba 9772
7e45bd18 9773 /* Warn about conversion operators that will never be used. */
c8094d83 9774 if (IDENTIFIER_TYPENAME_P (name)
7e45bd18
MM
9775 && ! DECL_TEMPLATE_INFO (decl)
9776 && warn_conversion
9777 /* Warn only declaring the function; there is no need to
9778 warn again about out-of-class definitions. */
9779 && class_type == current_class_type)
a0a33927
MS
9780 {
9781 tree t = TREE_TYPE (name);
7e45bd18
MM
9782 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
9783 const char *what = 0;
5362b086 9784
7e45bd18
MM
9785 if (ref)
9786 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
a0a33927 9787
7e45bd18
MM
9788 if (TREE_CODE (t) == VOID_TYPE)
9789 what = "void";
9790 else if (class_type)
9791 {
9792 if (t == class_type)
a0a33927 9793 what = "the same type";
9a3b49ac 9794 /* Don't force t to be complete here. */
a0a33927 9795 else if (IS_AGGR_TYPE (t)
d0f062fb 9796 && COMPLETE_TYPE_P (t)
7e45bd18 9797 && DERIVED_FROM_P (t, class_type))
a0a33927 9798 what = "a base class";
a0a33927 9799 }
7e45bd18
MM
9800
9801 if (what)
b323323f 9802 warning (OPT_Wconversion, "conversion to %s%s will never use a type "
7e45bd18
MM
9803 "conversion operator",
9804 ref ? "a reference to " : "", what);
a0a33927 9805 }
64844139 9806
271e6f02 9807 if (operator_code == COND_EXPR)
8d08fdba
MS
9808 {
9809 /* 13.4.0.3 */
33bd39a2 9810 error ("ISO C++ prohibits overloading operator ?:");
398cd199 9811 return false;
68642fb6 9812 }
64844139 9813 else if (ellipsis_p)
398cd199
VR
9814 {
9815 error ("%qD must not have variable number of arguments", decl);
9816 return false;
9817 }
596ea4e5 9818 else if (ambi_op_p (operator_code))
8d08fdba 9819 {
596ea4e5
AS
9820 if (arity == 1)
9821 /* We pick the one-argument operator codes by default, so
9822 we don't have to change anything. */
9823 ;
9824 else if (arity == 2)
8d08fdba 9825 {
596ea4e5
AS
9826 /* If we thought this was a unary operator, we now know
9827 it to be a binary operator. */
9828 switch (operator_code)
9829 {
9830 case INDIRECT_REF:
9831 operator_code = MULT_EXPR;
9832 break;
9833
9834 case ADDR_EXPR:
9835 operator_code = BIT_AND_EXPR;
9836 break;
9837
392e3d51 9838 case UNARY_PLUS_EXPR:
596ea4e5
AS
9839 operator_code = PLUS_EXPR;
9840 break;
9841
9842 case NEGATE_EXPR:
9843 operator_code = MINUS_EXPR;
9844 break;
9845
9846 case PREINCREMENT_EXPR:
9847 operator_code = POSTINCREMENT_EXPR;
9848 break;
9849
9850 case PREDECREMENT_EXPR:
655dc6ee 9851 operator_code = POSTDECREMENT_EXPR;
596ea4e5
AS
9852 break;
9853
9854 default:
8dc2b103 9855 gcc_unreachable ();
596ea4e5
AS
9856 }
9857
9858 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9859
9860 if ((operator_code == POSTINCREMENT_EXPR
9861 || operator_code == POSTDECREMENT_EXPR)
5156628f 9862 && ! processing_template_decl
007e5fea 9863 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8d08fdba
MS
9864 {
9865 if (methodp)
2d01edd7 9866 error ("postfix %qD must take %<int%> as its argument",
398cd199 9867 decl);
8d08fdba 9868 else
398cd199
VR
9869 error ("postfix %qD must take %<int%> as its second "
9870 "argument", decl);
9871 return false;
8d08fdba
MS
9872 }
9873 }
9874 else
9875 {
9876 if (methodp)
2d01edd7 9877 error ("%qD must take either zero or one argument", decl);
8d08fdba 9878 else
2d01edd7 9879 error ("%qD must take either one or two arguments", decl);
398cd199 9880 return false;
8d08fdba 9881 }
824b9a4c
MS
9882
9883 /* More Effective C++ rule 6. */
eb448459 9884 if (warn_ecpp
596ea4e5
AS
9885 && (operator_code == POSTINCREMENT_EXPR
9886 || operator_code == POSTDECREMENT_EXPR
9887 || operator_code == PREINCREMENT_EXPR
9888 || operator_code == PREDECREMENT_EXPR))
824b9a4c
MS
9889 {
9890 tree arg = TREE_VALUE (argtypes);
9891 tree ret = TREE_TYPE (TREE_TYPE (decl));
9892 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
9893 arg = TREE_TYPE (arg);
9894 arg = TYPE_MAIN_VARIANT (arg);
596ea4e5
AS
9895 if (operator_code == PREINCREMENT_EXPR
9896 || operator_code == PREDECREMENT_EXPR)
824b9a4c
MS
9897 {
9898 if (TREE_CODE (ret) != REFERENCE_TYPE
3bfdc719
MM
9899 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
9900 arg))
b323323f 9901 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
0cbd7506 9902 build_reference_type (arg));
824b9a4c
MS
9903 }
9904 else
9905 {
3bfdc719 9906 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
b323323f 9907 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
824b9a4c
MS
9908 }
9909 }
8d08fdba 9910 }
596ea4e5 9911 else if (unary_op_p (operator_code))
8d08fdba 9912 {
596ea4e5 9913 if (arity != 1)
8d08fdba
MS
9914 {
9915 if (methodp)
2d01edd7 9916 error ("%qD must take %<void%>", decl);
8d08fdba 9917 else
2d01edd7 9918 error ("%qD must take exactly one argument", decl);
398cd199 9919 return false;
8d08fdba
MS
9920 }
9921 }
596ea4e5 9922 else /* if (binary_op_p (operator_code)) */
8d08fdba 9923 {
596ea4e5 9924 if (arity != 2)
8d08fdba
MS
9925 {
9926 if (methodp)
2d01edd7 9927 error ("%qD must take exactly one argument", decl);
8d08fdba 9928 else
2d01edd7 9929 error ("%qD must take exactly two arguments", decl);
398cd199 9930 return false;
8d08fdba 9931 }
824b9a4c
MS
9932
9933 /* More Effective C++ rule 7. */
eb448459 9934 if (warn_ecpp
596ea4e5
AS
9935 && (operator_code == TRUTH_ANDIF_EXPR
9936 || operator_code == TRUTH_ORIF_EXPR
9937 || operator_code == COMPOUND_EXPR))
b323323f 9938 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
0cbd7506 9939 decl);
824b9a4c
MS
9940 }
9941
9942 /* Effective C++ rule 23. */
eb448459 9943 if (warn_ecpp
596ea4e5 9944 && arity == 2
4bd7c270 9945 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
596ea4e5
AS
9946 && (operator_code == PLUS_EXPR
9947 || operator_code == MINUS_EXPR
9948 || operator_code == TRUNC_DIV_EXPR
4bd7c270
NS
9949 || operator_code == MULT_EXPR
9950 || operator_code == TRUNC_MOD_EXPR)
824b9a4c 9951 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
b323323f 9952 warning (OPT_Weffc__, "%qD should return by value", decl);
8d08fdba 9953
271e6f02 9954 /* [over.oper]/8 */
34332678 9955 for (; argtypes && argtypes != void_list_node;
0cbd7506
MS
9956 argtypes = TREE_CHAIN (argtypes))
9957 if (TREE_PURPOSE (argtypes))
9958 {
9959 TREE_PURPOSE (argtypes) = NULL_TREE;
9960 if (operator_code == POSTINCREMENT_EXPR
596ea4e5 9961 || operator_code == POSTDECREMENT_EXPR)
0cbd7506
MS
9962 {
9963 if (pedantic)
9964 pedwarn ("%qD cannot have default arguments", decl);
9965 }
9966 else
398cd199
VR
9967 {
9968 error ("%qD cannot have default arguments", decl);
9969 return false;
9970 }
0cbd7506 9971 }
8d08fdba 9972 }
398cd199 9973 return true;
8d08fdba
MS
9974}
9975\f
0c88d886
MM
9976/* Return a string giving the keyword associate with CODE. */
9977
d8e178a0 9978static const char *
11f6b451 9979tag_name (enum tag_types code)
094fe153
JM
9980{
9981 switch (code)
9982 {
9983 case record_type:
9984 return "struct";
9985 case class_type:
9986 return "class";
9987 case union_type:
0c88d886 9988 return "union";
094fe153
JM
9989 case enum_type:
9990 return "enum";
0c88d886
MM
9991 case typename_type:
9992 return "typename";
094fe153 9993 default:
8dc2b103 9994 gcc_unreachable ();
094fe153
JM
9995 }
9996}
9997
befcd99b 9998/* Name lookup in an elaborated-type-specifier (after the keyword
4b0d3cbe 9999 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
befcd99b 10000 elaborated-type-specifier is invalid, issue a diagnostic and return
4b0d3cbe 10001 error_mark_node; otherwise, return the *_TYPE to which it referred.
cbd63935 10002 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
befcd99b 10003
560ad596 10004tree
befcd99b 10005check_elaborated_type_specifier (enum tag_types tag_code,
4b0d3cbe 10006 tree decl,
cbd63935 10007 bool allow_template_p)
befcd99b 10008{
4b0d3cbe 10009 tree type;
befcd99b 10010
4b0d3cbe
MM
10011 /* In the case of:
10012
10013 struct S { struct S *p; };
10014
10015 name lookup will find the TYPE_DECL for the implicit "S::S"
10016 typedef. Adjust for that here. */
10017 if (DECL_SELF_REFERENCE_P (decl))
10018 decl = TYPE_NAME (TREE_TYPE (decl));
10019
10020 type = TREE_TYPE (decl);
10021
461c6fce
KL
10022 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10023 is false for this case as well. */
10024 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10025 {
10026 error ("using template type parameter %qT after %qs",
10027 type, tag_name (tag_code));
10028 return error_mark_node;
10029 }
caf93cb0 10030 /* [dcl.type.elab]
4b0d3cbe
MM
10031
10032 If the identifier resolves to a typedef-name or a template
10033 type-parameter, the elaborated-type-specifier is ill-formed.
10034
10035 In other words, the only legitimate declaration to use in the
10036 elaborated type specifier is the implicit typedef created when
10037 the type is declared. */
0c88d886
MM
10038 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
10039 && tag_code != typename_type)
befcd99b 10040 {
2d01edd7 10041 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
dee15844 10042 error ("%q+D has a previous declaration here", decl);
4b0d3cbe 10043 return error_mark_node;
befcd99b 10044 }
cbd63935
KL
10045 else if (TREE_CODE (type) != RECORD_TYPE
10046 && TREE_CODE (type) != UNION_TYPE
0c88d886
MM
10047 && tag_code != enum_type
10048 && tag_code != typename_type)
cbd63935 10049 {
2d01edd7 10050 error ("%qT referred to as %qs", type, tag_name (tag_code));
dee15844 10051 error ("%q+T has a previous declaration here", type);
4b0d3cbe 10052 return error_mark_node;
cbd63935
KL
10053 }
10054 else if (TREE_CODE (type) != ENUMERAL_TYPE
4fe8db68 10055 && tag_code == enum_type)
cbd63935 10056 {
2d01edd7 10057 error ("%qT referred to as enum", type);
dee15844 10058 error ("%q+T has a previous declaration here", type);
4b0d3cbe 10059 return error_mark_node;
cbd63935
KL
10060 }
10061 else if (!allow_template_p
10062 && TREE_CODE (type) == RECORD_TYPE
10063 && CLASSTYPE_IS_TEMPLATE (type))
10064 {
10065 /* If a class template appears as elaborated type specifier
10066 without a template header such as:
10067
10068 template <class T> class C {};
10069 void f(class C); // No template header here
10070
10071 then the required template argument is missing. */
2d01edd7 10072 error ("template argument required for %<%s %T%>",
cbd63935
KL
10073 tag_name (tag_code),
10074 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
4b0d3cbe 10075 return error_mark_node;
cbd63935 10076 }
befcd99b 10077
4b0d3cbe 10078 return type;
befcd99b
MM
10079}
10080
461c6fce 10081/* Lookup NAME in elaborate type specifier in scope according to
29ef83de 10082 SCOPE and issue diagnostics if necessary.
461c6fce
KL
10083 Return *_TYPE node upon success, NULL_TREE when the NAME is not
10084 found, and ERROR_MARK_NODE for type error. */
10085
10086static tree
10087lookup_and_check_tag (enum tag_types tag_code, tree name,
29ef83de 10088 tag_scope scope, bool template_header_p)
461c6fce
KL
10089{
10090 tree t;
10091 tree decl;
29ef83de 10092 if (scope == ts_global)
bd3d082e
KL
10093 {
10094 /* First try ordinary name lookup, ignoring hidden class name
10095 injected via friend declaration. */
10e6657a 10096 decl = lookup_name_prefer_type (name, 2);
bd3d082e
KL
10097 /* If that fails, the name will be placed in the smallest
10098 non-class, non-function-prototype scope according to 3.3.1/5.
10099 We may already have a hidden name declared as friend in this
105d72c5 10100 scope. So lookup again but not ignoring hidden names.
bd3d082e
KL
10101 If we find one, that name will be made visible rather than
10102 creating a new tag. */
10103 if (!decl)
10104 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10105 }
461c6fce 10106 else
29ef83de 10107 decl = lookup_type_scope (name, scope);
461c6fce
KL
10108
10109 if (decl && DECL_CLASS_TEMPLATE_P (decl))
10110 decl = DECL_TEMPLATE_RESULT (decl);
10111
10112 if (decl && TREE_CODE (decl) == TYPE_DECL)
10113 {
4104f0f4
KL
10114 /* Look for invalid nested type:
10115 class C {
10116 class C {};
10117 }; */
10118 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
10119 {
10120 error ("%qD has the same name as the class in which it is "
10121 "declared",
10122 decl);
10123 return error_mark_node;
10124 }
10125
461c6fce
KL
10126 /* Two cases we need to consider when deciding if a class
10127 template is allowed as an elaborated type specifier:
10128 1. It is a self reference to its own class.
10129 2. It comes with a template header.
10130
10131 For example:
10132
10133 template <class T> class C {
10134 class C *c1; // DECL_SELF_REFERENCE_P is true
10135 class D;
10136 };
10137 template <class U> class C; // template_header_p is true
10138 template <class T> class C<T>::D {
10139 class C *c2; // DECL_SELF_REFERENCE_P is true
10140 }; */
10141
10142 t = check_elaborated_type_specifier (tag_code,
10143 decl,
10144 template_header_p
10145 | DECL_SELF_REFERENCE_P (decl));
10146 return t;
10147 }
af92ab36
OW
10148 else if (decl && TREE_CODE (decl) == TREE_LIST)
10149 {
10150 error ("reference to %qD is ambiguous", name);
10151 print_candidates (decl);
10152 return error_mark_node;
10153 }
461c6fce
KL
10154 else
10155 return NULL_TREE;
10156}
10157
cbd63935 10158/* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
8d08fdba
MS
10159 Define the tag as a forward-reference if it is not defined.
10160
cbd63935 10161 If a declaration is given, process it here, and report an error if
38b305d0 10162 multiple declarations are not identical.
8d08fdba 10163
29ef83de 10164 SCOPE is TS_CURRENT when this is also a definition. Only look in
8d08fdba 10165 the current frame for the name (since C++ allows new names in any
29ef83de
KL
10166 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
10167 declaration. Only look beginning from the current scope outward up
10168 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
cbd63935
KL
10169
10170 TEMPLATE_HEADER_P is true when this declaration is preceded by
10171 a set of template parameters. */
8d08fdba 10172
8d08fdba 10173tree
38b305d0 10174xref_tag (enum tag_types tag_code, tree name,
29ef83de 10175 tag_scope scope, bool template_header_p)
8d08fdba 10176{
8d08fdba 10177 enum tree_code code;
926ce8bd 10178 tree t;
25aab5d0 10179 tree context = NULL_TREE;
dc8263bc 10180
22ffcc6f 10181 timevar_push (TV_NAME_LOOKUP);
cbd63935 10182
50bc768d 10183 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
cbd63935 10184
8d08fdba
MS
10185 switch (tag_code)
10186 {
10187 case record_type:
10188 case class_type:
8d08fdba 10189 code = RECORD_TYPE;
8d08fdba
MS
10190 break;
10191 case union_type:
10192 code = UNION_TYPE;
8d08fdba
MS
10193 break;
10194 case enum_type:
10195 code = ENUMERAL_TYPE;
10196 break;
10197 default:
8dc2b103 10198 gcc_unreachable ();
8d08fdba
MS
10199 }
10200
461c6fce
KL
10201 /* In case of anonymous name, xref_tag is only called to
10202 make type node and push name. Name lookup is not required. */
10203 if (ANON_AGGRNAME_P (name))
10204 t = NULL_TREE;
8d08fdba 10205 else
461c6fce 10206 t = lookup_and_check_tag (tag_code, name,
29ef83de 10207 scope, template_header_p);
cbd63935 10208
461c6fce
KL
10209 if (t == error_mark_node)
10210 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
68642fb6 10211
29ef83de 10212 if (scope != ts_current && t && current_class_type
461c6fce
KL
10213 && template_class_depth (current_class_type)
10214 && template_header_p)
10215 {
29ef83de 10216 /* Since SCOPE is not TS_CURRENT, we are not looking at a
461c6fce
KL
10217 definition of this tag. Since, in addition, we are currently
10218 processing a (member) template declaration of a template
10219 class, we must be very careful; consider:
25aab5d0 10220
461c6fce
KL
10221 template <class X>
10222 struct S1
25aab5d0 10223
461c6fce
KL
10224 template <class U>
10225 struct S2
10226 { template <class V>
10227 friend struct S1; };
25aab5d0 10228
461c6fce
KL
10229 Here, the S2::S1 declaration should not be confused with the
10230 outer declaration. In particular, the inner version should
10231 have a template parameter of level 2, not level 1. This
10232 would be particularly important if the member declaration
10233 were instead:
25aab5d0 10234
461c6fce 10235 template <class V = U> friend struct S1;
25aab5d0 10236
461c6fce
KL
10237 say, when we should tsubst into `U' when instantiating
10238 S2. On the other hand, when presented with:
25aab5d0 10239
461c6fce
KL
10240 template <class T>
10241 struct S1 {
10242 template <class U>
10243 struct S2 {};
10244 template <class U>
10245 friend struct S2;
10246 };
25aab5d0 10247
461c6fce
KL
10248 we must find the inner binding eventually. We
10249 accomplish this by making sure that the new type we
10250 create to represent this declaration has the right
10251 TYPE_CONTEXT. */
10252 context = TYPE_CONTEXT (t);
10253 t = NULL_TREE;
8d08fdba
MS
10254 }
10255
cbd63935 10256 if (! t)
8d08fdba
MS
10257 {
10258 /* If no such tag is yet defined, create a forward-reference node
10259 and record it as the "definition".
10260 When a real declaration of this type is found,
10261 the forward-reference will be altered into a real type. */
8d08fdba
MS
10262 if (code == ENUMERAL_TYPE)
10263 {
2d01edd7 10264 error ("use of enum %q#D without previous declaration", name);
30fc3df7 10265 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
8d08fdba 10266 }
8d08fdba
MS
10267 else
10268 {
cbd63935
KL
10269 t = make_aggr_type (code);
10270 TYPE_CONTEXT (t) = context;
bd3d082e 10271 t = pushtag (name, t, scope);
8d08fdba
MS
10272 }
10273 }
10274 else
10275 {
29ef83de 10276 if (template_header_p && IS_AGGR_TYPE (t))
60feef2c
LM
10277 {
10278 if (!redeclare_class_template (t, current_template_parms))
10279 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10280 }
caf93cb0 10281 else if (!processing_template_decl
9ce1594a
MM
10282 && CLASS_TYPE_P (t)
10283 && CLASSTYPE_IS_TEMPLATE (t))
10284 {
2d01edd7 10285 error ("redeclaration of %qT as a non-template", t);
b646edb8
VR
10286 error ("previous declaration %q+D", t);
10287 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9ce1594a 10288 }
bd3d082e
KL
10289
10290 /* Make injected friend class visible. */
10291 if (scope != ts_within_enclosing_non_class
10292 && hidden_name_p (TYPE_NAME (t)))
10293 {
10294 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
10295 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
10296
10297 if (TYPE_TEMPLATE_INFO (t))
10298 {
10299 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
10300 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
10301 }
0cbd7506 10302 }
8d08fdba
MS
10303 }
10304
cbd63935 10305 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
8d08fdba 10306}
8ccc31eb 10307
fc378698 10308tree
29ef83de 10309xref_tag_from_type (tree old, tree id, tag_scope scope)
fc378698 10310{
88e5899c 10311 enum tag_types tag_kind;
fc378698
MS
10312
10313 if (TREE_CODE (old) == RECORD_TYPE)
88e5899c 10314 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
fc378698 10315 else
88e5899c 10316 tag_kind = union_type;
fc378698
MS
10317
10318 if (id == NULL_TREE)
10319 id = TYPE_IDENTIFIER (old);
10320
29ef83de 10321 return xref_tag (tag_kind, id, scope, false);
fc378698
MS
10322}
10323
48b45647
NS
10324/* Create the binfo hierarchy for REF with (possibly NULL) base list
10325 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
10326 access_* node, and the TREE_VALUE is the type of the base-class.
72f8fc59
LM
10327 Non-NULL TREE_TYPE indicates virtual inheritance.
10328
bd6f7848 10329 Returns true if the binfo hierarchy was successfully created,
72f8fc59 10330 false if an error was detected. */
3fd71a52 10331
72f8fc59 10332bool
dbbf88d1 10333xref_basetypes (tree ref, tree base_list)
8ccc31eb 10334{
8fbc5ae7 10335 tree *basep;
fa743e8c 10336 tree binfo, base_binfo;
03fd3f84 10337 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
77880ae4 10338 unsigned max_bases = 0; /* Maximum direct bases. */
8fbc5ae7 10339 int i;
48b45647
NS
10340 tree default_access;
10341 tree igo_prev; /* Track Inheritance Graph Order. */
a5d7c4a3 10342
bef89e9e 10343 if (ref == error_mark_node)
72f8fc59 10344 return false;
bef89e9e 10345
48b45647
NS
10346 /* The base of a derived class is private by default, all others are
10347 public. */
10348 default_access = (TREE_CODE (ref) == RECORD_TYPE
10349 && CLASSTYPE_DECLARED_CLASS (ref)
10350 ? access_private_node : access_public_node);
da15dae6 10351
d6479fe7
MM
10352 /* First, make sure that any templates in base-classes are
10353 instantiated. This ensures that if we call ourselves recursively
10354 we do not get confused about which classes are marked and which
10355 are not. */
caf93cb0
EC
10356 basep = &base_list;
10357 while (*basep)
8fbc5ae7
MM
10358 {
10359 tree basetype = TREE_VALUE (*basep);
caf93cb0 10360
8fbc5ae7
MM
10361 if (!(processing_template_decl && uses_template_parms (basetype))
10362 && !complete_type_or_else (basetype, NULL))
dbbf88d1 10363 /* An incomplete type. Remove it from the list. */
8fbc5ae7
MM
10364 *basep = TREE_CHAIN (*basep);
10365 else
48b45647
NS
10366 {
10367 max_bases++;
10368 if (TREE_TYPE (*basep))
10369 max_vbases++;
10370 if (CLASS_TYPE_P (basetype))
10371 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
10372 basep = &TREE_CHAIN (*basep);
10373 }
8fbc5ae7 10374 }
d6479fe7 10375
3543e114 10376 TYPE_MARKED_P (ref) = 1;
48b45647 10377
cad7e87b
NS
10378 /* The binfo slot should be empty, unless this is an (ill-formed)
10379 redefinition. */
50bc768d
NS
10380 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
10381 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
caf93cb0 10382
fa743e8c 10383 binfo = make_tree_binfo (max_bases);
caf93cb0 10384
48b45647
NS
10385 TYPE_BINFO (ref) = binfo;
10386 BINFO_OFFSET (binfo) = size_zero_node;
10387 BINFO_TYPE (binfo) = ref;
caf93cb0 10388
48b45647
NS
10389 if (max_bases)
10390 {
d4e6fecb 10391 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
48b45647
NS
10392 /* An aggregate cannot have baseclasses. */
10393 CLASSTYPE_NON_AGGREGATE (ref) = 1;
caf93cb0 10394
48b45647 10395 if (TREE_CODE (ref) == UNION_TYPE)
72f8fc59
LM
10396 {
10397 error ("derived union %qT invalid", ref);
10398 return false;
10399 }
48b45647 10400 }
caf93cb0 10401
48b45647 10402 if (max_bases > 1)
dbbf88d1 10403 {
48b45647 10404 if (TYPE_FOR_JAVA (ref))
72f8fc59
LM
10405 {
10406 error ("Java class %qT cannot have multiple bases", ref);
10407 return false;
10408 }
48b45647 10409 }
caf93cb0 10410
48b45647
NS
10411 if (max_vbases)
10412 {
d4e6fecb 10413 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
caf93cb0 10414
48b45647 10415 if (TYPE_FOR_JAVA (ref))
72f8fc59
LM
10416 {
10417 error ("Java class %qT cannot have virtual bases", ref);
10418 return false;
10419 }
48b45647 10420 }
cad7e87b 10421
48b45647
NS
10422 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
10423 {
10424 tree access = TREE_PURPOSE (base_list);
10425 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
10426 tree basetype = TREE_VALUE (base_list);
caf93cb0 10427
48b45647
NS
10428 if (access == access_default_node)
10429 access = default_access;
caf93cb0 10430
5d80a306
DG
10431 if (PACK_EXPANSION_P (basetype))
10432 basetype = PACK_EXPANSION_PATTERN (basetype);
48b45647
NS
10433 if (TREE_CODE (basetype) == TYPE_DECL)
10434 basetype = TREE_TYPE (basetype);
10435 if (TREE_CODE (basetype) != RECORD_TYPE
10436 && TREE_CODE (basetype) != TYPENAME_TYPE
10437 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
10438 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM)
10439 {
2d01edd7 10440 error ("base type %qT fails to be a struct or class type",
48b45647 10441 basetype);
72f8fc59 10442 return false;
8ccc31eb 10443 }
caf93cb0 10444
48b45647
NS
10445 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
10446 TYPE_FOR_JAVA (ref) = 1;
10447
fa743e8c 10448 base_binfo = NULL_TREE;
48b45647 10449 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
dbbf88d1 10450 {
48b45647 10451 base_binfo = TYPE_BINFO (basetype);
77880ae4 10452 /* The original basetype could have been a typedef'd type. */
48b45647 10453 basetype = BINFO_TYPE (base_binfo);
caf93cb0 10454
48b45647
NS
10455 /* Inherit flags from the base. */
10456 TYPE_HAS_NEW_OPERATOR (ref)
10457 |= TYPE_HAS_NEW_OPERATOR (basetype);
10458 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
10459 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
10460 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
48b45647 10461 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
3543e114
NS
10462 CLASSTYPE_DIAMOND_SHAPED_P (ref)
10463 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
10464 CLASSTYPE_REPEATED_BASE_P (ref)
10465 |= CLASSTYPE_REPEATED_BASE_P (basetype);
8fbc5ae7 10466 }
c8094d83 10467
98d6e9af
NS
10468 /* We must do this test after we've seen through a typedef
10469 type. */
10470 if (TYPE_MARKED_P (basetype))
10471 {
10472 if (basetype == ref)
2d01edd7 10473 error ("recursive type %qT undefined", basetype);
98d6e9af 10474 else
2d01edd7 10475 error ("duplicate base type %qT invalid", basetype);
72f8fc59 10476 return false;
98d6e9af 10477 }
5d80a306
DG
10478
10479 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
10480 /* Regenerate the pack expansion for the bases. */
10481 basetype = make_pack_expansion (basetype);
10482
98d6e9af 10483 TYPE_MARKED_P (basetype) = 1;
caf93cb0 10484
48b45647
NS
10485 base_binfo = copy_binfo (base_binfo, basetype, ref,
10486 &igo_prev, via_virtual);
10487 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
10488 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
f5c28a15 10489
fa743e8c 10490 BINFO_BASE_APPEND (binfo, base_binfo);
63d1c7b3 10491 BINFO_BASE_ACCESS_APPEND (binfo, access);
cad7e87b
NS
10492 }
10493
3543e114
NS
10494 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
10495 /* If we have space in the vbase vector, we must have shared at
10496 least one of them, and are therefore diamond shaped. */
10497 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
10498
dbbf88d1 10499 /* Unmark all the types. */
fa743e8c 10500 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
3543e114
NS
10501 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10502 TYPE_MARKED_P (ref) = 0;
10503
10504 /* Now see if we have a repeated base type. */
10505 if (!CLASSTYPE_REPEATED_BASE_P (ref))
10506 {
10507 for (base_binfo = binfo; base_binfo;
10508 base_binfo = TREE_CHAIN (base_binfo))
10509 {
10510 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10511 {
10512 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
10513 break;
10514 }
10515 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
10516 }
10517 for (base_binfo = binfo; base_binfo;
10518 base_binfo = TREE_CHAIN (base_binfo))
10519 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10520 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10521 else
10522 break;
10523 }
72f8fc59
LM
10524
10525 return true;
8ccc31eb 10526}
68642fb6 10527
8d08fdba 10528\f
8d08fdba 10529/* Begin compiling the definition of an enumeration type.
29ef83de 10530 NAME is its name.
8d08fdba
MS
10531 Returns the type object, as yet incomplete.
10532 Also records info about it so that build_enumerator
10533 may be used to declare the individual values as they are read. */
10534
10535tree
11f6b451 10536start_enum (tree name)
8d08fdba 10537{
29ef83de
KL
10538 tree enumtype;
10539
10540 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
8d08fdba
MS
10541
10542 /* If this is the real definition for a previous forward reference,
10543 fill in the contents in the same object that used to be the
10544 forward reference. */
10545
29ef83de
KL
10546 enumtype = lookup_and_check_tag (enum_type, name,
10547 /*tag_scope=*/ts_current,
10548 /*template_header_p=*/false);
8d08fdba
MS
10549
10550 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
30ff8252 10551 {
2d01edd7 10552 error ("multiple definition of %q#T", enumtype);
ddd2d57e 10553 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
58595203
MM
10554 /* Clear out TYPE_VALUES, and start again. */
10555 TYPE_VALUES (enumtype) = NULL_TREE;
30ff8252 10556 }
8d08fdba
MS
10557 else
10558 {
29ef83de
KL
10559 /* In case of error, make a dummy enum to allow parsing to
10560 continue. */
10561 if (enumtype == error_mark_node)
10562 name = make_anon_name ();
10563
8d08fdba 10564 enumtype = make_node (ENUMERAL_TYPE);
bd3d082e 10565 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
8d08fdba
MS
10566 }
10567
8d08fdba
MS
10568 return enumtype;
10569}
10570
10571/* After processing and defining all the values of an enumeration type,
10572 install their decls in the enumeration type and finish it off.
968b956a 10573 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
8d08fdba 10574
968b956a 10575void
11f6b451 10576finish_enum (tree enumtype)
8d08fdba 10577{
7b6d72fc
MM
10578 tree values;
10579 tree decl;
10580 tree value;
968b956a
MM
10581 tree minnode;
10582 tree maxnode;
10583 tree t;
10584 bool unsignedp;
f6af9a15 10585 bool use_short_enum;
968b956a 10586 int lowprec;
caf93cb0 10587 int highprec;
968b956a 10588 int precision;
7b6d72fc 10589 integer_type_kind itk;
ad96995b 10590 tree underlying_type = NULL_TREE;
968b956a
MM
10591
10592 /* We built up the VALUES in reverse order. */
10593 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
10594
f5d70cc0
JM
10595 /* For an enum defined in a template, just set the type of the values;
10596 all further processing is postponed until the template is
10597 instantiated. We need to set the type so that tsubst of a CONST_DECL
10598 works. */
968b956a
MM
10599 if (processing_template_decl)
10600 {
caf93cb0
EC
10601 for (values = TYPE_VALUES (enumtype);
10602 values;
7b6d72fc
MM
10603 values = TREE_CHAIN (values))
10604 TREE_TYPE (TREE_VALUE (values)) = enumtype;
5f261ba9 10605 if (at_function_scope_p ())
968b956a 10606 add_stmt (build_min (TAG_DEFN, enumtype));
968b956a
MM
10607 return;
10608 }
10609
7b6d72fc 10610 /* Determine the minimum and maximum values of the enumerators. */
968b956a 10611 if (TYPE_VALUES (enumtype))
8d08fdba 10612 {
968b956a 10613 minnode = maxnode = NULL_TREE;
5566b478 10614
caf93cb0
EC
10615 for (values = TYPE_VALUES (enumtype);
10616 values;
7b6d72fc 10617 values = TREE_CHAIN (values))
8d08fdba 10618 {
7b6d72fc 10619 decl = TREE_VALUE (values);
f5d70cc0
JM
10620
10621 /* [dcl.enum]: Following the closing brace of an enum-specifier,
10622 each enumerator has the type of its enumeration. Prior to the
10623 closing brace, the type of each enumerator is the type of its
10624 initializing value. */
10625 TREE_TYPE (decl) = enumtype;
10626
7b6d72fc
MM
10627 /* Update the minimum and maximum values, if appropriate. */
10628 value = DECL_INITIAL (decl);
3c955a04
MM
10629 if (value == error_mark_node)
10630 value = integer_zero_node;
f5d70cc0
JM
10631 /* Figure out what the minimum and maximum values of the
10632 enumerators are. */
10633 if (!minnode)
10634 minnode = maxnode = value;
10635 else if (tree_int_cst_lt (maxnode, value))
10636 maxnode = value;
10637 else if (tree_int_cst_lt (value, minnode))
10638 minnode = value;
8d08fdba
MS
10639 }
10640 }
f376e137 10641 else
7b6d72fc
MM
10642 /* [dcl.enum]
10643
10644 If the enumerator-list is empty, the underlying type is as if
10645 the enumeration had a single enumerator with value 0. */
968b956a
MM
10646 minnode = maxnode = integer_zero_node;
10647
10648 /* Compute the number of bits require to represent all values of the
10649 enumeration. We must do this before the type of MINNODE and
10650 MAXNODE are transformed, since min_precision relies on the
10651 TREE_TYPE of the value it is passed. */
10652 unsignedp = tree_int_cst_sgn (minnode) >= 0;
10653 lowprec = min_precision (minnode, unsignedp);
10654 highprec = min_precision (maxnode, unsignedp);
10655 precision = MAX (lowprec, highprec);
10656
7b6d72fc
MM
10657 /* Determine the underlying type of the enumeration.
10658
10659 [dcl.enum]
10660
10661 The underlying type of an enumeration is an integral type that
10662 can represent all the enumerator values defined in the
10663 enumeration. It is implementation-defined which integral type is
10664 used as the underlying type for an enumeration except that the
10665 underlying type shall not be larger than int unless the value of
caf93cb0 10666 an enumerator cannot fit in an int or unsigned int.
7b6d72fc
MM
10667
10668 We use "int" or an "unsigned int" as the underlying type, even if
10669 a smaller integral type would work, unless the user has
f6af9a15
MA
10670 explicitly requested that we use the smallest possible type. The
10671 user can request that for all enumerations with a command line
03fd3f84 10672 flag, or for just one enumeration with an attribute. */
f6af9a15
MA
10673
10674 use_short_enum = flag_short_enums
10675 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
10676
10677 for (itk = (use_short_enum ? itk_char : itk_int);
caf93cb0 10678 itk != itk_none;
7b6d72fc 10679 itk++)
e455bc27 10680 {
7b6d72fc
MM
10681 underlying_type = integer_types[itk];
10682 if (TYPE_PRECISION (underlying_type) >= precision
8df83eae 10683 && TYPE_UNSIGNED (underlying_type) == unsignedp)
7b6d72fc
MM
10684 break;
10685 }
10686 if (itk == itk_none)
10687 {
10688 /* DR 377
10689
10690 IF no integral type can represent all the enumerator values, the
10691 enumeration is ill-formed. */
e455bc27 10692 error ("no integral type can represent all of the enumerator values "
2d01edd7 10693 "for %qT", enumtype);
e455bc27 10694 precision = TYPE_PRECISION (long_long_integer_type_node);
7b6d72fc 10695 underlying_type = integer_types[itk_unsigned_long_long];
e455bc27
MM
10696 }
10697
caf93cb0 10698 /* Compute the minium and maximum values for the type.
8d08fdba 10699
7b6d72fc
MM
10700 [dcl.enum]
10701
10702 For an enumeration where emin is the smallest enumerator and emax
10703 is the largest, the values of the enumeration are the values of the
10704 underlying type in the range bmin to bmax, where bmin and bmax are,
10705 respectively, the smallest and largest values of the smallest bit-
10706 field that can store emin and emax. */
d0c5c9b1
RS
10707
10708 /* The middle-end currently assumes that types with TYPE_PRECISION
10709 narrower than their underlying type are suitably zero or sign
10710 extended to fill their mode. g++ doesn't make these guarantees.
10711 Until the middle-end can represent such paradoxical types, we
77880ae4 10712 set the TYPE_PRECISION to the width of the underlying type. */
d0c5c9b1
RS
10713 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
10714
7b6d72fc
MM
10715 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
10716
10717 /* [dcl.enum]
caf93cb0 10718
7b6d72fc
MM
10719 The value of sizeof() applied to an enumeration type, an object
10720 of an enumeration type, or an enumerator, is the value of sizeof()
10721 applied to the underlying type. */
10722 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
10723 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
10724 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
10725 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
10726 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
8df83eae 10727 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
7b6d72fc
MM
10728
10729 /* Convert each of the enumerators to the type of the underlying
10730 type of the enumeration. */
10731 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
10732 {
3c955a04
MM
10733 location_t saved_location;
10734
7b6d72fc 10735 decl = TREE_VALUE (values);
3c955a04
MM
10736 saved_location = input_location;
10737 input_location = DECL_SOURCE_LOCATION (decl);
7b6d72fc
MM
10738 value = perform_implicit_conversion (underlying_type,
10739 DECL_INITIAL (decl));
3c955a04 10740 input_location = saved_location;
89b0433e
NS
10741
10742 /* Do not clobber shared ints. */
10743 value = copy_node (value);
c8094d83 10744
7b6d72fc
MM
10745 TREE_TYPE (value) = enumtype;
10746 DECL_INITIAL (decl) = value;
10747 TREE_VALUE (values) = value;
e455bc27 10748 }
8d08fdba 10749
968b956a
MM
10750 /* Fix up all variant types of this enum type. */
10751 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
10752 {
10753 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
10754 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
10755 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
10756 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
10757 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
10758 TYPE_MODE (t) = TYPE_MODE (enumtype);
10759 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
10760 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
10761 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
8df83eae 10762 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
cbf882af
MM
10763 }
10764
968b956a
MM
10765 /* Finish debugging output for this type. */
10766 rest_of_type_compilation (enumtype, namespace_bindings_p ());
8d08fdba
MS
10767}
10768
079e1098 10769/* Build and install a CONST_DECL for an enumeration constant of the
58595203 10770 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
8d08fdba
MS
10771 Assignment of sequential values by default is handled here. */
10772
58595203 10773void
11f6b451 10774build_enumerator (tree name, tree value, tree enumtype)
8d08fdba 10775{
58595203 10776 tree decl;
e8bd800e 10777 tree context;
58595203 10778 tree type;
8d08fdba 10779
93678513
MM
10780 /* If the VALUE was erroneous, pretend it wasn't there; that will
10781 result in the enum being assigned the next value in sequence. */
10782 if (value == error_mark_node)
10783 value = NULL_TREE;
10784
8d08fdba
MS
10785 /* Remove no-op casts from the value. */
10786 if (value)
10787 STRIP_TYPE_NOPS (value);
10788
58595203
MM
10789 if (! processing_template_decl)
10790 {
10791 /* Validate and default VALUE. */
10792 if (value != NULL_TREE)
10793 {
8a784e4a 10794 value = integral_constant_value (value);
58595203
MM
10795
10796 if (TREE_CODE (value) == INTEGER_CST)
10797 {
0a72704b 10798 value = perform_integral_promotions (value);
58595203
MM
10799 constant_expression_warning (value);
10800 }
10801 else
10802 {
253e0d15 10803 error ("enumerator value for %qD is not an integer constant", name);
58595203
MM
10804 value = NULL_TREE;
10805 }
10806 }
10807
10808 /* Default based on previous value. */
6a540f3c 10809 if (value == NULL_TREE)
58595203 10810 {
58595203
MM
10811 if (TYPE_VALUES (enumtype))
10812 {
ff4eb0b5
ZW
10813 HOST_WIDE_INT hi;
10814 unsigned HOST_WIDE_INT lo;
10815 tree prev_value;
10816 bool overflowed;
10817
10818 /* The next value is the previous value plus one. We can
0cbd7506 10819 safely assume that the previous value is an INTEGER_CST.
ff4eb0b5
ZW
10820 add_double doesn't know the type of the target expression,
10821 so we must check with int_fits_type_p as well. */
58595203 10822 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
ff4eb0b5
ZW
10823 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
10824 TREE_INT_CST_HIGH (prev_value),
10825 1, 0, &lo, &hi);
10826 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
10827 overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
68642fb6 10828
ff4eb0b5 10829 if (overflowed)
3c955a04
MM
10830 {
10831 error ("overflow in enumeration values at %qD", name);
10832 value = error_mark_node;
10833 }
58595203
MM
10834 }
10835 else
10836 value = integer_zero_node;
10837 }
10838
10839 /* Remove no-op casts from the value. */
f5d70cc0 10840 STRIP_TYPE_NOPS (value);
58595203 10841 }
8d08fdba 10842
8d08fdba 10843 /* C++ associates enums with global, function, or class declarations. */
58595203
MM
10844 context = current_scope ();
10845
10846 /* Build the actual enumeration constant. Note that the enumeration
10847 constants have the type of their initializers until the
10848 enumeration is complete:
10849
10850 [ dcl.enum ]
10851
10852 Following the closing brace of an enum-specifier, each enumer-
10853 ator has the type of its enumeration. Prior to the closing
10854 brace, the type of each enumerator is the type of its
10855 initializing value.
10856
10857 In finish_enum we will reset the type. Of course, if we're
a1c65f9f 10858 processing a template, there may be no value. */
58595203
MM
10859 type = value ? TREE_TYPE (value) : NULL_TREE;
10860
10861 if (context && context == current_class_type)
10862 /* This enum declaration is local to the class. We need the full
8f17b5c5 10863 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
58595203
MM
10864 decl = build_lang_decl (CONST_DECL, name, type);
10865 else
10866 /* It's a global enum, or it's local to a function. (Note local to
e8bd800e 10867 a function could mean local to a class method. */
58595203 10868 decl = build_decl (CONST_DECL, name, type);
e8bd800e 10869
58595203 10870 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
6de9cd9a
DN
10871 TREE_CONSTANT (decl) = 1;
10872 TREE_INVARIANT (decl) = 1;
10873 TREE_READONLY (decl) = 1;
58595203 10874 DECL_INITIAL (decl) = value;
e8bd800e 10875
58595203
MM
10876 if (context && context == current_class_type)
10877 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
7b6d72fc
MM
10878 on the TYPE_FIELDS list for `S'. (That's so that you can say
10879 things like `S::i' later.) */
58595203
MM
10880 finish_member_declaration (decl);
10881 else
9780c24f 10882 pushdecl (decl);
58595203
MM
10883
10884 /* Add this enumeration constant to the list for this type. */
10885 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
8d08fdba
MS
10886}
10887
8d08fdba 10888\f
a8f73d4b
MM
10889/* We're defining DECL. Make sure that it's type is OK. */
10890
10891static void
11f6b451 10892check_function_type (tree decl, tree current_function_parms)
a8f73d4b
MM
10893{
10894 tree fntype = TREE_TYPE (decl);
d0f062fb 10895 tree return_type = complete_type (TREE_TYPE (fntype));
a8f73d4b
MM
10896
10897 /* In a function definition, arg types must be complete. */
10898 require_complete_types_for_parms (current_function_parms);
10899
c9387915
GB
10900 if (dependent_type_p (return_type))
10901 return;
d0f062fb 10902 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
a8f73d4b 10903 {
51b15ede 10904 tree args = TYPE_ARG_TYPES (fntype);
3db45ab5 10905
51b15ede 10906 error ("return type %q#T is incomplete", return_type);
a8f73d4b 10907
51b15ede 10908 /* Make it return void instead. */
a8f73d4b 10909 if (TREE_CODE (fntype) == METHOD_TYPE)
51b15ede
NS
10910 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
10911 void_type_node,
10912 TREE_CHAIN (args));
a8f73d4b 10913 else
51b15ede 10914 fntype = build_function_type (void_type_node, args);
68642fb6 10915 TREE_TYPE (decl)
a8f73d4b 10916 = build_exception_variant (fntype,
51b15ede 10917 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
a8f73d4b
MM
10918 }
10919 else
10920 abstract_virtuals_error (decl, TREE_TYPE (fntype));
10921}
10922
8d08fdba
MS
10923/* Create the FUNCTION_DECL for a function definition.
10924 DECLSPECS and DECLARATOR are the parts of the declaration;
10925 they describe the function's name and the type it returns,
10926 but twisted together in a fashion that parallels the syntax of C.
10927
a8f73d4b
MM
10928 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
10929 DECLARATOR is really the DECL for the function we are about to
10930 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
f444e36b 10931 indicating that the function is an inline defined in-class.
68642fb6 10932
8d08fdba
MS
10933 This function creates a binding context for the function body
10934 as well as setting up the FUNCTION_DECL in current_function_decl.
10935
8d08fdba
MS
10936 For C++, we must first check whether that datum makes any sense.
10937 For example, "class A local_a(1,2);" means that variable local_a
10938 is an aggregate of type A, which should have a constructor
72c4a4ca
GK
10939 applied to it with the argument list [1, 2].
10940
10941 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
10942 or may be a BLOCK if the function has been defined previously
10943 in this translation unit. On exit, DECL_INITIAL (decl1) will be
10944 error_mark_node if the function has never been defined, or
10945 a BLOCK if the function has been defined somewhere. */
8d08fdba 10946
058b15c1
MM
10947void
10948start_preparsed_function (tree decl1, tree attrs, int flags)
8d08fdba 10949{
8d08fdba
MS
10950 tree ctype = NULL_TREE;
10951 tree fntype;
10952 tree restype;
8d08fdba 10953 int doing_friend = 0;
e2500fed 10954 struct cp_binding_level *bl;
f444e36b 10955 tree current_function_parms;
3e3935a9 10956 struct c_fileinfo *finfo
c533e34d 10957 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
1ef0df47 10958 bool honor_interface;
8d08fdba 10959
8d08fdba 10960 /* Sanity check. */
50bc768d
NS
10961 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
10962 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
8d08fdba 10963
058b15c1
MM
10964 fntype = TREE_TYPE (decl1);
10965 if (TREE_CODE (fntype) == METHOD_TYPE)
10966 ctype = TYPE_METHOD_BASETYPE (fntype);
caf93cb0 10967
058b15c1
MM
10968 /* ISO C++ 11.4/5. A friend function defined in a class is in
10969 the (lexical) scope of the class in which it is defined. */
10970 if (!ctype && DECL_FRIEND_P (decl1))
8d08fdba 10971 {
058b15c1 10972 ctype = DECL_FRIEND_CONTEXT (decl1);
caf93cb0 10973
058b15c1
MM
10974 /* CTYPE could be null here if we're dealing with a template;
10975 for example, `inline friend float foo()' inside a template
10976 will have no CTYPE set. */
10977 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
10978 ctype = NULL_TREE;
10979 else
10980 doing_friend = 1;
8d08fdba 10981 }
68642fb6 10982
97055d5c
AO
10983 if (DECL_DECLARED_INLINE_P (decl1)
10984 && lookup_attribute ("noinline", attrs))
dee15844 10985 warning (0, "inline function %q+D given attribute noinline", decl1);
97055d5c 10986
3a47c4e4
AO
10987 /* Handle gnu_inline attribute. */
10988 if (GNU_INLINE_P (decl1))
10989 {
10990 DECL_EXTERNAL (decl1) = 1;
10991 DECL_NOT_REALLY_EXTERN (decl1) = 0;
10992 DECL_INTERFACE_KNOWN (decl1) = 1;
12cdc4fa 10993 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
3a47c4e4
AO
10994 }
10995
5f6eeeb3
NS
10996 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
10997 /* This is a constructor, we must ensure that any default args
10998 introduced by this definition are propagated to the clones
10999 now. The clones are used directly in overload resolution. */
11000 adjust_clone_args (decl1);
11001
b35d4555
MM
11002 /* Sometimes we don't notice that a function is a static member, and
11003 build a METHOD_TYPE for it. Fix that up now. */
11004 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
11005 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
11006 {
3afb32a4 11007 revert_static_member_fn (decl1);
b35d4555
MM
11008 ctype = NULL_TREE;
11009 }
8d08fdba 11010
f181d4ae
MM
11011 /* Set up current_class_type, and enter the scope of the class, if
11012 appropriate. */
11013 if (ctype)
14d22dd6 11014 push_nested_class (ctype);
f181d4ae 11015 else if (DECL_STATIC_FUNCTION_P (decl1))
14d22dd6 11016 push_nested_class (DECL_CONTEXT (decl1));
f181d4ae
MM
11017
11018 /* Now that we have entered the scope of the class, we must restore
11019 the bindings for any template parameters surrounding DECL1, if it
11020 is an inline member template. (Order is important; consider the
11021 case where a template parameter has the same name as a field of
11022 the class.) It is not until after this point that
11023 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
a8f73d4b 11024 if (flags & SF_INCLASS_INLINE)
f181d4ae
MM
11025 maybe_begin_member_template_processing (decl1);
11026
56cb9733 11027 /* Effective C++ rule 15. */
9188c363 11028 if (warn_ecpp
596ea4e5 11029 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9188c363 11030 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
b323323f 11031 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
9188c363
MM
11032
11033 /* Make the init_value nonzero so pushdecl knows this is not tentative.
11034 error_mark_node is replaced below (in poplevel) with the BLOCK. */
b35d4555
MM
11035 if (!DECL_INITIAL (decl1))
11036 DECL_INITIAL (decl1) = error_mark_node;
9188c363 11037
9188c363
MM
11038 /* This function exists in static storage.
11039 (This does not mean `static' in the C sense!) */
11040 TREE_STATIC (decl1) = 1;
11041
11042 /* We must call push_template_decl after current_class_type is set
11043 up. (If we are processing inline definitions after exiting a
11044 class scope, current_class_type will be NULL_TREE until set above
11045 by push_nested_class.) */
11046 if (processing_template_decl)
11e97737
VR
11047 {
11048 /* FIXME: Handle error_mark_node more gracefully. */
11049 tree newdecl1 = push_template_decl (decl1);
11050 if (newdecl1 != error_mark_node)
0cbd7506 11051 decl1 = newdecl1;
11e97737 11052 }
9188c363 11053
f181d4ae 11054 /* We are now in the scope of the function being defined. */
8d08fdba 11055 current_function_decl = decl1;
f181d4ae 11056
5566b478
MS
11057 /* Save the parm names or decls from this function's declarator
11058 where store_parm_decls will find them. */
4546865e 11059 current_function_parms = DECL_ARGUMENTS (decl1);
8d08fdba 11060
a8f73d4b
MM
11061 /* Make sure the parameter and return types are reasonable. When
11062 you declare a function, these types can be incomplete, but they
11063 must be complete when you define the function. */
c9387915 11064 check_function_type (decl1, current_function_parms);
f181d4ae 11065
a8f73d4b
MM
11066 /* Build the return declaration for the function. */
11067 restype = TREE_TYPE (fntype);
e89a6075 11068 if (DECL_RESULT (decl1) == NULL_TREE)
a8f73d4b 11069 {
b785f485
RH
11070 tree resdecl;
11071
11072 resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
11073 DECL_ARTIFICIAL (resdecl) = 1;
11074 DECL_IGNORED_P (resdecl) = 1;
11075 DECL_RESULT (decl1) = resdecl;
11076
9804209d 11077 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
5566b478 11078 }
a8f73d4b 11079
a8f73d4b 11080 /* Let the user know we're compiling this function. */
ea11ca7e 11081 announce_function (decl1);
b7484fbe 11082
878cd289
MS
11083 /* Record the decl so that the function name is defined.
11084 If we already have a decl for this name, and it is a FUNCTION_DECL,
11085 use the old decl. */
a8f73d4b 11086 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
878cd289 11087 {
75650646 11088 /* A specialization is not used to guide overload resolution. */
18f5be99 11089 if (!DECL_FUNCTION_MEMBER_P (decl1)
caf93cb0 11090 && !(DECL_USE_TEMPLATE (decl1) &&
18f5be99 11091 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
b1a19c7c
MM
11092 {
11093 tree olddecl = pushdecl (decl1);
11094
11095 if (olddecl == error_mark_node)
11096 /* If something went wrong when registering the declaration,
11097 use DECL1; we have to have a FUNCTION_DECL to use when
11098 parsing the body of the function. */
11099 ;
11100 else
dfdec7a7
ILT
11101 {
11102 /* Otherwise, OLDDECL is either a previous declaration
11103 of the same function or DECL1 itself. */
11104
11105 if (warn_missing_declarations
11106 && olddecl == decl1
11107 && !DECL_MAIN_P (decl1)
11108 && TREE_PUBLIC (decl1)
11109 && !DECL_DECLARED_INLINE_P (decl1))
11110 {
11111 tree context;
11112
11113 /* Check whether DECL1 is in an anonymous
11114 namespace. */
11115 for (context = DECL_CONTEXT (decl1);
11116 context;
11117 context = DECL_CONTEXT (context))
11118 {
11119 if (TREE_CODE (context) == NAMESPACE_DECL
11120 && DECL_NAME (context) == NULL_TREE)
11121 break;
11122 }
11123
11124 if (context == NULL)
11125 warning (OPT_Wmissing_declarations,
11126 "no previous declaration for %q+D", decl1);
11127 }
11128
11129 decl1 = olddecl;
11130 }
b1a19c7c 11131 }
2c73f9f5 11132 else
b7698cf0 11133 {
a1c65f9f 11134 /* We need to set the DECL_CONTEXT. */
b7698cf0
JM
11135 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
11136 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
b7698cf0 11137 }
878cd289 11138 fntype = TREE_TYPE (decl1);
2ef06beb
MM
11139
11140 /* If #pragma weak applies, mark the decl appropriately now.
11141 The pragma only applies to global functions. Because
11142 determining whether or not the #pragma applies involves
11143 computing the mangled name for the declaration, we cannot
11144 apply the pragma until after we have merged this declaration
11145 with any previous declarations; if the original declaration
11146 has a linkage specification, that specification applies to
11147 the definition as well, and may affect the mangled name. */
11148 if (!DECL_CONTEXT (decl1))
11149 maybe_apply_pragma_weak (decl1);
878cd289 11150 }
5566b478 11151
72c4a4ca 11152 /* Reset this in case the call to pushdecl changed it. */
5566b478 11153 current_function_decl = decl1;
72c4a4ca
GK
11154
11155 gcc_assert (DECL_INITIAL (decl1));
11156
11157 /* This function may already have been parsed, in which case just
11158 return; our caller will skip over the body without parsing. */
11159 if (DECL_INITIAL (decl1) != error_mark_node)
11160 return;
11161
11162 /* Initialize RTL machinery. We cannot do this until
11163 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
11164 even when processing a template; this is how we get
11165 CFUN set up, and our per-function variables initialized.
11166 FIXME factor out the non-RTL stuff. */
11167 bl = current_binding_level;
11168 allocate_struct_function (decl1);
11169 current_binding_level = bl;
11170
11171 /* Even though we're inside a function body, we still don't want to
11172 call expand_expr to calculate the size of a variable-sized array.
11173 We haven't necessarily assigned RTL to all variables yet, so it's
11174 not safe to try to expand expressions involving them. */
11175 cfun->x_dont_save_pending_sizes_p = 1;
11176
11177 /* Start the statement-tree, start the tree now. */
11178 DECL_SAVED_TREE (decl1) = push_stmt_list ();
878cd289 11179
78c120b5
MM
11180 /* If we are (erroneously) defining a function that we have already
11181 defined before, wipe out what we knew before. */
e2500fed
GK
11182 if (!DECL_PENDING_INLINE_P (decl1))
11183 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
b35d4555 11184
f444e36b 11185 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
b35d4555
MM
11186 {
11187 /* We know that this was set up by `grokclassfn'. We do not
11188 wait until `store_parm_decls', since evil parse errors may
11189 never get us to that point. Here we keep the consistency
11190 between `current_class_type' and `current_class_ptr'. */
11191 tree t = DECL_ARGUMENTS (decl1);
68642fb6 11192
50bc768d
NS
11193 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
11194 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
68642fb6
UD
11195
11196 cp_function_chain->x_current_class_ref
3e411c3f 11197 = build_indirect_ref (t, NULL);
b35d4555
MM
11198 cp_function_chain->x_current_class_ptr = t;
11199
018fc244
MM
11200 /* Constructors and destructors need to know whether they're "in
11201 charge" of initializing virtual base classes. */
e0fff4b3 11202 t = TREE_CHAIN (t);
454fa7a7 11203 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
e0fff4b3
JM
11204 {
11205 current_in_charge_parm = t;
11206 t = TREE_CHAIN (t);
11207 }
11208 if (DECL_HAS_VTT_PARM_P (decl1))
11209 {
8dc2b103 11210 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
e0fff4b3
JM
11211 current_vtt_parm = t;
11212 }
b35d4555
MM
11213 }
11214
1ef0df47
MM
11215 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
11216 /* Implicitly-defined methods (like the
11217 destructor for a class in which no destructor
11218 is explicitly declared) must not be defined
11219 until their definition is needed. So, we
11220 ignore interface specifications for
11221 compiler-generated functions. */
11222 && !DECL_ARTIFICIAL (decl1));
3db45ab5 11223
db5ae43f 11224 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 11225 {
4f1c5b7d 11226 tree ctx = decl_function_context (decl1);
86052cc3 11227
faae18ab
MS
11228 if (DECL_NOT_REALLY_EXTERN (decl1))
11229 DECL_EXTERNAL (decl1) = 0;
86052cc3 11230
79065db2 11231 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
86052cc3
JM
11232 && TREE_PUBLIC (ctx))
11233 /* This is a function in a local class in an extern inline
11234 function. */
11235 comdat_linkage (decl1);
faae18ab 11236 }
8d08fdba
MS
11237 /* If this function belongs to an interface, it is public.
11238 If it belongs to someone else's interface, it is also external.
1f901793 11239 This only affects inlines and template instantiations. */
1ef0df47 11240 else if (!finfo->interface_unknown && honor_interface)
8d08fdba 11241 {
caf93cb0 11242 if (DECL_DECLARED_INLINE_P (decl1)
79065db2 11243 || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 11244 || processing_template_decl)
1f901793
JM
11245 {
11246 DECL_EXTERNAL (decl1)
5d709b00 11247 = (finfo->interface_only
caf93cb0 11248 || (DECL_DECLARED_INLINE_P (decl1)
79065db2 11249 && ! flag_implement_inlines
9c73ec84 11250 && !DECL_VINDEX (decl1)));
1f901793
JM
11251
11252 /* For WIN32 we also want to put these in linkonce sections. */
11253 maybe_make_one_only (decl1);
11254 }
db5ae43f 11255 else
893de33c 11256 DECL_EXTERNAL (decl1) = 0;
db5ae43f 11257 DECL_INTERFACE_KNOWN (decl1) = 1;
4684cd27 11258 /* If this function is in an interface implemented in this file,
3b426391 11259 make sure that the back end knows to emit this function
4684cd27
MM
11260 here. */
11261 if (!DECL_EXTERNAL (decl1))
11262 mark_needed (decl1);
8d08fdba 11263 }
5d709b00 11264 else if (finfo->interface_unknown && finfo->interface_only
1ef0df47 11265 && honor_interface)
c16c47fb
JM
11266 {
11267 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
5d709b00
ZW
11268 interface, we will have both finfo->interface_unknown and
11269 finfo->interface_only set. In that case, we don't want to
11270 use the normal heuristics because someone will supply a
11271 #pragma implementation elsewhere, and deducing it here would
11272 produce a conflict. */
c16c47fb
JM
11273 comdat_linkage (decl1);
11274 DECL_EXTERNAL (decl1) = 0;
11275 DECL_INTERFACE_KNOWN (decl1) = 1;
11276 DECL_DEFER_OUTPUT (decl1) = 1;
11277 }
8d08fdba 11278 else
a0a33927
MS
11279 {
11280 /* This is a definition, not a reference.
3a47c4e4
AO
11281 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
11282 if (!GNU_INLINE_P (decl1))
11283 DECL_EXTERNAL (decl1) = 0;
faae18ab 11284
caf93cb0 11285 if ((DECL_DECLARED_INLINE_P (decl1)
79065db2 11286 || DECL_TEMPLATE_INSTANTIATION (decl1))
5566b478
MS
11287 && ! DECL_INTERFACE_KNOWN (decl1)
11288 /* Don't try to defer nested functions for now. */
4f1c5b7d 11289 && ! decl_function_context (decl1))
878cd289
MS
11290 DECL_DEFER_OUTPUT (decl1) = 1;
11291 else
893de33c 11292 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 11293 }
a9aedbc2 11294
0ed5edac
JM
11295 /* Determine the ELF visibility attribute for the function. We must not
11296 do this before calling "pushdecl", as we must allow "duplicate_decls"
11297 to merge any attributes appropriately. We also need to wait until
11298 linkage is set. */
11299 if (!DECL_CLONED_FUNCTION_P (decl1))
11300 determine_visibility (decl1);
11301
ac20c67a 11302 begin_scope (sk_function_parms, decl1);
8d08fdba 11303
5566b478
MS
11304 ++function_depth;
11305
44d10c10
PB
11306 if (DECL_DESTRUCTOR_P (decl1)
11307 || (DECL_CONSTRUCTOR_P (decl1)
11308 && targetm.cxx.cdtor_returns_this ()))
46e8c075 11309 {
44d10c10
PB
11310 cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
11311 DECL_CONTEXT (cdtor_label) = current_function_decl;
46e8c075 11312 }
8d08fdba 11313
0ba8a114 11314 start_fname_decls ();
caf93cb0 11315
f444e36b 11316 store_parm_decls (current_function_parms);
058b15c1
MM
11317}
11318
11319
11320/* Like start_preparsed_function, except that instead of a
11321 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
11322
11323 Returns 1 on success. If the DECLARATOR is not suitable for a function
11324 (it defines a datum instead), we return 0, which tells
11325 yyparse to report a parse error. */
11326
11327int
caf93cb0 11328start_function (cp_decl_specifier_seq *declspecs,
62d1db17 11329 const cp_declarator *declarator,
058b15c1
MM
11330 tree attrs)
11331{
11332 tree decl1;
11333
058b15c1
MM
11334 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
11335 /* If the declarator is not suitable for a function definition,
11336 cause a syntax error. */
11337 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
11338 return 0;
caf93cb0 11339
058b15c1 11340 if (DECL_MAIN_P (decl1))
2cfe82fe
ZW
11341 /* main must return int. grokfndecl should have corrected it
11342 (and issued a diagnostic) if the user got it wrong. */
11343 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
11344 integer_type_node));
058b15c1
MM
11345
11346 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
f444e36b 11347
8d08fdba
MS
11348 return 1;
11349}
11350\f
68d04c67
MM
11351/* Returns true iff an EH_SPEC_BLOCK should be created in the body of
11352 FN. */
11353
11354static bool
11355use_eh_spec_block (tree fn)
11356{
11357 return (flag_exceptions && flag_enforce_eh_specs
11358 && !processing_template_decl
11359 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
11360 /* We insert the EH_SPEC_BLOCK only in the original
11361 function; then, it is copied automatically to the
11362 clones. */
11363 && !DECL_CLONED_FUNCTION_P (fn)
11364 /* Implicitly-generated constructors and destructors have
11365 exception specifications. However, those specifications
11366 are the union of the possible exceptions specified by the
11367 constructors/destructors for bases and members, so no
11368 unallowed exception will ever reach this function. By
11369 not creating the EH_SPEC_BLOCK we save a little memory,
11370 and we avoid spurious warnings about unreachable
11371 code. */
11372 && !DECL_ARTIFICIAL (fn));
11373}
11374
8d08fdba
MS
11375/* Store the parameter declarations into the current function declaration.
11376 This is called after parsing the parameter declarations, before
11377 digesting the body of the function.
11378
11379 Also install to binding contour return value identifier, if any. */
11380
f444e36b 11381static void
11f6b451 11382store_parm_decls (tree current_function_parms)
8d08fdba 11383{
926ce8bd
KH
11384 tree fndecl = current_function_decl;
11385 tree parm;
8d08fdba 11386
8d08fdba
MS
11387 /* This is a chain of any other decls that came in among the parm
11388 declarations. If a parm is declared with enum {foo, bar} x;
11389 then CONST_DECLs for foo and bar are put here. */
11390 tree nonparms = NULL_TREE;
11391
b35d4555 11392 if (current_function_parms)
8d08fdba
MS
11393 {
11394 /* This case is when the function was defined with an ANSI prototype.
11395 The parms already have decls, so we need not do anything here
11396 except record them as in effect
11397 and complain if any redundant old-style parm decls were written. */
11398
b35d4555
MM
11399 tree specparms = current_function_parms;
11400 tree next;
11401
f444e36b 11402 /* Must clear this because it might contain TYPE_DECLs declared
b35d4555 11403 at class level. */
00e8de68 11404 current_binding_level->names = NULL;
8d08fdba 11405
f444e36b 11406 /* If we're doing semantic analysis, then we'll call pushdecl
b35d4555
MM
11407 for each of these. We must do them in reverse order so that
11408 they end in the correct forward order. */
f444e36b 11409 specparms = nreverse (specparms);
5566b478 11410
b35d4555 11411 for (parm = specparms; parm; parm = next)
8d08fdba
MS
11412 {
11413 next = TREE_CHAIN (parm);
11414 if (TREE_CODE (parm) == PARM_DECL)
11415 {
f444e36b
MM
11416 if (DECL_NAME (parm) == NULL_TREE
11417 || TREE_CODE (parm) != VOID_TYPE)
11418 pushdecl (parm);
11419 else
2d01edd7 11420 error ("parameter %qD declared void", parm);
8d08fdba
MS
11421 }
11422 else
11423 {
11424 /* If we find an enum constant or a type tag,
11425 put it aside for the moment. */
11426 TREE_CHAIN (parm) = NULL_TREE;
11427 nonparms = chainon (nonparms, parm);
11428 }
11429 }
11430
f444e36b
MM
11431 /* Get the decls in their original chain order and record in the
11432 function. This is all and only the PARM_DECLs that were
11433 pushed into scope by the loop above. */
11434 DECL_ARGUMENTS (fndecl) = getdecls ();
8d08fdba
MS
11435 }
11436 else
11437 DECL_ARGUMENTS (fndecl) = NULL_TREE;
11438
11439 /* Now store the final chain of decls for the arguments
11440 as the decl-chain of the current lexical scope.
11441 Put the enumerators in as well, at the front so that
11442 DECL_ARGUMENTS is not modified. */
00e8de68 11443 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
eb448459 11444
68d04c67
MM
11445 if (use_eh_spec_block (current_function_decl))
11446 current_eh_spec_block = begin_eh_spec_block ();
8d08fdba
MS
11447}
11448
8d08fdba 11449\f
59026e79
MM
11450/* We have finished doing semantic analysis on DECL, but have not yet
11451 generated RTL for its body. Save away our current state, so that
11452 when we want to generate RTL later we know what to do. */
11453
11454static void
11f6b451 11455save_function_data (tree decl)
59026e79 11456{
e2500fed 11457 struct language_function *f;
59026e79
MM
11458
11459 /* Save the language-specific per-function data so that we can
11460 get it back when we really expand this function. */
50bc768d 11461 gcc_assert (!DECL_PENDING_INLINE_P (decl));
68642fb6 11462
59026e79 11463 /* Make a copy. */
99dd239f 11464 f = GGC_NEW (struct language_function);
e2500fed 11465 memcpy (f, cp_function_chain, sizeof (struct language_function));
59026e79
MM
11466 DECL_SAVED_FUNCTION_DATA (decl) = f;
11467
11468 /* Clear out the bits we don't need. */
325c3691 11469 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
59026e79 11470 f->bindings = NULL;
8e4ce833 11471 f->x_local_names = NULL;
59026e79
MM
11472}
11473
cdd2559c 11474
44d10c10 11475/* Set the return value of the constructor (if present). */
efee38a9
MM
11476
11477static void
11f6b451 11478finish_constructor_body (void)
efee38a9 11479{
44d10c10
PB
11480 tree val;
11481 tree exprstmt;
11482
11483 if (targetm.cxx.cdtor_returns_this ())
11484 {
11485 /* Any return from a constructor will end up here. */
11486 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
11487
11488 val = DECL_ARGUMENTS (current_function_decl);
f293ce4b
RS
11489 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
11490 DECL_RESULT (current_function_decl), val);
44d10c10
PB
11491 /* Return the address of the object. */
11492 exprstmt = build_stmt (RETURN_EXPR, val);
11493 add_stmt (exprstmt);
11494 }
efee38a9
MM
11495}
11496
cdd2559c
JM
11497/* Do all the processing for the beginning of a destructor; set up the
11498 vtable pointers and cleanups for bases and members. */
11499
11500static void
11f6b451 11501begin_destructor_body (void)
cdd2559c 11502{
cdd2559c
JM
11503 tree compound_stmt;
11504
0e686aa6
MM
11505 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
11506 issued an error message. We still want to try to process the
11507 body of the function, but initialize_vtbl_ptrs will crash if
11508 TYPE_BINFO is NULL. */
11509 if (COMPLETE_TYPE_P (current_class_type))
11510 {
11511 compound_stmt = begin_compound_stmt (0);
11512 /* Make all virtual function table pointers in non-virtual base
11513 classes point to CURRENT_CLASS_TYPE's virtual function
11514 tables. */
11515 initialize_vtbl_ptrs (current_class_ptr);
11516 finish_compound_stmt (compound_stmt);
3db45ab5 11517
0e686aa6
MM
11518 /* And insert cleanups for our bases and members so that they
11519 will be properly destroyed if we throw. */
11520 push_base_cleanups ();
11521 }
cdd2559c
JM
11522}
11523
ade3dc07
JM
11524/* At the end of every destructor we generate code to delete the object if
11525 necessary. Do that now. */
9bfadf57
MM
11526
11527static void
11f6b451 11528finish_destructor_body (void)
9bfadf57 11529{
9bfadf57
MM
11530 tree exprstmt;
11531
5633b37c
MM
11532 /* Any return from a destructor will end up here; that way all base
11533 and member cleanups will be run when the function returns. */
44d10c10 11534 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
5633b37c 11535
52682a1b
MM
11536 /* In a virtual destructor, we must call delete. */
11537 if (DECL_VIRTUAL_P (current_function_decl))
11538 {
11539 tree if_stmt;
fa72b064 11540 tree virtual_size = cxx_sizeof (current_class_type);
68642fb6 11541
52682a1b 11542 /* [class.dtor]
68642fb6 11543
ade3dc07
JM
11544 At the point of definition of a virtual destructor (including
11545 an implicit definition), non-placement operator delete shall
11546 be looked up in the scope of the destructor's class and if
11547 found shall be accessible and unambiguous. */
3db45ab5 11548 exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
63c9a190 11549 virtual_size,
3db45ab5
MS
11550 /*global_p=*/false,
11551 /*placement=*/NULL_TREE,
63c9a190 11552 /*alloc_fn=*/NULL_TREE);
298d6f60 11553
52682a1b 11554 if_stmt = begin_if_stmt ();
f293ce4b
RS
11555 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
11556 current_in_charge_parm,
11557 integer_one_node),
52682a1b
MM
11558 if_stmt);
11559 finish_expr_stmt (exprstmt);
11560 finish_then_clause (if_stmt);
325c3691 11561 finish_if_stmt (if_stmt);
52682a1b 11562 }
44d10c10
PB
11563
11564 if (targetm.cxx.cdtor_returns_this ())
11565 {
11566 tree val;
11567
11568 val = DECL_ARGUMENTS (current_function_decl);
f293ce4b
RS
11569 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
11570 DECL_RESULT (current_function_decl), val);
44d10c10
PB
11571 /* Return the address of the object. */
11572 exprstmt = build_stmt (RETURN_EXPR, val);
11573 add_stmt (exprstmt);
11574 }
ade3dc07 11575}
9bfadf57 11576
ade3dc07
JM
11577/* Do the necessary processing for the beginning of a function body, which
11578 in this case includes member-initializers, but not the catch clauses of
11579 a function-try-block. Currently, this means opening a binding level
86ad3aa9 11580 for the member-initializers (in a ctor) and member cleanups (in a dtor). */
ade3dc07
JM
11581
11582tree
11f6b451 11583begin_function_body (void)
ade3dc07 11584{
cdd2559c
JM
11585 tree stmt;
11586
86ad3aa9
JM
11587 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
11588 return NULL_TREE;
11589
b5856475
JM
11590 if (processing_template_decl)
11591 /* Do nothing now. */;
11592 else
11593 /* Always keep the BLOCK node associated with the outermost pair of
11594 curly braces of a function. These are needed for correct
11595 operation of dwarfout.c. */
ac20c67a 11596 keep_next_level (true);
b5856475 11597
325c3691 11598 stmt = begin_compound_stmt (BCS_FN_BODY);
cdd2559c
JM
11599
11600 if (processing_template_decl)
11601 /* Do nothing now. */;
cdd2559c
JM
11602 else if (DECL_DESTRUCTOR_P (current_function_decl))
11603 begin_destructor_body ();
11604
ade3dc07 11605 return stmt;
9bfadf57
MM
11606}
11607
ade3dc07
JM
11608/* Do the processing for the end of a function body. Currently, this means
11609 closing out the cleanups for fully-constructed bases and members, and in
11610 the case of the destructor, deleting the object if desired. Again, this
11611 is only meaningful for [cd]tors, since they are the only functions where
11612 there is a significant distinction between the main body and any
11613 function catch clauses. Handling, say, main() return semantics here
11614 would be wrong, as flowing off the end of a function catch clause for
11615 main() would also need to return 0. */
11616
11617void
11f6b451 11618finish_function_body (tree compstmt)
ade3dc07 11619{
86ad3aa9
JM
11620 if (compstmt == NULL_TREE)
11621 return;
3db45ab5 11622
5633b37c 11623 /* Close the block. */
7a3397c7 11624 finish_compound_stmt (compstmt);
ade3dc07
JM
11625
11626 if (processing_template_decl)
11627 /* Do nothing now. */;
11628 else if (DECL_CONSTRUCTOR_P (current_function_decl))
11629 finish_constructor_body ();
11630 else if (DECL_DESTRUCTOR_P (current_function_decl))
11631 finish_destructor_body ();
caf93cb0 11632}
ade3dc07 11633
86ad3aa9
JM
11634/* Given a function, returns the BLOCK corresponding to the outermost level
11635 of curly braces, skipping the artificial block created for constructor
11636 initializers. */
11637
11638static tree
11639outer_curly_brace_block (tree fndecl)
11640{
11641 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
11642 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
11643 /* Skip the artificial function body block. */
11644 block = BLOCK_SUBBLOCKS (block);
11645 return block;
11646}
11647
8d08fdba
MS
11648/* Finish up a function declaration and compile that function
11649 all the way to assembler language output. The free the storage
11650 for the function definition.
11651
68642fb6 11652 FLAGS is a bitwise or of the following values:
f181d4ae
MM
11653 2 - INCLASS_INLINE
11654 We just finished processing the body of an in-class inline
11655 function definition. (This processing will have taken place
87e3dbc9 11656 after the class definition is complete.) */
8d08fdba 11657
4d6abc1c 11658tree
11f6b451 11659finish_function (int flags)
8d08fdba 11660{
926ce8bd 11661 tree fndecl = current_function_decl;
8d08fdba 11662 tree fntype, ctype = NULL_TREE;
f181d4ae 11663 int inclass_inline = (flags & 2) != 0;
87e3dbc9 11664 int nested;
8d08fdba
MS
11665
11666 /* When we get some parse errors, we can end up without a
11667 current_function_decl, so cope. */
11668 if (fndecl == NULL_TREE)
4d6abc1c 11669 return error_mark_node;
8d08fdba 11670
9aad8f83
MA
11671 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
11672 && DECL_VIRTUAL_P (fndecl)
11673 && !processing_template_decl)
11674 {
11675 tree fnclass = DECL_CONTEXT (fndecl);
11676 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
11677 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
11678 }
11679
87e3dbc9 11680 nested = function_depth > 1;
8d08fdba
MS
11681 fntype = TREE_TYPE (fndecl);
11682
9bfadf57
MM
11683 /* TREE_READONLY (fndecl) = 1;
11684 This caused &foo to be of type ptr-to-const-function
11685 which then got a warning when stored in a ptr-to-function variable. */
8d08fdba 11686
50bc768d 11687 gcc_assert (building_stmt_tree ());
72c4a4ca
GK
11688 /* The current function is being defined, so its DECL_INITIAL should
11689 be set, and unless there's a multiple definition, it should be
11690 error_mark_node. */
11691 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
caf93cb0 11692
db9b2174
MM
11693 /* For a cloned function, we've already got all the code we need;
11694 there's no need to add any extra bits. */
f444e36b 11695 if (!DECL_CLONED_FUNCTION_P (fndecl))
8d08fdba 11696 {
ade3dc07 11697 if (DECL_MAIN_P (current_function_decl))
efee38a9 11698 {
43e05e45
SB
11699 tree stmt;
11700
11701 /* Make it so that `main' always returns 0 by default (or
11702 1 for VMS). */
08c7ae5a 11703#if VMS_TARGET
43e05e45 11704 stmt = finish_return_stmt (integer_one_node);
efee38a9 11705#else
43e05e45 11706 stmt = finish_return_stmt (integer_zero_node);
efee38a9 11707#endif
43e05e45
SB
11708 /* Hack. We don't want the middle-end to warn that this
11709 return is unreachable, so put the statement on the
11710 special line 0. */
176a0aad 11711#ifdef USE_MAPPED_LOCATION
5ffeb913
TT
11712 {
11713 location_t linezero = linemap_line_start (line_table, 0, 1);
11714 SET_EXPR_LOCATION (stmt, linezero);
11715 }
176a0aad 11716#else
43e05e45 11717 annotate_with_file_line (stmt, input_filename, 0);
176a0aad 11718#endif
efee38a9 11719 }
87e3dbc9 11720
68d04c67 11721 if (use_eh_spec_block (current_function_decl))
52a11cbf
RH
11722 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
11723 (TREE_TYPE (current_function_decl)),
11724 current_eh_spec_block);
5566b478 11725 }
68642fb6 11726
558475f0 11727 /* If we're saving up tree structure, tie off the function now. */
325c3691
RH
11728 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
11729
11730 finish_fname_decls ();
8d2733ca 11731
b2dd096b
MM
11732 /* If this function can't throw any exceptions, remember that. */
11733 if (!processing_template_decl
11734 && !cp_function_chain->can_throw
be0436d7 11735 && !flag_non_call_exceptions
56fd65c7 11736 && !DECL_REPLACEABLE_P (fndecl))
b2dd096b
MM
11737 TREE_NOTHROW (fndecl) = 1;
11738
8d08fdba
MS
11739 /* This must come after expand_function_end because cleanups might
11740 have declarations (from inline functions) that need to go into
11741 this function's blocks. */
caf93cb0 11742
7437519c
ZW
11743 /* If the current binding level isn't the outermost binding level
11744 for this function, either there is a bug, or we have experienced
11745 syntax errors and the statement tree is malformed. */
a7e8c268 11746 if (current_binding_level->kind != sk_function_parms)
7437519c
ZW
11747 {
11748 /* Make sure we have already experienced errors. */
8dc2b103 11749 gcc_assert (errorcount);
7437519c
ZW
11750
11751 /* Throw away the broken statement tree and extra binding
0cbd7506 11752 levels. */
5882f0f3 11753 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
7437519c 11754
a7e8c268 11755 while (current_binding_level->kind != sk_function_parms)
7437519c 11756 {
a7e8c268 11757 if (current_binding_level->kind == sk_class)
7437519c
ZW
11758 pop_nested_class ();
11759 else
11760 poplevel (0, 0, 0);
11761 }
11762 }
f444e36b 11763 poplevel (1, 0, 1);
8d08fdba 11764
4985cde3
RH
11765 /* Statements should always be full-expressions at the outermost set
11766 of curly braces for a function. */
50bc768d 11767 gcc_assert (stmts_are_full_exprs_p ());
4985cde3 11768
6de9cd9a 11769 /* Set up the named return value optimization, if we can. Candidate
59fe9274 11770 variables are selected in check_return_expr. */
07b2f2fd
JM
11771 if (current_function_return_value)
11772 {
11773 tree r = current_function_return_value;
35e939ae
JM
11774 tree outer;
11775
07b2f2fd 11776 if (r != error_mark_node
35e939ae
JM
11777 /* This is only worth doing for fns that return in memory--and
11778 simpler, since we don't have to worry about promoted modes. */
61f71b34 11779 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
35e939ae
JM
11780 /* Only allow this for variables declared in the outer scope of
11781 the function so we know that their lifetime always ends with a
11782 return; see g++.dg/opt/nrv6.C. We could be more flexible if
11783 we were to do this optimization in tree-ssa. */
86ad3aa9 11784 && (outer = outer_curly_brace_block (fndecl))
325c3691 11785 && chain_member (r, BLOCK_VARS (outer)))
6de9cd9a
DN
11786 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
11787
11788 current_function_return_value = NULL_TREE;
07b2f2fd
JM
11789 }
11790
a8f73d4b 11791 /* Remember that we were in class scope. */
db5ae43f 11792 if (current_class_name)
a8f73d4b 11793 ctype = current_class_type;
db5ae43f 11794
1caa11d3
MM
11795 /* Must mark the RESULT_DECL as being in this function. */
11796 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
11797
11798 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
11799 to the FUNCTION_DECL node itself. */
11800 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
11801
59026e79 11802 /* Save away current state, if appropriate. */
f444e36b 11803 if (!processing_template_decl)
59026e79
MM
11804 save_function_data (fndecl);
11805
efe49da0 11806 /* Complain if there's just no return statement. */
46cfb101 11807 if (warn_return_type
efe49da0 11808 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
c1b83cc9 11809 && !dependent_type_p (TREE_TYPE (fntype))
57d5032b 11810 && !current_function_returns_value && !current_function_returns_null
efe49da0
JM
11811 /* Don't complain if we abort or throw. */
11812 && !current_function_returns_abnormally
55e99d52 11813 && !DECL_NAME (DECL_RESULT (fndecl))
46cfb101 11814 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
efe49da0 11815 inline function, as we might never be compiled separately. */
44d10c10
PB
11816 && (DECL_INLINE (fndecl) || processing_template_decl)
11817 /* Structor return values (if any) are set by the compiler. */
11818 && !DECL_CONSTRUCTOR_P (fndecl)
11819 && !DECL_DESTRUCTOR_P (fndecl))
b323323f 11820 warning (OPT_Wreturn_type, "no return statement in function returning non-void");
4985cde3 11821
6de9cd9a
DN
11822 /* Store the end of the function, so that we get good line number
11823 info for the epilogue. */
11824 cfun->function_end_locus = input_location;
11825
11826 /* Genericize before inlining. */
11827 if (!processing_template_decl)
11828 {
37e6d6fe 11829 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
5a508662 11830 cp_genericize (fndecl);
37e6d6fe
JH
11831 /* Clear out the bits we don't need. */
11832 f->x_current_class_ptr = NULL;
11833 f->x_current_class_ref = NULL;
11834 f->x_eh_spec_block = NULL;
11835 f->x_in_charge_parm = NULL;
11836 f->x_vtt_parm = NULL;
11837 f->x_return_value = NULL;
11838 f->bindings = NULL;
10827cd8 11839 f->extern_decl_map = NULL;
6de9cd9a
DN
11840
11841 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
11842 c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
11843 }
37e6d6fe
JH
11844 /* Clear out the bits we don't need. */
11845 local_names = NULL;
6de9cd9a
DN
11846
11847 /* We're leaving the context of this function, so zap cfun. It's still in
11848 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
db2960f4 11849 set_cfun (NULL);
c1f927e8 11850 current_function_decl = NULL;
a8f73d4b 11851
27631dae 11852 /* If this is an in-class inline definition, we may have to pop the
a8f73d4b
MM
11853 bindings for the template parameters that we added in
11854 maybe_begin_member_template_processing when start_function was
11855 called. */
11856 if (inclass_inline)
11857 maybe_end_member_template_processing ();
11858
11859 /* Leave the scope of the class. */
11860 if (ctype)
11861 pop_nested_class ();
5566b478
MS
11862
11863 --function_depth;
8d08fdba 11864
4d6abc1c 11865 /* Clean up. */
28cbf42c 11866 if (! nested)
1f8f4a0b
MM
11867 /* Let the error reporting routines know that we're outside a
11868 function. For a nested function, this value is used in
b03e38e1 11869 cxx_pop_function_context and then reset via pop_function_context. */
1f8f4a0b 11870 current_function_decl = NULL_TREE;
4d6abc1c
MM
11871
11872 return fndecl;
8d08fdba
MS
11873}
11874\f
11875/* Create the FUNCTION_DECL for a function definition.
8d08fdba
MS
11876 DECLSPECS and DECLARATOR are the parts of the declaration;
11877 they describe the return type and the name of the function,
11878 but twisted together in a fashion that parallels the syntax of C.
11879
11880 This function creates a binding context for the function body
11881 as well as setting up the FUNCTION_DECL in current_function_decl.
11882
11883 Returns a FUNCTION_DECL on success.
11884
11885 If the DECLARATOR is not suitable for a function (it defines a datum
11886 instead), we return 0, which tells yyparse to report a parse error.
11887
11888 May return void_type_node indicating that this method is actually
11889 a friend. See grokfield for more details.
11890
11891 Came here with a `.pushlevel' .
11892
11893 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
11894 CHANGES TO CODE IN `grokfield'. */
e92cc029 11895
8d08fdba 11896tree
caf93cb0 11897start_method (cp_decl_specifier_seq *declspecs,
0cbd7506 11898 const cp_declarator *declarator, tree attrlist)
8d08fdba 11899{
c11b6f21 11900 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
91d231cb 11901 &attrlist);
8d08fdba 11902
a723baf1
MM
11903 if (fndecl == error_mark_node)
11904 return error_mark_node;
11905
11906 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
11907 {
11908 error ("invalid member function declaration");
11909 return error_mark_node;
11910 }
8d08fdba 11911
195a5def
IR
11912 if (attrlist)
11913 cplus_decl_attributes (&fndecl, attrlist, 0);
11914
8d08fdba 11915 /* Pass friends other than inline friend functions back. */
a1774733 11916 if (fndecl == void_type_node)
8d08fdba
MS
11917 return fndecl;
11918
8d08fdba
MS
11919 if (DECL_IN_AGGR_P (fndecl))
11920 {
58ec3cc5 11921 if (DECL_CONTEXT (fndecl)
6d69fe27 11922 && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
2d01edd7 11923 error ("%qD is already defined in class %qT", fndecl,
58ec3cc5 11924 DECL_CONTEXT (fndecl));
8ca4bf25 11925 return error_mark_node;
8d08fdba
MS
11926 }
11927
f3400fe2
JM
11928 check_template_shadow (fndecl);
11929
79065db2 11930 DECL_DECLARED_INLINE_P (fndecl) = 1;
8926095f 11931 if (flag_default_inline)
8d08fdba
MS
11932 DECL_INLINE (fndecl) = 1;
11933
36a117a5
MM
11934 /* We process method specializations in finish_struct_1. */
11935 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
4b0d3cbe
MM
11936 {
11937 fndecl = push_template_decl (fndecl);
11938 if (fndecl == error_mark_node)
11939 return fndecl;
11940 }
a0a33927 11941
8d08fdba
MS
11942 if (! DECL_FRIEND_P (fndecl))
11943 {
8d08fdba
MS
11944 if (TREE_CHAIN (fndecl))
11945 {
11946 fndecl = copy_node (fndecl);
11947 TREE_CHAIN (fndecl) = NULL_TREE;
11948 }
8d08fdba
MS
11949 }
11950
d174af6c 11951 finish_decl (fndecl, NULL_TREE, NULL_TREE);
8d08fdba 11952
f4f206f4 11953 /* Make a place for the parms. */
ac20c67a 11954 begin_scope (sk_function_parms, fndecl);
68642fb6 11955
8d08fdba
MS
11956 DECL_IN_AGGR_P (fndecl) = 1;
11957 return fndecl;
11958}
11959
11960/* Go through the motions of finishing a function definition.
11961 We don't compile this method until after the whole class has
11962 been processed.
11963
11964 FINISH_METHOD must return something that looks as though it
11965 came from GROKFIELD (since we are defining a method, after all).
11966
11967 This is called after parsing the body of the function definition.
11968 STMTS is the chain of statements that makes up the function body.
11969
11970 DECL is the ..._DECL that `start_method' provided. */
11971
11972tree
11f6b451 11973finish_method (tree decl)
8d08fdba 11974{
926ce8bd 11975 tree fndecl = decl;
8d08fdba 11976 tree old_initial;
8d08fdba 11977
926ce8bd 11978 tree link;
8d08fdba 11979
a1774733 11980 if (decl == void_type_node)
8d08fdba
MS
11981 return decl;
11982
11983 old_initial = DECL_INITIAL (fndecl);
11984
11985 /* Undo the level for the parms (from start_method).
11986 This is like poplevel, but it causes nothing to be
11987 saved. Saving information here confuses symbol-table
11988 output routines. Besides, this information will
11989 be correctly output when this method is actually
11990 compiled. */
11991
11992 /* Clear out the meanings of the local variables of this level;
11993 also record in each decl which block it belongs to. */
11994
11995 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
11996 {
11997 if (DECL_NAME (link) != NULL_TREE)
d8f8dca1 11998 pop_binding (DECL_NAME (link), link);
50bc768d 11999 gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
8d08fdba
MS
12000 DECL_CONTEXT (link) = NULL_TREE;
12001 }
12002
8d08fdba
MS
12003 poplevel (0, 0, 0);
12004
12005 DECL_INITIAL (fndecl) = old_initial;
12006
12007 /* We used to check if the context of FNDECL was different from
12008 current_class_type as another way to get inside here. This didn't work
12009 for String.cc in libg++. */
12010 if (DECL_FRIEND_P (fndecl))
12011 {
d4e6fecb 12012 VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
585b44d3 12013 fndecl);
8d08fdba
MS
12014 decl = void_type_node;
12015 }
12016
12017 return decl;
12018}
12019\f
0154eaa8
MM
12020
12021/* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
12022 we can lay it out later, when and if its type becomes complete. */
8d08fdba
MS
12023
12024void
11f6b451 12025maybe_register_incomplete_var (tree var)
8d08fdba 12026{
50bc768d 12027 gcc_assert (TREE_CODE (var) == VAR_DECL);
8d08fdba 12028
0154eaa8 12029 /* Keep track of variables with incomplete types. */
caf93cb0 12030 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
0154eaa8 12031 && DECL_EXTERNAL (var))
70adf8a9 12032 {
0154eaa8 12033 tree inner_type = TREE_TYPE (var);
caf93cb0 12034
0154eaa8
MM
12035 while (TREE_CODE (inner_type) == ARRAY_TYPE)
12036 inner_type = TREE_TYPE (inner_type);
12037 inner_type = TYPE_MAIN_VARIANT (inner_type);
caf93cb0 12038
0154eaa8
MM
12039 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
12040 /* RTTI TD entries are created while defining the type_info. */
12041 || (TYPE_LANG_SPECIFIC (inner_type)
12042 && TYPE_BEING_DEFINED (inner_type)))
12043 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
70adf8a9 12044 }
0154eaa8 12045}
70adf8a9 12046
0154eaa8
MM
12047/* Called when a class type (given by TYPE) is defined. If there are
12048 any existing VAR_DECLs whose type hsa been completed by this
12049 declaration, update them now. */
70adf8a9 12050
0154eaa8 12051void
11f6b451 12052complete_vars (tree type)
0154eaa8
MM
12053{
12054 tree *list = &incomplete_vars;
12055
50bc768d 12056 gcc_assert (CLASS_TYPE_P (type));
caf93cb0 12057 while (*list)
0154eaa8
MM
12058 {
12059 if (same_type_p (type, TREE_PURPOSE (*list)))
70adf8a9 12060 {
0154eaa8 12061 tree var = TREE_VALUE (*list);
67935995 12062 tree type = TREE_TYPE (var);
c740732f
MM
12063 /* Complete the type of the variable. The VAR_DECL itself
12064 will be laid out in expand_expr. */
67935995
MM
12065 complete_type (type);
12066 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
0154eaa8
MM
12067 /* Remove this entry from the list. */
12068 *list = TREE_CHAIN (*list);
f30432d7
MS
12069 }
12070 else
0154eaa8 12071 list = &TREE_CHAIN (*list);
f30432d7 12072 }
7fb213d8
GB
12073
12074 /* Check for pending declarations which may have abstract type. */
12075 complete_type_check_abstract (type);
8d08fdba
MS
12076}
12077
5c113154
MM
12078/* If DECL is of a type which needs a cleanup, build and return an
12079 expression to perform that cleanup here. Return NULL_TREE if no
12080 cleanup need be done. */
e92cc029 12081
86f45d2c 12082tree
11f6b451 12083cxx_maybe_build_cleanup (tree decl)
8d08fdba 12084{
5c113154
MM
12085 tree type;
12086 tree attr;
12087 tree cleanup;
12088
12089 /* Assume no cleanup is required. */
12090 cleanup = NULL_TREE;
86f45d2c 12091
5c113154
MM
12092 if (error_operand_p (decl))
12093 return cleanup;
12094
12095 /* Handle "__attribute__((cleanup))". We run the cleanup function
12096 before the destructor since the destructor is what actually
12097 terminates the lifetime of the object. */
12098 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
12099 if (attr)
12100 {
12101 tree id;
12102 tree fn;
12103 tree arg;
12104
12105 /* Get the name specified by the user for the cleanup function. */
12106 id = TREE_VALUE (TREE_VALUE (attr));
12107 /* Look up the name to find the cleanup function to call. It is
12108 important to use lookup_name here because that is what is
12109 used in c-common.c:handle_cleanup_attribute when performing
12110 initial checks on the attribute. Note that those checks
12111 include ensuring that the function found is not an overloaded
12112 function, or an object with an overloaded call operator,
12113 etc.; we can rely on the fact that the functionfound is an
12114 ordinary FUNCTION_DECL. */
12115 fn = lookup_name (id);
12116 arg = build_address (decl);
12117 mark_used (decl);
12118 cleanup = build_function_call (fn, build_tree_list (NULL_TREE,
12119 arg));
12120 }
12121 /* Handle ordinary C++ destructors. */
12122 type = TREE_TYPE (decl);
12123 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8d08fdba 12124 {
80048418 12125 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
5775a06a
NS
12126 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
12127 && CLASSTYPE_VBASECLASSES (type));
5c113154
MM
12128 tree addr;
12129 tree call;
8d08fdba 12130
8d08fdba 12131 if (TREE_CODE (type) == ARRAY_TYPE)
5c113154 12132 addr = decl;
8d08fdba 12133 else
5818c8e4 12134 addr = build_address (decl);
8d08fdba
MS
12135
12136 /* Optimize for space over speed here. */
5775a06a 12137 if (!has_vbases || flag_expensive_optimizations)
8d08fdba
MS
12138 flags |= LOOKUP_NONVIRTUAL;
12139
5c113154 12140 call = build_delete (TREE_TYPE (addr), addr,
86f45d2c 12141 sfk_complete_destructor, flags, 0);
5c113154
MM
12142 if (cleanup)
12143 cleanup = build_compound_expr (cleanup, call);
12144 else
12145 cleanup = call;
8d08fdba 12146 }
5c113154
MM
12147
12148 return cleanup;
8d08fdba
MS
12149}
12150\f
558475f0 12151/* When a stmt has been parsed, this function is called. */
8d08fdba
MS
12152
12153void
11f6b451 12154finish_stmt (void)
8d08fdba 12155{
8d08fdba
MS
12156}
12157
3afb32a4
MM
12158/* DECL was originally constructed as a non-static member function,
12159 but turned out to be static. Update it accordingly. */
700f8a87 12160
8857f91e 12161void
11f6b451 12162revert_static_member_fn (tree decl)
8d08fdba 12163{
700f8a87 12164 tree tmp;
3afb32a4
MM
12165 tree function = TREE_TYPE (decl);
12166 tree args = TYPE_ARG_TYPES (function);
8d08fdba 12167
89d684bb 12168 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
91063b51 12169 != TYPE_UNQUALIFIED)
c4f73174 12170 error ("static member function %q#D declared with type qualifiers", decl);
f30432d7 12171
700f8a87
MS
12172 args = TREE_CHAIN (args);
12173 tmp = build_function_type (TREE_TYPE (function), args);
89d684bb 12174 tmp = build_qualified_type (tmp, cp_type_quals (function));
f30432d7 12175 tmp = build_exception_variant (tmp,
8d08fdba 12176 TYPE_RAISES_EXCEPTIONS (function));
3afb32a4
MM
12177 TREE_TYPE (decl) = tmp;
12178 if (DECL_ARGUMENTS (decl))
12179 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
12180 DECL_STATIC_FUNCTION_P (decl) = 1;
8d08fdba 12181}
a4443a08 12182
68642fb6
UD
12183/* Initialize the variables used during compilation of a C++
12184 function. */
db5ae43f 12185
b03e38e1 12186void
11f6b451 12187cxx_push_function_context (struct function * f)
99dccabc 12188{
99dd239f 12189 struct language_function *p = GGC_CNEW (struct language_function);
e2500fed 12190 f->language = p;
db5ae43f 12191
f1dedc31
MM
12192 /* Whenever we start a new function, we destroy temporaries in the
12193 usual way. */
ae499cce 12194 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4985cde3
RH
12195
12196 if (f->decl)
12197 {
12198 tree fn = f->decl;
12199
4985cde3
RH
12200 if (DECL_SAVED_FUNCTION_DATA (fn))
12201 {
12202 /* If we already parsed this function, and we're just expanding it
12203 now, restore saved state. */
12204 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
12205
4985cde3 12206 /* We don't need the saved data anymore. Unless this is an inline
caf93cb0 12207 function; we need the named return value info for
7740f00d 12208 declare_return_variable. */
4985cde3
RH
12209 if (! DECL_INLINE (fn))
12210 DECL_SAVED_FUNCTION_DATA (fn) = NULL;
12211 }
12212 }
db5ae43f
MS
12213}
12214
a8f73d4b
MM
12215/* Free the language-specific parts of F, now that we've finished
12216 compiling the function. */
db5ae43f 12217
b03e38e1 12218void
11f6b451 12219cxx_pop_function_context (struct function * f)
db5ae43f 12220{
99dccabc 12221 f->language = 0;
db5ae43f 12222}
ebfc180f 12223
e2500fed
GK
12224/* Return which tree structure is used by T, or TS_CP_GENERIC if T is
12225 one of the language-independent trees. */
4519c0a8 12226
e2500fed 12227enum cp_tree_node_structure_enum
11f6b451 12228cp_tree_node_structure (union lang_tree_node * t)
4519c0a8 12229{
e2500fed 12230 switch (TREE_CODE (&t->generic))
4519c0a8 12231 {
a723baf1 12232 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
e2500fed 12233 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
e2500fed
GK
12234 case OVERLOAD: return TS_CP_OVERLOAD;
12235 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
12236 case PTRMEM_CST: return TS_CP_PTRMEM;
0cbd7506 12237 case BASELINK: return TS_CP_BASELINK;
54e67af0 12238 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
5d80a306 12239 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
cb68ec50 12240 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
e2500fed 12241 default: return TS_CP_GENERIC;
4519c0a8
MM
12242 }
12243}
5fd8e536 12244
eaa7c03f
JM
12245/* Build the void_list_node (void_type_node having been created). */
12246tree
11f6b451 12247build_void_list_node (void)
eaa7c03f
JM
12248{
12249 tree t = build_tree_list (NULL_TREE, void_type_node);
eaa7c03f
JM
12250 return t;
12251}
12252
6de9cd9a 12253bool
11f6b451 12254cp_missing_noreturn_ok_p (tree decl)
d363e7bf
AJ
12255{
12256 /* A missing noreturn is ok for the `main' function. */
92643fea 12257 return DECL_MAIN_P (decl);
d363e7bf 12258}
e2500fed 12259
c18a5b6c
MM
12260/* Return the COMDAT group into which DECL should be placed. */
12261
12262const char *
12263cxx_comdat_group (tree decl)
12264{
12265 tree name;
12266
12267 /* Virtual tables, construction virtual tables, and virtual table
12268 tables all go in a single COMDAT group, named after the primary
12269 virtual table. */
12270 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
12271 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
12272 /* For all other DECLs, the COMDAT group is the mangled name of the
12273 declaration itself. */
12274 else
5591e5f9
JJ
12275 {
12276 while (DECL_THUNK_P (decl))
12277 {
12278 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
12279 into the same section as the target function. In that case
12280 we must return target's name. */
12281 tree target = THUNK_TARGET (decl);
12282 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
12283 && DECL_SECTION_NAME (target) != NULL
12284 && DECL_ONE_ONLY (target))
12285 decl = target;
12286 else
12287 break;
12288 }
12289 name = DECL_ASSEMBLER_NAME (decl);
12290 }
c18a5b6c
MM
12291
12292 return IDENTIFIER_POINTER (name);
12293}
12294
e2500fed 12295#include "gt-cp-decl.h"
This page took 7.954541 seconds and 5 git commands to generate.