]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/decl.c
cinttypes: Remove redundant pragma system_header.
[gcc.git] / gcc / cp / decl.c
CommitLineData
3fd5abcf 1/* Process declarations and variables for C++ compiler.
d363e7bf 2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
1ea193c2
ILT
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
4 Free Software Foundation, Inc.
e5e809f4 5 Contributed by Michael Tiemann (tiemann@cygnus.com)
8d08fdba 6
1c313945 7This file is part of GCC.
8d08fdba 8
1c313945 9GCC is free software; you can redistribute it and/or modify
8d08fdba 10it under the terms of the GNU General Public License as published by
e77f031d 11the Free Software Foundation; either version 3, or (at your option)
8d08fdba
MS
12any later version.
13
1c313945 14GCC is distributed in the hope that it will be useful,
8d08fdba
MS
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
e77f031d
NC
20along with GCC; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>. */
8d08fdba
MS
22
23
1c313945 24/* Process declarations and symbol lookup for C++ front end.
8d08fdba
MS
25 Also constructs types; the standard scalar types at initialization,
26 and structure, union, array and enum types when they are declared. */
27
28/* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
30
8d08fdba 31#include "config.h"
8d052bc7 32#include "system.h"
4977bab6
ZW
33#include "coretypes.h"
34#include "tm.h"
8d08fdba
MS
35#include "tree.h"
36#include "rtl.h"
3bdf5ad1 37#include "expr.h"
8d08fdba
MS
38#include "flags.h"
39#include "cp-tree.h"
25af8512 40#include "tree-inline.h"
8d08fdba 41#include "decl.h"
49c249e1
JM
42#include "output.h"
43#include "except.h"
54f92bfb 44#include "toplev.h"
e2500fed 45#include "hashtab.h"
0e9295cf 46#include "tm_p.h"
672a6f42 47#include "target.h"
26f943fd 48#include "c-common.h"
ecb0eece 49#include "c-pragma.h"
7437519c 50#include "diagnostic.h"
e7c41c99 51#include "intl.h"
e2500fed 52#include "debug.h"
22ffcc6f 53#include "timevar.h"
6de9cd9a 54#include "tree-flow.h"
0d83bf5a 55#include "pointer-set.h"
8d08fdba 56
b344d949 57static tree grokparms (tree parmlist, tree *);
11f6b451
NN
58static const char *redeclaration_error_message (tree, tree);
59
11f6b451 60static int decl_jump_unsafe (tree);
11f6b451
NN
61static void require_complete_types_for_parms (tree);
62static int ambi_op_p (enum tree_code);
63static int unary_op_p (enum tree_code);
11f6b451 64static void push_local_name (tree);
7e99327d 65static tree grok_reference_init (tree, tree, tree, tree *);
caf93cb0 66static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
1ff3c076 67 int, int, tree);
11f6b451 68static void record_unknown_type (tree, const char *);
5779e713 69static tree builtin_function_1 (tree, tree, bool);
11f6b451
NN
70static tree build_library_fn_1 (tree, enum tree_code, tree);
71static int member_function_or_else (tree, tree, enum overload_flags);
72static void bad_specifiers (tree, const char *, int, int, int, int,
73 int);
11f6b451
NN
74static void check_for_uninitialized_const_var (tree);
75static hashval_t typename_hash (const void *);
76static int typename_compare (const void *, const void *);
11f6b451 77static tree local_variable_p_walkfn (tree *, int *, void *);
11f6b451 78static tree record_builtin_java_type (const char *, int);
461c6fce 79static const char *tag_name (enum tag_types);
29ef83de 80static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
11f6b451 81static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
11f6b451
NN
82static void maybe_deduce_size_from_array_init (tree, tree);
83static void layout_var_decl (tree);
84static void maybe_commonize_var (tree);
7e99327d 85static tree check_initializer (tree, tree, int, tree *);
11f6b451
NN
86static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
87static void save_function_data (tree);
88static void check_function_type (tree, tree);
11f6b451
NN
89static void finish_constructor_body (void);
90static void begin_destructor_body (void);
91static void finish_destructor_body (void);
92static tree create_array_type_for_decl (tree, tree, tree);
93static tree get_atexit_node (void);
94static tree get_dso_handle_node (void);
95static tree start_cleanup_fn (void);
96static void end_cleanup_fn (void);
97static tree cp_make_fname_decl (tree, int);
98static void initialize_predefined_identifiers (void);
caf93cb0 99static tree check_special_function_return_type
11f6b451
NN
100 (special_function_kind, tree, tree);
101static tree push_cp_library_fn (enum tree_code, tree);
102static tree build_cp_library_fn (tree, enum tree_code, tree);
103static void store_parm_decls (tree);
8e3df2de
MM
104static void initialize_local_var (tree, tree);
105static void expand_static_init (tree, tree);
106static tree next_initializable_field (tree);
8d08fdba 107
7f4edbcb 108/* The following symbols are subsumed in the cp_global_trees array, and
68642fb6 109 listed here individually for documentation purposes.
8d08fdba 110
7f4edbcb
BS
111 C++ extensions
112 tree wchar_decl_node;
37c46b43 113
7f4edbcb
BS
114 tree vtable_entry_type;
115 tree delta_type_node;
7f4edbcb 116 tree __t_desc_type_node;
8d08fdba 117
9e62871e 118 tree class_type_node;
7f4edbcb 119 tree unknown_type_node;
8d08fdba 120
7f4edbcb 121 Array type `vtable_entry_type[]'
8d08fdba 122
7f4edbcb
BS
123 tree vtbl_type_node;
124 tree vtbl_ptr_type_node;
8d08fdba 125
2854d3c6 126 Namespaces,
8d08fdba 127
7f4edbcb 128 tree std_node;
2854d3c6 129 tree abi_node;
8d08fdba 130
7f4edbcb
BS
131 A FUNCTION_DECL which can call `abort'. Not necessarily the
132 one that the user will declare, but sufficient to be called
133 by routines that want to abort the program.
8d08fdba 134
7f4edbcb 135 tree abort_fndecl;
8d08fdba 136
7f4edbcb 137 The FUNCTION_DECL for the default `::operator delete'.
2986ae00 138
7f4edbcb 139 tree global_delete_fndecl;
8d08fdba 140
7f4edbcb 141 Used by RTTI
669ec2b4 142 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
3db45ab5 143 tree tinfo_var_id; */
8d08fdba 144
7f4edbcb 145tree cp_global_trees[CPTI_MAX];
8d08fdba 146
2c73f9f5 147/* Indicates that there is a type value in some namespace, although
7f4edbcb 148 that is not necessarily in scope at the moment. */
2c73f9f5 149
00e8de68 150tree global_type_node;
2c73f9f5 151
82a2669e 152/* The node that holds the "name" of the global scope. */
00e8de68 153tree global_scope_name;
82a2669e 154
8e4ce833
JJ
155#define local_names cp_function_chain->x_local_names
156
8d08fdba
MS
157/* A list of objects which have constructors or destructors
158 which reside in the global scope. The decl is stored in
159 the TREE_VALUE slot and the initializer is stored
160 in the TREE_PURPOSE slot. */
161tree static_aggregates;
162
8d08fdba
MS
163/* -- end of C++ */
164
81b3411c 165/* A node for the integer constants 2, and 3. */
d11ad92e 166
81b3411c 167tree integer_two_node, integer_three_node;
8d08fdba 168
1799e5d5
RH
169/* Used only for jumps to as-yet undefined labels, since jumps to
170 defined labels can have their validity checked immediately. */
171
172struct named_label_use_entry GTY(())
173{
174 struct named_label_use_entry *next;
175 /* The binding level to which this entry is *currently* attached.
176 This is initially the binding level in which the goto appeared,
177 but is modified as scopes are closed. */
178 struct cp_binding_level *binding_level;
179 /* The head of the names list that was current when the goto appeared,
180 or the inner scope popped. These are the decls that will *not* be
181 skipped when jumping to the label. */
182 tree names_in_scope;
183 /* The location of the goto, for error reporting. */
184 location_t o_goto_locus;
185 /* True if an OpenMP structured block scope has been closed since
186 the goto appeared. This means that the branch from the label will
187 illegally exit an OpenMP scope. */
188 bool in_omp_scope;
189};
190
6625cdb5
JM
191/* A list of all LABEL_DECLs in the function that have names. Here so
192 we can clear out their names' definitions at the end of the
193 function, and so we can check the validity of jumps to these labels. */
194
1799e5d5 195struct named_label_entry GTY(())
6625cdb5 196{
1799e5d5
RH
197 /* The decl itself. */
198 tree label_decl;
199
200 /* The binding level to which the label is *currently* attached.
201 This is initially set to the binding level in which the label
202 is defined, but is modified as scopes are closed. */
e2500fed 203 struct cp_binding_level *binding_level;
3db45ab5 204 /* The head of the names list that was current when the label was
1799e5d5
RH
205 defined, or the inner scope popped. These are the decls that will
206 be skipped when jumping to the label. */
6625cdb5 207 tree names_in_scope;
1799e5d5
RH
208 /* A tree list of all decls from all binding levels that would be
209 crossed by a backward branch to the label. */
6625cdb5 210 tree bad_decls;
1799e5d5
RH
211
212 /* A list of uses of the label, before the label is defined. */
213 struct named_label_use_entry *uses;
214
215 /* The following bits are set after the label is defined, and are
216 updated as scopes are popped. They indicate that a backward jump
ddd0b831 217 to the label will illegally enter a scope of the given flavor. */
1799e5d5
RH
218 bool in_try_scope;
219 bool in_catch_scope;
220 bool in_omp_scope;
6625cdb5 221};
8d08fdba 222
4519c0a8 223#define named_labels cp_function_chain->x_named_labels
8d08fdba 224\f
b2244c65
MM
225/* The number of function bodies which we are currently processing.
226 (Zero if we are at namespace scope, one inside the body of a
227 function, two inside the body of a function in a local class, etc.) */
228int function_depth;
e23bd218 229
3368cdd3
JJ
230/* To avoid unwanted recursion, finish_function defers all mark_used calls
231 encountered during its execution until it finishes. */
232bool defer_mark_used_calls;
233VEC(tree, gc) *deferred_mark_used_calls;
234
e23bd218
IR
235/* States indicating how grokdeclarator() should handle declspecs marked
236 with __attribute__((deprecated)). An object declared as
237 __attribute__((deprecated)) suppresses warnings of uses of other
238 deprecated items. */
b344d949 239enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
e23bd218 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 316
39a13be5 317 The `class T' matches the `S<T>', leaving no template headers
74b846e0
MM
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 359 location = input_location; /* FIXME want (input_filename, (line)0) */
88848bde 360 /* Avoid crashing later. */
5b030314 361 define_label (location, DECL_NAME (label));
88848bde 362 }
c616e51b
MLI
363 else
364 warn_for_unused_label (label);
acef433b 365 }
acef433b 366
6625cdb5 367 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
acef433b
MM
368}
369
0811ea8f 370/* At the end of a function, all labels declared within the function
68642fb6 371 go out of scope. BLOCK is the top-level block for the
acef433b
MM
372 function. */
373
1799e5d5
RH
374static int
375pop_labels_1 (void **slot, void *data)
376{
377 struct named_label_entry *ent = (struct named_label_entry *) *slot;
378 tree block = (tree) data;
379
380 pop_label (ent->label_decl, NULL_TREE);
381
382 /* Put the labels into the "variables" of the top-level block,
383 so debugger can see them. */
384 TREE_CHAIN (ent->label_decl) = BLOCK_VARS (block);
385 BLOCK_VARS (block) = ent->label_decl;
386
387 htab_clear_slot (named_labels, slot);
388
389 return 1;
390}
391
acef433b 392static void
11f6b451 393pop_labels (tree block)
acef433b 394{
1799e5d5 395 if (named_labels)
acef433b 396 {
1799e5d5
RH
397 htab_traverse (named_labels, pop_labels_1, block);
398 named_labels = NULL;
acef433b 399 }
1799e5d5
RH
400}
401
402/* At the end of a block with local labels, restore the outer definition. */
acef433b 403
1799e5d5
RH
404static void
405pop_local_label (tree label, tree old_value)
406{
407 struct named_label_entry dummy;
408 void **slot;
409
410 pop_label (label, old_value);
411
412 dummy.label_decl = label;
413 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
414 htab_clear_slot (named_labels, slot);
acef433b
MM
415}
416
80aa8340
ZL
417/* The following two routines are used to interface to Objective-C++.
418 The binding level is purposely treated as an opaque type. */
419
420void *
421objc_get_current_scope (void)
422{
423 return current_binding_level;
424}
425
426/* The following routine is used by the NeXT-style SJLJ exceptions;
427 variables get marked 'volatile' so as to not be clobbered by
f749f3c2
ZL
428 _setjmp()/_longjmp() calls. All variables in the current scope,
429 as well as parent scopes up to (but not including) ENCLOSING_BLK
430 shall be thusly marked. */
80aa8340
ZL
431
432void
433objc_mark_locals_volatile (void *enclosing_blk)
434{
435 struct cp_binding_level *scope;
436
437 for (scope = current_binding_level;
e58a9aa1 438 scope && scope != enclosing_blk;
80aa8340
ZL
439 scope = scope->level_chain)
440 {
441 tree decl;
442
443 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
660845bf 444 objc_volatilize_decl (decl);
e58a9aa1
ZL
445
446 /* Do not climb up past the current function. */
447 if (scope->kind == sk_function_parms)
448 break;
80aa8340
ZL
449 }
450}
451
1799e5d5
RH
452/* Update data for defined and undefined labels when leaving a scope. */
453
454static int
455poplevel_named_label_1 (void **slot, void *data)
456{
457 struct named_label_entry *ent = (struct named_label_entry *) *slot;
458 struct cp_binding_level *bl = (struct cp_binding_level *) data;
459 struct cp_binding_level *obl = bl->level_chain;
460
461 if (ent->binding_level == bl)
462 {
463 tree decl;
464
465 for (decl = ent->names_in_scope; decl; decl = TREE_CHAIN (decl))
466 if (decl_jump_unsafe (decl))
467 ent->bad_decls = tree_cons (NULL, decl, ent->bad_decls);
468
469 ent->binding_level = obl;
470 ent->names_in_scope = obl->names;
471 switch (bl->kind)
472 {
473 case sk_try:
474 ent->in_try_scope = true;
475 break;
476 case sk_catch:
477 ent->in_catch_scope = true;
478 break;
479 case sk_omp:
480 ent->in_omp_scope = true;
481 break;
482 default:
483 break;
484 }
485 }
486 else if (ent->uses)
487 {
488 struct named_label_use_entry *use;
489
490 for (use = ent->uses; use ; use = use->next)
491 if (use->binding_level == bl)
492 {
493 use->binding_level = obl;
494 use->names_in_scope = obl->names;
495 if (bl->kind == sk_omp)
496 use->in_omp_scope = true;
497 }
498 }
499
500 return 1;
501}
502
8d08fdba
MS
503/* Exit a binding level.
504 Pop the level off, and restore the state of the identifier-decl mappings
505 that were in effect when this level was entered.
506
507 If KEEP == 1, this level had explicit declarations, so
508 and create a "block" (a BLOCK node) for the level
509 to record its declarations and subblocks for symbol table output.
510
8d08fdba
MS
511 If FUNCTIONBODY is nonzero, this level is the body of a function,
512 so create a block as if KEEP were set and also clear out all
513 label names.
514
515 If REVERSE is nonzero, reverse the order of decls before putting
516 them into the BLOCK. */
517
518tree
11f6b451 519poplevel (int keep, int reverse, int functionbody)
8d08fdba 520{
926ce8bd 521 tree link;
8d08fdba
MS
522 /* The chain of decls was accumulated in reverse order.
523 Put it into forward order, just for cleanliness. */
524 tree decls;
525 int tmp = functionbody;
b35d4555 526 int real_functionbody;
b35d4555 527 tree subblocks;
325c3691 528 tree block;
8d08fdba 529 tree decl;
f181d4ae 530 int leaving_for_scope;
ac20c67a 531 scope_kind kind;
f181d4ae 532
22ffcc6f 533 timevar_push (TV_NAME_LOOKUP);
325c3691
RH
534 restart:
535
536 block = NULL_TREE;
b35d4555 537
50bc768d 538 gcc_assert (current_binding_level->kind != sk_class);
b74a0560 539
ac20c67a 540 real_functionbody = (current_binding_level->kind == sk_cleanup
b35d4555 541 ? ((functionbody = 0), tmp) : functionbody);
b35d4555
MM
542 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
543
50bc768d
NS
544 gcc_assert (!VEC_length(cp_class_binding,
545 current_binding_level->class_shadowed));
8d08fdba 546
536333d4
MM
547 /* We used to use KEEP == 2 to indicate that the new block should go
548 at the beginning of the list of blocks at this binding level,
549 rather than the end. This hack is no longer used. */
50bc768d 550 gcc_assert (keep == 0 || keep == 1);
536333d4 551
ac20c67a 552 if (current_binding_level->keep)
8d08fdba
MS
553 keep = 1;
554
6625cdb5
JM
555 /* Any uses of undefined labels, and any defined labels, now operate
556 under constraints of next binding contour. */
1799e5d5
RH
557 if (cfun && !functionbody && named_labels)
558 htab_traverse (named_labels, poplevel_named_label_1,
559 current_binding_level);
6625cdb5 560
8d08fdba
MS
561 /* Get the decls in the order they were written.
562 Usually current_binding_level->names is in reverse order.
563 But parameter decls were previously put in forward order. */
564
565 if (reverse)
566 current_binding_level->names
567 = decls = nreverse (current_binding_level->names);
568 else
569 decls = current_binding_level->names;
570
8d08fdba
MS
571 /* If there were any declarations or structure tags in that level,
572 or if this level is a function body,
573 create a BLOCK to record them for the life of this function. */
8d08fdba 574 block = NULL_TREE;
f444e36b 575 if (keep == 1 || functionbody)
8d08fdba
MS
576 block = make_node (BLOCK);
577 if (block != NULL_TREE)
578 {
f444e36b
MM
579 BLOCK_VARS (block) = decls;
580 BLOCK_SUBBLOCKS (block) = subblocks;
8d08fdba
MS
581 }
582
583 /* In each subblock, record that this is its superior. */
8d08fdba 584 if (keep >= 0)
87caf699 585 for (link = subblocks; link; link = BLOCK_CHAIN (link))
8d08fdba
MS
586 BLOCK_SUPERCONTEXT (link) = block;
587
f181d4ae
MM
588 /* We still support the old for-scope rules, whereby the variables
589 in a for-init statement were in scope after the for-statement
92bc1323 590 ended. We only use the new rules if flag_new_for_scope is
f181d4ae 591 nonzero. */
68642fb6 592 leaving_for_scope
a7e8c268 593 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
f181d4ae 594
caf93cb0
EC
595 /* Before we remove the declarations first check for unused variables. */
596 if (warn_unused_variable
597 && !processing_template_decl)
598 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
599 if (TREE_CODE (decl) == VAR_DECL
600 && ! TREE_USED (decl)
601 && ! DECL_IN_SYSTEM_HEADER (decl)
602 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
b323323f 603 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
caf93cb0 604
f181d4ae
MM
605 /* Remove declarations for all the DECLs in this level. */
606 for (link = decls; link; link = TREE_CHAIN (link))
607 {
c3783399 608 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
0cbd7506 609 && DECL_NAME (link))
f181d4ae 610 {
90ea9897
MM
611 tree name = DECL_NAME (link);
612 cxx_binding *ob;
f181d4ae
MM
613 tree ns_binding;
614
90ea9897
MM
615 ob = outer_binding (name,
616 IDENTIFIER_BINDING (name),
617 /*class_p=*/true);
618 if (!ob)
619 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
c7dda1e3
MM
620 else
621 ns_binding = NULL_TREE;
622
90ea9897 623 if (ob && ob->scope == current_binding_level->level_chain)
f181d4ae 624 /* We have something like:
68642fb6 625
0cbd7506
MS
626 int i;
627 for (int i; ;);
68642fb6 628
f181d4ae
MM
629 and we are leaving the `for' scope. There's no reason to
630 keep the binding of the inner `i' in this case. */
90ea9897
MM
631 pop_binding (name, link);
632 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
147135cc 633 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
f181d4ae
MM
634 /* Here, we have something like:
635
636 typedef int I;
637
638 void f () {
639 for (int I; ;);
640 }
641
642 We must pop the for-scope binding so we know what's a
643 type and what isn't. */
90ea9897 644 pop_binding (name, link);
e76a2646 645 else
e76a2646 646 {
f181d4ae
MM
647 /* Mark this VAR_DECL as dead so that we can tell we left it
648 there only for backward compatibility. */
649 DECL_DEAD_FOR_LOCAL (link) = 1;
68642fb6 650
517f3315 651 /* Keep track of what should have happened when we
f181d4ae 652 popped the binding. */
90ea9897 653 if (ob && ob->value)
820cc88f
DB
654 {
655 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
656 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
657 }
f181d4ae
MM
658
659 /* Add it to the list of dead variables in the next
660 outermost binding to that we can remove these when we
661 leave that binding. */
662 current_binding_level->level_chain->dead_vars_from_for
663 = tree_cons (NULL_TREE, link,
664 current_binding_level->level_chain->
665 dead_vars_from_for);
666
af6fd53f 667 /* Although we don't pop the cxx_binding, we do clear
147135cc 668 its SCOPE since the scope is going away now. */
caf93cb0 669 IDENTIFIER_BINDING (name)->scope
90ea9897 670 = current_binding_level->level_chain;
e76a2646 671 }
2ee887f2 672 }
68642fb6 673 else
8d6e462b 674 {
8dc2b103 675 tree name;
c8094d83 676
f181d4ae 677 /* Remove the binding. */
0034cf72 678 decl = link;
caf93cb0 679
0034cf72
JM
680 if (TREE_CODE (decl) == TREE_LIST)
681 decl = TREE_VALUE (decl);
8dc2b103 682 name = decl;
c8094d83 683
8dc2b103
NS
684 if (TREE_CODE (name) == OVERLOAD)
685 name = OVL_FUNCTION (name);
caf93cb0 686
8dc2b103
NS
687 gcc_assert (DECL_P (name));
688 pop_binding (DECL_NAME (name), decl);
8d08fdba 689 }
f181d4ae 690 }
8d08fdba 691
f181d4ae
MM
692 /* Remove declarations for any `for' variables from inner scopes
693 that we kept around. */
694 for (link = current_binding_level->dead_vars_from_for;
695 link; link = TREE_CHAIN (link))
d8f8dca1 696 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
2ee887f2 697
f181d4ae
MM
698 /* Restore the IDENTIFIER_TYPE_VALUEs. */
699 for (link = current_binding_level->type_shadowed;
700 link; link = TREE_CHAIN (link))
701 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
acef433b
MM
702
703 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
704 for (link = current_binding_level->shadowed_labels;
68642fb6 705 link;
acef433b 706 link = TREE_CHAIN (link))
1799e5d5 707 pop_local_label (TREE_VALUE (link), TREE_PURPOSE (link));
acef433b 708
f181d4ae
MM
709 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
710 list if a `using' declaration put them there. The debugging
3b426391 711 back ends won't understand OVERLOAD, so we remove them here.
f181d4ae
MM
712 Because the BLOCK_VARS are (temporarily) shared with
713 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
714 popped all the bindings. */
715 if (block)
716 {
717 tree* d;
8d6e462b 718
a06d48ef
JM
719 for (d = &BLOCK_VARS (block); *d; )
720 {
721 if (TREE_CODE (*d) == TREE_LIST)
722 *d = TREE_CHAIN (*d);
723 else
724 d = &TREE_CHAIN (*d);
725 }
8d6e462b 726 }
8d08fdba
MS
727
728 /* If the level being exited is the top level of a function,
729 check over all the labels. */
8d08fdba
MS
730 if (functionbody)
731 {
acef433b
MM
732 /* Since this is the top level block of a function, the vars are
733 the function's parameters. Don't leave them in the BLOCK
734 because they are found in the FUNCTION_DECL instead. */
8d08fdba 735 BLOCK_VARS (block) = 0;
acef433b 736 pop_labels (block);
8d08fdba
MS
737 }
738
ac20c67a 739 kind = current_binding_level->kind;
325c3691
RH
740 if (kind == sk_cleanup)
741 {
742 tree stmt;
743
744 /* If this is a temporary binding created for a cleanup, then we'll
745 have pushed a statement list level. Pop that, create a new
746 BIND_EXPR for the block, and insert it into the stream. */
747 stmt = pop_stmt_list (current_binding_level->statement_list);
748 stmt = c_build_bind_expr (block, stmt);
749 add_stmt (stmt);
750 }
8d08fdba 751
1a6daf15 752 leave_scope ();
8d08fdba 753 if (functionbody)
72c4a4ca
GK
754 {
755 /* The current function is being defined, so its DECL_INITIAL
756 should be error_mark_node. */
757 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
758 DECL_INITIAL (current_function_decl) = block;
759 }
8d08fdba 760 else if (block)
f444e36b
MM
761 current_binding_level->blocks
762 = chainon (current_binding_level->blocks, block);
763
8d08fdba
MS
764 /* If we did not make a block for the level just exited,
765 any blocks made for inner levels
766 (since they cannot be recorded as subblocks in that level)
767 must be carried forward so they will later become subblocks
768 of something else. */
769 else if (subblocks)
536333d4
MM
770 current_binding_level->blocks
771 = chainon (current_binding_level->blocks, subblocks);
8d08fdba 772
d9b2d9da
MM
773 /* Each and every BLOCK node created here in `poplevel' is important
774 (e.g. for proper debugging information) so if we created one
775 earlier, mark it as "used". */
776 if (block)
777 TREE_USED (block) = 1;
778
325c3691 779 /* All temporary bindings created for cleanups are popped silently. */
ac20c67a 780 if (kind == sk_cleanup)
325c3691 781 goto restart;
8d08fdba 782
22ffcc6f 783 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
8d08fdba
MS
784}
785
8d08fdba
MS
786/* Insert BLOCK at the end of the list of subblocks of the
787 current binding level. This is used when a BIND_EXPR is expanded,
788 to handle the BLOCK node inside the BIND_EXPR. */
789
790void
11f6b451 791insert_block (tree block)
8d08fdba
MS
792{
793 TREE_USED (block) = 1;
794 current_binding_level->blocks
795 = chainon (current_binding_level->blocks, block);
796}
797
0aafb128
MM
798/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
799 itself, calling F for each. The DATA is passed to F as well. */
800
00e8de68 801static int
be93747e 802walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
00e8de68
GDR
803{
804 int result = 0;
be93747e 805 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
8d08fdba 806
be93747e 807 result |= (*f) (name_space, data);
8d08fdba 808
00e8de68
GDR
809 for (; current; current = TREE_CHAIN (current))
810 result |= walk_namespaces_r (current, f, data);
fc0e7bf5 811
00e8de68 812 return result;
5566b478
MS
813}
814
00e8de68
GDR
815/* Walk all the namespaces, calling F for each. The DATA is passed to
816 F as well. */
817
818int
819walk_namespaces (walk_namespaces_fn f, void* data)
5566b478 820{
00e8de68 821 return walk_namespaces_r (global_namespace, f, data);
8d08fdba
MS
822}
823
00e8de68
GDR
824/* Call wrapup_globals_declarations for the globals in NAMESPACE. If
825 DATA is non-NULL, this is the last time we will call
826 wrapup_global_declarations for this NAMESPACE. */
39c01e4c 827
00e8de68 828int
be93747e 829wrapup_globals_for_namespace (tree name_space, void* data)
39c01e4c 830{
be93747e 831 struct cp_binding_level *level = NAMESPACE_LEVEL (name_space);
9857866d
KH
832 VEC(tree,gc) *statics = level->static_decls;
833 tree *vec = VEC_address (tree, statics);
834 int len = VEC_length (tree, statics);
00e8de68 835 int last_time = (data != 0);
68642fb6 836
00e8de68 837 if (last_time)
39c01e4c 838 {
00e8de68 839 check_global_declarations (vec, len);
db5f8b93 840 emit_debug_global_declarations (vec, len);
00e8de68 841 return 0;
39c01e4c
MM
842 }
843
00e8de68
GDR
844 /* Write out any globals that need to be output. */
845 return wrapup_global_declarations (vec, len);
39c01e4c
MM
846}
847
00e8de68 848\f
9188c363
MM
849/* In C++, you don't have to write `struct S' to refer to `S'; you
850 can just use `S'. We accomplish this by creating a TYPE_DECL as
851 if the user had written `typedef struct S S'. Create and return
852 the TYPE_DECL for TYPE. */
853
854tree
11f6b451 855create_implicit_typedef (tree name, tree type)
9188c363
MM
856{
857 tree decl;
858
859 decl = build_decl (TYPE_DECL, name, type);
c727aa5e 860 DECL_ARTIFICIAL (decl) = 1;
9188c363
MM
861 /* There are other implicit type declarations, like the one *within*
862 a class that allows you to write `S::S'. We must distinguish
863 amongst these. */
864 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
865 TYPE_NAME (type) = decl;
866
867 return decl;
868}
869
8e4ce833
JJ
870/* Remember a local name for name-mangling purposes. */
871
872static void
11f6b451 873push_local_name (tree decl)
8e4ce833
JJ
874{
875 size_t i, nelts;
876 tree t, name;
877
22ffcc6f 878 timevar_push (TV_NAME_LOOKUP);
8e4ce833
JJ
879
880 name = DECL_NAME (decl);
881
9acaf84a 882 nelts = VEC_length (tree, local_names);
8e4ce833
JJ
883 for (i = 0; i < nelts; i++)
884 {
9acaf84a 885 t = VEC_index (tree, local_names, i);
8e4ce833
JJ
886 if (DECL_NAME (t) == name)
887 {
888 if (!DECL_LANG_SPECIFIC (decl))
889 retrofit_lang_decl (decl);
e2500fed 890 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
8e4ce833
JJ
891 if (DECL_LANG_SPECIFIC (t))
892 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
893 else
894 DECL_DISCRIMINATOR (decl) = 1;
895
9acaf84a 896 VEC_replace (tree, local_names, i, decl);
de94b46c
KG
897 timevar_pop (TV_NAME_LOOKUP);
898 return;
8e4ce833
JJ
899 }
900 }
901
9acaf84a 902 VEC_safe_push (tree, gc, local_names, decl);
22ffcc6f 903 timevar_pop (TV_NAME_LOOKUP);
8e4ce833 904}
8d08fdba
MS
905\f
906/* Subroutine of duplicate_decls: return truthvalue of whether
907 or not types of these decls match.
908
909 For C++, we must compare the parameter list so that `int' can match
910 `int&' in a parameter position, but `int&' is not confused with
911 `const int&'. */
e92cc029 912
6060a796 913int
11f6b451 914decls_match (tree newdecl, tree olddecl)
8d08fdba
MS
915{
916 int types_match;
917
347d73d7
ML
918 if (newdecl == olddecl)
919 return 1;
920
6b4b3deb
MM
921 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
922 /* If the two DECLs are not even the same kind of thing, we're not
923 interested in their types. */
924 return 0;
925
926 if (TREE_CODE (newdecl) == FUNCTION_DECL)
8d08fdba
MS
927 {
928 tree f1 = TREE_TYPE (newdecl);
929 tree f2 = TREE_TYPE (olddecl);
930 tree p1 = TYPE_ARG_TYPES (f1);
931 tree p2 = TYPE_ARG_TYPES (f2);
932
4f1c5b7d 933 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
eb68cb58
MM
934 && ! (DECL_EXTERN_C_P (newdecl)
935 && DECL_EXTERN_C_P (olddecl)))
c5a6fc45
JM
936 return 0;
937
8d08fdba 938 if (TREE_CODE (f1) != TREE_CODE (f2))
0cbd7506 939 return 0;
8d08fdba 940
3bfdc719 941 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8926095f 942 {
8b27e9ef
NS
943 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
944 && (DECL_BUILT_IN (olddecl)
945#ifndef NO_IMPLICIT_EXTERN_C
0cbd7506
MS
946 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
947 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
8b27e9ef
NS
948#endif
949 ))
a28e3c7f
MS
950 {
951 types_match = self_promoting_args_p (p1);
952 if (p1 == void_list_node)
953 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
954 }
8b27e9ef
NS
955#ifndef NO_IMPLICIT_EXTERN_C
956 else if (p1 == NULL_TREE
957 && (DECL_EXTERN_C_P (olddecl)
0cbd7506
MS
958 && DECL_IN_SYSTEM_HEADER (olddecl)
959 && !DECL_CLASS_SCOPE_P (olddecl))
8b27e9ef 960 && (DECL_EXTERN_C_P (newdecl)
0cbd7506
MS
961 && DECL_IN_SYSTEM_HEADER (newdecl)
962 && !DECL_CLASS_SCOPE_P (newdecl)))
a28e3c7f
MS
963 {
964 types_match = self_promoting_args_p (p2);
965 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
966 }
8b27e9ef 967#endif
8926095f 968 else
91063b51 969 types_match = compparms (p1, p2);
8926095f 970 }
8d08fdba
MS
971 else
972 types_match = 0;
973 }
6b4b3deb 974 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
51c184be 975 {
2bb5d995
JM
976 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
977 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
978 return 0;
979
ee935db4
MM
980 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
981 DECL_TEMPLATE_PARMS (olddecl)))
982 return 0;
983
f84b4be9 984 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
ee935db4
MM
985 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
986 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
f84b4be9
JM
987 else
988 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
989 DECL_TEMPLATE_RESULT (newdecl));
51c184be 990 }
8d08fdba
MS
991 else
992 {
91a5bc9f
KL
993 /* Need to check scope for variable declaration (VAR_DECL).
994 For typedef (TYPE_DECL), scope is ignored. */
995 if (TREE_CODE (newdecl) == VAR_DECL
ace4831d
MM
996 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
997 /* [dcl.link]
998 Two declarations for an object with C language linkage
999 with the same name (ignoring the namespace that qualify
1000 it) that appear in different namespace scopes refer to
1001 the same object. */
1002 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
91a5bc9f
KL
1003 return 0;
1004
8d08fdba
MS
1005 if (TREE_TYPE (newdecl) == error_mark_node)
1006 types_match = TREE_TYPE (olddecl) == error_mark_node;
1007 else if (TREE_TYPE (olddecl) == NULL_TREE)
1008 types_match = TREE_TYPE (newdecl) == NULL_TREE;
a0a33927
MS
1009 else if (TREE_TYPE (newdecl) == NULL_TREE)
1010 types_match = 0;
8d08fdba 1011 else
96d84882
PB
1012 types_match = comptypes (TREE_TYPE (newdecl),
1013 TREE_TYPE (olddecl),
1014 COMPARE_REDECLARATION);
8d08fdba
MS
1015 }
1016
1017 return types_match;
1018}
1019
1020/* If NEWDECL is `static' and an `extern' was seen previously,
24f30ed4 1021 warn about it. OLDDECL is the previous declaration.
8d08fdba
MS
1022
1023 Note that this does not apply to the C++ case of declaring
1024 a variable `extern const' and then later `const'.
1025
8d08fdba
MS
1026 Don't complain about built-in functions, since they are beyond
1027 the user's control. */
1028
a5e6b29b 1029void
11f6b451 1030warn_extern_redeclared_static (tree newdecl, tree olddecl)
8d08fdba 1031{
24f30ed4
MM
1032 tree name;
1033
68642fb6 1034 if (TREE_CODE (newdecl) == TYPE_DECL
655dc6ee 1035 || TREE_CODE (newdecl) == TEMPLATE_DECL
a2a9e21c
GDR
1036 || TREE_CODE (newdecl) == CONST_DECL
1037 || TREE_CODE (newdecl) == NAMESPACE_DECL)
8d08fdba 1038 return;
68642fb6 1039
963d5758
MM
1040 /* Don't get confused by static member functions; that's a different
1041 use of `static'. */
1042 if (TREE_CODE (newdecl) == FUNCTION_DECL
1043 && DECL_STATIC_FUNCTION_P (newdecl))
1044 return;
8d08fdba 1045
24f30ed4
MM
1046 /* If the old declaration was `static', or the new one isn't, then
1047 then everything is OK. */
1048 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1049 return;
1050
1051 /* It's OK to declare a builtin function as `static'. */
1052 if (TREE_CODE (olddecl) == FUNCTION_DECL
1053 && DECL_ARTIFICIAL (olddecl))
1054 return;
1055
8d08fdba 1056 name = DECL_ASSEMBLER_NAME (newdecl);
cbe5f3b3
MLI
1057 permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1058 permerror (input_location, "previous declaration of %q+D", olddecl);
8d08fdba
MS
1059}
1060
e1f0e7a6
MM
1061/* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1062 function templates. If their exception specifications do not
b9704fc5 1063 match, issue a diagnostic. */
e1f0e7a6
MM
1064
1065static void
1066check_redeclaration_exception_specification (tree new_decl,
1067 tree old_decl)
1068{
1069 tree new_type;
1070 tree old_type;
1071 tree new_exceptions;
1072 tree old_exceptions;
1073
1074 new_type = TREE_TYPE (new_decl);
1075 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1076 old_type = TREE_TYPE (old_decl);
1077 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1078
1079 /* [except.spec]
1080
1081 If any declaration of a function has an exception-specification,
1082 all declarations, including the definition and an explicit
1083 specialization, of that function shall have an
1084 exception-specification with the same set of type-ids. */
1085 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1086 && ! DECL_IS_BUILTIN (old_decl)
1087 && flag_exceptions
3db45ab5 1088 && !comp_except_specs (new_exceptions, old_exceptions,
e1f0e7a6
MM
1089 /*exact=*/true))
1090 {
1091 error ("declaration of %qF throws different exceptions", new_decl);
1092 error ("from previous declaration %q+F", old_decl);
1093 }
1094}
1095
3a47c4e4
AO
1096#define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1097 && lookup_attribute ("gnu_inline", \
1098 DECL_ATTRIBUTES (fn)))
1099
b1a19c7c
MM
1100/* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1101 If the redeclaration is invalid, a diagnostic is issued, and the
1102 error_mark_node is returned. Otherwise, OLDDECL is returned.
8d08fdba 1103
b1a19c7c 1104 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
d63d5d0c
ILT
1105 returned.
1106
1107 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
8d08fdba 1108
b1a19c7c 1109tree
d63d5d0c 1110duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
8d08fdba 1111{
8d08fdba 1112 unsigned olddecl_uid = DECL_UID (olddecl);
d63d5d0c 1113 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
0b60dfe3 1114 int new_defines_function = 0;
50b56799 1115 tree new_template;
5566b478
MS
1116
1117 if (newdecl == olddecl)
b1a19c7c 1118 return olddecl;
8d08fdba 1119
8926095f 1120 types_match = decls_match (newdecl, olddecl);
8d08fdba 1121
8d08fdba
MS
1122 /* If either the type of the new decl or the type of the old decl is an
1123 error_mark_node, then that implies that we have already issued an
1124 error (earlier) for some bogus type specification, and in that case,
1125 it is rather pointless to harass the user with yet more error message
0b60dfe3 1126 about the same declaration, so just pretend the types match here. */
bd6dd845
MS
1127 if (TREE_TYPE (newdecl) == error_mark_node
1128 || TREE_TYPE (olddecl) == error_mark_node)
dc5395cc 1129 return error_mark_node;
68642fb6 1130
97055d5c
AO
1131 if (DECL_P (olddecl)
1132 && TREE_CODE (newdecl) == FUNCTION_DECL
1133 && TREE_CODE (olddecl) == FUNCTION_DECL
1134 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1135 {
1136 if (DECL_DECLARED_INLINE_P (newdecl)
1137 && DECL_UNINLINABLE (newdecl)
1138 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1139 /* Already warned elsewhere. */;
1140 else if (DECL_DECLARED_INLINE_P (olddecl)
1141 && DECL_UNINLINABLE (olddecl)
1142 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1143 /* Already warned. */;
1144 else if (DECL_DECLARED_INLINE_P (newdecl)
1145 && DECL_UNINLINABLE (olddecl)
1146 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1147 {
dee15844
JM
1148 warning (OPT_Wattributes, "function %q+D redeclared as inline",
1149 newdecl);
1150 warning (OPT_Wattributes, "previous declaration of %q+D "
1151 "with attribute noinline", olddecl);
97055d5c
AO
1152 }
1153 else if (DECL_DECLARED_INLINE_P (olddecl)
1154 && DECL_UNINLINABLE (newdecl)
1155 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1156 {
dee15844
JM
1157 warning (OPT_Wattributes, "function %q+D redeclared with "
1158 "attribute noinline", newdecl);
1159 warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1160 olddecl);
97055d5c
AO
1161 }
1162 }
1163
a1c65f9f 1164 /* Check for redeclaration and other discrepancies. */
d22c8596 1165 if (TREE_CODE (olddecl) == FUNCTION_DECL
9f33663b
JM
1166 && DECL_ARTIFICIAL (olddecl))
1167 {
d63d5d0c 1168 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
9f33663b
JM
1169 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1170 {
d63d5d0c
ILT
1171 /* Avoid warnings redeclaring built-ins which have not been
1172 explicitly declared. */
0cbd7506
MS
1173 if (DECL_ANTICIPATED (olddecl))
1174 return NULL_TREE;
d52e4867 1175
9f33663b
JM
1176 /* If you declare a built-in or predefined function name as static,
1177 the old definition is overridden, but optionally warn this was a
1178 bad choice of name. */
1179 if (! TREE_PUBLIC (newdecl))
1180 {
b323323f
LM
1181 warning (OPT_Wshadow, "shadowing %s function %q#D",
1182 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1183 olddecl);
9f33663b 1184 /* Discard the old built-in function. */
b1a19c7c 1185 return NULL_TREE;
9f33663b
JM
1186 }
1187 /* If the built-in is not ansi, then programs can override
1188 it even globally without an error. */
1189 else if (! DECL_BUILT_IN (olddecl))
d4ee4d25 1190 warning (0, "library function %q#D redeclared as non-function %q#D",
0cbd7506 1191 olddecl, newdecl);
9f33663b
JM
1192 else
1193 {
2d01edd7
GDR
1194 error ("declaration of %q#D", newdecl);
1195 error ("conflicts with built-in declaration %q#D",
0cbd7506 1196 olddecl);
9f33663b 1197 }
b1a19c7c 1198 return NULL_TREE;
a4443a08 1199 }
9f33663b 1200 else if (!types_match)
8d08fdba 1201 {
d63d5d0c
ILT
1202 /* Avoid warnings redeclaring built-ins which have not been
1203 explicitly declared. */
0cbd7506 1204 if (DECL_ANTICIPATED (olddecl))
498c0f27
JJ
1205 {
1206 /* Deal with fileptr_type_node. FILE type is not known
1207 at the time we create the builtins. */
1208 tree t1, t2;
1209
1210 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1211 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1212 t1 || t2;
1213 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1214 if (!t1 || !t2)
1215 break;
1216 else if (TREE_VALUE (t2) == fileptr_type_node)
1217 {
1218 tree t = TREE_VALUE (t1);
1219
1220 if (TREE_CODE (t) == POINTER_TYPE
1221 && TYPE_NAME (TREE_TYPE (t))
1222 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1223 == get_identifier ("FILE")
1224 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1225 {
1226 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1227
1228 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1229 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1230 types_match = decls_match (newdecl, olddecl);
1231 if (types_match)
d63d5d0c
ILT
1232 return duplicate_decls (newdecl, olddecl,
1233 newdecl_is_friend);
498c0f27
JJ
1234 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1235 }
1236 }
1237 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1238 break;
1239 }
d52e4867 1240 else if ((DECL_EXTERN_C_P (newdecl)
7e99327d
MM
1241 && DECL_EXTERN_C_P (olddecl))
1242 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1243 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
a4443a08 1244 {
9f33663b
JM
1245 /* A near match; override the builtin. */
1246
1247 if (TREE_PUBLIC (newdecl))
a4443a08 1248 {
d4ee4d25
DD
1249 warning (0, "new declaration %q#D", newdecl);
1250 warning (0, "ambiguates built-in declaration %q#D",
0cbd7506 1251 olddecl);
a4443a08 1252 }
b323323f
LM
1253 else
1254 warning (OPT_Wshadow, "shadowing %s function %q#D",
0cbd7506
MS
1255 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1256 olddecl);
a4443a08 1257 }
9f33663b
JM
1258 else
1259 /* Discard the old built-in function. */
b1a19c7c 1260 return NULL_TREE;
04a9d080
RS
1261
1262 /* Replace the old RTL to avoid problems with inlining. */
84b8b0e0 1263 COPY_DECL_RTL (newdecl, olddecl);
8d08fdba 1264 }
d63d5d0c
ILT
1265 /* Even if the types match, prefer the new declarations type for
1266 built-ins which have not been explicitly declared, for
1267 exception lists, etc... */
10326855 1268 else if (DECL_ANTICIPATED (olddecl))
7072018e 1269 {
74869a85
NS
1270 tree type = TREE_TYPE (newdecl);
1271 tree attribs = (*targetm.merge_type_attributes)
1272 (TREE_TYPE (olddecl), type);
1273
e9525111 1274 type = cp_build_type_attribute_variant (type, attribs);
74869a85 1275 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
7072018e 1276 }
68642fb6 1277
62bedd31
JJ
1278 /* If a function is explicitly declared "throw ()", propagate that to
1279 the corresponding builtin. */
1280 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1281 && DECL_ANTICIPATED (olddecl)
1282 && TREE_NOTHROW (newdecl)
1283 && !TREE_NOTHROW (olddecl)
1284 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != NULL_TREE
1285 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != olddecl
1286 && types_match)
1287 TREE_NOTHROW (built_in_decls [DECL_FUNCTION_CODE (olddecl)]) = 1;
1288
7e99327d
MM
1289 /* Whether or not the builtin can throw exceptions has no
1290 bearing on this declarator. */
1291 TREE_NOTHROW (olddecl) = 0;
1292
24f30ed4
MM
1293 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1294 {
1295 /* If a builtin function is redeclared as `static', merge
1296 the declarations, but make the original one static. */
1297 DECL_THIS_STATIC (olddecl) = 1;
1298 TREE_PUBLIC (olddecl) = 0;
9bfadf57 1299
421844e7
MM
1300 /* Make the old declaration consistent with the new one so
1301 that all remnants of the builtin-ness of this function
1302 will be banished. */
5d2ed28c 1303 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
84b8b0e0 1304 COPY_DECL_RTL (newdecl, olddecl);
24f30ed4 1305 }
39211cd5
MS
1306 }
1307 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1308 {
6936461f
OW
1309 /* C++ Standard, 3.3, clause 4:
1310 "[Note: a namespace name or a class template name must be unique
1311 in its declarative region (7.3.2, clause 14). ]" */
1312 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1313 && TREE_CODE (newdecl) != NAMESPACE_DECL
1314 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1315 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1316 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1317 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
9ed182dc 1318 {
6936461f
OW
1319 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1320 && TREE_CODE (newdecl) != TYPE_DECL)
1321 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1322 && TREE_CODE (olddecl) != TYPE_DECL))
1323 {
1324 /* We do nothing special here, because C++ does such nasty
1325 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1326 get shadowed, and know that if we need to find a TYPE_DECL
1327 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1328 slot of the identifier. */
1329 return NULL_TREE;
1330 }
1331
1332 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1333 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1334 || (TREE_CODE (olddecl) == FUNCTION_DECL
1335 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1336 return NULL_TREE;
9ed182dc
JM
1337 }
1338
2d01edd7 1339 error ("%q#D redeclared as different kind of symbol", newdecl);
39211cd5
MS
1340 if (TREE_CODE (olddecl) == TREE_LIST)
1341 olddecl = TREE_VALUE (olddecl);
dee15844 1342 error ("previous declaration of %q+#D", olddecl);
39211cd5 1343
c0694c4b 1344 return error_mark_node;
8d08fdba 1345 }
8d08fdba
MS
1346 else if (!types_match)
1347 {
4f1c5b7d 1348 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
7bdbfa05
MM
1349 /* These are certainly not duplicate declarations; they're
1350 from different scopes. */
b1a19c7c 1351 return NULL_TREE;
7bdbfa05 1352
8926095f 1353 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
f0e01782
MS
1354 {
1355 /* The name of a class template may not be declared to refer to
1356 any other template, class, function, object, namespace, value,
e92cc029 1357 or type in the same scope. */
5566b478
MS
1358 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1359 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
f0e01782 1360 {
2d01edd7 1361 error ("declaration of template %q#D", newdecl);
dee15844 1362 error ("conflicts with previous declaration %q+#D", olddecl);
f0e01782 1363 }
ec255269
MS
1364 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1365 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1366 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
91063b51 1367 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
75650646 1368 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
b9201622
NS
1369 DECL_TEMPLATE_PARMS (olddecl))
1370 /* Template functions can be disambiguated by
1371 return type. */
1372 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1373 TREE_TYPE (TREE_TYPE (olddecl))))
ec255269 1374 {
2d01edd7 1375 error ("new declaration %q#D", newdecl);
dee15844 1376 error ("ambiguates old declaration %q+#D", olddecl);
ec255269 1377 }
b1a19c7c 1378 return NULL_TREE;
f0e01782 1379 }
8926095f
MS
1380 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1381 {
eb68cb58 1382 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
8926095f 1383 {
2d01edd7 1384 error ("declaration of C function %q#D conflicts with",
0cbd7506 1385 newdecl);
dee15844 1386 error ("previous declaration %q+#D here", olddecl);
8926095f 1387 }
00595019 1388 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
91063b51 1389 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
700f8a87 1390 {
2d01edd7 1391 error ("new declaration %q#D", newdecl);
dee15844 1392 error ("ambiguates old declaration %q+#D", olddecl);
492b73bd 1393 return error_mark_node;
700f8a87
MS
1394 }
1395 else
b1a19c7c 1396 return NULL_TREE;
8926095f 1397 }
58ec3cc5 1398 else
8d08fdba 1399 {
2d01edd7 1400 error ("conflicting declaration %q#D", newdecl);
dee15844 1401 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
0cbd7506 1402 return error_mark_node;
8d08fdba
MS
1403 }
1404 }
68642fb6 1405 else if (TREE_CODE (newdecl) == FUNCTION_DECL
75650646
MM
1406 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1407 && (!DECL_TEMPLATE_INFO (newdecl)
68642fb6 1408 || (DECL_TI_TEMPLATE (newdecl)
75650646
MM
1409 != DECL_TI_TEMPLATE (olddecl))))
1410 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1411 && (!DECL_TEMPLATE_INFO (olddecl)
68642fb6 1412 || (DECL_TI_TEMPLATE (olddecl)
75650646 1413 != DECL_TI_TEMPLATE (newdecl))))))
386b8a85
JM
1414 /* It's OK to have a template specialization and a non-template
1415 with the same type, or to have specializations of two
75650646
MM
1416 different templates with the same type. Note that if one is a
1417 specialization, and the other is an instantiation of the same
1418 template, that we do not exit at this point. That situation
1419 can occur if we instantiate a template class, and then
0e339752 1420 specialize one of its methods. This situation is valid, but
75650646 1421 the declarations must be merged in the usual way. */
b1a19c7c 1422 return NULL_TREE;
68642fb6
UD
1423 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1424 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
75650646
MM
1425 && !DECL_USE_TEMPLATE (newdecl))
1426 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1427 && !DECL_USE_TEMPLATE (olddecl))))
1428 /* One of the declarations is a template instantiation, and the
1429 other is not a template at all. That's OK. */
b1a19c7c 1430 return NULL_TREE;
c30b4add
MM
1431 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1432 {
1433 /* In [namespace.alias] we have:
c8094d83 1434
0cbd7506 1435 In a declarative region, a namespace-alias-definition can be
c30b4add
MM
1436 used to redefine a namespace-alias declared in that declarative
1437 region to refer only to the namespace to which it already
1438 refers.
c8094d83 1439
c30b4add
MM
1440 Therefore, if we encounter a second alias directive for the same
1441 alias, we can just ignore the second directive. */
1442 if (DECL_NAMESPACE_ALIAS (newdecl)
c8094d83 1443 && (DECL_NAMESPACE_ALIAS (newdecl)
c30b4add
MM
1444 == DECL_NAMESPACE_ALIAS (olddecl)))
1445 return olddecl;
1446 /* [namespace.alias]
1447
0cbd7506 1448 A namespace-name or namespace-alias shall not be declared as
c30b4add
MM
1449 the name of any other entity in the same declarative region.
1450 A namespace-name defined at global scope shall not be
77880ae4 1451 declared as the name of any other entity in any global scope
c30b4add 1452 of the program. */
2d01edd7 1453 error ("declaration of namespace %qD conflicts with", newdecl);
dee15844 1454 error ("previous declaration of namespace %q+D here", olddecl);
c30b4add
MM
1455 return error_mark_node;
1456 }
8d08fdba
MS
1457 else
1458 {
d8e178a0 1459 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
8251199e 1460 if (errmsg)
8d08fdba 1461 {
402b8cf6 1462 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
8d08fdba 1463 if (DECL_NAME (olddecl) != NULL_TREE)
dee15844
JM
1464 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1465 ? "%q+#D previously defined here"
1466 : "%q+#D previously declared here", olddecl);
b1a19c7c 1467 return error_mark_node;
8d08fdba
MS
1468 }
1469 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1470 && DECL_INITIAL (olddecl) != NULL_TREE
1471 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1472 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1473 {
1474 /* Prototype decl follows defn w/o prototype. */
dee15844 1475 warning (0, "prototype for %q+#D", newdecl);
d4ee4d25 1476 warning (0, "%Jfollows non-prototype definition here", olddecl);
8d08fdba 1477 }
ace4831d
MM
1478 else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1479 || TREE_CODE (olddecl) == VAR_DECL)
8d08fdba 1480 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
8926095f 1481 {
ace4831d
MM
1482 /* [dcl.link]
1483 If two declarations of the same function or object
1484 specify different linkage-specifications ..., the program
1485 is ill-formed.... Except for functions with C++ linkage,
1486 a function declaration without a linkage specification
1487 shall not precede the first linkage specification for
1488 that function. A function can be declared without a
1489 linkage specification after an explicit linkage
1490 specification has been seen; the linkage explicitly
1491 specified in the earlier declaration is not affected by
1492 such a function declaration.
1493
1494 DR 563 raises the question why the restrictions on
1495 functions should not also apply to objects. Older
1496 versions of G++ silently ignore the linkage-specification
1497 for this example:
1498
1499 namespace N {
1500 extern int i;
1501 extern "C" int i;
1502 }
1503
1504 which is clearly wrong. Therefore, we now treat objects
1505 like functions. */
46ccf50a 1506 if (current_lang_depth () == 0)
ace4831d
MM
1507 {
1508 /* There is no explicit linkage-specification, so we use
1509 the linkage from the previous declaration. */
1510 if (!DECL_LANG_SPECIFIC (newdecl))
1511 retrofit_lang_decl (newdecl);
1512 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1513 }
8926095f
MS
1514 else
1515 {
dee15844
JM
1516 error ("previous declaration of %q+#D with %qL linkage",
1517 olddecl, DECL_LANGUAGE (olddecl));
2d01edd7 1518 error ("conflicts with new declaration with %qL linkage",
0cbd7506 1519 DECL_LANGUAGE (newdecl));
8926095f
MS
1520 }
1521 }
e1cd6e56 1522
a6f02587 1523 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
c32381b1
JM
1524 ;
1525 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
e1cd6e56
MS
1526 {
1527 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1528 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1529 int i = 1;
1530
1531 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1532 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
68642fb6 1533
e1cd6e56
MS
1534 for (; t1 && t1 != void_list_node;
1535 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1536 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1537 {
2507f3b5
RK
1538 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1539 TREE_PURPOSE (t2)))
e1cd6e56 1540 {
cbe5f3b3 1541 permerror (input_location, "default argument given for parameter %d of %q#D",
37ec60ed 1542 i, newdecl);
cbe5f3b3 1543 permerror (input_location, "after previous specification in %q+#D", olddecl);
e1cd6e56
MS
1544 }
1545 else
1546 {
2d01edd7 1547 error ("default argument given for parameter %d of %q#D",
0cbd7506 1548 i, newdecl);
dee15844 1549 error ("after previous specification in %q+#D",
e1cd6e56
MS
1550 olddecl);
1551 }
1552 }
1553 }
8d08fdba
MS
1554 }
1555
4782bd5b
RS
1556 /* Do not merge an implicit typedef with an explicit one. In:
1557
1558 class A;
1559 ...
1560 typedef class A A __attribute__ ((foo));
1561
1562 the attribute should apply only to the typedef. */
1563 if (TREE_CODE (olddecl) == TYPE_DECL
1564 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1565 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
b1a19c7c 1566 return NULL_TREE;
4782bd5b 1567
8d08fdba
MS
1568 /* If new decl is `static' and an `extern' was seen previously,
1569 warn about it. */
1570 warn_extern_redeclared_static (newdecl, olddecl);
1571
e92cc029 1572 /* We have committed to returning 1 at this point. */
8d08fdba
MS
1573 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1574 {
1575 /* Now that functions must hold information normally held
1576 by field decls, there is extra work to do so that
1577 declaration information does not get destroyed during
1578 definition. */
1579 if (DECL_VINDEX (olddecl))
1580 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1581 if (DECL_CONTEXT (olddecl))
1582 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
e1cd6e56
MS
1583 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1584 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
fee7654e 1585 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
864b83b9 1586 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
815951d8 1587 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
963d5758 1588 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
e0fff4b3
JM
1589 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1590 SET_OVERLOADED_OPERATOR_CODE
1591 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
0b60dfe3 1592 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
68642fb6 1593
0b60dfe3 1594 /* Optionally warn about more than one declaration for the same
0cbd7506
MS
1595 name, but don't warn about a function declaration followed by a
1596 definition. */
0b60dfe3
BK
1597 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1598 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
a1c65f9f 1599 /* Don't warn about extern decl followed by definition. */
0b60dfe3 1600 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
a1c65f9f 1601 /* Don't warn about friends, let add_friend take care of it. */
d63d5d0c 1602 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
0b60dfe3 1603 {
b323323f
LM
1604 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1605 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
0b60dfe3 1606 }
b87d79e6
JM
1607
1608 if (DECL_DELETED_FN (newdecl))
1609 {
1610 error ("deleted definition of %qD", newdecl);
1611 error ("after previous declaration %q+D", olddecl);
1612 }
8d08fdba
MS
1613 }
1614
1615 /* Deal with C++: must preserve virtual function table size. */
1616 if (TREE_CODE (olddecl) == TYPE_DECL)
1617 {
926ce8bd
KH
1618 tree newtype = TREE_TYPE (newdecl);
1619 tree oldtype = TREE_TYPE (olddecl);
8d08fdba
MS
1620
1621 if (newtype != error_mark_node && oldtype != error_mark_node
1622 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
e93ee644
MM
1623 CLASSTYPE_FRIEND_CLASSES (newtype)
1624 = CLASSTYPE_FRIEND_CLASSES (oldtype);
7df87825 1625
970d6386 1626 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
8d08fdba
MS
1627 }
1628
8d08fdba
MS
1629 /* Copy all the DECL_... slots specified in the new decl
1630 except for any that we copy here from the old type. */
91d231cb 1631 DECL_ATTRIBUTES (newdecl)
f6897b10 1632 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
8d08fdba 1633
5566b478
MS
1634 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1635 {
e1f0e7a6
MM
1636 tree old_result;
1637 tree new_result;
1638 old_result = DECL_TEMPLATE_RESULT (olddecl);
1639 new_result = DECL_TEMPLATE_RESULT (newdecl);
1640 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
68642fb6 1641 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
4d85e00e
MM
1642 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1643 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
68642fb6 1644
3a47c4e4
AO
1645 DECL_ATTRIBUTES (old_result)
1646 = (*targetm.merge_decl_attributes) (old_result, new_result);
1647
e1f0e7a6
MM
1648 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1649 {
3a47c4e4
AO
1650 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1651 && DECL_INITIAL (new_result))
1652 {
1653 if (DECL_INITIAL (old_result))
99355518 1654 DECL_UNINLINABLE (old_result) = 1;
3a47c4e4 1655 else
99355518 1656 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
3a47c4e4
AO
1657 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1658 DECL_NOT_REALLY_EXTERN (old_result)
1659 = DECL_NOT_REALLY_EXTERN (new_result);
1660 DECL_INTERFACE_KNOWN (old_result)
1661 = DECL_INTERFACE_KNOWN (new_result);
1662 DECL_DECLARED_INLINE_P (old_result)
1663 = DECL_DECLARED_INLINE_P (new_result);
1eea53df
AP
1664 DECL_DISREGARD_INLINE_LIMITS (old_result)
1665 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1666
3a47c4e4
AO
1667 }
1668 else
1669 {
3a47c4e4
AO
1670 DECL_DECLARED_INLINE_P (old_result)
1671 |= DECL_DECLARED_INLINE_P (new_result);
1eea53df
AP
1672 DECL_DISREGARD_INLINE_LIMITS (old_result)
1673 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
3a47c4e4
AO
1674 check_redeclaration_exception_specification (newdecl, olddecl);
1675 }
e1f0e7a6
MM
1676 }
1677
daa8df65 1678 /* If the new declaration is a definition, update the file and
72c4a4ca
GK
1679 line information on the declaration, and also make
1680 the old declaration the same definition. */
3a47c4e4 1681 if (DECL_INITIAL (new_result) != NULL_TREE)
daa8df65 1682 {
caf93cb0 1683 DECL_SOURCE_LOCATION (olddecl)
e1f0e7a6 1684 = DECL_SOURCE_LOCATION (old_result)
f31686a3 1685 = DECL_SOURCE_LOCATION (newdecl);
72c4a4ca 1686 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
26bcf8fc 1687 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
e1f0e7a6
MM
1688 DECL_ARGUMENTS (old_result)
1689 = DECL_ARGUMENTS (new_result);
c11889ce
MM
1690 }
1691
b1a19c7c 1692 return olddecl;
5566b478 1693 }
68642fb6 1694
8d08fdba
MS
1695 if (types_match)
1696 {
1697 /* Automatically handles default parameters. */
1698 tree oldtype = TREE_TYPE (olddecl);
e1cd6e56 1699 tree newtype;
8d08fdba 1700
e1cd6e56 1701 /* Merge the data types specified in the two decls. */
6da794e8 1702 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
e1cd6e56 1703
6da794e8 1704 /* If merge_types produces a non-typedef type, just use the old type. */
9076e292
JM
1705 if (TREE_CODE (newdecl) == TYPE_DECL
1706 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1707 newtype = oldtype;
1708
8d08fdba 1709 if (TREE_CODE (newdecl) == VAR_DECL)
17bbb839
MM
1710 {
1711 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1712 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
3db45ab5 1713 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
6c06fbce 1714 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
39703eb9
MM
1715 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1716 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1799e5d5
RH
1717
1718 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1719 if (DECL_LANG_SPECIFIC (olddecl)
1720 && CP_DECL_THREADPRIVATE_P (olddecl))
1721 {
1722 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1723 if (!DECL_LANG_SPECIFIC (newdecl))
1724 retrofit_lang_decl (newdecl);
1725
1726 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1727 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1728 }
17bbb839
MM
1729 }
1730
6da794e8 1731 /* Do this after calling `merge_types' so that default
8d08fdba 1732 parameters don't confuse us. */
e1f0e7a6
MM
1733 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1734 check_redeclaration_exception_specification (newdecl, olddecl);
8d08fdba
MS
1735 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1736
4a2f6dc0
VR
1737 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1738 check_default_args (newdecl);
1739
8d08fdba 1740 /* Lay the type out, unless already done. */
407f03b8 1741 if (! same_type_p (newtype, oldtype)
5566b478 1742 && TREE_TYPE (newdecl) != error_mark_node
5156628f 1743 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe
MS
1744 layout_type (TREE_TYPE (newdecl));
1745
5566b478
MS
1746 if ((TREE_CODE (newdecl) == VAR_DECL
1747 || TREE_CODE (newdecl) == PARM_DECL
1748 || TREE_CODE (newdecl) == RESULT_DECL
1749 || TREE_CODE (newdecl) == FIELD_DECL
1750 || TREE_CODE (newdecl) == TYPE_DECL)
5156628f 1751 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe 1752 layout_decl (newdecl, 0);
8d08fdba
MS
1753
1754 /* Merge the type qualifiers. */
1755 if (TREE_READONLY (newdecl))
1756 TREE_READONLY (olddecl) = 1;
1757 if (TREE_THIS_VOLATILE (newdecl))
1758 TREE_THIS_VOLATILE (olddecl) = 1;
5cefa0d9
JM
1759 if (TREE_NOTHROW (newdecl))
1760 TREE_NOTHROW (olddecl) = 1;
8d08fdba 1761
302a2cc5
JM
1762 /* Merge deprecatedness. */
1763 if (TREE_DEPRECATED (newdecl))
1764 TREE_DEPRECATED (olddecl) = 1;
1765
5779e713
MM
1766 /* Preserve function specific target and optimization options */
1767 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1768 {
1769 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1770 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1771 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1772 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1773
1774 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1775 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1776 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1777 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1778 }
1779
8d08fdba 1780 /* Merge the initialization information. */
8926095f
MS
1781 if (DECL_INITIAL (newdecl) == NULL_TREE
1782 && DECL_INITIAL (olddecl) != NULL_TREE)
1783 {
1784 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
f31686a3 1785 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
b0d06515
MM
1786 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1787 && DECL_LANG_SPECIFIC (newdecl)
4d85e00e 1788 && DECL_LANG_SPECIFIC (olddecl))
69ee8086
RH
1789 {
1790 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1da326c3 1791 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
69ee8086 1792 }
8926095f 1793 }
39211cd5
MS
1794
1795 /* Merge the section attribute.
0cbd7506 1796 We want to issue an error if the sections conflict but that must be
39211cd5
MS
1797 done later in decl_attributes since we are called before attributes
1798 are assigned. */
1799 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1800 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1801
a157febd
GK
1802 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1803 {
1804 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1805 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1331d16f 1806 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
220a35cc 1807 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
220a35cc 1808 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1331d16f 1809 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1ea193c2 1810 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
becfd6e5
KZ
1811 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1812 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1813 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
1814 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
c740732f
MM
1815 /* Keep the old RTL. */
1816 COPY_DECL_RTL (olddecl, newdecl);
1817 }
caf93cb0 1818 else if (TREE_CODE (newdecl) == VAR_DECL
c740732f
MM
1819 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1820 {
1821 /* Keep the old RTL. We cannot keep the old RTL if the old
1822 declaration was for an incomplete object and the new
1823 declaration is not since many attributes of the RTL will
1824 change. */
1825 COPY_DECL_RTL (olddecl, newdecl);
a157febd 1826 }
8d08fdba
MS
1827 }
1828 /* If cannot merge, then use the new type and qualifiers,
1829 and don't preserve the old rtl. */
1830 else
1831 {
1832 /* Clean out any memory we had of the old declaration. */
1833 tree oldstatic = value_member (olddecl, static_aggregates);
1834 if (oldstatic)
1835 TREE_VALUE (oldstatic) = error_mark_node;
1836
1837 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1838 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1839 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1840 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1841 }
1842
1843 /* Merge the storage class information. */
45806a3f
FS
1844 merge_weak (newdecl, olddecl);
1845
e92cc029 1846 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
794d4a61 1847 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
a9aedbc2
MS
1848 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1849 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1850 if (! DECL_EXTERNAL (olddecl))
1851 DECL_EXTERNAL (newdecl) = 0;
68642fb6 1852
50b56799 1853 new_template = NULL_TREE;
0b60dfe3 1854 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
8d08fdba 1855 {
fea10e36
AO
1856 bool new_redefines_gnu_inline = false;
1857
1858 if (new_defines_function
1859 && ((DECL_INTERFACE_KNOWN (olddecl)
1860 && TREE_CODE (olddecl) == FUNCTION_DECL)
1861 || (TREE_CODE (olddecl) == TEMPLATE_DECL
1862 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1863 == FUNCTION_DECL))))
3a47c4e4
AO
1864 {
1865 tree fn = olddecl;
1866
1867 if (TREE_CODE (fn) == TEMPLATE_DECL)
1868 fn = DECL_TEMPLATE_RESULT (olddecl);
1869
fea10e36 1870 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
3a47c4e4 1871 }
3a47c4e4 1872
fea10e36 1873 if (!new_redefines_gnu_inline)
3a47c4e4 1874 {
3a47c4e4
AO
1875 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1876 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1877 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1878 }
68642fb6 1879 DECL_TEMPLATE_INSTANTIATED (newdecl)
2b0a63a3 1880 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
c8094d83 1881
58fb06b4
NS
1882 /* If the OLDDECL is an instantiation and/or specialization,
1883 then the NEWDECL must be too. But, it may not yet be marked
1884 as such if the caller has created NEWDECL, but has not yet
1885 figured out that it is a redeclaration. */
1886 if (!DECL_USE_TEMPLATE (newdecl))
1887 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
c8094d83 1888
0b60dfe3
BK
1889 /* Don't really know how much of the language-specific
1890 values we should copy from old to new. */
1891 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
caf93cb0 1892 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
e2500fed 1893 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
0b60dfe3 1894 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
4684cd27 1895 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
50b56799
MM
1896 if (DECL_TEMPLATE_INFO (newdecl))
1897 new_template = DECL_TI_TEMPLATE (newdecl);
fbf1c34b 1898 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3febd123 1899 DECL_INITIALIZED_IN_CLASS_P (newdecl)
0cbd7506 1900 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
0b60dfe3 1901 olddecl_friend = DECL_FRIEND_P (olddecl);
d63d5d0c
ILT
1902 hidden_friend = (DECL_ANTICIPATED (olddecl)
1903 && DECL_HIDDEN_FRIEND_P (olddecl)
1904 && newdecl_is_friend);
6a629cac
MM
1905
1906 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1907 if (TREE_CODE (newdecl) == FUNCTION_DECL
1908 || DECL_FUNCTION_TEMPLATE_P (newdecl))
bb5e8a7f
MM
1909 {
1910 DECL_BEFRIENDING_CLASSES (newdecl)
1911 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1912 DECL_BEFRIENDING_CLASSES (olddecl));
ca9e1382
KL
1913 /* DECL_THUNKS is only valid for virtual functions,
1914 otherwise it is a DECL_FRIEND_CONTEXT. */
1915 if (DECL_VIRTUAL_P (newdecl))
1916 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
bb5e8a7f 1917 }
8d08fdba
MS
1918 }
1919
8d08fdba
MS
1920 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1921 {
68642fb6
UD
1922 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1923 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
75650646
MM
1924 {
1925 /* If newdecl is not a specialization, then it is not a
1926 template-related function at all. And that means that we
bf7c02dd 1927 should have exited above, returning 0. */
50bc768d 1928 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
75650646 1929
68642fb6 1930 if (TREE_USED (olddecl))
75650646 1931 /* From [temp.expl.spec]:
68642fb6 1932
75650646
MM
1933 If a template, a member template or the member of a class
1934 template is explicitly specialized then that
1935 specialization shall be declared before the first use of
1936 that specialization that would cause an implicit
1937 instantiation to take place, in every translation unit in
1938 which such a use occurs. */
9e637a26 1939 error ("explicit specialization of %qD after first use",
75650646
MM
1940 olddecl);
1941
1942 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
d03d18e8 1943
b9e75696
JM
1944 /* Don't propagate visibility from the template to the
1945 specialization here. We'll do that in determine_visibility if
1946 appropriate. */
1947 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
1948
d03d18e8
KL
1949 /* [temp.expl.spec/14] We don't inline explicit specialization
1950 just because the primary template says so. */
75650646 1951 }
3a47c4e4
AO
1952 else if (new_defines_function && DECL_INITIAL (olddecl))
1953 {
7e8b322a
JH
1954 /* Never inline re-defined extern inline functions.
1955 FIXME: this could be better handled by keeping both
1956 function as separate declarations. */
3a47c4e4
AO
1957 DECL_UNINLINABLE (newdecl) = 1;
1958 }
d03d18e8
KL
1959 else
1960 {
1961 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1962 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
faae18ab 1963
d03d18e8 1964 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
faae18ab 1965
d03d18e8
KL
1966 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1967 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
c536a6a7
RG
1968
1969 DECL_DISREGARD_INLINE_LIMITS (newdecl)
1970 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
1971 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
1972 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
d03d18e8 1973 }
97055d5c 1974
5daf7c0a
JM
1975 /* Preserve abstractness on cloned [cd]tors. */
1976 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1977
700f8a87
MS
1978 if (! types_match)
1979 {
5d2ed28c 1980 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
92643fea 1981 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
84b8b0e0 1982 COPY_DECL_RTL (newdecl, olddecl);
5566b478
MS
1983 }
1984 if (! types_match || new_defines_function)
1985 {
6f1b4c42
JM
1986 /* These need to be copied so that the names are available.
1987 Note that if the types do match, we'll preserve inline
1988 info and other bits, but if not, we won't. */
700f8a87
MS
1989 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1990 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
700f8a87 1991 }
8d08fdba
MS
1992 if (new_defines_function)
1993 /* If defining a function declared with other language
1994 linkage, use the previously declared language linkage. */
5d2ed28c 1995 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
6f1b4c42 1996 else if (types_match)
8d08fdba
MS
1997 {
1998 /* If redeclaring a builtin function, and not a definition,
1999 it stays built in. */
2000 if (DECL_BUILT_IN (olddecl))
2001 {
26db82d8 2002 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
39211cd5 2003 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
8d08fdba
MS
2004 /* If we're keeping the built-in definition, keep the rtl,
2005 regardless of declaration matches. */
84b8b0e0 2006 COPY_DECL_RTL (olddecl, newdecl);
8d08fdba 2007 }
8d08fdba
MS
2008
2009 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
8d08fdba
MS
2010 /* Don't clear out the arguments if we're redefining a function. */
2011 if (DECL_ARGUMENTS (olddecl))
2012 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2013 }
2014 }
0b1161fc
MM
2015 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2016 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
a9aedbc2 2017
8d08fdba
MS
2018 /* Now preserve various other info from the definition. */
2019 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2020 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2021 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
92643fea 2022 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
8d08fdba 2023
d7afec4b 2024 /* Warn about conflicting visibility specifications. */
c8094d83 2025 if (DECL_VISIBILITY_SPECIFIED (olddecl)
73a8adb6 2026 && DECL_VISIBILITY_SPECIFIED (newdecl)
d7afec4b
ND
2027 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2028 {
dee15844
JM
2029 warning (OPT_Wattributes, "%q+D: visibility attribute ignored "
2030 "because it", newdecl);
5c498b10
DD
2031 warning (OPT_Wattributes, "%Jconflicts with previous "
2032 "declaration here", olddecl);
d7afec4b
ND
2033 }
2034 /* Choose the declaration which specified visibility. */
2035 if (DECL_VISIBILITY_SPECIFIED (olddecl))
facef326 2036 {
facef326 2037 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
d7afec4b
ND
2038 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2039 }
3db45ab5 2040 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
820cc88f
DB
2041 so keep this behavior. */
2042 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2043 {
2044 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2045 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2046 }
facef326 2047
1d786913
MM
2048 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2049 with that from NEWDECL below. */
2050 if (DECL_LANG_SPECIFIC (olddecl))
2051 {
c8094d83 2052 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
1d786913
MM
2053 != DECL_LANG_SPECIFIC (newdecl));
2054 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2055 }
2056
e27fb29c
MLI
2057 /* Merge the USED information. */
2058 if (TREE_USED (olddecl))
2059 TREE_USED (newdecl) = 1;
2060 else if (TREE_USED (newdecl))
2061 TREE_USED (olddecl) = 1;
2062
8d08fdba
MS
2063 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2064 {
2065 int function_size;
8d08fdba 2066
820cc88f 2067 function_size = sizeof (struct tree_decl_common);
8d08fdba 2068
730e1556
KG
2069 memcpy ((char *) olddecl + sizeof (struct tree_common),
2070 (char *) newdecl + sizeof (struct tree_common),
2071 function_size - sizeof (struct tree_common));
8d08fdba 2072
820cc88f
DB
2073 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2074 (char *) newdecl + sizeof (struct tree_decl_common),
2075 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
50b56799 2076 if (new_template)
b3445994
MM
2077 /* If newdecl is a template instantiation, it is possible that
2078 the following sequence of events has occurred:
2079
2080 o A friend function was declared in a class template. The
2081 class template was instantiated.
2082
2083 o The instantiation of the friend declaration was
2084 recorded on the instantiation list, and is newdecl.
2085
2086 o Later, however, instantiate_class_template called pushdecl
2087 on the newdecl to perform name injection. But, pushdecl in
2088 turn called duplicate_decls when it discovered that another
2089 declaration of a global function with the same name already
2090 existed.
2091
2092 o Here, in duplicate_decls, we decided to clobber newdecl.
2093
2094 If we're going to do that, we'd better make sure that
2095 olddecl, and not newdecl, is on the list of
2096 instantiations so that if we try to do the instantiation
2097 again we won't get the clobbered declaration. */
caf93cb0 2098 reregister_specialization (newdecl,
50b56799 2099 new_template,
b3445994 2100 olddecl);
8d08fdba
MS
2101 }
2102 else
2103 {
820cc88f 2104 size_t size = tree_code_size (TREE_CODE (olddecl));
730e1556
KG
2105 memcpy ((char *) olddecl + sizeof (struct tree_common),
2106 (char *) newdecl + sizeof (struct tree_common),
820cc88f 2107 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
3db45ab5 2108 switch (TREE_CODE (olddecl))
820cc88f
DB
2109 {
2110 case LABEL_DECL:
2111 case VAR_DECL:
2112 case RESULT_DECL:
2113 case PARM_DECL:
2114 case FIELD_DECL:
2115 case TYPE_DECL:
2116 case CONST_DECL:
2117 {
2118 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2119 (char *) newdecl + sizeof (struct tree_decl_common),
2120 size - sizeof (struct tree_decl_common)
2121 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2122 }
2123 break;
2124 default:
2125 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2126 (char *) newdecl + sizeof (struct tree_decl_common),
2127 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2128 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2129 break;
2130 }
8d08fdba 2131 }
8d08fdba
MS
2132 DECL_UID (olddecl) = olddecl_uid;
2133 if (olddecl_friend)
2134 DECL_FRIEND_P (olddecl) = 1;
d63d5d0c
ILT
2135 if (hidden_friend)
2136 {
2137 DECL_ANTICIPATED (olddecl) = 1;
2138 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2139 }
8d08fdba 2140
d9525bec
BK
2141 /* NEWDECL contains the merged attribute lists.
2142 Update OLDDECL to be the same. */
91d231cb 2143 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
d9525bec 2144
16e31964
DS
2145 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2146 so that encode_section_info has a chance to look at the new decl
2147 flags and attributes. */
caf93cb0 2148 if (DECL_RTL_SET_P (olddecl)
16e31964
DS
2149 && (TREE_CODE (olddecl) == FUNCTION_DECL
2150 || (TREE_CODE (olddecl) == VAR_DECL
2151 && TREE_STATIC (olddecl))))
0e6df31e 2152 make_decl_rtl (olddecl);
16e31964 2153
1d786913
MM
2154 /* The NEWDECL will no longer be needed. Because every out-of-class
2155 declaration of a member results in a call to duplicate_decls,
2156 freeing these nodes represents in a significant savings. */
2157 ggc_free (newdecl);
2158
b1a19c7c 2159 return olddecl;
8d08fdba 2160}
8d08fdba 2161\f
8251199e 2162/* Return zero if the declaration NEWDECL is valid
8d08fdba
MS
2163 when the declaration OLDDECL (assumed to be for the same name)
2164 has already been seen.
2165 Otherwise return an error message format string with a %s
2166 where the identifier should go. */
2167
d8e178a0 2168static const char *
11f6b451 2169redeclaration_error_message (tree newdecl, tree olddecl)
8d08fdba
MS
2170{
2171 if (TREE_CODE (newdecl) == TYPE_DECL)
2172 {
2173 /* Because C++ can put things into name space for free,
2174 constructs like "typedef struct foo { ... } foo"
2175 would look like an erroneous redeclaration. */
3bfdc719 2176 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
6aed477a 2177 return NULL;
8d08fdba 2178 else
2d01edd7 2179 return "redefinition of %q#D";
8d08fdba
MS
2180 }
2181 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2182 {
2183 /* If this is a pure function, its olddecl will actually be
2184 the original initialization to `0' (which we force to call
2185 abort()). Don't complain about redefinition in this case. */
d1fc3bbd
AO
2186 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2187 && DECL_INITIAL (olddecl) == NULL_TREE)
6aed477a 2188 return NULL;
8d08fdba 2189
2c73f9f5 2190 /* If both functions come from different namespaces, this is not
a1c65f9f 2191 a redeclaration - this is a conflict with a used function. */
6eb3bb27 2192 if (DECL_NAMESPACE_SCOPE_P (olddecl)
713101a6
AO
2193 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2194 && ! decls_match (olddecl, newdecl))
2d01edd7 2195 return "%qD conflicts with used function";
2c73f9f5 2196
db5ae43f 2197 /* We'll complain about linkage mismatches in
0cbd7506 2198 warn_extern_redeclared_static. */
db5ae43f 2199
2c73f9f5 2200 /* Defining the same name twice is no good. */
8d08fdba 2201 if (DECL_INITIAL (olddecl) != NULL_TREE
faae18ab 2202 && DECL_INITIAL (newdecl) != NULL_TREE)
8d08fdba
MS
2203 {
2204 if (DECL_NAME (olddecl) == NULL_TREE)
2d01edd7 2205 return "%q#D not declared in class";
3a47c4e4
AO
2206 else if (!GNU_INLINE_P (olddecl)
2207 || GNU_INLINE_P (newdecl))
2d01edd7 2208 return "redefinition of %q#D";
8d08fdba 2209 }
3a47c4e4
AO
2210
2211 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2212 {
2213 bool olda = GNU_INLINE_P (olddecl);
2214 bool newa = GNU_INLINE_P (newdecl);
2215
2216 if (olda != newa)
2217 {
2218 if (newa)
2219 return "%q+D redeclared inline with %<gnu_inline%> attribute";
2220 else
2221 return "%q+D redeclared inline without %<gnu_inline%> attribute";
2222 }
2223 }
2224
6aed477a 2225 return NULL;
8d08fdba 2226 }
51c184be
MS
2227 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2228 {
5bd61841
MM
2229 tree nt, ot;
2230
2231 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2232 {
2233 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2234 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2d01edd7 2235 return "redefinition of %q#D";
5bd61841
MM
2236 return NULL;
2237 }
2238
2239 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
caf93cb0 2240 || (DECL_TEMPLATE_RESULT (newdecl)
5bd61841
MM
2241 == DECL_TEMPLATE_RESULT (olddecl)))
2242 return NULL;
2243
2244 nt = DECL_TEMPLATE_RESULT (newdecl);
2245 if (DECL_TEMPLATE_INFO (nt))
2246 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2247 ot = DECL_TEMPLATE_RESULT (olddecl);
2248 if (DECL_TEMPLATE_INFO (ot))
2249 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
3a47c4e4
AO
2250 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2251 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2d01edd7 2252 return "redefinition of %q#D";
5bd61841 2253
3a47c4e4
AO
2254 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2255 {
2256 bool olda = GNU_INLINE_P (ot);
2257 bool newa = GNU_INLINE_P (nt);
2258
2259 if (olda != newa)
2260 {
2261 if (newa)
2262 return "%q+D redeclared inline with %<gnu_inline%> attribute";
2263 else
2264 return "%q+D redeclared inline without %<gnu_inline%> attribute";
2265 }
2266 }
2267
9b7dd5e8
DG
2268 /* Core issue #226 (C++0x):
2269
2270 If a friend function template declaration specifies a
2271 default template-argument, that declaration shall be a
2272 definition and shall be the only declaration of the
2273 function template in the translation unit. */
c1ae8be5 2274 if ((cxx_dialect != cxx98)
9b7dd5e8
DG
2275 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2276 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2277 /*is_primary=*/1, /*is_partial=*/0,
2278 /*is_friend_decl=*/2))
2279 return "redeclaration of friend %q#D may not have default template arguments";
2280
5bd61841 2281 return NULL;
51c184be 2282 }
31a79236 2283 else if (TREE_CODE (newdecl) == VAR_DECL
1799e5d5
RH
2284 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2285 && (! DECL_LANG_SPECIFIC (olddecl)
2286 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2287 || DECL_THREAD_LOCAL_P (newdecl)))
31a79236
JJ
2288 {
2289 /* Only variables can be thread-local, and all declarations must
2290 agree on this property. */
2291 if (DECL_THREAD_LOCAL_P (newdecl))
2292 return "thread-local declaration of %q#D follows "
2293 "non-thread-local declaration";
2294 else
2295 return "non-thread-local declaration of %q#D follows "
2296 "thread-local declaration";
2297 }
1f51a992 2298 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
8d08fdba 2299 {
555551c2
MM
2300 /* The objects have been declared at namespace scope. If either
2301 is a member of an anonymous union, then this is an invalid
2302 redeclaration. For example:
2303
2304 int i;
2305 union { int i; };
2306
2307 is invalid. */
aedfac0e
PC
2308 if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2309 || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
555551c2
MM
2310 return "redeclaration of %q#D";
2311 /* If at least one declaration is a reference, there is no
2312 conflict. For example:
2313
2314 int i = 3;
2315 extern int i;
2316
2317 is valid. */
8d08fdba 2318 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
6aed477a 2319 return NULL;
8926095f 2320 /* Reject two definitions. */
2d01edd7 2321 return "redefinition of %q#D";
8d08fdba
MS
2322 }
2323 else
2324 {
2325 /* Objects declared with block scope: */
2326 /* Reject two definitions, and reject a definition
2327 together with an external reference. */
2328 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2d01edd7 2329 return "redeclaration of %q#D";
6aed477a 2330 return NULL;
8d08fdba
MS
2331 }
2332}
2333\f
1799e5d5
RH
2334/* Hash and equality functions for the named_label table. */
2335
2336static hashval_t
2337named_label_entry_hash (const void *data)
2338{
2339 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2340 return DECL_UID (ent->label_decl);
2341}
2342
2343static int
2344named_label_entry_eq (const void *a, const void *b)
2345{
2346 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2347 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2348 return ent_a->label_decl == ent_b->label_decl;
2349}
2350
acef433b 2351/* Create a new label, named ID. */
8d08fdba 2352
acef433b 2353static tree
11f6b451 2354make_label_decl (tree id, int local_p)
8d08fdba 2355{
1799e5d5
RH
2356 struct named_label_entry *ent;
2357 void **slot;
acef433b 2358 tree decl;
8d08fdba 2359
acef433b 2360 decl = build_decl (LABEL_DECL, id, void_type_node);
acef433b
MM
2361
2362 DECL_CONTEXT (decl) = current_function_decl;
2363 DECL_MODE (decl) = VOIDmode;
2364 C_DECLARED_LABEL_FLAG (decl) = local_p;
8d08fdba 2365
acef433b
MM
2366 /* Say where one reference is to the label, for the sake of the
2367 error if it is not defined. */
f31686a3 2368 DECL_SOURCE_LOCATION (decl) = input_location;
acef433b
MM
2369
2370 /* Record the fact that this identifier is bound to this label. */
2371 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2372
1799e5d5
RH
2373 /* Create the label htab for the function on demand. */
2374 if (!named_labels)
2375 named_labels = htab_create_ggc (13, named_label_entry_hash,
2376 named_label_entry_eq, NULL);
6625cdb5 2377
1799e5d5
RH
2378 /* Record this label on the list of labels used in this function.
2379 We do this before calling make_label_decl so that we get the
2380 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2381 ent = GGC_CNEW (struct named_label_entry);
2382 ent->label_decl = decl;
6625cdb5 2383
1799e5d5
RH
2384 slot = htab_find_slot (named_labels, ent, INSERT);
2385 gcc_assert (*slot == NULL);
2386 *slot = ent;
2387
2388 return decl;
acef433b 2389}
8d08fdba 2390
acef433b
MM
2391/* Look for a label named ID in the current function. If one cannot
2392 be found, create one. (We keep track of used, but undefined,
2393 labels, and complain about them at the end of a function.) */
8d08fdba 2394
68642fb6 2395tree
11f6b451 2396lookup_label (tree id)
acef433b
MM
2397{
2398 tree decl;
8d08fdba 2399
22ffcc6f 2400 timevar_push (TV_NAME_LOOKUP);
acef433b
MM
2401 /* You can't use labels at global scope. */
2402 if (current_function_decl == NULL_TREE)
2403 {
2d01edd7 2404 error ("label %qE referenced outside of any function", id);
22ffcc6f 2405 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
acef433b 2406 }
68642fb6 2407
acef433b
MM
2408 /* See if we've already got this label. */
2409 decl = IDENTIFIER_LABEL_VALUE (id);
2410 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
22ffcc6f 2411 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba 2412
acef433b 2413 decl = make_label_decl (id, /*local_p=*/0);
22ffcc6f 2414 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba
MS
2415}
2416
acef433b 2417/* Declare a local label named ID. */
8d08fdba
MS
2418
2419tree
11f6b451 2420declare_local_label (tree id)
8d08fdba 2421{
1799e5d5 2422 tree decl, shadow;
8d08fdba 2423
acef433b 2424 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
1799e5d5
RH
2425 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2426 shadow = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2427 current_binding_level->shadowed_labels);
2428 current_binding_level->shadowed_labels = shadow;
2429
acef433b 2430 decl = make_label_decl (id, /*local_p=*/1);
1799e5d5 2431 TREE_VALUE (shadow) = decl;
68642fb6 2432
acef433b 2433 return decl;
8d08fdba
MS
2434}
2435
6625cdb5
JM
2436/* Returns nonzero if it is ill-formed to jump past the declaration of
2437 DECL. Returns 2 if it's also a real problem. */
2438
2439static int
11f6b451 2440decl_jump_unsafe (tree decl)
6625cdb5 2441{
b88b7ced
AP
2442 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2443 || TREE_TYPE (decl) == error_mark_node)
6625cdb5
JM
2444 return 0;
2445
6c06fbce
MM
2446 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
2447 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2448 return 2;
2449
2450 if (pod_type_p (TREE_TYPE (decl)))
6625cdb5
JM
2451 return 0;
2452
6c06fbce 2453 /* The POD stuff is just pedantry; why should it matter if the class
6625cdb5 2454 contains a field of pointer to member type? */
6625cdb5
JM
2455 return 1;
2456}
2457
1799e5d5
RH
2458/* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2459
2460static void
2461identify_goto (tree decl, const location_t *locus)
2462{
2463 if (decl)
cbe5f3b3 2464 permerror (input_location, "jump to label %qD", decl);
1799e5d5 2465 else
cbe5f3b3 2466 permerror (input_location, "jump to case label");
1799e5d5 2467 if (locus)
cbe5f3b3 2468 permerror (input_location, "%H from here", locus);
1799e5d5
RH
2469}
2470
6625cdb5
JM
2471/* Check that a single previously seen jump to a newly defined label
2472 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2473 the jump context; NAMES are the names in scope in LEVEL at the jump
3db45ab5 2474 context; LOCUS is the source position of the jump or 0. Returns
1799e5d5 2475 true if all is well. */
6625cdb5 2476
1799e5d5
RH
2477static bool
2478check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2479 bool exited_omp, const location_t *locus)
2480{
2481 struct cp_binding_level *b;
2482 bool identified = false, saw_eh = false, saw_omp = false;
2483
2484 if (exited_omp)
2485 {
2486 identify_goto (decl, locus);
2487 error (" exits OpenMP structured block");
2488 identified = saw_omp = true;
2489 }
2490
2491 for (b = current_binding_level; b ; b = b->level_chain)
2492 {
2493 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2494
2495 for (new_decls = b->names; new_decls != old_decls;
6625cdb5
JM
2496 new_decls = TREE_CHAIN (new_decls))
2497 {
2498 int problem = decl_jump_unsafe (new_decls);
2499 if (! problem)
2500 continue;
2501
1799e5d5 2502 if (!identified)
6625cdb5 2503 {
1799e5d5
RH
2504 identify_goto (decl, locus);
2505 identified = true;
6625cdb5 2506 }
826840d9 2507 if (problem > 1)
dee15844 2508 error (" crosses initialization of %q+#D", new_decls);
6625cdb5 2509 else
cbe5f3b3 2510 permerror (input_location, " enters scope of non-POD %q+#D", new_decls);
6625cdb5
JM
2511 }
2512
2513 if (b == level)
2514 break;
1799e5d5 2515 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
6625cdb5 2516 {
1799e5d5 2517 if (!identified)
6625cdb5 2518 {
1799e5d5
RH
2519 identify_goto (decl, locus);
2520 identified = true;
6625cdb5 2521 }
a7e8c268 2522 if (b->kind == sk_try)
826840d9
RH
2523 error (" enters try block");
2524 else
2525 error (" enters catch block");
1799e5d5
RH
2526 saw_eh = true;
2527 }
2528 if (b->kind == sk_omp && !saw_omp)
2529 {
2530 if (!identified)
2531 {
2532 identify_goto (decl, locus);
2533 identified = true;
2534 }
2535 error (" enters OpenMP structured block");
2536 saw_omp = true;
6625cdb5
JM
2537 }
2538 }
6625cdb5 2539
1799e5d5 2540 return !identified;
6625cdb5
JM
2541}
2542
2543static void
1799e5d5 2544check_previous_goto (tree decl, struct named_label_use_entry *use)
6625cdb5 2545{
1799e5d5
RH
2546 check_previous_goto_1 (decl, use->binding_level,
2547 use->names_in_scope, use->in_omp_scope,
2548 &use->o_goto_locus);
6625cdb5
JM
2549}
2550
1799e5d5
RH
2551static bool
2552check_switch_goto (struct cp_binding_level* level)
6625cdb5 2553{
1799e5d5 2554 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
6625cdb5
JM
2555}
2556
2557/* Check that a new jump to a label DECL is OK. Called by
2558 finish_goto_stmt. */
2559
2560void
11f6b451 2561check_goto (tree decl)
6625cdb5 2562{
1799e5d5
RH
2563 struct named_label_entry *ent, dummy;
2564 bool saw_catch = false, identified = false;
6625cdb5 2565 tree bad;
6625cdb5 2566
1799e5d5
RH
2567 /* We can't know where a computed goto is jumping.
2568 So we assume that it's OK. */
2569 if (TREE_CODE (decl) != LABEL_DECL)
2570 return;
2571
2572 /* We didn't record any information about this label when we created it,
2573 and there's not much point since it's trivial to analyze as a return. */
2574 if (decl == cdtor_label)
e3cd9945
APB
2575 return;
2576
1799e5d5
RH
2577 dummy.label_decl = decl;
2578 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2579 gcc_assert (ent != NULL);
2580
6625cdb5
JM
2581 /* If the label hasn't been defined yet, defer checking. */
2582 if (! DECL_INITIAL (decl))
2583 {
1799e5d5 2584 struct named_label_use_entry *new_use;
6625cdb5 2585
1799e5d5
RH
2586 /* Don't bother creating another use if the last goto had the
2587 same data, and will therefore create the same set of errors. */
2588 if (ent->uses
2589 && ent->uses->names_in_scope == current_binding_level->names)
2590 return;
6625cdb5 2591
1799e5d5
RH
2592 new_use = GGC_NEW (struct named_label_use_entry);
2593 new_use->binding_level = current_binding_level;
2594 new_use->names_in_scope = current_binding_level->names;
2595 new_use->o_goto_locus = input_location;
2596 new_use->in_omp_scope = false;
2597
2598 new_use->next = ent->uses;
2599 ent->uses = new_use;
2600 return;
2601 }
6625cdb5 2602
1799e5d5
RH
2603 if (ent->in_try_scope || ent->in_catch_scope
2604 || ent->in_omp_scope || ent->bad_decls)
6625cdb5 2605 {
cbe5f3b3
MLI
2606 permerror (input_location, "jump to label %q+D", decl);
2607 permerror (input_location, " from here");
1799e5d5 2608 identified = true;
6625cdb5
JM
2609 }
2610
1799e5d5 2611 for (bad = ent->bad_decls; bad; bad = TREE_CHAIN (bad))
6625cdb5
JM
2612 {
2613 tree b = TREE_VALUE (bad);
2614 int u = decl_jump_unsafe (b);
2615
2616 if (u > 1 && DECL_ARTIFICIAL (b))
1799e5d5
RH
2617 {
2618 /* Can't skip init of __exception_info. */
2619 error ("%J enters catch block", b);
2620 saw_catch = true;
2621 }
6625cdb5 2622 else if (u > 1)
dee15844 2623 error (" skips initialization of %q+#D", b);
6625cdb5 2624 else
cbe5f3b3 2625 permerror (input_location, " enters scope of non-POD %q+#D", b);
6625cdb5
JM
2626 }
2627
1799e5d5 2628 if (ent->in_try_scope)
6625cdb5 2629 error (" enters try block");
1799e5d5 2630 else if (ent->in_catch_scope && !saw_catch)
826840d9 2631 error (" enters catch block");
1799e5d5
RH
2632
2633 if (ent->in_omp_scope)
2634 error (" enters OpenMP structured block");
2635 else if (flag_openmp)
2636 {
2637 struct cp_binding_level *b;
2638 for (b = current_binding_level; b ; b = b->level_chain)
2639 {
2640 if (b == ent->binding_level)
2641 break;
2642 if (b->kind == sk_omp)
2643 {
2644 if (!identified)
2645 {
cbe5f3b3
MLI
2646 permerror (input_location, "jump to label %q+D", decl);
2647 permerror (input_location, " from here");
1799e5d5
RH
2648 identified = true;
2649 }
2650 error (" exits OpenMP structured block");
2651 break;
2652 }
2653 }
2654 }
2655}
2656
2657/* Check that a return is ok wrt OpenMP structured blocks.
2658 Called by finish_return_stmt. Returns true if all is well. */
2659
2660bool
2661check_omp_return (void)
2662{
2663 struct cp_binding_level *b;
2664 for (b = current_binding_level; b ; b = b->level_chain)
2665 if (b->kind == sk_omp)
2666 {
2667 error ("invalid exit from OpenMP structured block");
2668 return false;
2669 }
2670 return true;
6625cdb5
JM
2671}
2672
8d08fdba 2673/* Define a label, specifying the location in the source file.
b9c87401 2674 Return the LABEL_DECL node for the label. */
8d08fdba
MS
2675
2676tree
5b030314 2677define_label (location_t location, tree name)
8d08fdba 2678{
1799e5d5 2679 struct named_label_entry *ent, dummy;
926ce8bd 2680 struct cp_binding_level *p;
1799e5d5 2681 tree decl;
6625cdb5 2682
22ffcc6f 2683 timevar_push (TV_NAME_LOOKUP);
1799e5d5
RH
2684
2685 decl = lookup_label (name);
2686
2687 dummy.label_decl = decl;
2688 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2689 gcc_assert (ent != NULL);
8d08fdba 2690
3dc9aec6 2691 /* After labels, make any new cleanups in the function go into their
8d08fdba 2692 own new (temporary) binding contour. */
caf93cb0
EC
2693 for (p = current_binding_level;
2694 p->kind != sk_function_parms;
a7e8c268 2695 p = p->level_chain)
3dc9aec6 2696 p->more_cleanups_ok = 0;
8d08fdba 2697
e1cd6e56 2698 if (name == get_identifier ("wchar_t"))
cbe5f3b3 2699 permerror (input_location, "label named wchar_t");
e1cd6e56 2700
8d08fdba 2701 if (DECL_INITIAL (decl) != NULL_TREE)
417fa55b
LM
2702 {
2703 error ("duplicate label %qD", decl);
2704 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
2705 }
8d08fdba
MS
2706 else
2707 {
1799e5d5
RH
2708 struct named_label_use_entry *use;
2709
8d08fdba
MS
2710 /* Mark label as having been defined. */
2711 DECL_INITIAL (decl) = error_mark_node;
2712 /* Say where in the source. */
f31686a3 2713 DECL_SOURCE_LOCATION (decl) = location;
1799e5d5
RH
2714
2715 ent->binding_level = current_binding_level;
2716 ent->names_in_scope = current_binding_level->names;
2717
2718 for (use = ent->uses; use ; use = use->next)
2719 check_previous_goto (decl, use);
2720 ent->uses = NULL;
8d08fdba 2721 }
b9c87401 2722
be99edf8 2723 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba
MS
2724}
2725
a5894242
MS
2726struct cp_switch
2727{
e2500fed 2728 struct cp_binding_level *level;
a5894242 2729 struct cp_switch *next;
56cb9733
MM
2730 /* The SWITCH_STMT being built. */
2731 tree switch_stmt;
2732 /* A splay-tree mapping the low element of a case range to the high
2733 element, or NULL_TREE if there is no high element. Used to
2734 determine whether or not a new case label duplicates an old case
2735 label. We need a tree, rather than simply a hash table, because
2736 of the GNU case range extension. */
2737 splay_tree cases;
a5894242
MS
2738};
2739
56cb9733
MM
2740/* A stack of the currently active switch statements. The innermost
2741 switch statement is on the top of the stack. There is no need to
2742 mark the stack for garbage collection because it is only active
2743 during the processing of the body of a function, and we never
2744 collect at that point. */
5362b086 2745
a5894242
MS
2746static struct cp_switch *switch_stack;
2747
56cb9733
MM
2748/* Called right after a switch-statement condition is parsed.
2749 SWITCH_STMT is the switch statement being parsed. */
2750
a5894242 2751void
11f6b451 2752push_switch (tree switch_stmt)
a5894242 2753{
0ac1b889 2754 struct cp_switch *p = XNEW (struct cp_switch);
a5894242
MS
2755 p->level = current_binding_level;
2756 p->next = switch_stack;
56cb9733
MM
2757 p->switch_stmt = switch_stmt;
2758 p->cases = splay_tree_new (case_compare, NULL, NULL);
a5894242
MS
2759 switch_stack = p;
2760}
2761
2762void
11f6b451 2763pop_switch (void)
a5894242 2764{
6de9cd9a 2765 struct cp_switch *cs = switch_stack;
fbc315db 2766 location_t switch_location;
6de9cd9a
DN
2767
2768 /* Emit warnings as needed. */
fbc315db
ILT
2769 if (EXPR_HAS_LOCATION (cs->switch_stmt))
2770 switch_location = EXPR_LOCATION (cs->switch_stmt);
2771 else
2772 switch_location = input_location;
dddf9a0a
AP
2773 if (!processing_template_decl)
2774 c_do_switch_warnings (cs->cases, switch_location,
2775 SWITCH_STMT_TYPE (cs->switch_stmt),
2776 SWITCH_STMT_COND (cs->switch_stmt));
5362b086 2777
56cb9733 2778 splay_tree_delete (cs->cases);
a5894242 2779 switch_stack = switch_stack->next;
bedda2da 2780 free (cs);
a5894242
MS
2781}
2782
b0a1da19
JM
2783/* Note that we've seen a definition of a case label, and complain if this
2784 is a bad place for one. */
e92cc029 2785
3e4d04a1 2786tree
11f6b451 2787finish_case_label (tree low_value, tree high_value)
8d08fdba 2788{
3e4d04a1 2789 tree cond, r;
926ce8bd 2790 struct cp_binding_level *p;
a5894242 2791
56cb9733
MM
2792 if (processing_template_decl)
2793 {
8f17b5c5
MM
2794 tree label;
2795
56cb9733
MM
2796 /* For templates, just add the case label; we'll do semantic
2797 analysis at instantiation-time. */
8f17b5c5 2798 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
3e4d04a1 2799 return add_stmt (build_case_label (low_value, high_value, label));
56cb9733
MM
2800 }
2801
2802 /* Find the condition on which this switch statement depends. */
ebaae582 2803 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
56cb9733
MM
2804 if (cond && TREE_CODE (cond) == TREE_LIST)
2805 cond = TREE_VALUE (cond);
56cb9733 2806
1799e5d5
RH
2807 if (!check_switch_goto (switch_stack->level))
2808 return error_mark_node;
2809
a6c0a76c
SB
2810 r = c_add_case_label (switch_stack->cases, cond, TREE_TYPE (cond),
2811 low_value, high_value);
8d08fdba 2812
3dc9aec6 2813 /* After labels, make any new cleanups in the function go into their
8d08fdba 2814 own new (temporary) binding contour. */
caf93cb0
EC
2815 for (p = current_binding_level;
2816 p->kind != sk_function_parms;
a7e8c268 2817 p = p->level_chain)
3dc9aec6 2818 p->more_cleanups_ok = 0;
3e4d04a1
RH
2819
2820 return r;
8d08fdba
MS
2821}
2822\f
7ddedda4
MM
2823/* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2824
e2500fed 2825static hashval_t
11f6b451 2826typename_hash (const void* k)
7ddedda4 2827{
e2500fed 2828 hashval_t hash;
741ac903 2829 const_tree const t = (const_tree) k;
7ddedda4 2830
7bdfd72e
KG
2831 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2832 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
7ddedda4
MM
2833
2834 return hash;
2835}
2836
fc6a28d7
MM
2837typedef struct typename_info {
2838 tree scope;
2839 tree name;
2840 tree template_id;
2841 bool enum_p;
2842 bool class_p;
2843} typename_info;
2844
06d40de8
DG
2845/* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
2846 really of type `typename_info*' */
7ddedda4 2847
e2500fed 2848static int
11f6b451 2849typename_compare (const void * k1, const void * k2)
7ddedda4 2850{
741ac903
KG
2851 const_tree const t1 = (const_tree) k1;
2852 const typename_info *const t2 = (const typename_info *) k2;
fc6a28d7
MM
2853
2854 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2855 && TYPE_CONTEXT (t1) == t2->scope
2856 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2857 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2858 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
7ddedda4
MM
2859}
2860
45869a6c 2861/* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
fc6a28d7 2862 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
c8094d83 2863
45869a6c
MM
2864 Returns the new TYPENAME_TYPE. */
2865
e2500fed
GK
2866static GTY ((param_is (union tree_node))) htab_t typename_htab;
2867
8ce33230 2868static tree
fc6a28d7
MM
2869build_typename_type (tree context, tree name, tree fullname,
2870 enum tag_types tag_type)
45869a6c
MM
2871{
2872 tree t;
2873 tree d;
fc6a28d7 2874 typename_info ti;
fad205ff 2875 void **e;
fc6a28d7 2876 hashval_t hash;
45869a6c 2877
e2500fed 2878 if (typename_htab == NULL)
fc6a28d7
MM
2879 typename_htab = htab_create_ggc (61, &typename_hash,
2880 &typename_compare, NULL);
2881
c8094d83 2882 ti.scope = FROB_CONTEXT (context);
fc6a28d7
MM
2883 ti.name = name;
2884 ti.template_id = fullname;
2885 ti.enum_p = tag_type == enum_type;
2886 ti.class_p = (tag_type == class_type
2887 || tag_type == record_type
2888 || tag_type == union_type);
2889 hash = (htab_hash_pointer (ti.scope)
2890 ^ htab_hash_pointer (ti.name));
45869a6c 2891
7ddedda4 2892 /* See if we already have this type. */
fc6a28d7 2893 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
e2500fed
GK
2894 if (*e)
2895 t = (tree) *e;
7ddedda4 2896 else
fc6a28d7
MM
2897 {
2898 /* Build the TYPENAME_TYPE. */
9e1e64ec 2899 t = cxx_make_type (TYPENAME_TYPE);
fc6a28d7
MM
2900 TYPE_CONTEXT (t) = ti.scope;
2901 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2902 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2903 TYPENAME_IS_CLASS_P (t) = ti.class_p;
c8094d83 2904
fc6a28d7
MM
2905 /* Build the corresponding TYPE_DECL. */
2906 d = build_decl (TYPE_DECL, name, t);
2907 TYPE_NAME (TREE_TYPE (d)) = d;
2908 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2909 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2910 DECL_ARTIFICIAL (d) = 1;
2911
2912 /* Store it in the hash table. */
2913 *e = t;
06d40de8
DG
2914
2915 /* TYPENAME_TYPEs must always be compared structurally, because
2916 they may or may not resolve down to another type depending on
2917 the currently open classes. */
2918 SET_TYPE_STRUCTURAL_EQUALITY (t);
fc6a28d7 2919 }
c8094d83 2920
45869a6c
MM
2921 return t;
2922}
2923
fc6a28d7
MM
2924/* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
2925 provided to name the type. Returns an appropriate type, unless an
2926 error occurs, in which case error_mark_node is returned. If we
2927 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2928 return that, rather than the _TYPE it corresponds to, in other
2929 cases we look through the type decl. If TF_ERROR is set, complain
2930 about errors, otherwise be quiet. */
3baa501d 2931
5566b478 2932tree
fc6a28d7
MM
2933make_typename_type (tree context, tree name, enum tag_types tag_type,
2934 tsubst_flags_t complain)
5566b478 2935{
b2b7d40a 2936 tree fullname;
7d3bec9d
NS
2937 tree t;
2938 bool want_template;
a80e4195 2939
5dc5d13c
KL
2940 if (name == error_mark_node
2941 || context == NULL_TREE
2942 || context == error_mark_node)
2943 return error_mark_node;
2944
2f939d94 2945 if (TYPE_P (name))
78638e24 2946 {
68642fb6
UD
2947 if (!(TYPE_LANG_SPECIFIC (name)
2948 && (CLASSTYPE_IS_TEMPLATE (name)
78638e24
MM
2949 || CLASSTYPE_USE_TEMPLATE (name))))
2950 name = TYPE_IDENTIFIER (name);
2951 else
2952 /* Create a TEMPLATE_ID_EXPR for the type. */
2953 name = build_nt (TEMPLATE_ID_EXPR,
2954 CLASSTYPE_TI_TEMPLATE (name),
2955 CLASSTYPE_TI_ARGS (name));
2956 }
653cc74a 2957 else if (TREE_CODE (name) == TYPE_DECL)
a80e4195 2958 name = DECL_NAME (name);
b2b7d40a
JM
2959
2960 fullname = name;
2961
2962 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11686454
JM
2963 {
2964 name = TREE_OPERAND (name, 0);
2965 if (TREE_CODE (name) == TEMPLATE_DECL)
2966 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
50ef2c18
MM
2967 else if (TREE_CODE (name) == OVERLOAD)
2968 {
2969 error ("%qD is not a type", name);
2970 return error_mark_node;
2971 }
11686454 2972 }
8a2b77e7
JM
2973 if (TREE_CODE (name) == TEMPLATE_DECL)
2974 {
2d01edd7 2975 error ("%qD used without template parameters", name);
8a2b77e7
JM
2976 return error_mark_node;
2977 }
50bc768d 2978 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
0c88d886 2979 gcc_assert (TYPE_P (context));
04ddee1b 2980
7d3bec9d
NS
2981 /* When the CONTEXT is a dependent type, NAME could refer to a
2982 dependent base class of CONTEXT. So we cannot peek inside it,
2983 even if CONTEXT is a currently open scope. */
2984 if (dependent_type_p (context))
2985 return build_typename_type (context, name, fullname, tag_type);
caf93cb0 2986
9e1e64ec 2987 if (!MAYBE_CLASS_TYPE_P (context))
7d3bec9d
NS
2988 {
2989 if (complain & tf_error)
2990 error ("%q#T is not a class", context);
2991 return error_mark_node;
5566b478 2992 }
7d3bec9d
NS
2993
2994 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
2995
2996 /* We should only set WANT_TYPE when we're a nested typename type.
2997 Then we can give better diagnostics if we find a non-type. */
2998 t = lookup_field (context, name, 0, /*want_type=*/true);
2999 if (!t)
11249cf0 3000 {
4f2b0fb2 3001 if (complain & tf_error)
7d3bec9d
NS
3002 error (want_template ? "no class template named %q#T in %q#T"
3003 : "no type named %q#T in %q#T", name, context);
11249cf0
MM
3004 return error_mark_node;
3005 }
7d3bec9d
NS
3006
3007 if (want_template && !DECL_CLASS_TEMPLATE_P (t))
3008 {
3009 if (complain & tf_error)
3010 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3011 context, name, t);
3012 return error_mark_node;
3013 }
3014 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3015 {
3016 if (complain & tf_error)
3017 error ("%<typename %T::%D%> names %q#T, which is not a type",
3018 context, name, t);
3019 return error_mark_node;
3020 }
3021
3022 if (complain & tf_error)
02022f3a 3023 perform_or_defer_access_check (TYPE_BINFO (context), t, t);
7d3bec9d
NS
3024
3025 if (want_template)
3026 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3027 NULL_TREE, context,
3028 /*entering_scope=*/0,
3029 tf_warning_or_error | tf_user);
3030
3031 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3032 t = TREE_TYPE (t);
3033
3034 return t;
5566b478
MS
3035}
3036
b939a023 3037/* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
c8094d83 3038 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
b939a023
KL
3039 in which case error_mark_node is returned.
3040
3041 If PARM_LIST is non-NULL, also make sure that the template parameter
3042 list of TEMPLATE_DECL matches.
3043
3044 If COMPLAIN zero, don't complain about any errors that occur. */
b8c6534b
KL
3045
3046tree
b939a023
KL
3047make_unbound_class_template (tree context, tree name, tree parm_list,
3048 tsubst_flags_t complain)
b8c6534b
KL
3049{
3050 tree t;
3051 tree d;
3052
3053 if (TYPE_P (name))
3054 name = TYPE_IDENTIFIER (name);
3055 else if (DECL_P (name))
3056 name = DECL_NAME (name);
8dc2b103 3057 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
b8c6534b 3058
9579624e 3059 if (!dependent_type_p (context)
b8c6534b
KL
3060 || currently_open_class (context))
3061 {
3062 tree tmpl = NULL_TREE;
3063
9e1e64ec 3064 if (MAYBE_CLASS_TYPE_P (context))
86ac0575 3065 tmpl = lookup_field (context, name, 0, false);
b8c6534b
KL
3066
3067 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
3068 {
4f09be91 3069 if (complain & tf_error)
2d01edd7 3070 error ("no class template named %q#T in %q#T", name, context);
b8c6534b
KL
3071 return error_mark_node;
3072 }
caf93cb0 3073
b939a023
KL
3074 if (parm_list
3075 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3076 {
3077 if (complain & tf_error)
3078 {
3079 error ("template parameters do not match template");
dee15844 3080 error ("%q+D declared here", tmpl);
b939a023
KL
3081 }
3082 return error_mark_node;
3083 }
3084
2b59fc25 3085 if (complain & tf_error)
02022f3a 3086 perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
b8c6534b
KL
3087
3088 return tmpl;
3089 }
3090
3091 /* Build the UNBOUND_CLASS_TEMPLATE. */
9e1e64ec 3092 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
b8c6534b
KL
3093 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3094 TREE_TYPE (t) = NULL_TREE;
06d40de8 3095 SET_TYPE_STRUCTURAL_EQUALITY (t);
b8c6534b
KL
3096
3097 /* Build the corresponding TEMPLATE_DECL. */
3098 d = build_decl (TEMPLATE_DECL, name, t);
3099 TYPE_NAME (TREE_TYPE (d)) = d;
3100 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3101 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3102 DECL_ARTIFICIAL (d) = 1;
b939a023 3103 DECL_TEMPLATE_PARMS (d) = parm_list;
b8c6534b
KL
3104
3105 return t;
3106}
3107
8d08fdba 3108\f
47aa0df4 3109
8d08fdba 3110/* Push the declarations of builtin types into the namespace.
4b0d3cbe
MM
3111 RID_INDEX is the index of the builtin type in the array
3112 RID_POINTERS. NAME is the name used when looking up the builtin
3113 type. TYPE is the _TYPE node for the builtin type. */
8d08fdba 3114
eaa7c03f 3115void
caf93cb0 3116record_builtin_type (enum rid rid_index,
0cbd7506
MS
3117 const char* name,
3118 tree type)
8d08fdba
MS
3119{
3120 tree rname = NULL_TREE, tname = NULL_TREE;
a703fb38 3121 tree tdecl = NULL_TREE;
8d08fdba 3122
0e5921e8 3123 if ((int) rid_index < (int) RID_MAX)
8d08fdba
MS
3124 rname = ridpointers[(int) rid_index];
3125 if (name)
3126 tname = get_identifier (name);
3127
4b0d3cbe
MM
3128 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3129 eliminated. Built-in types should not be looked up name; their
3130 names are keywords that the parser can recognize. However, there
3131 is code in c-common.c that uses identifier_global_value to look
3132 up built-in types by name. */
8d08fdba
MS
3133 if (tname)
3134 {
4b0d3cbe
MM
3135 tdecl = build_decl (TYPE_DECL, tname, type);
3136 DECL_ARTIFICIAL (tdecl) = 1;
a7e8c268 3137 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
8d08fdba 3138 }
4b0d3cbe 3139 if (rname)
8d08fdba 3140 {
4b0d3cbe 3141 if (!tdecl)
8d08fdba 3142 {
4b0d3cbe
MM
3143 tdecl = build_decl (TYPE_DECL, rname, type);
3144 DECL_ARTIFICIAL (tdecl) = 1;
8d08fdba 3145 }
4b0d3cbe 3146 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
8d08fdba 3147 }
4b0d3cbe
MM
3148
3149 if (!TYPE_NAME (type))
3150 TYPE_NAME (type) = tdecl;
47aa0df4
MM
3151
3152 if (tdecl)
21d13d83 3153 debug_hooks->type_decl (tdecl, 0);
8d08fdba
MS
3154}
3155
eff71ab0 3156/* Record one of the standard Java types.
4d8a1dd6
MM
3157 * Declare it as having the given NAME.
3158 * If SIZE > 0, it is the size of one of the integral types;
3159 * otherwise it is the negative of the size of one of the other types. */
eff71ab0
PB
3160
3161static tree
11f6b451 3162record_builtin_java_type (const char* name, int size)
eff71ab0
PB
3163{
3164 tree type, decl;
3165 if (size > 0)
3166 type = make_signed_type (size);
3167 else if (size > -32)
70fef63a 3168 { /* "__java_char" or ""__java_boolean". */
eff71ab0 3169 type = make_unsigned_type (-size);
70fef63a 3170 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
eff71ab0
PB
3171 }
3172 else
a1c65f9f 3173 { /* "__java_float" or ""__java_double". */
eff71ab0
PB
3174 type = make_node (REAL_TYPE);
3175 TYPE_PRECISION (type) = - size;
3176 layout_type (type);
3177 }
0e5921e8 3178 record_builtin_type (RID_MAX, name, type);
eff71ab0 3179 decl = TYPE_NAME (type);
e229f2cd
PB
3180
3181 /* Suppress generate debug symbol entries for these types,
3182 since for normal C++ they are just clutter.
a1c65f9f 3183 However, push_lang_context undoes this if extern "Java" is seen. */
eff71ab0 3184 DECL_IGNORED_P (decl) = 1;
e229f2cd 3185
eff71ab0
PB
3186 TYPE_FOR_JAVA (type) = 1;
3187 return type;
3188}
3189
3b426391 3190/* Push a type into the namespace so that the back ends ignore it. */
036407f7
ML
3191
3192static void
11f6b451 3193record_unknown_type (tree type, const char* name)
036407f7
ML
3194{
3195 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
3196 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3197 DECL_IGNORED_P (decl) = 1;
3198 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3199 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3200 TYPE_ALIGN (type) = 1;
11cf4d18 3201 TYPE_USER_ALIGN (type) = 0;
036407f7 3202 TYPE_MODE (type) = TYPE_MODE (void_type_node);
68642fb6 3203}
036407f7 3204
13a44ee0 3205/* A string for which we should create an IDENTIFIER_NODE at
d43829f9
MM
3206 startup. */
3207
3208typedef struct predefined_identifier
3209{
3210 /* The name of the identifier. */
8b60264b 3211 const char *const name;
d43829f9 3212 /* The place where the IDENTIFIER_NODE should be stored. */
8b60264b 3213 tree *const node;
838dfd8a 3214 /* Nonzero if this is the name of a constructor or destructor. */
8b60264b 3215 const int ctor_or_dtor_p;
d43829f9
MM
3216} predefined_identifier;
3217
3218/* Create all the predefined identifiers. */
3219
3220static void
11f6b451 3221initialize_predefined_identifiers (void)
d43829f9 3222{
8b60264b 3223 const predefined_identifier *pid;
d43829f9
MM
3224
3225 /* A table of identifiers to create at startup. */
8b60264b 3226 static const predefined_identifier predefined_identifiers[] = {
298d6f60
MM
3227 { "C++", &lang_name_cplusplus, 0 },
3228 { "C", &lang_name_c, 0 },
3229 { "Java", &lang_name_java, 0 },
d6eec208
MM
3230 /* Some of these names have a trailing space so that it is
3231 impossible for them to conflict with names written by users. */
3232 { "__ct ", &ctor_identifier, 1 },
3233 { "__base_ctor ", &base_ctor_identifier, 1 },
3234 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3235 { "__dt ", &dtor_identifier, 1 },
3236 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3237 { "__base_dtor ", &base_dtor_identifier, 1 },
3238 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
298d6f60 3239 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
298d6f60
MM
3240 { "nelts", &nelts_identifier, 0 },
3241 { THIS_NAME, &this_identifier, 0 },
c4372ef4 3242 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
298d6f60 3243 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
298d6f60 3244 { "_vptr", &vptr_identifier, 0 },
3ec6bad3 3245 { "__vtt_parm", &vtt_parm_identifier, 0 },
82a2669e 3246 { "::", &global_scope_name, 0 },
1f6e1acc 3247 { "std", &std_identifier, 0 },
298d6f60 3248 { NULL, NULL, 0 }
d43829f9
MM
3249 };
3250
3251 for (pid = predefined_identifiers; pid->name; ++pid)
298d6f60
MM
3252 {
3253 *pid->node = get_identifier (pid->name);
3254 if (pid->ctor_or_dtor_p)
3255 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3256 }
d43829f9
MM
3257}
3258
8d08fdba
MS
3259/* Create the predefined scalar types of C,
3260 and some nodes representing standard constants (0, 1, (void *)0).
3261 Initialize the global binding level.
3262 Make definitions for built-in primitive functions. */
3263
3264void
11f6b451 3265cxx_init_decl_processing (void)
8d08fdba 3266{
10841285
MM
3267 tree void_ftype;
3268 tree void_ftype_ptr;
8d08fdba 3269
8c1d6d62 3270 build_common_tree_nodes (flag_signed_char, false);
6de66680 3271
d43829f9
MM
3272 /* Create all the identifiers we need. */
3273 initialize_predefined_identifiers ();
8d08fdba 3274
9cd64686
MM
3275 /* Create the global variables. */
3276 push_to_top_level ();
8012c983 3277
82a2669e 3278 current_function_decl = NULL_TREE;
1ec57cf0 3279 current_binding_level = NULL;
a1c65f9f 3280 /* Enter the global namespace. */
50bc768d 3281 gcc_assert (global_namespace == NULL_TREE);
82a2669e 3282 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
0cbd7506 3283 void_type_node);
b9e75696 3284 TREE_PUBLIC (global_namespace) = 1;
ac20c67a 3285 begin_scope (sk_namespace, global_namespace);
82a2669e 3286
30394414
JM
3287 current_lang_name = NULL_TREE;
3288
ddbfd28d
GK
3289 if (flag_visibility_ms_compat)
3290 default_visibility = VISIBILITY_HIDDEN;
3291
8d08fdba
MS
3292 /* Initially, C. */
3293 current_lang_name = lang_name_c;
3294
6bcedb4e 3295 /* Create the `std' namespace. */
1dbb6023
NS
3296 push_namespace (std_identifier);
3297 std_node = current_namespace;
3298 pop_namespace ();
5362b086 3299
eaa7c03f 3300 c_common_nodes_and_builtins ();
37c46b43 3301
4d8a1dd6
MM
3302 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3303 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3304 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3305 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3306 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3307 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3308 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3309 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
eff71ab0 3310
7d60be94
NS
3311 integer_two_node = build_int_cst (NULL_TREE, 2);
3312 integer_three_node = build_int_cst (NULL_TREE, 3);
8d08fdba 3313
255512c1 3314 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
de7df9eb
JM
3315 truthvalue_type_node = boolean_type_node;
3316 truthvalue_false_node = boolean_false_node;
3317 truthvalue_true_node = boolean_true_node;
2986ae00 3318
4cc1d462 3319 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
5fd8e536
JM
3320
3321#if 0
3e411c3f 3322 record_builtin_type (RID_MAX, NULL, string_type_node);
5fd8e536
JM
3323#endif
3324
1f84ec23
MM
3325 delta_type_node = ptrdiff_type_node;
3326 vtable_index_type = ptrdiff_type_node;
c7e266a6 3327
3ec6bad3 3328 vtt_parm_type = build_pointer_type (const_ptr_type_node);
10841285
MM
3329 void_ftype = build_function_type (void_type_node, void_list_node);
3330 void_ftype_ptr = build_function_type (void_type_node,
3331 tree_cons (NULL_TREE,
caf93cb0 3332 ptr_type_node,
10841285 3333 void_list_node));
824b9a4c 3334 void_ftype_ptr
4cc1d462 3335 = build_exception_variant (void_ftype_ptr, empty_except_spec);
8d08fdba 3336
8d08fdba
MS
3337 /* C++ extensions */
3338
3339 unknown_type_node = make_node (UNKNOWN_TYPE);
036407f7
ML
3340 record_unknown_type (unknown_type_node, "unknown type");
3341
8d08fdba
MS
3342 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3343 TREE_TYPE (unknown_type_node) = unknown_type_node;
a6967cc0 3344
a6967cc0
JM
3345 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3346 result. */
8d08fdba
MS
3347 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3348 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3349
09357846
JM
3350 init_list_type_node = make_node (UNKNOWN_TYPE);
3351 record_unknown_type (init_list_type_node, "init list");
3352
c4372ef4
NS
3353 {
3354 /* Make sure we get a unique function type, so we can give
3355 its pointer type a name. (This wins for gdb.) */
3356 tree vfunc_type = make_node (FUNCTION_TYPE);
3357 TREE_TYPE (vfunc_type) = integer_type_node;
3358 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3359 layout_type (vfunc_type);
3360
3361 vtable_entry_type = build_pointer_type (vfunc_type);
3362 }
0e5921e8 3363 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
8d08fdba 3364
8d08fdba 3365 vtbl_type_node
52bf7d5d 3366 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
8d08fdba 3367 layout_type (vtbl_type_node);
91063b51 3368 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3e411c3f 3369 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
849da744
MM
3370 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3371 layout_type (vtbl_ptr_type_node);
3e411c3f 3372 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
8d08fdba 3373
1f84ec23
MM
3374 push_namespace (get_identifier ("__cxxabiv1"));
3375 abi_node = current_namespace;
3376 pop_namespace ();
6633d636 3377
2c73f9f5 3378 global_type_node = make_node (LANG_TYPE);
036407f7 3379 record_unknown_type (global_type_node, "global type");
2c73f9f5 3380
db5ae43f
MS
3381 /* Now, C++. */
3382 current_lang_name = lang_name_cplusplus;
8d08fdba 3383
ced78d8b 3384 {
4b0d3cbe
MM
3385 tree bad_alloc_id;
3386 tree bad_alloc_type_node;
3387 tree bad_alloc_decl;
3388 tree newtype, deltype;
10841285
MM
3389 tree ptr_ftype_sizetype;
3390
1dbb6023 3391 push_namespace (std_identifier);
4b0d3cbe 3392 bad_alloc_id = get_identifier ("bad_alloc");
9e1e64ec 3393 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4b0d3cbe 3394 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
caf93cb0 3395 bad_alloc_decl
4b0d3cbe
MM
3396 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3397 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3398 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
1dbb6023 3399 pop_namespace ();
caf93cb0
EC
3400
3401 ptr_ftype_sizetype
10841285
MM
3402 = build_function_type (ptr_type_node,
3403 tree_cons (NULL_TREE,
c9f8536c 3404 size_type_node,
10841285 3405 void_list_node));
2c73f9f5 3406 newtype = build_exception_variant
0ba8a114
NS
3407 (ptr_ftype_sizetype, add_exception_specifier
3408 (NULL_TREE, bad_alloc_type_node, -1));
4cc1d462 3409 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
596ea4e5
AS
3410 push_cp_library_fn (NEW_EXPR, newtype);
3411 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3412 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3413 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
ced78d8b 3414 }
8d08fdba
MS
3415
3416 abort_fndecl
1f84ec23 3417 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
8d08fdba 3418
8d08fdba
MS
3419 /* Perform other language dependent initializations. */
3420 init_class_processing ();
db48b831 3421 init_rtti_processing ();
8d08fdba 3422
6467930b 3423 if (flag_exceptions)
8d2733ca 3424 init_exception_processing ();
9e9ff709 3425
7fcdf4c2 3426 if (! supports_one_only ())
72b7eeff 3427 flag_weak = 0;
8d08fdba 3428
2ce07e2d 3429 make_fname_decl = cp_make_fname_decl;
0ba8a114 3430 start_fname_decls ();
8d08fdba 3431
e9a25f70 3432 /* Show we use EH for cleanups. */
6de9cd9a
DN
3433 if (flag_exceptions)
3434 using_eh_for_cleanups ();
62c154ed
JM
3435}
3436
0ba8a114 3437/* Generate an initializer for a function naming variable from
bb885938 3438 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
f4f206f4 3439 filled in with the type of the init. */
0ba8a114
NS
3440
3441tree
bb885938 3442cp_fname_init (const char* name, tree *type_p)
0ba8a114
NS
3443{
3444 tree domain = NULL_TREE;
3445 tree type;
3446 tree init = NULL_TREE;
3447 size_t length = 0;
3448
3449 if (name)
3450 {
3451 length = strlen (name);
3452 domain = build_index_type (size_int (length));
3453 init = build_string (length + 1, name);
3454 }
caf93cb0 3455
0ba8a114
NS
3456 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3457 type = build_cplus_array_type (type, domain);
3458
bb885938 3459 *type_p = type;
caf93cb0 3460
0ba8a114
NS
3461 if (init)
3462 TREE_TYPE (init) = type;
3463 else
bb885938 3464 init = error_mark_node;
caf93cb0 3465
0ba8a114
NS
3466 return init;
3467}
3468
2ce07e2d
NS
3469/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3470 decl, NAME is the initialization string and TYPE_DEP indicates whether
3471 NAME depended on the type of the function. We make use of that to detect
0ba8a114 3472 __PRETTY_FUNCTION__ inside a template fn. This is being done
a692ad2e 3473 lazily at the point of first use, so we mustn't push the decl now. */
2ce07e2d
NS
3474
3475static tree
11f6b451 3476cp_make_fname_decl (tree id, int type_dep)
2ce07e2d 3477{
83182544 3478 const char *const name = (type_dep && processing_template_decl
e913996d 3479 ? NULL : fname_as_string (type_dep));
bb885938
NS
3480 tree type;
3481 tree init = cp_fname_init (name, &type);
3482 tree decl = build_decl (VAR_DECL, id, type);
2ce07e2d 3483
9e6f2e7d 3484 if (name)
b1d5455a 3485 free (CONST_CAST (char *, name));
9e6f2e7d 3486
6cce57b0 3487 /* As we're using pushdecl_with_scope, we must set the context. */
0ba8a114
NS
3488 DECL_CONTEXT (decl) = current_function_decl;
3489 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
caf93cb0 3490
2ce07e2d
NS
3491 TREE_STATIC (decl) = 1;
3492 TREE_READONLY (decl) = 1;
2ce07e2d 3493 DECL_ARTIFICIAL (decl) = 1;
caf93cb0 3494
0ba8a114 3495 TREE_USED (decl) = 1;
5362b086 3496
6cce57b0
JM
3497 if (current_function_decl)
3498 {
3499 struct cp_binding_level *b = current_binding_level;
a7e8c268 3500 while (b->level_chain->kind != sk_function_parms)
6cce57b0 3501 b = b->level_chain;
d63d5d0c 3502 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3db45ab5 3503 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
d174af6c 3504 LOOKUP_ONLYCONVERTING);
e913996d 3505 }
ad16ae7f
MM
3506 else
3507 pushdecl_top_level_and_finish (decl, init);
caf93cb0 3508
2ce07e2d
NS
3509 return decl;
3510}
3511
c79efc4d 3512static tree
5779e713 3513builtin_function_1 (tree decl, tree context, bool is_global)
c79efc4d
RÁE
3514{
3515 tree id = DECL_NAME (decl);
3516 const char *name = IDENTIFIER_POINTER (id);
8d08fdba 3517
c79efc4d 3518 retrofit_lang_decl (decl);
0c11ada6 3519
c79efc4d
RÁE
3520 /* All nesting of C++ functions is lexical; there is never a "static
3521 chain" in the sense of GNU C nested functions. */
3522 DECL_NO_STATIC_CHAIN (decl) = 1;
3523
3524 DECL_ARTIFICIAL (decl) = 1;
3525 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3526 SET_DECL_LANGUAGE (decl, lang_c);
3527 /* Runtime library routines are, by definition, available in an
3528 external shared object. */
3529 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3530 DECL_VISIBILITY_SPECIFIED (decl) = 1;
8d08fdba 3531
d52e4867 3532 DECL_CONTEXT (decl) = context;
12a22e76 3533
5779e713
MM
3534 if (is_global)
3535 pushdecl_top_level (decl);
3536 else
3537 pushdecl (decl);
6bcedb4e 3538
d63d5d0c
ILT
3539 /* A function in the user's namespace should have an explicit
3540 declaration before it is used. Mark the built-in function as
3541 anticipated but not actually declared. */
935d1834
ZW
3542 if (name[0] != '_' || name[1] != '_')
3543 DECL_ANTICIPATED (decl) = 1;
012c4da9
JJ
3544 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3545 {
3546 size_t len = strlen (name);
3547
3548 /* Treat __*_chk fortification functions as anticipated as well,
3549 unless they are __builtin_*. */
3550 if (len > strlen ("___chk")
3551 && memcmp (name + len - strlen ("_chk"),
3552 "_chk", strlen ("_chk") + 1) == 0)
3553 DECL_ANTICIPATED (decl) = 1;
3554 }
935d1834 3555
8d08fdba
MS
3556 return decl;
3557}
7f4edbcb 3558
d52e4867 3559tree
c79efc4d 3560cxx_builtin_function (tree decl)
d52e4867 3561{
c79efc4d
RÁE
3562 tree id = DECL_NAME (decl);
3563 const char *name = IDENTIFIER_POINTER (id);
d52e4867
RS
3564 /* All builtins that don't begin with an '_' should additionally
3565 go in the 'std' namespace. */
3566 if (name[0] != '_')
3567 {
e5b44dfb 3568 tree decl2 = copy_node(decl);
d52e4867 3569 push_namespace (std_identifier);
5779e713
MM
3570 builtin_function_1 (decl2, std_node, false);
3571 pop_namespace ();
3572 }
3573
3574 return builtin_function_1 (decl, NULL_TREE, false);
3575}
3576
3577/* Like cxx_builtin_function, but guarantee the function is added to the global
3578 scope. This is to allow function specific options to add new machine
3579 dependent builtins when the target ISA changes via attribute((target(...)))
3580 which saves space on program startup if the program does not use non-generic
3581 ISAs. */
3582
3583tree
3584cxx_builtin_function_ext_scope (tree decl)
3585{
3586
3587 tree id = DECL_NAME (decl);
3588 const char *name = IDENTIFIER_POINTER (id);
3589 /* All builtins that don't begin with an '_' should additionally
3590 go in the 'std' namespace. */
3591 if (name[0] != '_')
3592 {
3593 tree decl2 = copy_node(decl);
3594 push_namespace (std_identifier);
3595 builtin_function_1 (decl2, std_node, true);
d52e4867
RS
3596 pop_namespace ();
3597 }
3598
5779e713 3599 return builtin_function_1 (decl, NULL_TREE, true);
d52e4867
RS
3600}
3601
0c11ada6
JM
3602/* Generate a FUNCTION_DECL with the typical flags for a runtime library
3603 function. Not called directly. */
3604
3605static tree
11f6b451 3606build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
0c11ada6
JM
3607{
3608 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3609 DECL_EXTERNAL (fn) = 1;
3610 TREE_PUBLIC (fn) = 1;
3611 DECL_ARTIFICIAL (fn) = 1;
596ea4e5 3612 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
5d2ed28c 3613 SET_DECL_LANGUAGE (fn, lang_c);
73a8adb6
MM
3614 /* Runtime library routines are, by definition, available in an
3615 external shared object. */
3616 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3617 DECL_VISIBILITY_SPECIFIED (fn) = 1;
0c11ada6
JM
3618 return fn;
3619}
c2a37c55 3620
0c11ada6
JM
3621/* Returns the _DECL for a library function with C linkage.
3622 We assume that such functions never throw; if this is incorrect,
3623 callers should unset TREE_NOTHROW. */
c2a37c55 3624
448083e5 3625static tree
11f6b451 3626build_library_fn (tree name, tree type)
0c11ada6 3627{
f59d2aad
RH
3628 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3629 TREE_NOTHROW (fn) = 1;
3630 return fn;
0c11ada6
JM
3631}
3632
3633/* Returns the _DECL for a library function with C++ linkage. */
3634
596ea4e5 3635static tree
11f6b451 3636build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
0c11ada6 3637{
596ea4e5 3638 tree fn = build_library_fn_1 (name, operator_code, type);
0c11ada6 3639 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6bbf1598 3640 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
5d2ed28c 3641 SET_DECL_LANGUAGE (fn, lang_cplusplus);
0c11ada6
JM
3642 return fn;
3643}
3644
3645/* Like build_library_fn, but takes a C string instead of an
3646 IDENTIFIER_NODE. */
3647
3648tree
11f6b451 3649build_library_fn_ptr (const char* name, tree type)
7f4edbcb 3650{
0c11ada6
JM
3651 return build_library_fn (get_identifier (name), type);
3652}
3653
3654/* Like build_cp_library_fn, but takes a C string instead of an
3655 IDENTIFIER_NODE. */
3656
3657tree
11f6b451 3658build_cp_library_fn_ptr (const char* name, tree type)
0c11ada6 3659{
596ea4e5 3660 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
3661}
3662
3663/* Like build_library_fn, but also pushes the function so that we will
448083e5
PC
3664 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
3665 may throw exceptions listed in RAISES. */
0c11ada6
JM
3666
3667tree
448083e5 3668push_library_fn (tree name, tree type, tree raises)
0c11ada6 3669{
448083e5
PC
3670 tree fn;
3671
3672 if (raises)
3673 type = build_exception_variant (type, raises);
3674
3675 fn = build_library_fn (name, type);
0c11ada6
JM
3676 pushdecl_top_level (fn);
3677 return fn;
3678}
3679
3680/* Like build_cp_library_fn, but also pushes the function so that it
3681 will be found by normal lookup. */
3682
596ea4e5 3683static tree
11f6b451 3684push_cp_library_fn (enum tree_code operator_code, tree type)
0c11ada6 3685{
5362b086 3686 tree fn = build_cp_library_fn (ansi_opname (operator_code),
596ea4e5
AS
3687 operator_code,
3688 type);
0c11ada6
JM
3689 pushdecl (fn);
3690 return fn;
3691}
3692
3693/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3694 a FUNCTION_TYPE. */
3695
3696tree
11f6b451 3697push_void_library_fn (tree name, tree parmtypes)
0c11ada6
JM
3698{
3699 tree type = build_function_type (void_type_node, parmtypes);
448083e5 3700 return push_library_fn (name, type, NULL_TREE);
0c11ada6
JM
3701}
3702
cf74fb86 3703/* Like push_library_fn, but also note that this function throws
0c11ada6
JM
3704 and does not return. Used for __throw_foo and the like. */
3705
3706tree
11f6b451 3707push_throw_library_fn (tree name, tree type)
0c11ada6 3708{
448083e5 3709 tree fn = push_library_fn (name, type, NULL_TREE);
0c11ada6
JM
3710 TREE_THIS_VOLATILE (fn) = 1;
3711 TREE_NOTHROW (fn) = 0;
3712 return fn;
7f4edbcb 3713}
8d08fdba 3714\f
61a127b3
MM
3715/* When we call finish_struct for an anonymous union, we create
3716 default copy constructors and such. But, an anonymous union
3717 shouldn't have such things; this function undoes the damage to the
3718 anonymous union type T.
3719
3720 (The reason that we create the synthesized methods is that we don't
3721 distinguish `union { int i; }' from `typedef union { int i; } U'.
3722 The first is an anonymous union; the second is just an ordinary
3723 union type.) */
3724
3725void
11f6b451 3726fixup_anonymous_aggr (tree t)
61a127b3
MM
3727{
3728 tree *q;
3729
f4f206f4 3730 /* Wipe out memory of synthesized methods. */
0fcedd9c 3731 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
61a127b3
MM
3732 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3733 TYPE_HAS_INIT_REF (t) = 0;
3734 TYPE_HAS_CONST_INIT_REF (t) = 0;
3735 TYPE_HAS_ASSIGN_REF (t) = 0;
61a127b3
MM
3736 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3737
3738 /* Splice the implicitly generated functions out of the TYPE_METHODS
3739 list. */
3740 q = &TYPE_METHODS (t);
3741 while (*q)
3742 {
3743 if (DECL_ARTIFICIAL (*q))
3744 *q = TREE_CHAIN (*q);
3745 else
3746 q = &TREE_CHAIN (*q);
3747 }
3748
cab1f180 3749 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
61a127b3 3750 if (TYPE_METHODS (t))
24f58e74
PC
3751 {
3752 tree decl = TYPE_MAIN_DECL (t);
3753
3754 if (TREE_CODE (t) != UNION_TYPE)
3755 error ("%Jan anonymous struct cannot have function members", decl);
3756 else
3757 error ("%Jan anonymous union cannot have function members", decl);
3758 }
a1c2b86d
JJ
3759
3760 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3761 assignment operators (because they cannot have these methods themselves).
3762 For anonymous unions this is already checked because they are not allowed
3763 in any union, otherwise we have to check it. */
3764 if (TREE_CODE (t) != UNION_TYPE)
3765 {
3766 tree field, type;
3767
3768 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3769 if (TREE_CODE (field) == FIELD_DECL)
3770 {
3771 type = TREE_TYPE (field);
3772 if (CLASS_TYPE_P (type))
3773 {
0cbd7506 3774 if (TYPE_NEEDS_CONSTRUCTING (type))
dee15844
JM
3775 error ("member %q+#D with constructor not allowed "
3776 "in anonymous aggregate", field);
a1c2b86d 3777 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
dee15844
JM
3778 error ("member %q+#D with destructor not allowed "
3779 "in anonymous aggregate", field);
a1c2b86d 3780 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
dee15844
JM
3781 error ("member %q+#D with copy assignment operator "
3782 "not allowed in anonymous aggregate", field);
a1c2b86d
JJ
3783 }
3784 }
3785 }
61a127b3
MM
3786}
3787
72a93143 3788/* Make sure that a declaration with no declarator is well-formed, i.e.
a723baf1 3789 just declares a tagged type or anonymous union.
8d08fdba 3790
a723baf1 3791 Returns the type declared; or NULL_TREE if none. */
8d08fdba 3792
72a93143 3793tree
62d1db17 3794check_tag_decl (cp_decl_specifier_seq *declspecs)
8d08fdba 3795{
62d1db17
MM
3796 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3797 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
a723baf1
MM
3798 /* If a class, struct, or enum type is declared by the DECLSPECS
3799 (i.e, if a class-specifier, enum-specifier, or non-typename
3800 elaborated-type-specifier appears in the DECLSPECS),
3801 DECLARED_TYPE is set to the corresponding type. */
3802 tree declared_type = NULL_TREE;
3803 bool error_p = false;
8d08fdba 3804
62d1db17 3805 if (declspecs->multiple_types_p)
72a93143 3806 error ("multiple types in one declaration");
62d1db17
MM
3807 else if (declspecs->redefined_builtin_type)
3808 {
3809 if (!in_system_header)
cbe5f3b3 3810 permerror (input_location, "redeclaration of C++ built-in type %qT",
37ec60ed 3811 declspecs->redefined_builtin_type);
62d1db17
MM
3812 return NULL_TREE;
3813 }
7e2067ca 3814
c827f22f
MM
3815 if (declspecs->type
3816 && TYPE_P (declspecs->type)
caf93cb0 3817 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
9e1e64ec 3818 && MAYBE_CLASS_TYPE_P (declspecs->type))
62d1db17
MM
3819 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3820 declared_type = declspecs->type;
3821 else if (declspecs->type == error_mark_node)
3822 error_p = true;
a723baf1 3823 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
cbe5f3b3 3824 permerror (input_location, "declaration does not declare anything");
1951a1b6 3825 /* Check for an anonymous union. */
9e1e64ec 3826 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
a723baf1 3827 && TYPE_ANONYMOUS_P (declared_type))
0dd3962d 3828 {
e8186ecf 3829 /* 7/3 In a simple-declaration, the optional init-declarator-list
0cbd7506
MS
3830 can be omitted only when declaring a class (clause 9) or
3831 enumeration (7.2), that is, when the decl-specifier-seq contains
3832 either a class-specifier, an elaborated-type-specifier with
3833 a class-key (9.1), or an enum-specifier. In these cases and
3834 whenever a class-specifier or enum-specifier is present in the
3835 decl-specifier-seq, the identifiers in these specifiers are among
3836 the names being declared by the declaration (as class-name,
3837 enum-names, or enumerators, depending on the syntax). In such
3838 cases, and except for the declaration of an unnamed bit-field (9.6),
3839 the decl-specifier-seq shall introduce one or more names into the
3840 program, or shall redeclare a name introduced by a previous
3841 declaration. [Example:
3842 enum { }; // ill-formed
3843 typedef class { }; // ill-formed
3844 --end example] */
e8186ecf 3845 if (saw_typedef)
0cbd7506
MS
3846 {
3847 error ("missing type-name in typedef-declaration");
3848 return NULL_TREE;
3849 }
0dd3962d 3850 /* Anonymous unions are objects, so they can have specifiers. */;
a723baf1 3851 SET_ANON_AGGR_TYPE_P (declared_type);
6bdb8141 3852
fcf73884 3853 if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
509c9d60 3854 pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
0dd3962d
JM
3855 }
3856
62d1db17 3857 else
8d08fdba 3858 {
62d1db17
MM
3859 if (declspecs->specs[(int)ds_inline]
3860 || declspecs->specs[(int)ds_virtual])
2d01edd7 3861 error ("%qs can only be specified for functions",
caf93cb0 3862 declspecs->specs[(int)ds_inline]
62d1db17
MM
3863 ? "inline" : "virtual");
3864 else if (saw_friend
caf93cb0 3865 && (!current_class_type
62d1db17 3866 || current_scope () != current_class_type))
2d01edd7 3867 error ("%<friend%> can only be specified inside a class");
62d1db17 3868 else if (declspecs->specs[(int)ds_explicit])
2d01edd7 3869 error ("%<explicit%> can only be specified for constructors");
62d1db17
MM
3870 else if (declspecs->storage_class)
3871 error ("a storage class can only be specified for objects "
3872 "and functions");
3873 else if (declspecs->specs[(int)ds_const]
3874 || declspecs->specs[(int)ds_volatile]
3875 || declspecs->specs[(int)ds_restrict]
3876 || declspecs->specs[(int)ds_thread])
3877 error ("qualifiers can only be specified for objects "
3878 "and functions");
41dc91a8
SB
3879 else if (saw_typedef)
3880 warning (0, "%<typedef%> was ignored in this declaration");
72a93143 3881 }
8d08fdba 3882
a723baf1 3883 return declared_type;
72a93143
JM
3884}
3885
3886/* Called when a declaration is seen that contains no names to declare.
3887 If its type is a reference to a structure, union or enum inherited
3888 from a containing scope, shadow that tag name for the current scope
3889 with a forward reference.
3890 If its type defines a new named structure or union
3891 or defines an enum, it is valid but we need not do anything here.
3892 Otherwise, it is an error.
3893
3894 C++: may have to grok the declspecs to learn about static,
caf93cb0 3895 complain for anonymous unions.
72a93143 3896
a723baf1
MM
3897 Returns the TYPE declared -- or NULL_TREE if none. */
3898
3899tree
62d1db17 3900shadow_tag (cp_decl_specifier_seq *declspecs)
72a93143
JM
3901{
3902 tree t = check_tag_decl (declspecs);
3903
a723baf1
MM
3904 if (!t)
3905 return NULL_TREE;
3906
3cabd8f9
MA
3907 if (declspecs->attributes)
3908 {
dee15844
JM
3909 warning (0, "attribute ignored in declaration of %q+#T", t);
3910 warning (0, "attribute for %q+#T must follow the %qs keyword",
3911 t, class_key_or_enum_as_string (t));
3cabd8f9
MA
3912
3913 }
3914
d2a8ac2c
LM
3915 if (maybe_process_partial_specialization (t) == error_mark_node)
3916 return NULL_TREE;
72a93143
JM
3917
3918 /* This is where the variables in an anonymous union are
3919 declared. An anonymous union declaration looks like:
3920 union { ... } ;
3921 because there is no declarator after the union, the parser
3922 sends that declaration here. */
a723baf1 3923 if (ANON_AGGR_TYPE_P (t))
72a93143 3924 {
6bdb8141 3925 fixup_anonymous_aggr (t);
72a93143
JM
3926
3927 if (TYPE_FIELDS (t))
3928 {
caf93cb0 3929 tree decl = grokdeclarator (/*declarator=*/NULL,
058b15c1 3930 declspecs, NORMAL, 0, NULL);
72a93143
JM
3931 finish_anon_union (decl);
3932 }
8d08fdba 3933 }
a723baf1
MM
3934
3935 return t;
8d08fdba
MS
3936}
3937\f
3938/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3939
3940tree
caf93cb0 3941groktypename (cp_decl_specifier_seq *type_specifiers,
62d1db17 3942 const cp_declarator *declarator)
8d08fdba 3943{
62d1db17 3944 tree attrs;
98884b26 3945 tree type;
62d1db17
MM
3946 attrs = type_specifiers->attributes;
3947 type_specifiers->attributes = NULL_TREE;
3948 type = grokdeclarator (declarator, type_specifiers, TYPENAME, 0, &attrs);
ba19e12f 3949 if (attrs && type != error_mark_node)
c206a697
JM
3950 {
3951 if (CLASS_TYPE_P (type))
b2a7def5
JM
3952 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
3953 "outside of definition", type);
9e1e64ec 3954 else if (MAYBE_CLASS_TYPE_P (type))
b2a7def5
JM
3955 /* A template type parameter or other dependent type. */
3956 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
3957 "type %qT without an associated declaration", type);
c206a697
JM
3958 else
3959 cplus_decl_attributes (&type, attrs, 0);
3960 }
98884b26 3961 return type;
8d08fdba
MS
3962}
3963
15896502
MM
3964/* Process a DECLARATOR for a function-scope variable declaration,
3965 namespace-scope variable declaration, or function declaration.
3966 (Function definitions go through start_function; class member
3967 declarations appearing in the body of the class go through
3968 grokfield.) The DECL corresponding to the DECLARATOR is returned.
3969 If an error occurs, the error_mark_node is returned instead.
3970
4ad610c9
JM
3971 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
3972 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
3973 for an explicitly defaulted function, or SD_DELETED for an explicitly
3974 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
3975 implicitly initialized via a default constructor. ATTRIBUTES and
3976 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
3977 *PUSHED_SCOPE_P is set to the scope entered in this function, if any; if
3978 set, the caller is responsible for calling pop_scope. */
8d08fdba 3979
8d08fdba 3980tree
caf93cb0 3981start_decl (const cp_declarator *declarator,
62d1db17 3982 cp_decl_specifier_seq *declspecs,
0cbd7506
MS
3983 int initialized,
3984 tree attributes,
3985 tree prefix_attributes,
4514aa8c 3986 tree *pushed_scope_p)
8d08fdba 3987{
59387d2e 3988 tree decl;
15896502 3989 tree type;
8d08fdba 3990 tree context;
c3b7031d 3991 bool was_public;
317c435f 3992 int flags;
8d08fdba 3993
4514aa8c 3994 *pushed_scope_p = NULL_TREE;
c8094d83 3995
e23bd218
IR
3996 /* An object declared as __attribute__((deprecated)) suppresses
3997 warnings of uses of other deprecated items. */
3998 if (lookup_attribute ("deprecated", attributes))
3999 deprecated_state = DEPRECATED_SUPPRESS;
4000
91d231cb 4001 attributes = chainon (attributes, prefix_attributes);
b17e2870 4002
c11b6f21 4003 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
91d231cb 4004 &attributes);
68642fb6 4005
e23bd218
IR
4006 deprecated_state = DEPRECATED_NORMAL;
4007
2d00b4f2
AP
4008 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4009 || decl == error_mark_node)
44370687 4010 return error_mark_node;
8d08fdba
MS
4011
4012 type = TREE_TYPE (decl);
4013
4f1c5b7d 4014 context = DECL_CONTEXT (decl);
8d08fdba 4015
73a8adb6 4016 if (context)
4514aa8c
NS
4017 {
4018 *pushed_scope_p = push_scope (context);
c8094d83 4019
4514aa8c
NS
4020 /* We are only interested in class contexts, later. */
4021 if (TREE_CODE (context) == NAMESPACE_DECL)
4022 context = NULL_TREE;
4023 }
2c73f9f5 4024
8d08fdba
MS
4025 if (initialized)
4026 /* Is it valid for this decl to have an initializer at all?
4027 If not, set INITIALIZED to zero, which will indirectly
82580166 4028 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba
MS
4029 switch (TREE_CODE (decl))
4030 {
4031 case TYPE_DECL:
b87d79e6 4032 error ("typedef %qD is initialized (use decltype instead)", decl);
cc011e7f 4033 return error_mark_node;
8d08fdba
MS
4034
4035 case FUNCTION_DECL:
4ad610c9 4036 if (initialized == SD_DELETED)
b87d79e6
JM
4037 /* We'll handle the rest of the semantics later, but we need to
4038 set this now so it's visible to duplicate_decls. */
4039 DECL_DELETED_FN (decl) = 1;
4040 break;
8d08fdba
MS
4041
4042 default:
3e41d13b 4043 break;
8d08fdba
MS
4044 }
4045
8d08fdba
MS
4046 if (initialized)
4047 {
a9aedbc2 4048 if (! toplevel_bindings_p ()
8d08fdba 4049 && DECL_EXTERNAL (decl))
d4ee4d25 4050 warning (0, "declaration of %q#D has %<extern%> and is initialized",
0cbd7506 4051 decl);
8d08fdba 4052 DECL_EXTERNAL (decl) = 0;
5566b478 4053 if (toplevel_bindings_p ())
8d08fdba 4054 TREE_STATIC (decl) = 1;
8d08fdba
MS
4055 }
4056
317c435f
JM
4057 /* If this is a typedef that names the class for linkage purposes
4058 (7.1.3p8), apply any attributes directly to the type. */
4059 if (TREE_CODE (decl) == TYPE_DECL
4060 && TAGGED_TYPE_P (TREE_TYPE (decl))
4061 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4062 flags = ATTR_FLAG_TYPE_IN_PLACE;
4063 else
4064 flags = 0;
4065
fa20888b 4066 /* Set attributes here so if duplicate decl, will have proper attributes. */
317c435f 4067 cplus_decl_attributes (&decl, attributes, flags);
fa20888b 4068
4e2bb0a4
DS
4069 /* Dllimported symbols cannot be defined. Static data members (which
4070 can be initialized in-class and dllimported) go through grokfield,
4071 not here, so we don't need to exclude those decls when checking for
4072 a definition. */
4073 if (initialized && DECL_DLLIMPORT_P (decl))
4074 {
4075 error ("definition of %q#D is marked %<dllimport%>", decl);
4076 DECL_DLLIMPORT_P (decl) = 0;
4077 }
4078
ecb0eece 4079 /* If #pragma weak was used, mark the decl weak now. */
3693d46c 4080 maybe_apply_pragma_weak (decl);
ecb0eece 4081
97055d5c
AO
4082 if (TREE_CODE (decl) == FUNCTION_DECL
4083 && DECL_DECLARED_INLINE_P (decl)
4084 && DECL_UNINLINABLE (decl)
4085 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
dee15844 4086 warning (0, "inline function %q+D given attribute noinline", decl);
97055d5c 4087
d0f062fb 4088 if (context && COMPLETE_TYPE_P (complete_type (context)))
5b605f68
MS
4089 {
4090 if (TREE_CODE (decl) == VAR_DECL)
4091 {
86ac0575 4092 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5b605f68 4093 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
2d01edd7 4094 error ("%q#D is not a static member of %q#T", decl, context);
e349ee73
MS
4095 else
4096 {
4097 if (DECL_CONTEXT (field) != context)
f2d773a2 4098 {
a723baf1 4099 if (!same_type_p (DECL_CONTEXT (field), context))
cbe5f3b3 4100 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
37ec60ed
JW
4101 "to be defined as %<%T::%D%>",
4102 DECL_CONTEXT (field), DECL_NAME (decl),
4103 context, DECL_NAME (decl));
f2d773a2
JM
4104 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4105 }
91146169
GB
4106 if (processing_specialization
4107 && template_class_depth (context) == 0
4108 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4109 error ("template header not allowed in member definition "
4110 "of explicitly specialized class");
75650646
MM
4111 /* Static data member are tricky; an in-class initialization
4112 still doesn't provide a definition, so the in-class
4113 declaration will have DECL_EXTERNAL set, but will have an
4114 initialization. Thus, duplicate_decls won't warn
4115 about this situation, and so we check here. */
e92fb501 4116 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
9e637a26 4117 error ("duplicate initialization of %qD", decl);
d63d5d0c 4118 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
e349ee73
MS
4119 decl = field;
4120 }
5b605f68 4121 }
f30432d7
MS
4122 else
4123 {
d43f603d 4124 tree field = check_classfn (context, decl,
44021471
GB
4125 (processing_template_decl
4126 > template_class_depth (context))
4127 ? current_template_parms
4128 : NULL_TREE);
f8c3b097
PC
4129 if (field && field != error_mark_node
4130 && duplicate_decls (decl, field,
4131 /*newdecl_is_friend=*/false))
f30432d7
MS
4132 decl = field;
4133 }
4134
4135 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
dff3e828 4136 DECL_IN_AGGR_P (decl) = 0;
9267ee62
NS
4137 /* Do not mark DECL as an explicit specialization if it was not
4138 already marked as an instantiation; a declaration should
4139 never be marked as a specialization unless we know what
c8094d83 4140 template is being specialized. */
9267ee62 4141 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
84e6233f 4142 {
9267ee62 4143 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
c8094d83 4144
84e6233f
JM
4145 /* [temp.expl.spec] An explicit specialization of a static data
4146 member of a template is a definition if the declaration
4147 includes an initializer; otherwise, it is a declaration.
c8094d83 4148
84e6233f
JM
4149 We check for processing_specialization so this only applies
4150 to the new specialization syntax. */
e92fb501 4151 if (!initialized && processing_specialization)
84e6233f
JM
4152 DECL_EXTERNAL (decl) = 1;
4153 }
f30432d7 4154
b7698cf0 4155 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
cbe5f3b3 4156 permerror (input_location, "declaration of %q#D outside of class is not definition",
37ec60ed 4157 decl);
5b605f68
MS
4158 }
4159
c3b7031d
JM
4160 was_public = TREE_PUBLIC (decl);
4161
9188c363 4162 /* Enter this declaration into the symbol table. */
15896502 4163 decl = maybe_push_decl (decl);
2ee887f2 4164
5156628f 4165 if (processing_template_decl)
15896502
MM
4166 decl = push_template_decl (decl);
4167 if (decl == error_mark_node)
156fc2bb 4168 return error_mark_node;
5566b478 4169
3b426391 4170 /* Tell the back end to use or not use .common as appropriate. If we say
a50f0918
MS
4171 -fconserve-space, we want this to save .data space, at the expense of
4172 wrong semantics. If we say -fno-conserve-space, we want this to
4173 produce errors about redefs; to do this we force variables into the
4174 data segment. */
434aeebb 4175 if (flag_conserve_space
15896502
MM
4176 && TREE_CODE (decl) == VAR_DECL
4177 && TREE_PUBLIC (decl)
4178 && !DECL_THREAD_LOCAL_P (decl)
434aeebb 4179 && !have_global_bss_p ())
15896502 4180 DECL_COMMON (decl) = 1;
68642fb6 4181
15896502
MM
4182 if (TREE_CODE (decl) == VAR_DECL
4183 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4184 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
c3b7031d
JM
4185 {
4186 /* This is a const variable with implicit 'static'. Set
4187 DECL_THIS_STATIC so we can tell it from variables that are
4188 !TREE_PUBLIC because of the anonymous namespace. */
15896502
MM
4189 gcc_assert (cp_type_readonly (TREE_TYPE (decl)));
4190 DECL_THIS_STATIC (decl) = 1;
c3b7031d
JM
4191 }
4192
15896502
MM
4193 if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4194 start_decl_1 (decl, initialized);
8d08fdba 4195
15896502 4196 return decl;
8d08fdba
MS
4197}
4198
15896502
MM
4199/* Process the declaration of a variable DECL. INITIALIZED is true
4200 iff DECL is explicitly initialized. (INITIALIZED is false if the
4201 variable is initialized via an implicitly-called constructor.)
4202 This function must be called for ordinary variables (including, for
4203 example, implicit instantiations of templates), but must not be
4204 called for template declarations. */
4205
5566b478 4206void
e92fb501 4207start_decl_1 (tree decl, bool initialized)
8d08fdba 4208{
e92fb501 4209 tree type;
15896502
MM
4210 bool complete_p;
4211 bool aggregate_definition_p;
8d08fdba 4212
e92fb501
MM
4213 gcc_assert (!processing_template_decl);
4214
4215 if (error_operand_p (decl))
44689c12
ML
4216 return;
4217
e92fb501 4218 gcc_assert (TREE_CODE (decl) == VAR_DECL);
15896502 4219
e92fb501 4220 type = TREE_TYPE (decl);
15896502 4221 complete_p = COMPLETE_TYPE_P (type);
9e1e64ec 4222 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
15896502
MM
4223
4224 /* If an explicit initializer is present, or if this is a definition
4225 of an aggregate, then we need a complete type at this point.
4226 (Scalars are always complete types, so there is nothing to
4227 check.) This code just sets COMPLETE_P; errors (if necessary)
4228 are issued below. */
4229 if ((initialized || aggregate_definition_p)
4230 && !complete_p
4231 && COMPLETE_TYPE_P (complete_type (type)))
4232 {
4233 complete_p = true;
4234 /* We will not yet have set TREE_READONLY on DECL if the type
4235 was "const", but incomplete, before this point. But, now, we
4236 have a complete type, so we can try again. */
4237 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4238 }
e92fb501 4239
5566b478 4240 if (initialized)
15896502 4241 /* Is it valid for this decl to have an initializer at all? */
8d08fdba 4242 {
5566b478
MS
4243 /* Don't allow initializations for incomplete types except for
4244 arrays which might be completed by the initialization. */
15896502 4245 if (complete_p)
5566b478 4246 ; /* A complete type is ok. */
86a09a9e
JM
4247 else if (type_uses_auto (type))
4248 ; /* An auto type is ok. */
5566b478 4249 else if (TREE_CODE (type) != ARRAY_TYPE)
8d08fdba 4250 {
2d01edd7 4251 error ("variable %q#D has initializer but incomplete type", decl);
25eb19ff 4252 type = TREE_TYPE (decl) = error_mark_node;
5566b478 4253 }
d0f062fb 4254 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5566b478
MS
4255 {
4256 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
2d01edd7 4257 error ("elements of array %q#D have incomplete type", decl);
5566b478 4258 /* else we already gave an error in start_decl. */
8d08fdba 4259 }
8d08fdba 4260 }
15896502 4261 else if (aggregate_definition_p && !complete_p)
8d08fdba 4262 {
86a09a9e
JM
4263 if (type_uses_auto (type))
4264 error ("declaration of %q#D has no initializer", decl);
4265 else
4266 error ("aggregate %q#D has incomplete type and cannot be defined",
4267 decl);
15896502
MM
4268 /* Change the type so that assemble_variable will give
4269 DECL an rtl we can live with: (mem (const_int 0)). */
4270 type = TREE_TYPE (decl) = error_mark_node;
5566b478
MS
4271 }
4272
c6671cbb
MM
4273 /* Create a new scope to hold this declaration if necessary.
4274 Whether or not a new scope is necessary cannot be determined
4275 until after the type has been completed; if the type is a
4276 specialization of a class template it is not until after
4277 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4278 will be set correctly. */
4279 maybe_push_cleanup_level (type);
5566b478
MS
4280}
4281
7e99327d
MM
4282/* Handle initialization of references. DECL, TYPE, and INIT have the
4283 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4284 but will be set to a new CLEANUP_STMT if a temporary is created
cd0be382 4285 that must be destroyed subsequently.
7e99327d
MM
4286
4287 Returns an initializer expression to use to initialize DECL, or
4288 NULL if the initialization can be performed statically.
e92cc029
MS
4289
4290 Quotes on semantics can be found in ARM 8.4.3. */
4291
8e4ce833 4292static tree
7e99327d 4293grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
5566b478
MS
4294{
4295 tree tmp;
4296
4297 if (init == NULL_TREE)
4298 {
4299 if ((DECL_LANG_SPECIFIC (decl) == 0
4300 || DECL_IN_AGGR_P (decl) == 0)
4301 && ! DECL_THIS_EXTERN (decl))
c4f73174 4302 error ("%qD declared as reference but not initialized", decl);
8e4ce833 4303 return NULL_TREE;
5566b478
MS
4304 }
4305
ed5511d9 4306 if (TREE_CODE (init) == CONSTRUCTOR)
5566b478 4307 {
2d01edd7 4308 error ("ISO C++ forbids use of initializer list to "
0cbd7506 4309 "initialize reference %qD", decl);
8e4ce833 4310 return NULL_TREE;
8d08fdba
MS
4311 }
4312
4313 if (TREE_CODE (init) == TREE_LIST)
c7b62f14 4314 init = build_x_compound_expr_from_list (init, "initializer");
8d08fdba
MS
4315
4316 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4317 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
0a72704b
MM
4318 /* Note: default conversion is only called in very special cases. */
4319 init = decay_conversion (init);
68642fb6 4320
24bef158
MM
4321 /* Convert INIT to the reference type TYPE. This may involve the
4322 creation of a temporary, whose lifetime must be the same as that
350fae66
RK
4323 of the reference. If so, a DECL_EXPR for the temporary will be
4324 added just after the DECL_EXPR for DECL. That's why we don't set
24bef158
MM
4325 DECL_INITIAL for local references (instead assigning to them
4326 explicitly); we need to allow the temporary to be initialized
4327 first. */
7e99327d 4328 tmp = initialize_reference (type, init, decl, cleanup);
8d08fdba 4329
a3203465 4330 if (tmp == error_mark_node)
8e4ce833
JJ
4331 return NULL_TREE;
4332 else if (tmp == NULL_TREE)
8d08fdba 4333 {
2d01edd7 4334 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
8e4ce833 4335 return NULL_TREE;
8d08fdba 4336 }
8d08fdba 4337
8e4ce833
JJ
4338 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4339 return tmp;
4340
08ac397c 4341 DECL_INITIAL (decl) = tmp;
8e4ce833
JJ
4342
4343 return NULL_TREE;
8d08fdba
MS
4344}
4345
09357846
JM
4346/* Subroutine of check_initializer. We're initializing a DECL of
4347 std::initializer_list<T> TYPE from a braced-init-list INIT, and need to
4348 extend the lifetime of the underlying array to match that of the decl,
4349 just like for reference initialization. CLEANUP is as for
4350 grok_reference_init. */
4351
4352static tree
4353build_init_list_var_init (tree decl, tree type, tree init, tree *cleanup)
4354{
4355 tree aggr_init, array, arrtype;
4356 init = perform_implicit_conversion (type, init, tf_warning_or_error);
4357 aggr_init = TARGET_EXPR_INITIAL (init);
4358 init = build2 (INIT_EXPR, type, decl, init);
4359
4360 array = AGGR_INIT_EXPR_ARG (aggr_init, 1);
4361 arrtype = TREE_TYPE (array);
4362 STRIP_NOPS (array);
4363 gcc_assert (TREE_CODE (array) == ADDR_EXPR);
4364 array = TREE_OPERAND (array, 0);
4365 /* If the array is constant, finish_compound_literal already made it a
4366 static variable and we don't need to do anything here. */
4367 if (decl && TREE_CODE (array) == TARGET_EXPR)
4368 {
4369 tree subinit;
4370 tree var = set_up_extended_ref_temp (decl, array, cleanup, &subinit);
4371 var = build_address (var);
4372 var = convert (arrtype, var);
4373 AGGR_INIT_EXPR_ARG (aggr_init, 1) = var;
4374 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
4375 }
4376 return init;
4377}
4378
76239779
MM
4379/* Designated initializers in arrays are not supported in GNU C++.
4380 The parser cannot detect this error since it does not know whether
4381 a given brace-enclosed initializer is for a class type or for an
4382 array. This function checks that CE does not use a designated
4383 initializer. If it does, an error is issued. Returns true if CE
4384 is valid, i.e., does not have a designated initializer. */
4385
4386static bool
4387check_array_designated_initializer (const constructor_elt *ce)
4388{
48c9a7f0 4389 /* Designated initializers for array elements are not supported. */
76239779
MM
4390 if (ce->index)
4391 {
4392 /* The parser only allows identifiers as designated
39a13be5 4393 initializers. */
76239779
MM
4394 gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4395 error ("name %qD used in a GNU-style designated "
4396 "initializer for an array", ce->index);
4397 return false;
4398 }
4399
4400 return true;
4401}
4402
27778b73
MM
4403/* When parsing `int a[] = {1, 2};' we don't know the size of the
4404 array until we finish parsing the initializer. If that's the
4405 situation we're in, update DECL accordingly. */
4406
4407static void
11f6b451 4408maybe_deduce_size_from_array_init (tree decl, tree init)
27778b73
MM
4409{
4410 tree type = TREE_TYPE (decl);
4411
4412 if (TREE_CODE (type) == ARRAY_TYPE
4413 && TYPE_DOMAIN (type) == NULL_TREE
4414 && TREE_CODE (decl) != TYPE_DECL)
4415 {
f2ae0c45
JM
4416 /* do_default is really a C-ism to deal with tentative definitions.
4417 But let's leave it here to ease the eventual merge. */
4418 int do_default = !DECL_EXTERNAL (decl);
27778b73 4419 tree initializer = init ? init : DECL_INITIAL (decl);
76239779 4420 int failure = 0;
27778b73 4421
76239779
MM
4422 /* Check that there are no designated initializers in INIT, as
4423 those are not supported in GNU C++, and as the middle-end
4424 will crash if presented with a non-numeric designated
4425 initializer. */
4426 if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
2b643eda 4427 {
76239779
MM
4428 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4429 constructor_elt *ce;
4430 HOST_WIDE_INT i;
4431 for (i = 0;
4432 VEC_iterate (constructor_elt, v, i, ce);
49b5e2f6 4433 ++i)
76239779
MM
4434 if (!check_array_designated_initializer (ce))
4435 failure = 1;
2b643eda 4436 }
76239779
MM
4437
4438 if (!failure)
27778b73 4439 {
76239779
MM
4440 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4441 do_default);
4442 if (failure == 1)
2b643eda 4443 {
76239779
MM
4444 error ("initializer fails to determine size of %qD", decl);
4445 TREE_TYPE (decl) = error_mark_node;
4446 }
4447 else if (failure == 2)
4448 {
4449 if (do_default)
4450 {
4451 error ("array size missing in %qD", decl);
4452 TREE_TYPE (decl) = error_mark_node;
4453 }
4454 /* If a `static' var's size isn't known, make it extern as
4455 well as static, so it does not get allocated. If it's not
4456 `static', then don't mark it extern; finish_incomplete_decl
4457 will give it a default size and it will get allocated. */
4458 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4459 DECL_EXTERNAL (decl) = 1;
4460 }
4461 else if (failure == 3)
4462 {
4463 error ("zero-size array %qD", decl);
2b643eda
MM
4464 TREE_TYPE (decl) = error_mark_node;
4465 }
2b643eda 4466 }
27778b73 4467
f23b8501
JJ
4468 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4469
27778b73
MM
4470 layout_decl (decl, 0);
4471 }
4472}
4473
4474/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
57b52417 4475 any appropriate error messages regarding the layout. */
27778b73 4476
57b52417 4477static void
11f6b451 4478layout_var_decl (tree decl)
27778b73 4479{
2b643eda
MM
4480 tree type;
4481
2b643eda
MM
4482 type = TREE_TYPE (decl);
4483 if (type == error_mark_node)
4484 return;
57b52417
MM
4485
4486 /* If we haven't already layed out this declaration, do so now.
4487 Note that we must not call complete type for an external object
4488 because it's type might involve templates that we are not
34cd5ae7 4489 supposed to instantiate yet. (And it's perfectly valid to say
57b52417
MM
4490 `extern X x' for some incomplete type `X'.) */
4491 if (!DECL_EXTERNAL (decl))
4492 complete_type (type);
caf93cb0 4493 if (!DECL_SIZE (decl)
328de7c2 4494 && TREE_TYPE (decl) != error_mark_node
7de85f7e 4495 && (COMPLETE_TYPE_P (type)
caf93cb0 4496 || (TREE_CODE (type) == ARRAY_TYPE
7de85f7e
MM
4497 && !TYPE_DOMAIN (type)
4498 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
27778b73
MM
4499 layout_decl (decl, 0);
4500
c82dbd95 4501 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
27778b73
MM
4502 {
4503 /* An automatic variable with an incomplete type: that is an error.
4504 Don't talk about array types here, since we took care of that
4505 message in grokdeclarator. */
2d01edd7 4506 error ("storage size of %qD isn't known", decl);
27778b73
MM
4507 TREE_TYPE (decl) = error_mark_node;
4508 }
ae673f14
JM
4509#if 0
4510 /* Keep this code around in case we later want to control debug info
4511 based on whether a type is "used". (jason 1999-11-11) */
4512
9e1e64ec 4513 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
27778b73
MM
4514 /* Let debugger know it should output info for this type. */
4515 note_debug_info_needed (ttype);
4516
4517 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4518 note_debug_info_needed (DECL_CONTEXT (decl));
ae673f14 4519#endif
27778b73
MM
4520
4521 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4522 && DECL_SIZE (decl) != NULL_TREE
4523 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4524 {
4525 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4526 constant_expression_warning (DECL_SIZE (decl));
4527 else
b97d8153
JJ
4528 {
4529 error ("storage size of %qD isn't constant", decl);
4530 TREE_TYPE (decl) = error_mark_node;
4531 }
27778b73
MM
4532 }
4533}
4534
27778b73
MM
4535/* If a local static variable is declared in an inline function, or if
4536 we have a weak definition, we must endeavor to create only one
4537 instance of the variable at link-time. */
4538
4539static void
11f6b451 4540maybe_commonize_var (tree decl)
27778b73
MM
4541{
4542 /* Static data in a function with comdat linkage also has comdat
4543 linkage. */
4544 if (TREE_STATIC (decl)
4545 /* Don't mess with __FUNCTION__. */
cf74fb86 4546 && ! DECL_ARTIFICIAL (decl)
0b50d7f1
MM
4547 && DECL_FUNCTION_SCOPE_P (decl)
4548 /* Unfortunately, import_export_decl has not always been called
4549 before the function is processed, so we cannot simply check
caf93cb0 4550 DECL_COMDAT. */
9e6aaf5e 4551 && (DECL_COMDAT (DECL_CONTEXT (decl))
0b50d7f1
MM
4552 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4553 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4554 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
27778b73 4555 {
0dbc5cd3 4556 if (flag_weak)
27778b73 4557 {
0dbc5cd3
MM
4558 /* With weak symbols, we simply make the variable COMDAT;
4559 that will cause copies in multiple translations units to
4560 be merged. */
4561 comdat_linkage (decl);
4562 }
4563 else
4564 {
4565 if (DECL_INITIAL (decl) == NULL_TREE
4566 || DECL_INITIAL (decl) == error_mark_node)
27778b73 4567 {
0dbc5cd3
MM
4568 /* Without weak symbols, we can use COMMON to merge
4569 uninitialized variables. */
27778b73
MM
4570 TREE_PUBLIC (decl) = 1;
4571 DECL_COMMON (decl) = 1;
4572 }
0dbc5cd3 4573 else
27778b73 4574 {
0dbc5cd3
MM
4575 /* While for initialized variables, we must use internal
4576 linkage -- which means that multiple copies will not
4577 be merged. */
4578 TREE_PUBLIC (decl) = 0;
4579 DECL_COMMON (decl) = 0;
dee15844
JM
4580 warning (0, "sorry: semantics of inline function static "
4581 "data %q+#D are wrong (you'll wind up "
4582 "with multiple copies)", decl);
d4ee4d25 4583 warning (0, "%J you can work around this by removing "
0cbd7506 4584 "the initializer",
ddd2d57e 4585 decl);
27778b73
MM
4586 }
4587 }
4588 }
4589 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4590 /* Set it up again; we might have set DECL_INITIAL since the last
4591 time. */
4592 comdat_linkage (decl);
4593}
4594
91063b51
MM
4595/* Issue an error message if DECL is an uninitialized const variable. */
4596
4597static void
11f6b451 4598check_for_uninitialized_const_var (tree decl)
91063b51
MM
4599{
4600 tree type = TREE_TYPE (decl);
4601
4602 /* ``Unless explicitly declared extern, a const object does not have
4603 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4604 7.1.6 */
4605 if (TREE_CODE (decl) == VAR_DECL
4606 && TREE_CODE (type) != REFERENCE_TYPE
4607 && CP_TYPE_CONST_P (type)
4608 && !TYPE_NEEDS_CONSTRUCTING (type)
4609 && !DECL_INITIAL (decl))
2d01edd7 4610 error ("uninitialized const %qD", decl);
91063b51
MM
4611}
4612
4038c495
GB
4613\f
4614/* Structure holding the current initializer being processed by reshape_init.
4615 CUR is a pointer to the current element being processed, END is a pointer
4616 after the last element present in the initializer. */
4617typedef struct reshape_iterator_t
4618{
4619 constructor_elt *cur;
4620 constructor_elt *end;
4621} reshape_iter;
4622
4623static tree reshape_init_r (tree, reshape_iter *, bool);
4624
8e3df2de
MM
4625/* FIELD is a FIELD_DECL or NULL. In the former case, the value
4626 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4627 initialized. If there are no more such fields, the return value
4628 will be NULL. */
4629
4630static tree
4631next_initializable_field (tree field)
4632{
4633 while (field
4634 && (TREE_CODE (field) != FIELD_DECL
4635 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4636 || DECL_ARTIFICIAL (field)))
4637 field = TREE_CHAIN (field);
4638
4639 return field;
4640}
4641
4038c495
GB
4642/* Subroutine of reshape_init_array and reshape_init_vector, which does
4643 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4644 INTEGER_CST representing the size of the array minus one (the maximum index),
4645 or NULL_TREE if the array was declared without specifying the size. D is
4646 the iterator within the constructor. */
4647
4648static tree
4649reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
3d142be2 4650{
4038c495 4651 tree new_init;
3d142be2 4652 bool sized_array_p = (max_index != NULL_TREE);
004c400a
JJ
4653 unsigned HOST_WIDE_INT max_index_cst = 0;
4654 unsigned HOST_WIDE_INT index;
3d142be2 4655
4038c495 4656 /* The initializer for an array is always a CONSTRUCTOR. */
09357846 4657 new_init = build_constructor (init_list_type_node, NULL);
4038c495 4658
3d142be2 4659 if (sized_array_p)
004c400a 4660 {
d7d93837
AH
4661 /* Minus 1 is used for zero sized arrays. */
4662 if (integer_all_onesp (max_index))
4663 return new_init;
4664
004c400a
JJ
4665 if (host_integerp (max_index, 1))
4666 max_index_cst = tree_low_cst (max_index, 1);
4667 /* sizetype is sign extended, not zero extended. */
4668 else
4669 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4670 1);
4671 }
3d142be2
GB
4672
4673 /* Loop until there are no more initializers. */
4674 for (index = 0;
4038c495 4675 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
3d142be2
GB
4676 ++index)
4677 {
4038c495
GB
4678 tree elt_init;
4679
76239779 4680 check_array_designated_initializer (d->cur);
4038c495 4681 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
07471dfb
MM
4682 if (elt_init == error_mark_node)
4683 return error_mark_node;
4038c495 4684 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
3d142be2
GB
4685 }
4686
4038c495 4687 return new_init;
3d142be2
GB
4688}
4689
4038c495
GB
4690/* Subroutine of reshape_init_r, processes the initializers for arrays.
4691 Parameters are the same of reshape_init_r. */
8e3df2de 4692
4038c495
GB
4693static tree
4694reshape_init_array (tree type, reshape_iter *d)
4695{
4696 tree max_index = NULL_TREE;
caf93cb0 4697
4038c495 4698 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
8e3df2de 4699
4038c495
GB
4700 if (TYPE_DOMAIN (type))
4701 max_index = array_type_nelts (type);
4702
4703 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4704}
4705
4706/* Subroutine of reshape_init_r, processes the initializers for vectors.
4707 Parameters are the same of reshape_init_r. */
8e3df2de
MM
4708
4709static tree
4038c495 4710reshape_init_vector (tree type, reshape_iter *d)
8e3df2de 4711{
4038c495
GB
4712 tree max_index = NULL_TREE;
4713 tree rtype;
4714
4715 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4716
3b2db49f 4717 if (COMPOUND_LITERAL_P (d->cur->value))
4038c495
GB
4718 {
4719 tree value = d->cur->value;
4720 if (!same_type_p (TREE_TYPE (value), type))
4721 {
4722 error ("invalid type %qT as initializer for a vector of type %qT",
4723 TREE_TYPE (d->cur->value), type);
3db45ab5 4724 value = error_mark_node;
4038c495
GB
4725 }
4726 ++d->cur;
4727 return value;
4728 }
4729
4730 /* For a vector, the representation type is a struct
4731 containing a single member which is an array of the
4732 appropriate size. */
4733 rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4734 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4735 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4736
4737 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4738}
4739
4740/* Subroutine of reshape_init_r, processes the initializers for classes
4741 or union. Parameters are the same of reshape_init_r. */
4742
4743static tree
4744reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4745{
4746 tree field;
8e3df2de 4747 tree new_init;
8e3df2de 4748
4038c495 4749 gcc_assert (CLASS_TYPE_P (type));
8e3df2de 4750
4038c495 4751 /* The initializer for a class is always a CONSTRUCTOR. */
09357846 4752 new_init = build_constructor (init_list_type_node, NULL);
4038c495 4753 field = next_initializable_field (TYPE_FIELDS (type));
ee7ecb29 4754
4038c495 4755 if (!field)
8e3df2de 4756 {
4038c495
GB
4757 /* [dcl.init.aggr]
4758
4759 An initializer for an aggregate member that is an
4760 empty class shall have the form of an empty
4761 initializer-list {}. */
4762 if (!first_initializer_p)
4763 {
4764 error ("initializer for %qT must be brace-enclosed", type);
4765 return error_mark_node;
4766 }
4767 return new_init;
8e3df2de 4768 }
4038c495
GB
4769
4770 /* Loop through the initializable fields, gathering initializers. */
4771 while (d->cur != d->end)
8e3df2de 4772 {
4038c495
GB
4773 tree field_init;
4774
4775 /* Handle designated initializers, as an extension. */
4776 if (d->cur->index)
4777 {
4038c495
GB
4778 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4779
4780 if (!field || TREE_CODE (field) != FIELD_DECL)
77bffd4c
SE
4781 {
4782 error ("%qT has no non-static data member named %qD", type,
4783 d->cur->index);
4784 return error_mark_node;
4785 }
4038c495
GB
4786 }
4787
4788 /* If we processed all the member of the class, we are done. */
4789 if (!field)
4790 break;
4791
4792 field_init = reshape_init_r (TREE_TYPE (field), d,
4793 /*first_initializer_p=*/false);
4794 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4795
4796 /* [dcl.init.aggr]
4797
4798 When a union is initialized with a brace-enclosed
4799 initializer, the braces shall only contain an
4800 initializer for the first member of the union. */
4801 if (TREE_CODE (type) == UNION_TYPE)
4802 break;
4803
4804 field = next_initializable_field (TREE_CHAIN (field));
8e3df2de
MM
4805 }
4806
4038c495
GB
4807 return new_init;
4808}
4809
4810/* Subroutine of reshape_init, which processes a single initializer (part of
4811 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4812 iterator within the CONSTRUCTOR which points to the initializer to process.
4813 FIRST_INITIALIZER_P is true if this is the first initializer of the
4814 CONSTRUCTOR node. */
4815
4816static tree
4817reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4818{
4819 tree init = d->cur->value;
4820
ffe79825
PC
4821 if (error_operand_p (init))
4822 return error_mark_node;
4823
8e3df2de
MM
4824 /* A non-aggregate type is always initialized with a single
4825 initializer. */
4826 if (!CP_AGGREGATE_TYPE_P (type))
4038c495
GB
4827 {
4828 /* It is invalid to initialize a non-aggregate type with a
b71836b0 4829 brace-enclosed initializer before C++0x.
4038c495
GB
4830 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4831 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4832 a CONSTRUCTOR (with a record type). */
4833 if (TREE_CODE (init) == CONSTRUCTOR
4834 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
4835 {
b71836b0
JM
4836 if (SCALAR_TYPE_P (type))
4837 {
4838 error ("braces around scalar initializer for type %qT", type);
4839 init = error_mark_node;
4840 }
4841 else
4842 maybe_warn_cpp0x ("extended initializer lists");
4038c495 4843 }
3db45ab5 4844
4038c495
GB
4845 d->cur++;
4846 return init;
4847 }
8e3df2de
MM
4848
4849 /* [dcl.init.aggr]
4850
4851 All implicit type conversions (clause _conv_) are considered when
4852 initializing the aggregate member with an initializer from an
4853 initializer-list. If the initializer can initialize a member,
4854 the member is initialized. Otherwise, if the member is itself a
4855 non-empty subaggregate, brace elision is assumed and the
4856 initializer is considered for the initialization of the first
4857 member of the subaggregate. */
4038c495 4858 if (TREE_CODE (init) != CONSTRUCTOR
30f86ec3 4859 && can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL))
8e3df2de 4860 {
4038c495
GB
4861 d->cur++;
4862 return init;
8e3df2de
MM
4863 }
4864
4038c495
GB
4865 /* [dcl.init.string]
4866
4867 A char array (whether plain char, signed char, or unsigned char)
4868 can be initialized by a string-literal (optionally enclosed in
4869 braces); a wchar_t array can be initialized by a wide
4870 string-literal (optionally enclosed in braces). */
4871 if (TREE_CODE (type) == ARRAY_TYPE
42328048 4872 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
8e3df2de 4873 {
4038c495 4874 tree str_init = init;
8e3df2de 4875
4038c495 4876 /* Strip one level of braces if and only if they enclose a single
3db45ab5 4877 element (as allowed by [dcl.init.string]). */
4038c495
GB
4878 if (!first_initializer_p
4879 && TREE_CODE (str_init) == CONSTRUCTOR
4880 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
8e3df2de 4881 {
4038c495
GB
4882 str_init = VEC_index (constructor_elt,
4883 CONSTRUCTOR_ELTS (str_init), 0)->value;
4884 }
3db45ab5 4885
4038c495 4886 /* If it's a string literal, then it's the initializer for the array
3db45ab5 4887 as a whole. Otherwise, continue with normal initialization for
4038c495
GB
4888 array types (one value per array element). */
4889 if (TREE_CODE (str_init) == STRING_CST)
4890 {
4891 d->cur++;
4892 return str_init;
4893 }
4894 }
8e3df2de 4895
4038c495
GB
4896 /* The following cases are about aggregates. If we are not within a full
4897 initializer already, and there is not a CONSTRUCTOR, it means that there
4898 is a missing set of braces (that is, we are processing the case for
4899 which reshape_init exists). */
4900 if (!first_initializer_p)
4901 {
4902 if (TREE_CODE (init) == CONSTRUCTOR)
4903 {
70ec16f7
AP
4904 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
4905 /* There is no need to reshape pointer-to-member function
4906 initializers, as they are always constructed correctly
4907 by the front end. */
4908 ;
4909 else if (COMPOUND_LITERAL_P (init))
4038c495
GB
4910 /* For a nested compound literal, there is no need to reshape since
4911 brace elision is not allowed. Even if we decided to allow it,
4912 we should add a call to reshape_init in finish_compound_literal,
4913 before calling digest_init, so changing this code would still
4914 not be necessary. */
70ec16f7
AP
4915 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
4916 else
8e3df2de 4917 {
4038c495
GB
4918 ++d->cur;
4919 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4920 return reshape_init (type, init);
8e3df2de 4921 }
8e3df2de 4922 }
f8e7a389 4923
4038c495
GB
4924 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
4925 type);
4926 }
8e3df2de 4927
4038c495
GB
4928 /* Dispatch to specialized routines. */
4929 if (CLASS_TYPE_P (type))
4930 return reshape_init_class (type, d, first_initializer_p);
4931 else if (TREE_CODE (type) == ARRAY_TYPE)
4932 return reshape_init_array (type, d);
4933 else if (TREE_CODE (type) == VECTOR_TYPE)
4934 return reshape_init_vector (type, d);
4935 else
4936 gcc_unreachable();
4937}
8e3df2de 4938
4038c495
GB
4939/* Undo the brace-elision allowed by [dcl.init.aggr] in a
4940 brace-enclosed aggregate initializer.
8e3df2de 4941
4038c495
GB
4942 INIT is the CONSTRUCTOR containing the list of initializers describing
4943 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
4944 It may not presently match the shape of the TYPE; for example:
4945
4946 struct S { int a; int b; };
4947 struct S a[] = { 1, 2, 3, 4 };
4948
4949 Here INIT will hold a VEC of four elements, rather than a
4950 VEC of two elements, each itself a VEC of two elements. This
4951 routine transforms INIT from the former form into the latter. The
4952 revised CONSTRUCTOR node is returned. */
4953
3b2db49f 4954tree
4038c495
GB
4955reshape_init (tree type, tree init)
4956{
4957 VEC(constructor_elt, gc) *v;
4958 reshape_iter d;
4959 tree new_init;
4960
4038c495
GB
4961 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4962
4963 v = CONSTRUCTOR_ELTS (init);
4964
4965 /* An empty constructor does not need reshaping, and it is always a valid
4966 initializer. */
4967 if (VEC_empty (constructor_elt, v))
4968 return init;
4969
4970 /* Recurse on this CONSTRUCTOR. */
4971 d.cur = VEC_index (constructor_elt, v, 0);
4972 d.end = d.cur + VEC_length (constructor_elt, v);
4973
4974 new_init = reshape_init_r (type, &d, true);
07471dfb
MM
4975 if (new_init == error_mark_node)
4976 return error_mark_node;
4038c495
GB
4977
4978 /* Make sure all the element of the constructor were used. Otherwise,
4979 issue an error about exceeding initializers. */
4980 if (d.cur != d.end)
4981 error ("too many initializers for %qT", type);
8e3df2de
MM
4982
4983 return new_init;
4984}
4985
23bee8f4
JJ
4986/* Verify array initializer. Returns true if errors have been reported. */
4987
4988bool
4989check_array_initializer (tree decl, tree type, tree init)
4990{
4991 tree element_type = TREE_TYPE (type);
4992
4993 /* The array type itself need not be complete, because the
4994 initializer may tell us how many elements are in the array.
4995 But, the elements of the array must be complete. */
4996 if (!COMPLETE_TYPE_P (complete_type (element_type)))
4997 {
4998 if (decl)
4999 error ("elements of array %q#D have incomplete type", decl);
5000 else
5001 error ("elements of array %q#T have incomplete type", type);
5002 return true;
5003 }
5004 /* It is not valid to initialize a VLA. */
5005 if (init
5006 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5007 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5008 {
5009 if (decl)
5010 error ("variable-sized object %qD may not be initialized", decl);
5011 else
5012 error ("variable-sized compound literal");
5013 return true;
5014 }
5015 return false;
5016}
5017
09357846
JM
5018/* Subroutine of check_initializer; args are passed down from that function.
5019 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
5020
5021static tree
5022build_aggr_init_full_exprs (tree decl, tree init, int flags)
5023
5024{
5025 int saved_stmts_are_full_exprs_p = 0;
5026 if (building_stmt_tree ())
5027 {
5028 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5029 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5030 }
5031 init = build_aggr_init (decl, init, flags, tf_warning_or_error);
5032 if (building_stmt_tree ())
5033 current_stmt_tree ()->stmts_are_full_exprs_p =
5034 saved_stmts_are_full_exprs_p;
5035 return init;
5036}
5037
c82dbd95 5038/* Verify INIT (the initializer for DECL), and record the
7e99327d
MM
5039 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
5040 grok_reference_init.
8e3df2de
MM
5041
5042 If the return value is non-NULL, it is an expression that must be
5043 evaluated dynamically to initialize DECL. */
27778b73 5044
c82dbd95 5045static tree
7e99327d 5046check_initializer (tree decl, tree init, int flags, tree *cleanup)
27778b73 5047{
17bbb839 5048 tree type = TREE_TYPE (decl);
25ebb82a 5049 tree init_code = NULL;
fc0e7bf5 5050
328de7c2
MM
5051 /* Things that are going to be initialized need to have complete
5052 type. */
5053 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
c82dbd95 5054
328de7c2
MM
5055 if (type == error_mark_node)
5056 /* We will have already complained. */
f724eac4
MM
5057 return NULL_TREE;
5058
5059 if (TREE_CODE (type) == ARRAY_TYPE)
328de7c2 5060 {
23bee8f4
JJ
5061 if (check_array_initializer (decl, type, init))
5062 return NULL_TREE;
328de7c2 5063 }
f724eac4 5064 else if (!COMPLETE_TYPE_P (type))
328de7c2 5065 {
2d01edd7 5066 error ("%qD has incomplete type", decl);
328de7c2 5067 TREE_TYPE (decl) = error_mark_node;
f724eac4 5068 return NULL_TREE;
27778b73 5069 }
f724eac4
MM
5070 else
5071 /* There is no way to make a variable-sized class type in GNU C++. */
5072 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
c1ae8be5
SM
5073
5074 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
f47165c9 5075 {
c1ae8be5
SM
5076 int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5077 if (SCALAR_TYPE_P (type))
5078 {
09357846
JM
5079 if (init_len == 0)
5080 {
5081 maybe_warn_cpp0x ("extended initializer lists");
5082 init = build_zero_init (type, NULL_TREE, false);
5083 }
5084 else if (init_len != 1)
c1ae8be5
SM
5085 {
5086 error ("scalar object %qD requires one element in initializer",
5087 decl);
5088 TREE_TYPE (decl) = error_mark_node;
5089 return NULL_TREE;
5090 }
5091 }
f47165c9 5092 }
27778b73
MM
5093
5094 if (TREE_CODE (decl) == CONST_DECL)
5095 {
7525db03 5096 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
27778b73
MM
5097
5098 DECL_INITIAL (decl) = init;
5099
50bc768d 5100 gcc_assert (init != NULL_TREE);
27778b73
MM
5101 init = NULL_TREE;
5102 }
c82dbd95 5103 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7e99327d 5104 init = grok_reference_init (decl, type, init, cleanup);
27778b73
MM
5105 else if (init)
5106 {
4038c495 5107 /* Do not reshape constructors of vectors (they don't need to be
3db45ab5 5108 reshaped. */
09357846 5109 if (BRACE_ENCLOSED_INITIALIZER_P (init))
a16f2357 5110 {
09357846
JM
5111 if (is_std_init_list (type))
5112 return build_init_list_var_init (decl, type, init, cleanup);
5113 else if (TYPE_NON_AGGREGATE_CLASS (type))
5114 {
5115 /* Don't reshape if the class has constructors. */
5116 if (cxx_dialect == cxx98)
5117 error ("in C++98 %qD must be initialized by constructor, "
5118 "not by %<{...}%>",
5119 decl);
5120 init = build_tree_list (NULL_TREE, init);
5121 }
5122 else if ((*targetm.vector_opaque_p) (type))
6e1b3a7c
AH
5123 {
5124 error ("opaque vector types cannot be initialized");
5125 init = error_mark_node;
5126 }
09357846
JM
5127 else
5128 init = reshape_init (type, init);
a16f2357 5129 }
8e3df2de
MM
5130
5131 /* If DECL has an array type without a specific bound, deduce the
5132 array size from the initializer. */
5133 maybe_deduce_size_from_array_init (decl, init);
5134 type = TREE_TYPE (decl);
2b643eda
MM
5135 if (type == error_mark_node)
5136 return NULL_TREE;
8e3df2de 5137
09357846
JM
5138 if (TYPE_NEEDS_CONSTRUCTING (type)
5139 || (CLASS_TYPE_P (type)
5140 && !BRACE_ENCLOSED_INITIALIZER_P (init)))
5141 return build_aggr_init_full_exprs (decl, init, flags);
5142 else if (TREE_CODE (init) != TREE_VEC)
27778b73 5143 {
09357846
JM
5144 init_code = store_init_value (decl, init);
5145 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5146 && DECL_INITIAL (decl)
5147 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5148 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5149 warning (0, "array %qD initialized by parenthesized string literal %qE",
5150 decl, DECL_INITIAL (decl));
5151 init = NULL;
27778b73 5152 }
27778b73
MM
5153 }
5154 else if (DECL_EXTERNAL (decl))
5155 ;
8e3df2de 5156 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
09357846 5157 return build_aggr_init_full_exprs (decl, init, flags);
9e1e64ec 5158 else if (MAYBE_CLASS_TYPE_P (type))
27778b73
MM
5159 {
5160 tree core_type = strip_array_types (type);
5161
8e3df2de 5162 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
2d01edd7 5163 error ("structure %qD with uninitialized const members", decl);
8e3df2de 5164 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
2d01edd7 5165 error ("structure %qD with uninitialized reference members", decl);
27778b73
MM
5166
5167 check_for_uninitialized_const_var (decl);
27778b73
MM
5168 }
5169 else
5170 check_for_uninitialized_const_var (decl);
68642fb6 5171
8e3df2de 5172 if (init && init != error_mark_node)
f293ce4b 5173 init_code = build2 (INIT_EXPR, type, decl, init);
8e3df2de 5174
25ebb82a 5175 return init_code;
27778b73
MM
5176}
5177
5178/* If DECL is not a local variable, give it RTL. */
5179
5180static void
11f6b451 5181make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
27778b73 5182{
95ee998c
MM
5183 int toplev = toplevel_bindings_p ();
5184 int defer_p;
9f12b095 5185 const char *filename;
27778b73 5186
0e6df31e
GK
5187 /* Set the DECL_ASSEMBLER_NAME for the object. */
5188 if (asmspec)
5189 {
5190 /* The `register' keyword, when used together with an
5191 asm-specification, indicates that the variable should be
5192 placed in a particular register. */
5193 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5194 {
11e3f4b6 5195 set_user_assembler_name (decl, asmspec);
0e6df31e
GK
5196 DECL_HARD_REGISTER (decl) = 1;
5197 }
5198 else
b482789c
MA
5199 {
5200 if (TREE_CODE (decl) == FUNCTION_DECL
5201 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5202 set_builtin_user_assembler_name (decl, asmspec);
5203 set_user_assembler_name (decl, asmspec);
5204 }
0e6df31e
GK
5205 }
5206
f39ee884
MM
5207 /* Handle non-variables up front. */
5208 if (TREE_CODE (decl) != VAR_DECL)
5209 {
0e6df31e 5210 rest_of_decl_compilation (decl, toplev, at_eof);
f39ee884
MM
5211 return;
5212 }
5213
95ee998c
MM
5214 /* If we see a class member here, it should be a static data
5215 member. */
5216 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5217 {
50bc768d 5218 gcc_assert (TREE_STATIC (decl));
95ee998c
MM
5219 /* An in-class declaration of a static data member should be
5220 external; it is only a declaration, and not a definition. */
5221 if (init == NULL_TREE)
dc472c59 5222 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
95ee998c
MM
5223 }
5224
95ee998c
MM
5225 /* We don't create any RTL for local variables. */
5226 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5227 return;
27778b73 5228
95ee998c 5229 /* We defer emission of local statics until the corresponding
350fae66 5230 DECL_EXPR is expanded. */
95ee998c
MM
5231 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5232
b602511f
JM
5233 /* We try to defer namespace-scope static constants so that they are
5234 not emitted into the object file unnecessarily. */
9f12b095 5235 filename = input_filename;
b602511f
JM
5236 if (!DECL_VIRTUAL_P (decl)
5237 && TREE_READONLY (decl)
5238 && DECL_INITIAL (decl) != NULL_TREE
5239 && DECL_INITIAL (decl) != error_mark_node
9f12b095 5240 && filename != NULL
b602511f
JM
5241 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5242 && toplev
5243 && !TREE_PUBLIC (decl))
5cc90635
JM
5244 {
5245 /* Fool with the linkage of static consts according to #pragma
5246 interface. */
c533e34d 5247 struct c_fileinfo *finfo = get_fileinfo (filename);
5d709b00 5248 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
27778b73 5249 {
95ee998c 5250 TREE_PUBLIC (decl) = 1;
5d709b00 5251 DECL_EXTERNAL (decl) = finfo->interface_only;
27778b73 5252 }
27778b73 5253
95ee998c 5254 defer_p = 1;
27778b73 5255 }
b602511f 5256 /* Likewise for template instantiations. */
4684cd27
MM
5257 else if (DECL_LANG_SPECIFIC (decl)
5258 && DECL_IMPLICIT_INSTANTIATION (decl))
b602511f 5259 defer_p = 1;
95ee998c 5260
95ee998c 5261 /* If we're not deferring, go ahead and assemble the variable. */
0e6df31e
GK
5262 if (!defer_p)
5263 rest_of_decl_compilation (decl, toplev, at_eof);
27778b73
MM
5264}
5265
a24549d4
JM
5266/* walk_tree helper for wrap_temporary_cleanups, below. */
5267
5268static tree
5269wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5270{
5271 if (TYPE_P (*stmt_p))
5272 {
5273 *walk_subtrees = 0;
5274 return NULL_TREE;
5275 }
5276
5277 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5278 {
5279 tree guard = (tree)data;
5280 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5281
5282 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
33b45227
JM
5283 /* Tell honor_protect_cleanup_actions to handle this as a separate
5284 cleanup. */
5285 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5286
a24549d4
JM
5287 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5288 }
5289
5290 return NULL_TREE;
5291}
5292
5293/* We're initializing a local variable which has a cleanup GUARD. If there
5294 are any temporaries used in the initializer INIT of this variable, we
5295 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
33b45227
JM
5296 variable will be cleaned up properly if one of them throws.
5297
5298 Unfortunately, there's no way to express this properly in terms of
5299 nesting, as the regions for the temporaries overlap the region for the
5300 variable itself; if there are two temporaries, the variable needs to be
5301 the first thing destroyed if either of them throws. However, we only
5302 want to run the variable's cleanup if it actually got constructed. So
5303 we need to guard the temporary cleanups with the variable's cleanup if
5304 they are run on the normal path, but not if they are run on the
5305 exceptional path. We implement this by telling
5306 honor_protect_cleanup_actions to strip the variable cleanup from the
5307 exceptional path. */
a24549d4
JM
5308
5309static void
5310wrap_temporary_cleanups (tree init, tree guard)
5311{
5312 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5313}
5314
ed5511d9 5315/* Generate code to initialize DECL (a local variable). */
27778b73 5316
8e3df2de 5317static void
11f6b451 5318initialize_local_var (tree decl, tree init)
27778b73 5319{
9ed9e79a 5320 tree type = TREE_TYPE (decl);
170b020f 5321 tree cleanup;
a24549d4 5322 int already_used;
27778b73 5323
50bc768d
NS
5324 gcc_assert (TREE_CODE (decl) == VAR_DECL
5325 || TREE_CODE (decl) == RESULT_DECL);
5326 gcc_assert (!TREE_STATIC (decl));
b7b8bcd2 5327
8e3df2de 5328 if (DECL_SIZE (decl) == NULL_TREE)
b7b8bcd2
MM
5329 {
5330 /* If we used it already as memory, it must stay in memory. */
5331 DECL_INITIAL (decl) = NULL_TREE;
5332 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
a24549d4 5333 return;
b7b8bcd2
MM
5334 }
5335
a24549d4
JM
5336 if (type == error_mark_node)
5337 return;
68642fb6 5338
a24549d4
JM
5339 /* Compute and store the initial value. */
5340 already_used = TREE_USED (decl) || TREE_USED (type);
27778b73 5341
a24549d4
JM
5342 /* Generate a cleanup, if necessary. */
5343 cleanup = cxx_maybe_build_cleanup (decl);
27778b73 5344
a24549d4
JM
5345 /* Perform the initialization. */
5346 if (init)
5347 {
5348 int saved_stmts_are_full_exprs_p;
5349
5350 /* If we're only initializing a single object, guard the destructors
5351 of any temporaries used in its initializer with its destructor.
5352 This isn't right for arrays because each element initialization is
5353 a full-expression. */
5354 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5355 wrap_temporary_cleanups (init, cleanup);
5356
5357 gcc_assert (building_stmt_tree ());
5358 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5359 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5360 finish_expr_stmt (init);
5361 current_stmt_tree ()->stmts_are_full_exprs_p =
5362 saved_stmts_are_full_exprs_p;
27778b73 5363 }
24bef158 5364
a24549d4
JM
5365 /* Set this to 0 so we can tell whether an aggregate which was
5366 initialized was ever used. Don't do this if it has a
5367 destructor, so we don't complain about the 'resource
5368 allocation is initialization' idiom. Now set
5369 attribute((unused)) on types so decls of that type will be
5370 marked used. (see TREE_USED, above.) */
5371 if (TYPE_NEEDS_CONSTRUCTING (type)
5372 && ! already_used
5373 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5374 && DECL_NAME (decl))
5375 TREE_USED (decl) = 0;
5376 else if (already_used)
5377 TREE_USED (decl) = 1;
5378
5379 if (cleanup)
170b020f 5380 finish_decl_cleanup (decl, cleanup);
24bef158
MM
5381}
5382
19c29b2f
MM
5383/* DECL is a VAR_DECL for a compiler-generated variable with static
5384 storage duration (like a virtual table) whose initializer is a
3b2db49f
MM
5385 compile-time constant. INIT must be either a TREE_LIST of values,
5386 or a CONSTRUCTOR. Initialize the variable and provide it to the
5387 back end. */
19c29b2f
MM
5388
5389void
5390initialize_artificial_var (tree decl, tree init)
5391{
d23f3d60 5392 gcc_assert (DECL_ARTIFICIAL (decl));
3b2db49f 5393 if (TREE_CODE (init) == TREE_LIST)
09357846 5394 init = build_constructor_from_list (TREE_TYPE (decl), init);
3b2db49f
MM
5395 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5396 DECL_INITIAL (decl) = init;
19c29b2f
MM
5397 DECL_INITIALIZED_P (decl) = 1;
5398 determine_visibility (decl);
5399 layout_var_decl (decl);
5400 maybe_commonize_var (decl);
5401 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5402}
5403
32a11c08
MM
5404/* INIT is the initializer for a variable, as represented by the
5405 parser. Returns true iff INIT is value-dependent. */
5406
5407static bool
5408value_dependent_init_p (tree init)
5409{
5410 if (TREE_CODE (init) == TREE_LIST)
5411 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5412 return any_value_dependent_elements_p (init);
5413 else if (TREE_CODE (init) == CONSTRUCTOR)
5414 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5415 {
5416 VEC(constructor_elt, gc) *elts;
5417 size_t nelts;
5418 size_t i;
5419
5420 elts = CONSTRUCTOR_ELTS (init);
5421 nelts = VEC_length (constructor_elt, elts);
5422 for (i = 0; i < nelts; ++i)
5423 if (value_dependent_init_p (VEC_index (constructor_elt,
5424 elts, i)->value))
5425 return true;
5426 }
5427 else
5428 /* It must be a simple expression, e.g., int i = 3; */
5429 return value_dependent_expression_p (init);
5430
5431 return false;
5432}
5433
8d08fdba
MS
5434/* Finish processing of a declaration;
5435 install its line number and initial value.
5436 If the length of an array type is not known before,
5437 it must be determined now, from the initial value, or it is an error.
5438
d174af6c
MM
5439 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
5440 true, then INIT is an integral constant expression.
8d08fdba 5441
920f9474 5442 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
f78c7bc6 5443 if the (init) syntax was used. */
8d08fdba
MS
5444
5445void
3db45ab5 5446cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
d174af6c 5447 tree asmspec_tree, int flags)
8d08fdba 5448{
7e99327d 5449 tree type;
7e99327d 5450 tree cleanup;
9c0758dd 5451 const char *asmspec = NULL;
8d08fdba 5452 int was_readonly = 0;
745d26d9 5453 bool var_definition_p = false;
2b643eda 5454 int saved_processing_template_decl;
86a09a9e 5455 tree auto_node;
8d08fdba 5456
11325dcd
KL
5457 if (decl == error_mark_node)
5458 return;
5459 else if (! decl)
8d08fdba
MS
5460 {
5461 if (init)
8251199e 5462 error ("assignment (not initialization) in declaration");
8d08fdba
MS
5463 return;
5464 }
5465
50bc768d 5466 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
2b643eda
MM
5467 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5468 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5469
5470 type = TREE_TYPE (decl);
5471 if (type == error_mark_node)
5472 return;
170b020f 5473
7e99327d
MM
5474 /* Assume no cleanup is required. */
5475 cleanup = NULL_TREE;
2b643eda 5476 saved_processing_template_decl = processing_template_decl;
7e99327d 5477
a4443a08 5478 /* If a name was specified, get the string. */
5f52c0e0 5479 if (global_scope_p (current_binding_level))
41c64394 5480 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4f543d15 5481 if (asmspec_tree && asmspec_tree != error_mark_node)
5cc90635 5482 asmspec = TREE_STRING_POINTER (asmspec_tree);
8d08fdba 5483
6ba89f8e 5484 if (current_class_type
4f1c5b7d 5485 && CP_DECL_CONTEXT (decl) == current_class_type
6ba89f8e
MM
5486 && TYPE_BEING_DEFINED (current_class_type)
5487 && (DECL_INITIAL (decl) || init))
3febd123 5488 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6ba89f8e 5489
86a09a9e 5490 auto_node = type_uses_auto (type);
0a3098bb 5491 if (auto_node)
86a09a9e 5492 {
0a3098bb
JJ
5493 if (init == NULL_TREE)
5494 {
5495 error ("declaration of %q#D has no initializer", decl);
5496 TREE_TYPE (decl) = error_mark_node;
5497 return;
5498 }
5499 else if (!type_dependent_expression_p (init))
5500 {
5501 type = TREE_TYPE (decl) = do_auto_deduction (type, init, auto_node);
5502 if (type == error_mark_node)
5503 return;
5504 }
86a09a9e
JM
5505 }
5506
5156628f 5507 if (processing_template_decl)
5566b478 5508 {
2b643eda
MM
5509 bool type_dependent_p;
5510
08ac397c 5511 /* Add this declaration to the statement-tree. */
170b020f 5512 if (at_function_scope_p ())
350fae66 5513 add_decl_expr (decl);
08ac397c 5514
2b643eda
MM
5515 type_dependent_p = dependent_type_p (type);
5516
7b3e2d46
DG
5517 if (check_for_bare_parameter_packs (init))
5518 {
5519 init = NULL_TREE;
5520 DECL_INITIAL (decl) = NULL_TREE;
5521 }
5522
3e03c959 5523 if (init && init_const_expr_p && TREE_CODE (decl) == VAR_DECL)
d174af6c 5524 {
2b643eda
MM
5525 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5526 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5527 TREE_CONSTANT (decl) = 1;
d174af6c
MM
5528 }
5529
32a11c08
MM
5530 /* Generally, initializers in templates are expanded when the
5531 template is instantiated. But, if DECL is an integral
5532 constant static data member, then it can be used in future
5533 integral constant expressions, and its value must be
5534 available. */
5535 if (!(init
5536 && DECL_CLASS_SCOPE_P (decl)
5537 && DECL_INTEGRAL_CONSTANT_VAR_P (decl)
5538 && !type_dependent_p
5539 && !value_dependent_init_p (init)))
2b643eda
MM
5540 {
5541 if (init)
5542 DECL_INITIAL (decl) = init;
5543 if (TREE_CODE (decl) == VAR_DECL
5544 && !DECL_PRETTY_FUNCTION_P (decl)
5545 && !type_dependent_p)
5546 maybe_deduce_size_from_array_init (decl, init);
5547 goto finish_end;
5548 }
c8094d83 5549
a125de0c
PC
5550 if (TREE_CODE (init) == TREE_LIST)
5551 {
5552 /* If the parenthesized-initializer form was used (e.g.,
5553 "int A<N>::i(X)"), then INIT will be a TREE_LIST of initializer
5554 arguments. (There is generally only one.) We convert them
5555 individually. */
5556 tree list = init;
5557 for (; list; list = TREE_CHAIN (list))
5558 {
5559 tree elt = TREE_VALUE (list);
5560 TREE_VALUE (list) = fold_non_dependent_expr (elt);
5561 }
5562 }
5563 else
5564 init = fold_non_dependent_expr (init);
2b643eda 5565 processing_template_decl = 0;
5566b478 5566 }
3e41d13b 5567
8d08fdba
MS
5568 /* Take care of TYPE_DECLs up front. */
5569 if (TREE_CODE (decl) == TYPE_DECL)
5570 {
a0a33927 5571 if (type != error_mark_node
9e1e64ec 5572 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
8d08fdba
MS
5573 {
5574 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
d4ee4d25 5575 warning (0, "shadowing previous type declaration of %q#D", decl);
4b0d3cbe 5576 set_identifier_type_value (DECL_NAME (decl), decl);
8d08fdba 5577 }
cffa8729
MS
5578
5579 /* If we have installed this as the canonical typedef for this
5580 type, and that type has not been defined yet, delay emitting
956d6950 5581 the debug information for it, as we will emit it later. */
d2e5ee5c 5582 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
d0f062fb 5583 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
cffa8729
MS
5584 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5585
0e6df31e
GK
5586 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5587 at_eof);
8d08fdba
MS
5588 goto finish_end;
5589 }
3e41d13b 5590
67935995 5591 /* A reference will be modified here, as it is initialized. */
c8094d83 5592 if (! DECL_EXTERNAL (decl)
67935995
MM
5593 && TREE_READONLY (decl)
5594 && TREE_CODE (type) == REFERENCE_TYPE)
8d08fdba 5595 {
8d08fdba 5596 was_readonly = 1;
67935995 5597 TREE_READONLY (decl) = 0;
8d08fdba
MS
5598 }
5599
437081d7 5600 if (TREE_CODE (decl) == VAR_DECL)
17bbb839
MM
5601 {
5602 /* Only PODs can have thread-local storage. Other types may require
5603 various kinds of non-trivial initialization. */
c2f7fa15 5604 if (DECL_THREAD_LOCAL_P (decl) && !pod_type_p (TREE_TYPE (decl)))
2d01edd7 5605 error ("%qD cannot be thread-local because it has non-POD type %qT",
17bbb839 5606 decl, TREE_TYPE (decl));
d23f3d60
MM
5607 /* If this is a local variable that will need a mangled name,
5608 register it now. We must do this before processing the
5609 initializer for the variable, since the initialization might
5610 require a guard variable, and since the mangled name of the
5611 guard variable will depend on the mangled name of this
5612 variable. */
b0eb6a8f 5613 if (DECL_FUNCTION_SCOPE_P (decl)
d23f3d60
MM
5614 && TREE_STATIC (decl)
5615 && !DECL_ARTIFICIAL (decl))
5616 push_local_name (decl);
17bbb839
MM
5617 /* Convert the initializer to the type of DECL, if we have not
5618 already initialized DECL. */
5619 if (!DECL_INITIALIZED_P (decl)
5620 /* If !DECL_EXTERNAL then DECL is being defined. In the
8e3df2de 5621 case of a static data member initialized inside the
17bbb839
MM
5622 class-specifier, there can be an initializer even if DECL
5623 is *not* defined. */
5624 && (!DECL_EXTERNAL (decl) || init))
5625 {
9e1e64ec 5626 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
360f866c
JJ
5627 {
5628 tree jclass
5629 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
5630 /* Allow libjava/prims.cc define primitive classes. */
5631 if (init != NULL_TREE
5632 || jclass == NULL_TREE
5633 || TREE_CODE (jclass) != TYPE_DECL
5634 || !POINTER_TYPE_P (TREE_TYPE (jclass))
5635 || !same_type_ignoring_top_level_qualifiers_p
5636 (type, TREE_TYPE (TREE_TYPE (jclass))))
5637 error ("Java object %qD not allocated with %<new%>", decl);
5638 init = NULL_TREE;
5639 }
6c06fbce 5640 if (init)
d174af6c
MM
5641 {
5642 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5643 if (init_const_expr_p)
5644 {
5645 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5646 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5647 TREE_CONSTANT (decl) = 1;
5648 }
5649 }
7e99327d 5650 init = check_initializer (decl, init, flags, &cleanup);
b4c20e52 5651 /* Thread-local storage cannot be dynamically initialized. */
c2f7fa15 5652 if (DECL_THREAD_LOCAL_P (decl) && init)
b4c20e52 5653 {
2d01edd7 5654 error ("%qD is thread-local and so cannot be dynamically "
b4c20e52
MM
5655 "initialized", decl);
5656 init = NULL_TREE;
5657 }
b794e321
MM
5658
5659 /* Check that the initializer for a static data member was a
1634705d 5660 constant. Although we check in the parser that the
b794e321
MM
5661 initializer is an integral constant expression, we do not
5662 simplify division-by-zero at the point at which it
5663 occurs. Therefore, in:
5664
5665 struct S { static const int i = 7 / 0; };
3db45ab5 5666
b794e321
MM
5667 we issue an error at this point. It would
5668 probably be better to forbid division by zero in
5669 integral constant expressions. */
8fe4d24b
NS
5670 if (DECL_EXTERNAL (decl) && init)
5671 {
8fe4d24b
NS
5672 error ("%qD cannot be initialized by a non-constant expression"
5673 " when being declared", decl);
5674 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5675 init = NULL_TREE;
5676 }
c8094d83 5677
17bbb839 5678 /* Handle:
caf93cb0 5679
17bbb839 5680 [dcl.init]
caf93cb0 5681
17bbb839
MM
5682 The memory occupied by any object of static storage
5683 duration is zero-initialized at program startup before
5684 any other initialization takes place.
caf93cb0 5685
17bbb839
MM
5686 We cannot create an appropriate initializer until after
5687 the type of DECL is finalized. If DECL_INITIAL is set,
5688 then the DECL is statically initialized, and any
5689 necessary zero-initialization has already been performed. */
5690 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5691 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
1cb8292f 5692 /*nelts=*/NULL_TREE,
17bbb839
MM
5693 /*static_storage_p=*/true);
5694 /* Remember that the initialization for this variable has
5695 taken place. */
5696 DECL_INITIALIZED_P (decl) = 1;
745d26d9
MM
5697 /* This declaration is the definition of this variable,
5698 unless we are initializing a static data member within
5699 the class specifier. */
5700 if (!DECL_EXTERNAL (decl))
5701 var_definition_p = true;
17bbb839 5702 }
d881ff25
MM
5703 /* If the variable has an array type, lay out the type, even if
5704 there is no initializer. It is valid to index through the
5705 array, and we must get TYPE_ALIGN set correctly on the array
5706 type. */
5707 else if (TREE_CODE (type) == ARRAY_TYPE)
5708 layout_type (type);
17bbb839 5709 }
360f866c 5710 else if (TREE_CODE (decl) == FIELD_DECL
9e1e64ec 5711 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
360f866c 5712 error ("non-static data member %qD has Java class type", decl);
3e41d13b 5713
57cf57fb 5714 /* Add this declaration to the statement-tree. This needs to happen
350fae66
RK
5715 after the call to check_initializer so that the DECL_EXPR for a
5716 reference temp is added before the DECL_EXPR for the reference itself. */
170b020f 5717 if (at_function_scope_p ())
350fae66 5718 add_decl_expr (decl);
08ac397c 5719
da71e18c
MM
5720 /* Let the middle end know about variables and functions -- but not
5721 static data members in uninstantiated class templates. */
5722 if (!saved_processing_template_decl
5723 && (TREE_CODE (decl) == VAR_DECL
5724 || TREE_CODE (decl) == FUNCTION_DECL))
8d08fdba 5725 {
27778b73 5726 if (TREE_CODE (decl) == VAR_DECL)
da71e18c
MM
5727 {
5728 layout_var_decl (decl);
5729 maybe_commonize_var (decl);
5730 }
8d08fdba 5731
4c5bae34
RS
5732 /* This needs to happen after the linkage is set. */
5733 determine_visibility (decl);
5734
b0eb6a8f
JJ
5735 if (var_definition_p && TREE_STATIC (decl))
5736 {
5737 /* If a TREE_READONLY variable needs initialization
5738 at runtime, it is no longer readonly and we need to
5739 avoid MEM_READONLY_P being set on RTL created for it. */
5740 if (init)
5741 {
5742 if (TREE_READONLY (decl))
5743 TREE_READONLY (decl) = 0;
5744 was_readonly = 0;
5745 }
5746 else if (was_readonly)
5747 TREE_READONLY (decl) = 1;
5748 }
5749
27778b73 5750 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8d08fdba 5751
7fb213d8
GB
5752 /* Check for abstractness of the type. Notice that there is no
5753 need to strip array types here since the check for those types
5754 is already done within create_array_type_for_decl. */
68642fb6 5755 if (TREE_CODE (type) == FUNCTION_TYPE
27778b73 5756 || TREE_CODE (type) == METHOD_TYPE)
7fb213d8 5757 abstract_virtuals_error (decl, TREE_TYPE (type));
68642fb6 5758 else
cfb91b67 5759 abstract_virtuals_error (decl, type);
8d08fdba 5760
b87d79e6 5761 if (TREE_TYPE (decl) == error_mark_node)
8e3df2de 5762 /* No initialization required. */
faae18ab 5763 ;
b87d79e6
JM
5764 else if (TREE_CODE (decl) == FUNCTION_DECL)
5765 {
5766 if (init)
5767 {
5768 if (init == ridpointers[(int)RID_DELETE])
5769 {
5770 /* fixme check this is 1st decl */
5771 DECL_DELETED_FN (decl) = 1;
5772 DECL_DECLARED_INLINE_P (decl) = 1;
5773 DECL_INITIAL (decl) = error_mark_node;
5774 }
5775 else if (init == ridpointers[(int)RID_DEFAULT])
5776 {
5777 if (!defaultable_fn_p (decl))
5778 error ("%qD cannot be defaulted", decl);
5779 else
5780 {
5781 /* An out-of-class default definition is defined at
5782 the point where it is explicitly defaulted. */
5783 DECL_DEFAULTED_FN (decl) = 1;
5784 if (DECL_INITIAL (decl) == error_mark_node)
5785 synthesize_method (decl);
5786 }
5787 }
5788 else
5789 error ("function %q#D is initialized like a variable", decl);
5790 }
5791 /* else no initialization required. */
5792 }
67d743fe
MS
5793 else if (DECL_EXTERNAL (decl)
5794 && ! (DECL_LANG_SPECIFIC (decl)
5795 && DECL_NOT_REALLY_EXTERN (decl)))
5566b478
MS
5796 {
5797 if (init)
5798 DECL_INITIAL (decl) = init;
5799 }
b0eb6a8f
JJ
5800 /* A variable definition. */
5801 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5802 /* Initialize the local variable. */
5803 initialize_local_var (decl, init);
5804
5805 /* If a variable is defined, and then a subsequent
5806 definition with external linkage is encountered, we will
5807 get here twice for the same variable. We want to avoid
5808 calling expand_static_init more than once. For variables
5809 that are not static data members, we can call
5810 expand_static_init only when we actually process the
5811 initializer. It is not legal to redeclare a static data
5812 member, so this issue does not arise in that case. */
5813 else if (var_definition_p && TREE_STATIC (decl))
5814 expand_static_init (decl, init);
8d08fdba
MS
5815 }
5816
7e99327d
MM
5817 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5818 reference, insert it in the statement-tree now. */
5819 if (cleanup)
325c3691 5820 push_cleanup (decl, cleanup, false);
7e99327d 5821
8d08fdba 5822 finish_end:
2b643eda 5823 processing_template_decl = saved_processing_template_decl;
8d08fdba 5824
8d08fdba
MS
5825 if (was_readonly)
5826 TREE_READONLY (decl) = 1;
d1bd0ded
GK
5827
5828 /* If this was marked 'used', be sure it will be output. */
5829 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
bb9a388d 5830 mark_decl_referenced (decl);
8d08fdba
MS
5831}
5832
f4f206f4 5833/* This is here for a midend callback from c-common.c. */
e92cc029 5834
82580166 5835void
11f6b451 5836finish_decl (tree decl, tree init, tree asmspec_tree)
82580166 5837{
d174af6c 5838 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, asmspec_tree, 0);
82580166
MS
5839}
5840
db4283a0
MM
5841/* Returns a declaration for a VAR_DECL as if:
5842
5843 extern "C" TYPE NAME;
5844
5845 had been seen. Used to create compiler-generated global
5846 variables. */
5847
993acaec 5848static tree
11f6b451 5849declare_global_var (tree name, tree type)
db4283a0
MM
5850{
5851 tree decl;
5852
5853 push_to_top_level ();
5854 decl = build_decl (VAR_DECL, name, type);
5855 TREE_PUBLIC (decl) = 1;
5856 DECL_EXTERNAL (decl) = 1;
5857 DECL_ARTIFICIAL (decl) = 1;
de3fe73c
MM
5858 /* If the user has explicitly declared this variable (perhaps
5859 because the code we are compiling is part of a low-level runtime
5860 library), then it is possible that our declaration will be merged
5861 with theirs by pushdecl. */
5862 decl = pushdecl (decl);
d174af6c 5863 finish_decl (decl, NULL_TREE, NULL_TREE);
db4283a0
MM
5864 pop_from_top_level ();
5865
5866 return decl;
5867}
5868
46a9e521
MM
5869/* Returns the type for the argument to "__cxa_atexit" (or "atexit",
5870 if "__cxa_atexit" is not being used) corresponding to the function
5871 to be called when the program exits. */
5872
5873static tree
5874get_atexit_fn_ptr_type (void)
5875{
5876 tree arg_types;
5877 tree fn_type;
5878
5879 if (!atexit_fn_ptr_type_node)
5880 {
5881 if (flag_use_cxa_atexit
5882 && !targetm.cxx.use_atexit_for_cxa_atexit ())
5883 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
5884 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5885 else
5886 /* The parameter to "atexit" is "void (*)(void)". */
5887 arg_types = void_list_node;
5888
5889 fn_type = build_function_type (void_type_node, arg_types);
5890 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
5891 }
5892
5893 return atexit_fn_ptr_type_node;
5894}
5895
db4283a0 5896/* Returns a pointer to the `atexit' function. Note that if
838dfd8a 5897 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
db4283a0
MM
5898 `__cxa_atexit' function specified in the IA64 C++ ABI. */
5899
5900static tree
11f6b451 5901get_atexit_node (void)
db4283a0
MM
5902{
5903 tree atexit_fndecl;
5904 tree arg_types;
5905 tree fn_type;
5906 tree fn_ptr_type;
5907 const char *name;
9f62c3e3 5908 bool use_aeabi_atexit;
db4283a0
MM
5909
5910 if (atexit_node)
5911 return atexit_node;
5912
97388150 5913 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
db4283a0
MM
5914 {
5915 /* The declaration for `__cxa_atexit' is:
5916
5917 int __cxa_atexit (void (*)(void *), void *, void *)
5918
5919 We build up the argument types and then then function type
5920 itself. */
68642fb6 5921
9f62c3e3 5922 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
db4283a0
MM
5923 /* First, build the pointer-to-function type for the first
5924 argument. */
46a9e521 5925 fn_ptr_type = get_atexit_fn_ptr_type ();
db4283a0
MM
5926 /* Then, build the rest of the argument types. */
5927 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
9f62c3e3
PB
5928 if (use_aeabi_atexit)
5929 {
5930 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5931 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5932 }
5933 else
5934 {
5935 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5936 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5937 }
db4283a0
MM
5938 /* And the final __cxa_atexit type. */
5939 fn_type = build_function_type (integer_type_node, arg_types);
5940 fn_ptr_type = build_pointer_type (fn_type);
9f62c3e3
PB
5941 if (use_aeabi_atexit)
5942 name = "__aeabi_atexit";
5943 else
5944 name = "__cxa_atexit";
db4283a0
MM
5945 }
5946 else
5947 {
5948 /* The declaration for `atexit' is:
68642fb6 5949
0cbd7506 5950 int atexit (void (*)());
db4283a0
MM
5951
5952 We build up the argument types and then then function type
5953 itself. */
46a9e521 5954 fn_ptr_type = get_atexit_fn_ptr_type ();
db4283a0
MM
5955 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5956 /* Build the final atexit type. */
5957 fn_type = build_function_type (integer_type_node, arg_types);
5958 name = "atexit";
5959 }
5960
5961 /* Now, build the function declaration. */
5962 push_lang_context (lang_name_c);
0c11ada6 5963 atexit_fndecl = build_library_fn_ptr (name, fn_type);
db4283a0
MM
5964 mark_used (atexit_fndecl);
5965 pop_lang_context ();
0a72704b 5966 atexit_node = decay_conversion (atexit_fndecl);
db4283a0
MM
5967
5968 return atexit_node;
5969}
5970
5971/* Returns the __dso_handle VAR_DECL. */
5972
5973static tree
11f6b451 5974get_dso_handle_node (void)
db4283a0
MM
5975{
5976 if (dso_handle_node)
5977 return dso_handle_node;
5978
5979 /* Declare the variable. */
5980 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5981 ptr_type_node);
5982
5983 return dso_handle_node;
5984}
5985
5986/* Begin a new function with internal linkage whose job will be simply
5987 to destroy some particular variable. */
5988
d192828a
GK
5989static GTY(()) int start_cleanup_cnt;
5990
db4283a0 5991static tree
11f6b451 5992start_cleanup_fn (void)
db4283a0 5993{
db4283a0 5994 char name[32];
db4283a0
MM
5995 tree fntype;
5996 tree fndecl;
97388150
DS
5997 bool use_cxa_atexit = flag_use_cxa_atexit
5998 && !targetm.cxx.use_atexit_for_cxa_atexit ();
db4283a0
MM
5999
6000 push_to_top_level ();
6001
6002 /* No need to mangle this. */
6003 push_lang_context (lang_name_c);
6004
db4283a0 6005 /* Build the name of the function. */
d192828a 6006 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
db4283a0 6007 /* Build the function declaration. */
46a9e521 6008 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
db4283a0
MM
6009 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6010 /* It's a function with internal linkage, generated by the
6011 compiler. */
6012 TREE_PUBLIC (fndecl) = 0;
6013 DECL_ARTIFICIAL (fndecl) = 1;
5a728aca
MM
6014 /* Make the function `inline' so that it is only emitted if it is
6015 actually needed. It is unlikely that it will be inlined, since
aba649ba 6016 it is only called via a function pointer, but we avoid unnecessary
5a728aca 6017 emissions this way. */
3b14bb39 6018 DECL_DECLARED_INLINE_P (fndecl) = 1;
d4d1ebc1 6019 DECL_INTERFACE_KNOWN (fndecl) = 1;
db4283a0 6020 /* Build the parameter. */
97388150 6021 if (use_cxa_atexit)
db4283a0
MM
6022 {
6023 tree parmdecl;
6024
8e51619a 6025 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
db4283a0 6026 DECL_CONTEXT (parmdecl) = fndecl;
db4283a0
MM
6027 TREE_USED (parmdecl) = 1;
6028 DECL_ARGUMENTS (fndecl) = parmdecl;
6029 }
6030
09ed39ad 6031 pushdecl (fndecl);
058b15c1 6032 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
db4283a0 6033
db4283a0
MM
6034 pop_lang_context ();
6035
6036 return current_function_decl;
6037}
6038
6039/* Finish the cleanup function begun by start_cleanup_fn. */
6040
6041static void
11f6b451 6042end_cleanup_fn (void)
db4283a0 6043{
8cd2462c 6044 expand_or_defer_fn (finish_function (0));
db4283a0
MM
6045
6046 pop_from_top_level ();
6047}
6048
bf419747
MM
6049/* Generate code to handle the destruction of DECL, an object with
6050 static storage duration. */
f0105ed3 6051
40aac948 6052tree
11f6b451 6053register_dtor_fn (tree decl)
f0105ed3 6054{
db4283a0 6055 tree cleanup;
f0105ed3 6056 tree compound_stmt;
db4283a0
MM
6057 tree args;
6058 tree fcall;
46a9e521
MM
6059 tree type;
6060 bool use_dtor;
f0105ed3 6061
46a9e521
MM
6062 type = TREE_TYPE (decl);
6063 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
40aac948 6064 return void_zero_node;
bf419747 6065
46a9e521
MM
6066 /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6067 a class object, we can just pass the destructor to
6068 "__cxa_atexit"; we don't have to build a temporary function to do
6069 the cleanup. */
6070 use_dtor = (flag_use_cxa_atexit
6071 && !targetm.cxx.use_atexit_for_cxa_atexit ()
6072 && CLASS_TYPE_P (type));
6073 if (use_dtor)
6074 {
6075 int idx;
6076
6077 /* Find the destructor. */
6078 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6079 gcc_assert (idx >= 0);
6080 cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6081 /* Make sure it is accessible. */
6082 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6083 }
6084 else
6085 {
6086 /* Call build_cleanup before we enter the anonymous function so
6087 that any access checks will be done relative to the current
6088 scope, rather than the scope of the anonymous function. */
6089 build_cleanup (decl);
6090
6091 /* Now start the function. */
6092 cleanup = start_cleanup_fn ();
6093
6094 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
6095 to the original function, rather than the anonymous one. That
6096 will make the back end think that nested functions are in use,
6097 which causes confusion. */
6098 push_deferring_access_checks (dk_no_check);
6099 fcall = build_cleanup (decl);
6100 pop_deferring_access_checks ();
6101
6102 /* Create the body of the anonymous function. */
6103 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6104 finish_expr_stmt (fcall);
6105 finish_compound_stmt (compound_stmt);
6106 end_cleanup_fn ();
6107 }
f0105ed3
MM
6108
6109 /* Call atexit with the cleanup function. */
bb4f6e6b 6110 mark_used (cleanup);
46a9e521 6111 cleanup = build_address (cleanup);
97388150 6112 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
db4283a0 6113 {
46a9e521
MM
6114 tree addr;
6115
6116 if (use_dtor)
6117 {
6118 /* We must convert CLEANUP to the type that "__cxa_atexit"
6119 expects. */
6120 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6121 /* "__cxa_atexit" will pass the address of DECL to the
6122 cleanup function. */
6123 mark_used (decl);
6124 addr = build_address (decl);
6125 /* The declared type of the parameter to "__cxa_atexit" is
6126 "void *". For plain "T*", we could just let the
5ade1ed2 6127 machinery in cp_build_function_call convert it -- but if the
46a9e521
MM
6128 type is "cv-qualified T *", then we need to convert it
6129 before passing it in, to avoid spurious errors. */
6130 addr = build_nop (ptr_type_node, addr);
6131 }
6132 else
6133 /* Since the cleanup functions we build ignore the address
6134 they're given, there's no reason to pass the actual address
6135 in, and, in general, it's cheaper to pass NULL than any
6136 other value. */
6137 addr = null_pointer_node;
caf93cb0 6138 args = tree_cons (NULL_TREE,
5ade1ed2
DG
6139 cp_build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0,
6140 tf_warning_or_error),
0f268005 6141 NULL_TREE);
9f62c3e3
PB
6142 if (targetm.cxx.use_aeabi_atexit ())
6143 {
6144 args = tree_cons (NULL_TREE, cleanup, args);
46a9e521 6145 args = tree_cons (NULL_TREE, addr, args);
9f62c3e3
PB
6146 }
6147 else
6148 {
46a9e521 6149 args = tree_cons (NULL_TREE, addr, args);
9f62c3e3
PB
6150 args = tree_cons (NULL_TREE, cleanup, args);
6151 }
db4283a0
MM
6152 }
6153 else
6154 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5ade1ed2
DG
6155 return cp_build_function_call (get_atexit_node (), args,
6156 tf_warning_or_error);
f0105ed3
MM
6157}
6158
8e3df2de
MM
6159/* DECL is a VAR_DECL with static storage duration. INIT, if present,
6160 is its initializer. Generate code to handle the construction
6161 and destruction of DECL. */
6162
6163static void
11f6b451 6164expand_static_init (tree decl, tree init)
8d08fdba 6165{
50bc768d
NS
6166 gcc_assert (TREE_CODE (decl) == VAR_DECL);
6167 gcc_assert (TREE_STATIC (decl));
8e3df2de
MM
6168
6169 /* Some variables require no initialization. */
caf93cb0 6170 if (!init
8e3df2de
MM
6171 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
6172 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6173 return;
6174
eba6cfb6 6175 if (DECL_FUNCTION_SCOPE_P (decl))
8d08fdba
MS
6176 {
6177 /* Emit code to perform this initialization but once. */
445cf5eb
JM
6178 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6179 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
94a0dd7b 6180 tree guard, guard_addr;
40aac948
JM
6181 tree acquire_fn, release_fn, abort_fn;
6182 tree flag, begin;
8d08fdba 6183
2036a15c
MM
6184 /* Emit code to perform this initialization but once. This code
6185 looks like:
6186
0cbd7506
MS
6187 static <type> guard;
6188 if (!guard.first_byte) {
40aac948
JM
6189 if (__cxa_guard_acquire (&guard)) {
6190 bool flag = false;
6191 try {
0cbd7506
MS
6192 // Do initialization.
6193 flag = true; __cxa_guard_release (&guard);
6194 // Register variable for destruction at end of program.
40aac948 6195 } catch {
0cbd7506 6196 if (!flag) __cxa_guard_abort (&guard);
40aac948 6197 }
2036a15c
MM
6198 }
6199
40aac948 6200 Note that the `flag' variable is only set to 1 *after* the
2036a15c
MM
6201 initialization is complete. This ensures that an exception,
6202 thrown during the construction, will cause the variable to
6203 reinitialized when we pass through this code again, as per:
68642fb6 6204
2036a15c
MM
6205 [stmt.dcl]
6206
c8094d83 6207 If the initialization exits by throwing an exception, the
2036a15c
MM
6208 initialization is not complete, so it will be tried again
6209 the next time control enters the declaration.
6210
0cbd7506 6211 This process should be thread-safe, too; multiple threads
40aac948
JM
6212 should not be able to initialize the variable more than
6213 once. */
c395453c
MM
6214
6215 /* Create the guard variable. */
6216 guard = get_guard (decl);
2036a15c 6217
445cf5eb
JM
6218 /* This optimization isn't safe on targets with relaxed memory
6219 consistency. On such targets we force synchronization in
6220 __cxa_guard_acquire. */
6221 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6222 {
6223 /* Begin the conditional initialization. */
6224 if_stmt = begin_if_stmt ();
6225 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6226 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6227 }
40aac948
JM
6228
6229 if (flag_threadsafe_statics)
6230 {
6231 guard_addr = build_address (guard);
40aac948
JM
6232
6233 acquire_fn = get_identifier ("__cxa_guard_acquire");
6234 release_fn = get_identifier ("__cxa_guard_release");
6235 abort_fn = get_identifier ("__cxa_guard_abort");
6236 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
6237 {
6238 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
6239 void_list_node);
6240 tree vfntype = build_function_type (void_type_node, argtypes);
6241 acquire_fn = push_library_fn
448083e5
PC
6242 (acquire_fn, build_function_type (integer_type_node, argtypes),
6243 NULL_TREE);
6244 release_fn = push_library_fn (release_fn, vfntype, NULL_TREE);
6245 abort_fn = push_library_fn (abort_fn, vfntype, NULL_TREE);
40aac948
JM
6246 }
6247 else
6248 {
6249 release_fn = identifier_global_value (release_fn);
6250 abort_fn = identifier_global_value (abort_fn);
6251 }
6252
6253 inner_if_stmt = begin_if_stmt ();
94a0dd7b 6254 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
40aac948
JM
6255 inner_if_stmt);
6256
6257 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6258 begin = get_target_expr (boolean_false_node);
6259 flag = TARGET_EXPR_SLOT (begin);
6260
6261 TARGET_EXPR_CLEANUP (begin)
81eba3a8
KH
6262 = build3 (COND_EXPR, void_type_node, flag,
6263 void_zero_node,
94a0dd7b 6264 build_call_n (abort_fn, 1, guard_addr));
40aac948
JM
6265 CLEANUP_EH_ONLY (begin) = 1;
6266
6267 /* Do the initialization itself. */
6268 init = add_stmt_to_compound (begin, init);
6269 init = add_stmt_to_compound
81eba3a8 6270 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
40aac948 6271 init = add_stmt_to_compound
94a0dd7b 6272 (init, build_call_n (release_fn, 1, guard_addr));
40aac948 6273 }
f1dedc31 6274 else
40aac948 6275 init = add_stmt_to_compound (init, set_guard (guard));
72b7eeff 6276
2036a15c
MM
6277 /* Use atexit to register a function for destroying this static
6278 variable. */
40aac948
JM
6279 init = add_stmt_to_compound (init, register_dtor_fn (decl));
6280
6281 finish_expr_stmt (init);
6282
6283 if (flag_threadsafe_statics)
6284 {
6285 finish_compound_stmt (inner_then_clause);
6286 finish_then_clause (inner_if_stmt);
6287 finish_if_stmt (inner_if_stmt);
6288 }
72b7eeff 6289
445cf5eb
JM
6290 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6291 {
6292 finish_compound_stmt (then_clause);
6293 finish_then_clause (if_stmt);
6294 finish_if_stmt (if_stmt);
6295 }
8d08fdba
MS
6296 }
6297 else
bbd15aac 6298 static_aggregates = tree_cons (init, decl, static_aggregates);
8d08fdba 6299}
3c5c0849 6300
8d08fdba
MS
6301\f
6302/* Make TYPE a complete type based on INITIAL_VALUE.
6303 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
07900878
PC
6304 2 if there was no information (in which case assume 0 if DO_DEFAULT),
6305 3 if the initializer list is empty (in pedantic mode). */
8d08fdba
MS
6306
6307int
aab038d5 6308cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8d08fdba 6309{
aab038d5
RH
6310 int failure;
6311 tree type, elt_type;
68642fb6 6312
8d08fdba
MS
6313 if (initial_value)
6314 {
49b5e2f6
DG
6315 unsigned HOST_WIDE_INT i;
6316 tree value;
6317
7b019c19 6318 /* An array of character type can be initialized from a
4038c495
GB
6319 brace-enclosed string constant.
6320
6321 FIXME: this code is duplicated from reshape_init. Probably
6322 we should just call reshape_init here? */
aab038d5 6323 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7b019c19 6324 && TREE_CODE (initial_value) == CONSTRUCTOR
4038c495
GB
6325 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6326 {
6327 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6328 tree value = VEC_index (constructor_elt, v, 0)->value;
6329
6330 if (TREE_CODE (value) == STRING_CST
6331 && VEC_length (constructor_elt, v) == 1)
6332 initial_value = value;
6333 }
49b5e2f6
DG
6334
6335 /* If any of the elements are parameter packs, we can't actually
6336 complete this type now because the array size is dependent. */
6337 if (TREE_CODE (initial_value) == CONSTRUCTOR)
6338 {
6339 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
6340 i, value)
6341 {
6342 if (PACK_EXPANSION_P (value))
6343 return 0;
6344 }
6345 }
8d08fdba
MS
6346 }
6347
aab038d5 6348 failure = complete_array_type (ptype, initial_value, do_default);
8d08fdba 6349
aab038d5
RH
6350 /* We can create the array before the element type is complete, which
6351 means that we didn't have these two bits set in the original type
6352 either. In completing the type, we are expected to propagate these
6353 bits. See also complete_type which does the same thing for arrays
6354 of fixed size. */
6355 type = *ptype;
6356 if (TYPE_DOMAIN (type))
8d08fdba 6357 {
81b4398d 6358 elt_type = TREE_TYPE (type);
aab038d5 6359 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
81b4398d 6360 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
aab038d5 6361 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8d08fdba
MS
6362 }
6363
aab038d5 6364 return failure;
8d08fdba
MS
6365}
6366\f
6367/* Return zero if something is declared to be a member of type
6368 CTYPE when in the context of CUR_TYPE. STRING is the error
6369 message to print in that case. Otherwise, quietly return 1. */
e92cc029 6370
8d08fdba 6371static int
11f6b451 6372member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8d08fdba
MS
6373{
6374 if (ctype && ctype != cur_type)
6375 {
4dacf5bd 6376 if (flags == DTOR_FLAG)
2d01edd7 6377 error ("destructor for alien class %qT cannot be a member", ctype);
4dacf5bd 6378 else
2d01edd7 6379 error ("constructor for alien class %qT cannot be a member", ctype);
8d08fdba
MS
6380 return 0;
6381 }
6382 return 1;
6383}
6384\f
6385/* Subroutine of `grokdeclarator'. */
6386
6387/* Generate errors possibly applicable for a given set of specifiers.
6388 This is for ARM $7.1.2. */
e92cc029 6389
8d08fdba 6390static void
11f6b451 6391bad_specifiers (tree object,
0cbd7506
MS
6392 const char* type,
6393 int virtualp,
6394 int quals,
6395 int inlinep,
6396 int friendp,
6397 int raises)
8d08fdba
MS
6398{
6399 if (virtualp)
2d01edd7 6400 error ("%qD declared as a %<virtual%> %s", object, type);
8d08fdba 6401 if (inlinep)
2d01edd7 6402 error ("%qD declared as an %<inline%> %s", object, type);
8d08fdba 6403 if (quals)
2d01edd7 6404 error ("%<const%> and %<volatile%> function specifiers on "
0cbd7506
MS
6405 "%qD invalid in %s declaration",
6406 object, type);
8d08fdba 6407 if (friendp)
dee15844 6408 error ("%q+D declared as a friend", object);
e1be26f4
RS
6409 if (raises
6410 && (TREE_CODE (object) == TYPE_DECL
6411 || (!TYPE_PTRFN_P (TREE_TYPE (object))
742a37d5 6412 && !TYPE_REFFN_P (TREE_TYPE (object))
e1be26f4 6413 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
dee15844 6414 error ("%q+D declared with an exception specification", object);
8d08fdba
MS
6415}
6416
9c12301f
MM
6417/* DECL is a member function or static data member and is presently
6418 being defined. Check that the definition is taking place in a
6419 valid namespace. */
6420
6421static void
6422check_class_member_definition_namespace (tree decl)
6423{
6424 /* These checks only apply to member functions and static data
6425 members. */
6426 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6427 || TREE_CODE (decl) == VAR_DECL);
6428 /* We check for problems with specializations in pt.c in
6429 check_specialization_namespace, where we can issue better
6430 diagnostics. */
6431 if (processing_specialization)
6432 return;
6433 /* There are no restrictions on the placement of
6434 explicit instantiations. */
6435 if (processing_explicit_instantiation)
6436 return;
6437 /* [class.mfct]
6438
6439 A member function definition that appears outside of the
6440 class definition shall appear in a namespace scope enclosing
6441 the class definition.
6442
6443 [class.static.data]
6444
6445 The definition for a static data member shall appear in a
6446 namespace scope enclosing the member's class definition. */
6447 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
cbe5f3b3 6448 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
37ec60ed 6449 decl, DECL_CONTEXT (decl));
9c12301f
MM
6450}
6451
e2537f2c
MM
6452/* Build a PARM_DECL for the "this" parameter. TYPE is the
6453 METHOD_TYPE for a non-static member function; QUALS are the
6454 cv-qualifiers that apply to the function. */
3db45ab5 6455
e2537f2c
MM
6456tree
6457build_this_parm (tree type, cp_cv_quals quals)
6458{
6459 tree this_type;
6460 tree qual_type;
6461 tree parm;
6462 cp_cv_quals this_quals;
6463
6464 this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
6465 /* The `this' parameter is implicitly `const'; it cannot be
6466 assigned to. */
6467 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
6468 qual_type = cp_build_qualified_type (this_type, this_quals);
6469 parm = build_artificial_parm (this_identifier, qual_type);
6470 cp_apply_type_quals_to_decl (this_quals, parm);
6471 return parm;
3db45ab5 6472}
e2537f2c 6473
8d08fdba
MS
6474/* CTYPE is class type, or null if non-class.
6475 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
6476 or METHOD_TYPE.
6477 DECLARATOR is the function's name.
4546865e 6478 PARMS is a chain of PARM_DECLs for the function.
8d08fdba
MS
6479 VIRTUALP is truthvalue of whether the function is virtual or not.
6480 FLAGS are to be passed through to `grokclassfn'.
6481 QUALS are qualifiers indicating whether the function is `const'
6482 or `volatile'.
6483 RAISES is a list of exceptions that this function can raise.
6484 CHECK is 1 if we must find this method in CTYPE, 0 if we should
68642fb6 6485 not look, and -1 if we should not call `grokclassfn' at all.
3ddfb0e6 6486
27d6592c
MM
6487 SFK is the kind of special function (if any) for the new function.
6488
20496fa2 6489 Returns `NULL_TREE' if something goes wrong, after issuing
3ddfb0e6 6490 applicable error messages. */
e92cc029 6491
8d08fdba 6492static tree
caf93cb0 6493grokfndecl (tree ctype,
0cbd7506
MS
6494 tree type,
6495 tree declarator,
4546865e 6496 tree parms,
0cbd7506
MS
6497 tree orig_declarator,
6498 int virtualp,
6499 enum overload_flags flags,
3c01e5df 6500 cp_cv_quals quals,
0cbd7506
MS
6501 tree raises,
6502 int check,
6503 int friendp,
6504 int publicp,
6505 int inlinep,
27d6592c 6506 special_function_kind sfk,
357d956e 6507 bool funcdef_flag,
0cbd7506
MS
6508 int template_count,
6509 tree in_namespace,
402b8cf6
AH
6510 tree* attrlist,
6511 location_t location)
8d08fdba 6512{
1951a1b6 6513 tree decl;
8d08fdba 6514 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
42976354 6515 tree t;
8d08fdba 6516
8d08fdba 6517 if (raises)
271e6f02 6518 type = build_exception_variant (type, raises);
c11b6f21 6519
8d08fdba 6520 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
402b8cf6
AH
6521
6522 /* If we have an explicit location, use it, otherwise use whatever
6523 build_lang_decl used (probably input_location). */
6524 if (location != UNKNOWN_LOCATION)
6525 DECL_SOURCE_LOCATION (decl) = location;
6526
e2537f2c
MM
6527 if (TREE_CODE (type) == METHOD_TYPE)
6528 {
6529 tree parm;
6530 parm = build_this_parm (type, quals);
6531 TREE_CHAIN (parm) = parms;
6532 parms = parm;
6533 }
4546865e 6534 DECL_ARGUMENTS (decl) = parms;
a1c65f9f 6535 /* Propagate volatile out from type to decl. */
8d08fdba 6536 if (TYPE_VOLATILE (type))
893de33c 6537 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba 6538
71aea5f2
SM
6539 /* Setup decl according to sfk. */
6540 switch (sfk)
6541 {
6542 case sfk_constructor:
6543 case sfk_copy_constructor:
6544 DECL_CONSTRUCTOR_P (decl) = 1;
6545 break;
6546 case sfk_destructor:
6547 DECL_DESTRUCTOR_P (decl) = 1;
6548 break;
6549 default:
6550 break;
6551 }
6552
837edd5f
GK
6553 /* If pointers to member functions use the least significant bit to
6554 indicate whether a function is virtual, ensure a pointer
6555 to this function will have that bit clear. */
6556 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6557 && TREE_CODE (type) == METHOD_TYPE
6558 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
6559 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
6560
abc088aa
MM
6561 if (friendp
6562 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
6563 {
6564 if (funcdef_flag)
6565 error
6566 ("defining explicit specialization %qD in friend declaration",
6567 orig_declarator);
6568 else
6569 {
6570 tree fns = TREE_OPERAND (orig_declarator, 0);
6571 tree args = TREE_OPERAND (orig_declarator, 1);
6572
6573 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
6574 {
6575 /* Something like `template <class T> friend void f<T>()'. */
6576 error ("invalid use of template-id %qD in declaration "
6577 "of primary template",
6578 orig_declarator);
6579 return NULL_TREE;
6580 }
6581
6582
6583 /* A friend declaration of the form friend void f<>(). Record
6584 the information in the TEMPLATE_ID_EXPR. */
6585 SET_DECL_IMPLICIT_INSTANTIATION (decl);
6586
6587 if (TREE_CODE (fns) == COMPONENT_REF)
6588 {
6589 /* Due to bison parser ickiness, we will have already looked
6590 up an operator_name or PFUNCNAME within the current class
6591 (see template_id in parse.y). If the current class contains
6592 such a name, we'll get a COMPONENT_REF here. Undo that. */
6593
6594 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
6595 == current_class_type);
6596 fns = TREE_OPERAND (fns, 1);
6597 }
6598 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
6599 || TREE_CODE (fns) == OVERLOAD);
6600 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
6601
6602 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
6603 if (TREE_PURPOSE (t)
6604 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
6605 {
6606 error ("default arguments are not allowed in declaration "
6607 "of friend template specialization %qD",
6608 decl);
6609 return NULL_TREE;
6610 }
6611
6612 if (inlinep)
6613 {
6614 error ("%<inline%> is not allowed in declaration of friend "
6615 "template specialization %qD",
6616 decl);
6617 return NULL_TREE;
6618 }
6619 }
6620 }
6621
79c4d4b7 6622 /* If this decl has namespace scope, set that up. */
2c73f9f5 6623 if (in_namespace)
b262d64c 6624 set_decl_namespace (decl, in_namespace, friendp);
adae082f 6625 else if (!ctype)
79c4d4b7 6626 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 6627
0f8766b8
JM
6628 /* `main' and builtins have implicit 'C' linkage. */
6629 if ((MAIN_NAME_P (declarator)
6630 || (IDENTIFIER_LENGTH (declarator) > 10
6631 && IDENTIFIER_POINTER (declarator)[0] == '_'
6632 && IDENTIFIER_POINTER (declarator)[1] == '_'
6633 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
6634 && current_lang_name == lang_name_cplusplus
94706a5c 6635 && ctype == NULL_TREE
79c4d4b7
JM
6636 /* NULL_TREE means global namespace. */
6637 && DECL_CONTEXT (decl) == NULL_TREE)
5d2ed28c 6638 SET_DECL_LANGUAGE (decl, lang_c);
0f8766b8 6639
8d08fdba
MS
6640 /* Should probably propagate const out from type to decl I bet (mrs). */
6641 if (staticp)
6642 {
6643 DECL_STATIC_FUNCTION_P (decl) = 1;
6644 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
6645 }
6646
e76a2646 6647 if (ctype)
9c12301f
MM
6648 {
6649 DECL_CONTEXT (decl) = ctype;
6650 if (funcdef_flag)
6651 check_class_member_definition_namespace (decl);
6652 }
e76a2646 6653
0f8766b8 6654 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
faae18ab 6655 {
848b92e1 6656 if (processing_template_decl)
2d01edd7 6657 error ("cannot declare %<::main%> to be a template");
faae18ab 6658 if (inlinep)
2d01edd7 6659 error ("cannot declare %<::main%> to be inline");
f22967f3 6660 if (!publicp)
2d01edd7 6661 error ("cannot declare %<::main%> to be static");
faae18ab
MS
6662 inlinep = 0;
6663 publicp = 1;
6664 }
50a6dbd7 6665
59e76fc6 6666 /* Members of anonymous types and local classes have no linkage; make
9fc444cc 6667 them internal. If a typedef is made later, this will be changed. */
1951a1b6 6668 if (ctype && (TYPE_ANONYMOUS_P (ctype)
4f1c5b7d 6669 || decl_function_context (TYPE_MAIN_DECL (ctype))))
50a6dbd7
JM
6670 publicp = 0;
6671
6672 if (publicp)
6673 {
6674 /* [basic.link]: A name with no linkage (notably, the name of a class
6675 or enumeration declared in a local scope) shall not be used to
6676 declare an entity with linkage.
6677
50b97e0f 6678 Only check this for public decls for now. See core 319, 389. */
4684cd27
MM
6679 t = no_linkage_check (TREE_TYPE (decl),
6680 /*relaxed_p=*/false);
50a6dbd7
JM
6681 if (t)
6682 {
1951a1b6 6683 if (TYPE_ANONYMOUS_P (t))
7f7c930e 6684 {
eb68cb58 6685 if (DECL_EXTERN_C_P (decl))
7f7c930e
JM
6686 /* Allow this; it's pretty common in C. */;
6687 else
1951a1b6 6688 {
cbe5f3b3 6689 permerror (input_location, "non-local function %q#D uses anonymous type",
1951a1b6
JM
6690 decl);
6691 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
cbe5f3b3 6692 permerror (input_location, "%q+#D does not refer to the unqualified "
37ec60ed
JW
6693 "type, so it is not used for linkage",
6694 TYPE_NAME (t));
1951a1b6 6695 }
7f7c930e 6696 }
50a6dbd7 6697 else
cbe5f3b3 6698 permerror (input_location, "non-local function %q#D uses local type %qT", decl, t);
50a6dbd7
JM
6699 }
6700 }
6701
893de33c 6702 TREE_PUBLIC (decl) = publicp;
faae18ab 6703 if (! publicp)
893de33c
JM
6704 {
6705 DECL_INTERFACE_KNOWN (decl) = 1;
6706 DECL_NOT_REALLY_EXTERN (decl) = 1;
6707 }
faae18ab 6708
acc72c37 6709 /* If the declaration was declared inline, mark it as such. */
faae18ab 6710 if (inlinep)
acc72c37 6711 DECL_DECLARED_INLINE_P (decl) = 1;
8d08fdba
MS
6712
6713 DECL_EXTERNAL (decl) = 1;
3c01e5df 6714 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba 6715 {
e7c41c99
DM
6716 error (ctype
6717 ? G_("static member function %qD cannot have cv-qualifier")
32b1d579 6718 : G_("non-member function %qD cannot have cv-qualifier"),
e7c41c99 6719 decl);
3c01e5df 6720 quals = TYPE_UNQUALIFIED;
8d08fdba
MS
6721 }
6722
398cd199
VR
6723 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
6724 && !grok_op_properties (decl, /*complain=*/true))
6725 return NULL_TREE;
8d08fdba 6726
4f1c5b7d 6727 if (ctype && decl_function_context (decl))
893de33c 6728 DECL_NO_STATIC_CHAIN (decl) = 1;
e76a2646 6729
1eb0072d
JM
6730 if (funcdef_flag)
6731 /* Make the init_value nonzero so pushdecl knows this is not
6732 tentative. error_mark_node is replaced later with the BLOCK. */
6733 DECL_INITIAL (decl) = error_mark_node;
6734
93ca4ba7 6735 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
1660cb3a
JM
6736 TREE_NOTHROW (decl) = 1;
6737
75650646 6738 /* Caller will do the rest of this. */
8d08fdba
MS
6739 if (check < 0)
6740 return decl;
6741
74b846e0 6742 if (ctype != NULL_TREE)
71aea5f2 6743 grokclassfn (ctype, decl, flags);
74b846e0
MM
6744
6745 decl = check_explicit_specialization (orig_declarator, decl,
6746 template_count,
357d956e 6747 2 * funcdef_flag +
74b846e0
MM
6748 4 * (friendp != 0));
6749 if (decl == error_mark_node)
6750 return NULL_TREE;
98c1c668 6751
037cc9c5
FJ
6752 if (attrlist)
6753 {
6754 cplus_decl_attributes (&decl, *attrlist, 0);
6755 *attrlist = NULL_TREE;
6756 }
6757
da337784
JJ
6758 /* Check main's type after attributes have been applied. */
6759 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6760 {
6761 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
6762 integer_type_node))
6763 {
6764 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
6765 tree newtype;
6766 error ("%<::main%> must return %<int%>");
6767 newtype = build_function_type (integer_type_node, oldtypeargs);
6768 TREE_TYPE (decl) = newtype;
6769 }
4003301d
MLI
6770 if (warn_main)
6771 check_main_parameter_types (decl);
da337784
JJ
6772 }
6773
74b846e0
MM
6774 if (ctype != NULL_TREE
6775 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6776 && check)
8d08fdba 6777 {
f8c3b097
PC
6778 tree old_decl = check_classfn (ctype, decl,
6779 (processing_template_decl
6780 > template_class_depth (ctype))
6781 ? current_template_parms
6782 : NULL_TREE);
6783
6784 if (old_decl == error_mark_node)
6785 return NULL_TREE;
8d08fdba 6786
74b846e0 6787 if (old_decl)
8d08fdba 6788 {
79ae853c 6789 tree ok;
4514aa8c 6790 tree pushed_scope;
316a2456 6791
357d956e
MM
6792 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6793 /* Because grokfndecl is always supposed to return a
6794 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6795 here. We depend on our callers to figure out that its
6796 really a template that's being returned. */
6797 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6798
6799 if (DECL_STATIC_FUNCTION_P (old_decl)
6800 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6801 /* Remove the `this' parm added by grokclassfn.
6802 XXX Isn't this done in start_function, too? */
6803 revert_static_member_fn (decl);
6804 if (DECL_ARTIFICIAL (old_decl))
db160137
AP
6805 {
6806 error ("definition of implicitly-declared %qD", old_decl);
6807 return NULL_TREE;
6808 }
357d956e 6809
74b846e0
MM
6810 /* Since we've smashed OLD_DECL to its
6811 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
6812 if (TREE_CODE (decl) == TEMPLATE_DECL)
6813 decl = DECL_TEMPLATE_RESULT (decl);
6814
6815 /* Attempt to merge the declarations. This can fail, in
0e339752 6816 the case of some invalid specialization declarations. */
4514aa8c 6817 pushed_scope = push_scope (ctype);
d63d5d0c 6818 ok = duplicate_decls (decl, old_decl, friendp);
4514aa8c
NS
6819 if (pushed_scope)
6820 pop_scope (pushed_scope);
316a2456
MM
6821 if (!ok)
6822 {
2d01edd7 6823 error ("no %q#D member function declared in class %qT",
316a2456
MM
6824 decl, ctype);
6825 return NULL_TREE;
6826 }
74b846e0 6827 return old_decl;
8d08fdba
MS
6828 }
6829 }
74b846e0
MM
6830
6831 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6832 return NULL_TREE;
6833
6834 if (ctype == NULL_TREE || check)
6835 return decl;
6836
6837 if (virtualp)
cbb40945 6838 DECL_VIRTUAL_P (decl) = 1;
74b846e0 6839
8d08fdba
MS
6840 return decl;
6841}
6842
4684cd27
MM
6843/* DECL is a VAR_DECL for a static data member. Set flags to reflect
6844 the linkage that DECL will receive in the object file. */
6845
6846static void
6847set_linkage_for_static_data_member (tree decl)
6848{
6849 /* A static data member always has static storage duration and
6850 external linkage. Note that static data members are forbidden in
6851 local classes -- the only situation in which a class has
6852 non-external linkage. */
6853 TREE_PUBLIC (decl) = 1;
6854 TREE_STATIC (decl) = 1;
6855 /* For non-template classes, static data members are always put
6856 out in exactly those files where they are defined, just as
77880ae4 6857 with ordinary namespace-scope variables. */
4684cd27
MM
6858 if (!processing_template_decl)
6859 DECL_INTERFACE_KNOWN (decl) = 1;
6860}
6861
caf93cb0 6862/* Create a VAR_DECL named NAME with the indicated TYPE.
9e259dd1
MM
6863
6864 If SCOPE is non-NULL, it is the class type or namespace containing
6865 the variable. If SCOPE is NULL, the variable should is created in
6866 the innermost enclosings scope. */
6867
8d08fdba 6868static tree
11f6b451 6869grokvardecl (tree type,
0cbd7506 6870 tree name,
1ff3c076 6871 const cp_decl_specifier_seq *declspecs,
0cbd7506
MS
6872 int initialized,
6873 int constp,
6874 tree scope)
8d08fdba
MS
6875{
6876 tree decl;
5ae9ba3e 6877 tree explicit_scope;
f7da6097 6878
50bc768d 6879 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
9e259dd1 6880
5ae9ba3e
MM
6881 /* Compute the scope in which to place the variable, but remember
6882 whether or not that scope was explicitly specified by the user. */
6883 explicit_scope = scope;
9e259dd1 6884 if (!scope)
8d08fdba 6885 {
9e259dd1
MM
6886 /* An explicit "extern" specifier indicates a namespace-scope
6887 variable. */
62d1db17 6888 if (declspecs->storage_class == sc_extern)
9e259dd1
MM
6889 scope = current_namespace;
6890 else if (!at_function_scope_p ())
a5201a91 6891 scope = current_scope ();
9e259dd1
MM
6892 }
6893
6894 if (scope
6895 && (/* If the variable is a namespace-scope variable declared in a
6896 template, we need DECL_LANG_SPECIFIC. */
6897 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6898 /* Similarly for namespace-scope variables with language linkage
6899 other than C++. */
caf93cb0 6900 || (TREE_CODE (scope) == NAMESPACE_DECL
9e259dd1
MM
6901 && current_lang_name != lang_name_cplusplus)
6902 /* Similarly for static data members. */
6903 || TYPE_P (scope)))
6904 decl = build_lang_decl (VAR_DECL, name, type);
8d08fdba 6905 else
9e259dd1 6906 decl = build_decl (VAR_DECL, name, type);
79c4d4b7 6907
5ae9ba3e
MM
6908 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6909 set_decl_namespace (decl, explicit_scope, 0);
9e259dd1 6910 else
74b0d490 6911 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
6060a796 6912
62d1db17 6913 if (declspecs->storage_class == sc_extern)
8d08fdba
MS
6914 {
6915 DECL_THIS_EXTERN (decl) = 1;
6916 DECL_EXTERNAL (decl) = !initialized;
6917 }
6918
2b9dc906 6919 if (DECL_CLASS_SCOPE_P (decl))
8d08fdba 6920 {
4684cd27
MM
6921 set_linkage_for_static_data_member (decl);
6922 /* This function is only called with out-of-class definitions. */
5b605f68 6923 DECL_EXTERNAL (decl) = 0;
9c12301f 6924 check_class_member_definition_namespace (decl);
8d08fdba
MS
6925 }
6926 /* At top level, either `static' or no s.c. makes a definition
6927 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 6928 else if (toplevel_bindings_p ())
8d08fdba 6929 {
62d1db17 6930 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9fffd093 6931 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
6932 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
6933 }
6934 /* Not at top level, only `static' makes a static definition. */
6935 else
6936 {
62d1db17 6937 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
8d08fdba
MS
6938 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
6939 }
50a6dbd7 6940
62d1db17 6941 if (declspecs->specs[(int)ds_thread])
8893239d 6942 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7a1f3f5f 6943
50a6dbd7
JM
6944 if (TREE_PUBLIC (decl))
6945 {
6946 /* [basic.link]: A name with no linkage (notably, the name of a class
6947 or enumeration declared in a local scope) shall not be used to
6948 declare an entity with linkage.
6949
03fd3f84 6950 Only check this for public decls for now. */
6b211746 6951 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
50a6dbd7
JM
6952 if (t)
6953 {
1951a1b6 6954 if (TYPE_ANONYMOUS_P (t))
9fc444cc
GK
6955 {
6956 if (DECL_EXTERN_C_P (decl))
6bdb98d1
MA
6957 /* Allow this; it's pretty common in C. */
6958 ;
9fc444cc
GK
6959 else
6960 {
6b211746
AO
6961 /* DRs 132, 319 and 389 seem to indicate types with
6962 no linkage can only be used to declare extern "C"
6963 entities. Since it's not always an error in the
6964 ISO C++ 90 Standard, we only issue a warning. */
d4ee4d25 6965 warning (0, "non-local variable %q#D uses anonymous type",
9fc444cc
GK
6966 decl);
6967 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
dee15844
JM
6968 warning (0, "%q+#D does not refer to the unqualified "
6969 "type, so it is not used for linkage",
6970 TYPE_NAME (t));
9fc444cc
GK
6971 }
6972 }
50a6dbd7 6973 else
d4ee4d25 6974 warning (0, "non-local variable %q#D uses local type %qT", decl, t);
50a6dbd7
JM
6975 }
6976 }
1ceb02be
MM
6977 else
6978 DECL_INTERFACE_KNOWN (decl) = 1;
50a6dbd7 6979
8d08fdba
MS
6980 return decl;
6981}
6982
d8f8dca1
MM
6983/* Create and return a canonical pointer to member function type, for
6984 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8d08fdba
MS
6985
6986tree
11f6b451 6987build_ptrmemfunc_type (tree type)
8d08fdba 6988{
4977bab6 6989 tree field, fields;
8d08fdba 6990 tree t;
46cbda4a 6991 tree unqualified_variant = NULL_TREE;
8d08fdba 6992
d48ebde1
NS
6993 if (type == error_mark_node)
6994 return type;
d363e7bf 6995
8d08fdba
MS
6996 /* If a canonical type already exists for this type, use it. We use
6997 this method instead of type_hash_canon, because it only does a
6998 simple equality check on the list of field members. */
6999
7000 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7001 return t;
7002
46cbda4a
MM
7003 /* Make sure that we always have the unqualified pointer-to-member
7004 type first. */
89d684bb 7005 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
68642fb6 7006 unqualified_variant
46cbda4a
MM
7007 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7008
9e1e64ec 7009 t = make_class_type (RECORD_TYPE);
cad7e87b 7010 xref_basetypes (t, NULL_TREE);
caf93cb0 7011
3b426391 7012 /* Let the front end know this is a pointer to member function... */
db5ae43f 7013 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9e1e64ec
PC
7014 /* ... and not really a class type. */
7015 SET_CLASS_TYPE_P (t, 0);
8d08fdba 7016
4977bab6
ZW
7017 field = build_decl (FIELD_DECL, pfn_identifier, type);
7018 fields = field;
caf93cb0 7019
4977bab6
ZW
7020 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
7021 TREE_CHAIN (field) = fields;
7022 fields = field;
caf93cb0 7023
4977bab6 7024 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8d08fdba 7025
3b426391 7026 /* Zap out the name so that the back end will give us the debugging
8d08fdba
MS
7027 information for this anonymous RECORD_TYPE. */
7028 TYPE_NAME (t) = NULL_TREE;
7029
46cbda4a
MM
7030 /* If this is not the unqualified form of this pointer-to-member
7031 type, set the TYPE_MAIN_VARIANT for this type to be the
7032 unqualified type. Since they are actually RECORD_TYPEs that are
7033 not variants of each other, we must do this manually. */
89d684bb 7034 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
46cbda4a 7035 {
89d684bb 7036 t = build_qualified_type (t, cp_type_quals (type));
46cbda4a
MM
7037 TYPE_MAIN_VARIANT (t) = unqualified_variant;
7038 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7039 TYPE_NEXT_VARIANT (unqualified_variant) = t;
0f67bdf1 7040 TREE_TYPE (TYPE_BINFO (t)) = t;
46cbda4a
MM
7041 }
7042
7043 /* Cache this pointer-to-member type so that we can find it again
7044 later. */
8d08fdba
MS
7045 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7046
0f67bdf1
JM
7047 if (TYPE_STRUCTURAL_EQUALITY_P (type))
7048 SET_TYPE_STRUCTURAL_EQUALITY (t);
7049 else if (TYPE_CANONICAL (type) != type)
7050 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
06d40de8 7051
8d08fdba
MS
7052 return t;
7053}
7054
9e259dd1
MM
7055/* Create and return a pointer to data member type. */
7056
7057tree
7058build_ptrmem_type (tree class_type, tree member_type)
7059{
a5ac359a
MM
7060 if (TREE_CODE (member_type) == METHOD_TYPE)
7061 {
7062 tree arg_types;
7063
7064 arg_types = TYPE_ARG_TYPES (member_type);
caf93cb0 7065 class_type = (cp_build_qualified_type
a5ac359a
MM
7066 (class_type,
7067 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
caf93cb0
EC
7068 member_type
7069 = build_method_type_directly (class_type,
43dc123f
MM
7070 TREE_TYPE (member_type),
7071 TREE_CHAIN (arg_types));
a5ac359a
MM
7072 return build_ptrmemfunc_type (build_pointer_type (member_type));
7073 }
7074 else
7075 {
50bc768d 7076 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
a5ac359a
MM
7077 return build_offset_type (class_type, member_type);
7078 }
9e259dd1
MM
7079}
7080
b17e2870
JM
7081/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7082 Check to see that the definition is valid. Issue appropriate error
7083 messages. Return 1 if the definition is particularly bad, or 0
7084 otherwise. */
7085
7086int
11f6b451 7087check_static_variable_definition (tree decl, tree type)
b17e2870
JM
7088{
7089 /* Motion 10 at San Diego: If a static const integral data member is
7090 initialized with an integral constant expression, the initializer
7091 may appear either in the declaration (within the class), or in
7092 the definition, but not both. If it appears in the class, the
7093 member is a member constant. The file-scope definition is always
7094 required. */
dcba9b0f 7095 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
b17e2870 7096 {
2d01edd7 7097 error ("invalid in-class initialization of static data member "
0cbd7506 7098 "of non-integral type %qT",
dcba9b0f 7099 type);
b17e2870 7100 /* If we just return the declaration, crashes will sometimes
852dcbdd 7101 occur. We therefore return void_type_node, as if this were a
b17e2870
JM
7102 friend declaration, to cause callers to completely ignore
7103 this declaration. */
7104 return 1;
7105 }
7106 else if (!CP_TYPE_CONST_P (type))
2d01edd7 7107 error ("ISO C++ forbids in-class initialization of non-const "
0cbd7506
MS
7108 "static member %qD",
7109 decl);
fcf73884 7110 else if (!INTEGRAL_TYPE_P (type))
509c9d60 7111 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
0cbd7506 7112 "%qD of non-integral type %qT", decl, type);
b17e2870
JM
7113
7114 return 0;
7115}
7116
2848ad0f
MM
7117/* Given the SIZE (i.e., number of elements) in an array, compute an
7118 appropriate index type for the array. If non-NULL, NAME is the
7119 name of the thing being declared. */
7120
c95cd22e 7121tree
11f6b451 7122compute_array_index_type (tree name, tree size)
2848ad0f 7123{
d174af6c 7124 tree type;
2848ad0f 7125 tree itype;
06d40de8 7126 tree abi_1_itype = NULL_TREE;
2848ad0f 7127
d174af6c
MM
7128 if (error_operand_p (size))
7129 return error_mark_node;
7130
7131 type = TREE_TYPE (size);
d63b5e9f
NS
7132 /* The array bound must be an integer type. */
7133 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
2848ad0f 7134 {
d63b5e9f 7135 if (name)
2d01edd7 7136 error ("size of array %qD has non-integral type %qT", name, type);
d63b5e9f 7137 else
2d01edd7 7138 error ("size of array has non-integral type %qT", type);
d63b5e9f
NS
7139 size = integer_one_node;
7140 type = TREE_TYPE (size);
2848ad0f
MM
7141 }
7142
06d40de8
DG
7143 if (value_dependent_expression_p (size))
7144 {
7145 /* We cannot do any checking for a value-dependent SIZE. Just
7146 build the index type and mark that it requires structural
7147 equality checks. */
7148 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7149 size, integer_one_node));
7150 SET_TYPE_STRUCTURAL_EQUALITY (itype);
7151 return itype;
7152 }
7153
7154 if (!abi_version_at_least (2) && processing_template_decl)
7155 /* For abi-1, we handled all instances in templates the same way,
39a13be5 7156 even when they were non-dependent. This affects the manglings
06d40de8
DG
7157 produced. So, we do the normal checking for non-dependent
7158 sizes, but at the end we'll return the same type that abi-1
7159 would have, but with TYPE_CANONICAL set to the "right"
7160 value that the current ABI would provide. */
7161 abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7162 size, integer_one_node));
d63b5e9f 7163
a1c65f9f 7164 /* The size might be the result of a cast. */
80f5bb34
MM
7165 STRIP_TYPE_NOPS (size);
7166
7167 /* It might be a const variable or enumeration constant. */
8a784e4a 7168 size = integral_constant_value (size);
80f5bb34 7169
2848ad0f 7170 /* Normally, the array-bound will be a constant. */
2bb5d995 7171 if (TREE_CODE (size) == INTEGER_CST)
2848ad0f
MM
7172 {
7173 /* Check to see if the array bound overflowed. Make that an
7174 error, no matter how generous we're being. */
393eda6a 7175 constant_expression_error (size);
2848ad0f
MM
7176
7177 /* An array must have a positive number of elements. */
7178 if (INT_CST_LT (size, integer_zero_node))
7179 {
d67cdbc3 7180 if (name)
2d01edd7 7181 error ("size of array %qD is negative", name);
d67cdbc3 7182 else
33bd39a2 7183 error ("size of array is negative");
2848ad0f
MM
7184 size = integer_one_node;
7185 }
a8e6c82a
MM
7186 /* As an extension we allow zero-sized arrays. We always allow
7187 them in system headers because glibc uses them. */
fcf73884 7188 else if (integer_zerop (size) && !in_system_header)
d67cdbc3
JM
7189 {
7190 if (name)
509c9d60 7191 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
d67cdbc3 7192 else
509c9d60 7193 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
d67cdbc3 7194 }
2848ad0f 7195 }
2bb5d995
JM
7196 else if (TREE_CONSTANT (size))
7197 {
7198 /* `(int) &fn' is not a valid array bound. */
7199 if (name)
2d01edd7 7200 error ("size of array %qD is not an integral constant-expression",
0cbd7506 7201 name);
2bb5d995 7202 else
33bd39a2 7203 error ("size of array is not an integral constant-expression");
3aa2ddb8 7204 size = integer_one_node;
2bb5d995 7205 }
50d50fc7 7206 else if (pedantic && warn_vla != 0)
d63b5e9f
NS
7207 {
7208 if (name)
509c9d60 7209 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
d63b5e9f 7210 else
509c9d60 7211 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
50d50fc7
SP
7212 }
7213 else if (warn_vla > 0)
7214 {
7215 if (name)
7216 warning (OPT_Wvla,
7217 "variable length array %qD is used", name);
7218 else
7219 warning (OPT_Wvla,
7220 "variable length array is used");
d63b5e9f 7221 }
2848ad0f 7222
d63b5e9f
NS
7223 if (processing_template_decl && !TREE_CONSTANT (size))
7224 /* A variable sized array. */
7225 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7226 else
2848ad0f 7227 {
455f19cb
MM
7228 HOST_WIDE_INT saved_processing_template_decl;
7229
d63b5e9f 7230 /* Compute the index of the largest element in the array. It is
0cbd7506
MS
7231 one less than the number of elements in the array. We save
7232 and restore PROCESSING_TEMPLATE_DECL so that computations in
7233 cp_build_binary_op will be appropriately folded. */
455f19cb
MM
7234 saved_processing_template_decl = processing_template_decl;
7235 processing_template_decl = 0;
ba47d38d
AH
7236 itype = cp_build_binary_op (input_location,
7237 MINUS_EXPR,
455f19cb 7238 cp_convert (ssizetype, size),
5ade1ed2
DG
7239 cp_convert (ssizetype, integer_one_node),
7240 tf_warning_or_error);
455f19cb
MM
7241 itype = fold (itype);
7242 processing_template_decl = saved_processing_template_decl;
7243
d63b5e9f 7244 if (!TREE_CONSTANT (itype))
f4f206f4 7245 /* A variable sized array. */
d63b5e9f
NS
7246 itype = variable_size (itype);
7247 /* Make sure that there was no overflow when creating to a signed
0cbd7506
MS
7248 index type. (For example, on a 32-bit machine, an array with
7249 size 2^32 - 1 is too big.) */
9116d529
RS
7250 else if (TREE_CODE (itype) == INTEGER_CST
7251 && TREE_OVERFLOW (itype))
2848ad0f 7252 {
d63b5e9f
NS
7253 error ("overflow in array dimension");
7254 TREE_OVERFLOW (itype) = 0;
2848ad0f 7255 }
2848ad0f 7256 }
68642fb6 7257
2848ad0f 7258 /* Create and return the appropriate index type. */
06d40de8
DG
7259 if (abi_1_itype)
7260 {
7261 tree t = build_index_type (itype);
7262 TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
7263 return abi_1_itype;
7264 }
7265 else
7266 return build_index_type (itype);
2848ad0f
MM
7267}
7268
a723baf1
MM
7269/* Returns the scope (if any) in which the entity declared by
7270 DECLARATOR will be located. If the entity was declared with an
7271 unqualified name, NULL_TREE is returned. */
7272
7273tree
058b15c1 7274get_scope_of_declarator (const cp_declarator *declarator)
a723baf1 7275{
058b15c1
MM
7276 while (declarator && declarator->kind != cdk_id)
7277 declarator = declarator->declarator;
7278
7279 /* If the declarator-id is a SCOPE_REF, the scope in which the
7280 declaration occurs is the first operand. */
7281 if (declarator
1d786913
MM
7282 && declarator->u.id.qualifying_scope)
7283 return declarator->u.id.qualifying_scope;
058b15c1 7284
77880ae4 7285 /* Otherwise, the declarator is not a qualified name; the entity will
058b15c1
MM
7286 be declared in the current scope. */
7287 return NULL_TREE;
a723baf1
MM
7288}
7289
2848ad0f
MM
7290/* Returns an ARRAY_TYPE for an array with SIZE elements of the
7291 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
7292 with this type. */
7293
7294static tree
11f6b451 7295create_array_type_for_decl (tree name, tree type, tree size)
2848ad0f
MM
7296{
7297 tree itype = NULL_TREE;
7298 const char* error_msg;
7299
7300 /* If things have already gone awry, bail now. */
7301 if (type == error_mark_node || size == error_mark_node)
7302 return error_mark_node;
7303
7304 /* Assume that everything will go OK. */
7305 error_msg = NULL;
7306
7307 /* There are some types which cannot be array elements. */
7308 switch (TREE_CODE (type))
7309 {
7310 case VOID_TYPE:
7311 error_msg = "array of void";
7312 break;
7313
7314 case FUNCTION_TYPE:
7315 error_msg = "array of functions";
7316 break;
7317
7318 case REFERENCE_TYPE:
7319 error_msg = "array of references";
7320 break;
7321
2848ad0f
MM
7322 case METHOD_TYPE:
7323 error_msg = "array of function members";
7324 break;
7325
7326 default:
7327 break;
7328 }
7329
7330 /* If something went wrong, issue an error-message and return. */
7331 if (error_msg)
7332 {
7333 if (name)
2d01edd7 7334 error ("declaration of %qD as %s", name, error_msg);
2848ad0f 7335 else
33bd39a2 7336 error ("creating %s", error_msg);
2848ad0f
MM
7337
7338 return error_mark_node;
7339 }
7340
7341 /* [dcl.array]
68642fb6 7342
2848ad0f
MM
7343 The constant expressions that specify the bounds of the arrays
7344 can be omitted only for the first member of the sequence. */
7345 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
7346 {
b3faacfd 7347 if (name)
2d01edd7 7348 error ("declaration of %qD as multidimensional array must "
0cbd7506
MS
7349 "have bounds for all dimensions except the first",
7350 name);
b3faacfd 7351 else
2d01edd7 7352 error ("multidimensional array must have bounds for all "
0cbd7506 7353 "dimensions except the first");
2848ad0f
MM
7354
7355 return error_mark_node;
7356 }
7357
7358 /* Figure out the index type for the array. */
7359 if (size)
7360 itype = compute_array_index_type (name, size);
7361
7fb213d8
GB
7362 /* [dcl.array]
7363 T is called the array element type; this type shall not be [...] an
7364 abstract class type. */
7365 abstract_virtuals_error (name, type);
7366
2848ad0f
MM
7367 return build_cplus_array_type (type, itype);
7368}
7369
3dbc07b6
MM
7370/* Check that it's OK to declare a function with the indicated TYPE.
7371 SFK indicates the kind of special function (if any) that this
1f84ec23 7372 function is. OPTYPE is the type given in a conversion operator
44d10c10
PB
7373 declaration, or the class type for a constructor/destructor.
7374 Returns the actual return type of the function; that
3dbc07b6
MM
7375 may be different than TYPE if an error occurs, or for certain
7376 special functions. */
7377
7378static tree
11f6b451 7379check_special_function_return_type (special_function_kind sfk,
0cbd7506
MS
7380 tree type,
7381 tree optype)
3dbc07b6
MM
7382{
7383 switch (sfk)
7384 {
7385 case sfk_constructor:
7386 if (type)
33bd39a2 7387 error ("return type specification for constructor invalid");
5362b086 7388
44d10c10
PB
7389 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7390 type = build_pointer_type (optype);
7391 else
7392 type = void_type_node;
3dbc07b6
MM
7393 break;
7394
7395 case sfk_destructor:
7396 if (type)
33bd39a2 7397 error ("return type specification for destructor invalid");
44d10c10 7398 /* We can't use the proper return type here because we run into
77880ae4 7399 problems with ambiguous bases and covariant returns.
44d10c10
PB
7400 Java classes are left unchanged because (void *) isn't a valid
7401 Java type, and we don't want to change the Java ABI. */
7402 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7403 type = build_pointer_type (void_type_node);
7404 else
7405 type = void_type_node;
3dbc07b6
MM
7406 break;
7407
7408 case sfk_conversion:
caba2081
PC
7409 if (type)
7410 error ("return type specified for %<operator %T%>", optype);
3dbc07b6
MM
7411 type = optype;
7412 break;
7413
7414 default:
8dc2b103 7415 gcc_unreachable ();
3dbc07b6
MM
7416 }
7417
7418 return type;
7419}
7420
62e19030
MM
7421/* A variable or data member (whose unqualified name is IDENTIFIER)
7422 has been declared with the indicated TYPE. If the TYPE is not
7423 acceptable, issue an error message and return a type to use for
03fd3f84 7424 error-recovery purposes. */
62e19030
MM
7425
7426tree
7427check_var_type (tree identifier, tree type)
7428{
7429 if (VOID_TYPE_P (type))
7430 {
7431 if (!identifier)
7432 error ("unnamed variable or field declared void");
7433 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
7434 {
7435 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
7436 error ("variable or field %qE declared void", identifier);
7437 }
7438 else
7439 error ("variable or field declared void");
650fcd07 7440 type = error_mark_node;
62e19030 7441 }
c8094d83 7442
62e19030
MM
7443 return type;
7444}
7445
a723baf1
MM
7446/* Given declspecs and a declarator (abstract or otherwise), determine
7447 the name and type of the object declared and construct a DECL node
7448 for it.
8d08fdba 7449
5e32a5cf
GDR
7450 DECLSPECS points to the representation of declaration-specifier
7451 sequence that precedes declarator.
8d08fdba
MS
7452
7453 DECL_CONTEXT says which syntactic context this declaration is in:
7454 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7455 FUNCDEF for a function definition. Like NORMAL but a few different
7456 error messages in each case. Return value may be zero meaning
7457 this definition is too screwy to try to parse.
7458 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
7459 handle member functions (which have FIELD context).
7460 Return value may be zero meaning this definition is too screwy to
7461 try to parse.
7462 PARM for a parameter declaration (either within a function prototype
7463 or before a function body). Make a PARM_DECL, or return void_type_node.
db5ae43f 7464 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
7465 TYPENAME if for a typename (in a cast or sizeof).
7466 Don't make a DECL node; just return the ..._TYPE node.
7467 FIELD for a struct or union field; make a FIELD_DECL.
7468 BITFIELD for a field with specified width.
b87d79e6 7469 INITIALIZED is as for start_decl.
8d08fdba 7470
91d231cb
JM
7471 ATTRLIST is a pointer to the list of attributes, which may be NULL
7472 if there are none; *ATTRLIST may be modified if attributes from inside
7473 the declarator should be applied to the declaration.
b17e2870 7474
a723baf1
MM
7475 When this function is called, scoping variables (such as
7476 CURRENT_CLASS_TYPE) should reflect the scope in which the
7477 declaration occurs, not the scope in which the new declaration will
7478 be placed. For example, on:
8d08fdba 7479
a723baf1 7480 void S::f() { ... }
8d08fdba 7481
a723baf1 7482 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
344f237b
LM
7483 should not be `S'.
7484
7485 Returns a DECL (if a declarator is present), a TYPE (if there is no
7486 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
7487 error occurs. */
8d08fdba 7488
8d08fdba 7489tree
058b15c1 7490grokdeclarator (const cp_declarator *declarator,
1ff3c076 7491 const cp_decl_specifier_seq *declspecs,
0cbd7506
MS
7492 enum decl_context decl_context,
7493 int initialized,
7494 tree* attrlist)
8d08fdba 7495{
8d08fdba
MS
7496 tree type = NULL_TREE;
7497 int longlong = 0;
db5ae43f 7498 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
7499 int explicit_int = 0;
7500 int explicit_char = 0;
37c46b43 7501 int defaulted_int = 0;
d1c78882 7502 tree dependent_name = NULL_TREE;
caf93cb0 7503
8d08fdba 7504 tree typedef_decl = NULL_TREE;
058b15c1 7505 const char *name = NULL;
8d08fdba 7506 tree typedef_type = NULL_TREE;
357d956e
MM
7507 /* True if this declarator is a function definition. */
7508 bool funcdef_flag = false;
058b15c1 7509 cp_declarator_kind innermost_code = cdk_error;
8d08fdba 7510 int bitfield = 0;
6125f3be
DE
7511#if 0
7512 /* See the code below that used this. */
91d231cb 7513 tree decl_attr = NULL_TREE;
6125f3be 7514#endif
8d08fdba
MS
7515
7516 /* Keep track of what sort of function is being processed
7517 so that we can warn about default return values, or explicit
7518 return values which do not match prescribed defaults. */
3dbc07b6 7519 special_function_kind sfk = sfk_none;
8d08fdba
MS
7520
7521 tree dname = NULL_TREE;
8d08fdba
MS
7522 tree ctor_return_type = NULL_TREE;
7523 enum overload_flags flags = NO_SPECIAL;
e2537f2c
MM
7524 /* cv-qualifiers that apply to the declarator, for a declaration of
7525 a member function. */
7526 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
7527 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
7528 int type_quals;
c11b6f21 7529 tree raises = NULL_TREE;
386b8a85 7530 int template_count = 0;
91d231cb 7531 tree returned_attrs = NULL_TREE;
4546865e 7532 tree parms = NULL_TREE;
058b15c1
MM
7533 const cp_declarator *id_declarator;
7534 /* The unqualified name of the declarator; either an
7535 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
7536 tree unqualified_id;
7537 /* The class type, if any, in which this entity is located,
7538 or NULL_TREE if none. Note that this value may be different from
7539 the current class type; for example if an attempt is made to declare
7540 "A::f" inside "B", this value will be "A". */
7541 tree ctype = current_class_type;
7542 /* The NAMESPACE_DECL for the namespace in which this entity is
7543 located. If an unqualified name is used to declare the entity,
7544 this value will be NULL_TREE, even if the entity is located at
caf93cb0 7545 namespace scope. */
058b15c1 7546 tree in_namespace = NULL_TREE;
1ff3c076
MM
7547 cp_storage_class storage_class;
7548 bool unsigned_p, signed_p, short_p, long_p, thread_p;
2cfe82fe 7549 bool type_was_error_mark_node = false;
5d80a306 7550 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
1891dec4 7551 bool set_no_warning = false;
1ff3c076
MM
7552
7553 signed_p = declspecs->specs[(int)ds_signed];
7554 unsigned_p = declspecs->specs[(int)ds_unsigned];
7555 short_p = declspecs->specs[(int)ds_short];
7556 long_p = declspecs->specs[(int)ds_long];
28c84d63 7557 longlong = declspecs->specs[(int)ds_long] >= 2;
1ff3c076 7558 thread_p = declspecs->specs[(int)ds_thread];
8d08fdba 7559
8d08fdba 7560 if (decl_context == FUNCDEF)
357d956e 7561 funcdef_flag = true, decl_context = NORMAL;
8d08fdba 7562 else if (decl_context == MEMFUNCDEF)
357d956e 7563 funcdef_flag = true, decl_context = FIELD;
8d08fdba
MS
7564 else if (decl_context == BITFIELD)
7565 bitfield = 1, decl_context = FIELD;
7566
b87d79e6
JM
7567 if (initialized > 1)
7568 funcdef_flag = true;
7569
8d08fdba
MS
7570 /* Look inside a declarator for the name being declared
7571 and get it as a string, for an error message. */
caf93cb0
EC
7572 for (id_declarator = declarator;
7573 id_declarator;
058b15c1
MM
7574 id_declarator = id_declarator->declarator)
7575 {
7576 if (id_declarator->kind != cdk_id)
7577 innermost_code = id_declarator->kind;
8d08fdba 7578
058b15c1
MM
7579 switch (id_declarator->kind)
7580 {
7581 case cdk_function:
7582 if (id_declarator->declarator
7583 && id_declarator->declarator->kind == cdk_id)
8d08fdba 7584 {
058b15c1
MM
7585 sfk = id_declarator->declarator->u.id.sfk;
7586 if (sfk == sfk_destructor)
7587 flags = DTOR_FLAG;
51c184be 7588 }
058b15c1 7589 break;
be99da77 7590
058b15c1
MM
7591 case cdk_id:
7592 {
1d786913
MM
7593 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
7594 tree decl = id_declarator->u.id.unqualified_name;
058b15c1
MM
7595 if (!decl)
7596 break;
1d786913 7597 if (qualifying_scope)
8d08fdba 7598 {
2884e22c
MM
7599 if (at_function_scope_p ())
7600 {
7601 /* [dcl.meaning]
7602
7603 A declarator-id shall not be qualified except
7604 for ...
7605
7606 None of the cases are permitted in block
7607 scope. */
7608 if (qualifying_scope == global_namespace)
7609 error ("invalid use of qualified-name %<::%D%>",
7610 decl);
7611 else if (TYPE_P (qualifying_scope))
7612 error ("invalid use of qualified-name %<%T::%D%>",
7613 qualifying_scope, decl);
7614 else
7615 error ("invalid use of qualified-name %<%D::%D%>",
7616 qualifying_scope, decl);
7617 return error_mark_node;
7618 }
7619 else if (TYPE_P (qualifying_scope))
058b15c1 7620 {
1d786913 7621 ctype = qualifying_scope;
058b15c1
MM
7622 if (innermost_code != cdk_function
7623 && current_class_type
caf93cb0 7624 && !UNIQUELY_DERIVED_FROM_P (ctype,
058b15c1
MM
7625 current_class_type))
7626 {
2d01edd7 7627 error ("type %qT is not derived from type %qT",
058b15c1 7628 ctype, current_class_type);
1d786913 7629 return error_mark_node;
058b15c1 7630 }
058b15c1
MM
7631 }
7632 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
7633 in_namespace = qualifying_scope;
058b15c1 7634 }
058b15c1
MM
7635 switch (TREE_CODE (decl))
7636 {
7637 case BIT_NOT_EXPR:
be99da77 7638 {
88e95ee3
MM
7639 tree type;
7640
7641 if (innermost_code != cdk_function)
7642 {
7643 error ("declaration of %qD as non-function", decl);
7644 return error_mark_node;
7645 }
c8094d83 7646 else if (!qualifying_scope
88e95ee3
MM
7647 && !(current_class_type && at_class_scope_p ()))
7648 {
7649 error ("declaration of %qD as non-member", decl);
7650 return error_mark_node;
7651 }
c8094d83 7652
88e95ee3
MM
7653 type = TREE_OPERAND (decl, 0);
7654 name = IDENTIFIER_POINTER (constructor_name (type));
af02935e 7655 dname = decl;
058b15c1
MM
7656 }
7657 break;
633221db 7658
058b15c1
MM
7659 case TEMPLATE_ID_EXPR:
7660 {
7661 tree fns = TREE_OPERAND (decl, 0);
633221db 7662
058b15c1 7663 dname = fns;
058b15c1 7664 if (TREE_CODE (dname) != IDENTIFIER_NODE)
be99da77 7665 {
50bc768d 7666 gcc_assert (is_overloaded_fn (dname));
058b15c1 7667 dname = DECL_NAME (get_first_fn (dname));
be99da77
MS
7668 }
7669 }
058b15c1 7670 /* Fall through. */
be99da77 7671
058b15c1
MM
7672 case IDENTIFIER_NODE:
7673 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7674 dname = decl;
be99da77 7675
058b15c1
MM
7676 if (C_IS_RESERVED_WORD (dname))
7677 {
2d01edd7 7678 error ("declarator-id missing; using reserved word %qD",
058b15c1
MM
7679 dname);
7680 name = IDENTIFIER_POINTER (dname);
7681 }
7682 else if (!IDENTIFIER_TYPENAME_P (dname))
7683 name = IDENTIFIER_POINTER (dname);
7684 else
7685 {
50bc768d 7686 gcc_assert (flags == NO_SPECIAL);
058b15c1
MM
7687 flags = TYPENAME_FLAG;
7688 ctor_return_type = TREE_TYPE (dname);
7689 sfk = sfk_conversion;
7690 if (is_typename_at_global_scope (dname))
7691 name = IDENTIFIER_POINTER (dname);
7692 else
7693 name = "<invalid operator>";
7694 }
7695 break;
7696
058b15c1 7697 default:
8dc2b103 7698 gcc_unreachable ();
058b15c1 7699 }
45537677 7700 break;
b08f991d 7701 }
45537677 7702
b08f991d
SB
7703 case cdk_array:
7704 case cdk_pointer:
7705 case cdk_reference:
7706 case cdk_ptrmem:
7707 break;
2ee366b5 7708
b08f991d
SB
7709 case cdk_error:
7710 return error_mark_node;
058b15c1 7711
b08f991d
SB
7712 default:
7713 gcc_unreachable ();
058b15c1
MM
7714 }
7715 if (id_declarator->kind == cdk_id)
7716 break;
7717 }
8d08fdba 7718
fa6098f8 7719 /* [dcl.fct.edf]
3db45ab5 7720
fa6098f8
MM
7721 The declarator in a function-definition shall have the form
7722 D1 ( parameter-declaration-clause) ... */
058b15c1 7723 if (funcdef_flag && innermost_code != cdk_function)
fa6098f8
MM
7724 {
7725 error ("function definition does not declare parameters");
7726 return error_mark_node;
7727 }
8d08fdba 7728
e1cd6e56 7729 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
058b15c1 7730 && innermost_code != cdk_function
62d1db17 7731 && ! (ctype && !declspecs->any_specifiers_p))
e1cd6e56 7732 {
2d01edd7 7733 error ("declaration of %qD as non-function", dname);
943e3ede 7734 return error_mark_node;
e1cd6e56
MS
7735 }
7736
8d08fdba
MS
7737 /* Anything declared one level down from the top level
7738 must be one of the parameters of a function
7739 (because the body is at least two levels down). */
7740
7741 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7742 by not allowing C++ class definitions to specify their parameters
7743 with xdecls (must be spec.d in the parmlist).
7744
7745 Since we now wait to push a class scope until we are sure that
7746 we are in a legitimate method context, we must set oldcname
a9aedbc2
MS
7747 explicitly (since current_class_name is not yet alive).
7748
7749 We also want to avoid calling this a PARM if it is in a namespace. */
8d08fdba 7750
9188c363 7751 if (decl_context == NORMAL && !toplevel_bindings_p ())
a9aedbc2 7752 {
e2500fed 7753 struct cp_binding_level *b = current_binding_level;
ff955512 7754 current_binding_level = b->level_chain;
a9aedbc2
MS
7755 if (current_binding_level != 0 && toplevel_bindings_p ())
7756 decl_context = PARM;
ff955512 7757 current_binding_level = b;
a9aedbc2 7758 }
8d08fdba 7759
34fc957d
NS
7760 if (name == NULL)
7761 name = decl_context == PARM ? "parameter" : "type name";
68642fb6 7762
62d1db17
MM
7763 /* If there were multiple types specified in the decl-specifier-seq,
7764 issue an error message. */
7765 if (declspecs->multiple_types_p)
32273f9f
LM
7766 {
7767 error ("two or more data types in declaration of %qs", name);
7768 return error_mark_node;
7769 }
7770
9b70c6b0
PC
7771 if (declspecs->conflicting_specifiers_p)
7772 {
7773 error ("conflicting specifiers in declaration of %qs", name);
7774 return error_mark_node;
7775 }
7776
62d1db17
MM
7777 /* Extract the basic type from the decl-specifier-seq. */
7778 type = declspecs->type;
7779 if (type == error_mark_node)
2cfe82fe
ZW
7780 {
7781 type = NULL_TREE;
7782 type_was_error_mark_node = true;
7783 }
62d1db17
MM
7784 /* If the entire declaration is itself tagged as deprecated then
7785 suppress reports of deprecated items. */
7786 if (type && TREE_DEPRECATED (type)
7787 && deprecated_state != DEPRECATED_SUPPRESS)
7788 warn_deprecated_use (type);
7789 if (type && TREE_CODE (type) == TYPE_DECL)
8d08fdba 7790 {
62d1db17
MM
7791 typedef_decl = type;
7792 type = TREE_TYPE (typedef_decl);
823dd937
JM
7793 if (TREE_DEPRECATED (type)
7794 && DECL_ARTIFICIAL (typedef_decl)
7795 && deprecated_state != DEPRECATED_SUPPRESS)
7796 warn_deprecated_use (type);
62d1db17
MM
7797 }
7798 /* No type at all: default to `int', and set DEFAULTED_INT
7799 because it was not a user-defined typedef. */
1ff3c076 7800 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
62d1db17
MM
7801 {
7802 /* These imply 'int'. */
7803 type = integer_type_node;
7804 defaulted_int = 1;
7805 }
7806 /* Gather flags. */
7807 explicit_int = declspecs->explicit_int_p;
7808 explicit_char = declspecs->explicit_char_p;
7a1f3f5f 7809
8d6e459d
NS
7810#if 0
7811 /* See the code below that used this. */
7812 if (typedef_decl)
7813 decl_attr = DECL_ATTRIBUTES (typedef_decl);
7814#endif
8d08fdba
MS
7815 typedef_type = type;
7816
a3203465 7817
44d10c10
PB
7818 if (sfk != sfk_conversion)
7819 ctor_return_type = ctype;
7820
3dbc07b6
MM
7821 if (sfk != sfk_none)
7822 type = check_special_function_return_type (sfk, type,
3dbc07b6
MM
7823 ctor_return_type);
7824 else if (type == NULL_TREE)
8d08fdba 7825 {
3dbc07b6
MM
7826 int is_main;
7827
8d08fdba 7828 explicit_int = -1;
3dbc07b6 7829
0fd0b7ee
JM
7830 /* We handle `main' specially here, because 'main () { }' is so
7831 common. With no options, it is allowed. With -Wreturn-type,
7832 it is a warning. It is only an error with -pedantic-errors. */
3dbc07b6 7833 is_main = (funcdef_flag
7437519c 7834 && dname && MAIN_NAME_P (dname)
3dbc07b6
MM
7835 && ctype == NULL_TREE
7836 && in_namespace == NULL_TREE
7837 && current_namespace == global_namespace);
7838
2cfe82fe
ZW
7839 if (type_was_error_mark_node)
7840 /* We've already issued an error, don't complain more. */;
7841 else if (in_system_header || flag_ms_extensions)
3dbc07b6 7842 /* Allow it, sigh. */;
37ec60ed 7843 else if (! is_main)
cbe5f3b3 7844 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
37ec60ed 7845 else if (pedantic)
509c9d60 7846 pedwarn (input_location, OPT_pedantic,
fcf73884 7847 "ISO C++ forbids declaration of %qs with no type", name);
b10fc6f5
GDR
7848 else
7849 warning (OPT_Wreturn_type,
7850 "ISO C++ forbids declaration of %qs with no type", name);
41eff652 7851
3dbc07b6 7852 type = integer_type_node;
51c184be 7853 }
caf93cb0 7854
8d08fdba
MS
7855 ctype = NULL_TREE;
7856
7857 /* Now process the modifiers that were specified
7858 and check for invalid combinations. */
7859
7860 /* Long double is a special combination. */
3cc189f5 7861 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8d08fdba 7862 {
1ff3c076 7863 long_p = false;
68642fb6 7864 type = build_qualified_type (long_double_type_node,
89d684bb 7865 cp_type_quals (type));
8d08fdba
MS
7866 }
7867
7868 /* Check all other uses of type modifiers. */
7869
1ff3c076 7870 if (unsigned_p || signed_p || long_p || short_p)
8d08fdba
MS
7871 {
7872 int ok = 0;
7873
3cc189f5
VR
7874 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
7875 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
1ff3c076 7876 else if (signed_p && unsigned_p)
3cc189f5
VR
7877 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
7878 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
7879 error ("%<long long%> invalid for %qs", name);
7880 else if (long_p && TREE_CODE (type) == REAL_TYPE)
7881 error ("%<long%> invalid for %qs", name);
7882 else if (short_p && TREE_CODE (type) == REAL_TYPE)
7883 error ("%<short%> invalid for %qs", name);
5d48268f
VR
7884 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
7885 error ("%<long%> or %<short%> invalid for %qs", name);
3cc189f5
VR
7886 else if ((long_p || short_p) && explicit_char)
7887 error ("%<long%> or %<short%> specified with char for %qs", name);
7888 else if (long_p && short_p)
7889 error ("%<long%> and %<short%> specified together for %qs", name);
b6baa67d
KVH
7890 else if (type == char16_type_node || type == char32_type_node)
7891 {
7892 if (signed_p || unsigned_p)
7893 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7894 else if (short_p || long_p)
7895 error ("%<short%> or %<long%> invalid for %qs", name);
7896 }
8d08fdba
MS
7897 else
7898 {
7899 ok = 1;
37c46b43 7900 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8d08fdba 7901 {
509c9d60 7902 pedwarn (input_location, OPT_pedantic,
fcf73884 7903 "long, short, signed or unsigned used invalidly for %qs",
8d08fdba
MS
7904 name);
7905 if (flag_pedantic_errors)
7906 ok = 0;
7907 }
7908 }
7909
7910 /* Discard the type modifiers if they are invalid. */
7911 if (! ok)
7912 {
1ff3c076
MM
7913 unsigned_p = false;
7914 signed_p = false;
7915 long_p = false;
7916 short_p = false;
8d08fdba
MS
7917 longlong = 0;
7918 }
7919 }
7920
7921 /* Decide whether an integer type is signed or not.
7922 Optionally treat bitfields as signed by default. */
1ff3c076 7923 if (unsigned_p
b89c5a7b
MM
7924 /* [class.bit]
7925
7926 It is implementation-defined whether a plain (neither
7927 explicitly signed or unsigned) char, short, int, or long
7928 bit-field is signed or unsigned.
68642fb6 7929
b89c5a7b
MM
7930 Naturally, we extend this to long long as well. Note that
7931 this does not include wchar_t. */
7932 || (bitfield && !flag_signed_bitfields
1ff3c076 7933 && !signed_p
b89c5a7b
MM
7934 /* A typedef for plain `int' without `signed' can be
7935 controlled just like plain `int', but a typedef for
7936 `signed int' cannot be so controlled. */
68642fb6 7937 && !(typedef_decl
29bbeb1c 7938 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
b38a05d0 7939 && TREE_CODE (type) == INTEGER_TYPE
29bbeb1c 7940 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8d08fdba
MS
7941 {
7942 if (longlong)
7943 type = long_long_unsigned_type_node;
1ff3c076 7944 else if (long_p)
8d08fdba 7945 type = long_unsigned_type_node;
1ff3c076 7946 else if (short_p)
8d08fdba
MS
7947 type = short_unsigned_type_node;
7948 else if (type == char_type_node)
7949 type = unsigned_char_type_node;
7950 else if (typedef_decl)
ca5ba2a3 7951 type = unsigned_type_for (type);
8d08fdba
MS
7952 else
7953 type = unsigned_type_node;
7954 }
1ff3c076 7955 else if (signed_p && type == char_type_node)
8d08fdba
MS
7956 type = signed_char_type_node;
7957 else if (longlong)
7958 type = long_long_integer_type_node;
1ff3c076 7959 else if (long_p)
8d08fdba 7960 type = long_integer_type_node;
1ff3c076 7961 else if (short_p)
8d08fdba
MS
7962 type = short_integer_type_node;
7963
62d1db17 7964 if (declspecs->specs[(int)ds_complex])
37c46b43 7965 {
1ff3c076 7966 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
2d01edd7 7967 error ("complex invalid for %qs", name);
37c46b43
MS
7968 /* If we just have "complex", it is equivalent to
7969 "complex double", but if any modifiers at all are specified it is
7970 the complex form of TYPE. E.g, "complex short" is
7971 "complex short int". */
7972
1ff3c076
MM
7973 else if (defaulted_int && ! longlong
7974 && ! (long_p || short_p || signed_p || unsigned_p))
37c46b43
MS
7975 type = complex_double_type_node;
7976 else if (type == integer_type_node)
7977 type = complex_integer_type_node;
7978 else if (type == float_type_node)
7979 type = complex_float_type_node;
7980 else if (type == double_type_node)
7981 type = complex_double_type_node;
7982 else if (type == long_double_type_node)
7983 type = complex_long_double_type_node;
7984 else
7985 type = build_complex_type (type);
7986 }
7987
4f2b0fb2 7988 type_quals = TYPE_UNQUALIFIED;
62d1db17 7989 if (declspecs->specs[(int)ds_const])
4f2b0fb2 7990 type_quals |= TYPE_QUAL_CONST;
62d1db17 7991 if (declspecs->specs[(int)ds_volatile])
4f2b0fb2 7992 type_quals |= TYPE_QUAL_VOLATILE;
62d1db17 7993 if (declspecs->specs[(int)ds_restrict])
4f2b0fb2
NS
7994 type_quals |= TYPE_QUAL_RESTRICT;
7995 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
2d01edd7 7996 error ("qualifiers are not allowed on declaration of %<operator %T%>",
0cbd7506 7997 ctor_return_type);
3ac3d9ea 7998
c8094d83 7999 if (TREE_CODE (type) == FUNCTION_TYPE
9804209d
DG
8000 && type_quals != TYPE_UNQUALIFIED)
8001 {
8002 /* This was an error in C++98 (cv-qualifiers cannot be added to
0cbd7506
MS
8003 a function type), but DR 295 makes the code well-formed by
8004 dropping the extra qualifiers. */
9804209d 8005 if (pedantic)
0cbd7506
MS
8006 {
8007 tree bad_type = build_qualified_type (type, type_quals);
509c9d60 8008 pedwarn (input_location, OPT_pedantic,
fcf73884 8009 "ignoring %qV qualifiers added to function type %qT",
0cbd7506
MS
8010 bad_type, type);
8011 }
9804209d
DG
8012 type_quals = TYPE_UNQUALIFIED;
8013 }
4f2b0fb2
NS
8014 type_quals |= cp_type_quals (type);
8015 type = cp_build_qualified_type_real
8016 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
23fca1f5 8017 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
4f2b0fb2
NS
8018 /* We might have ignored or rejected some of the qualifiers. */
8019 type_quals = cp_type_quals (type);
caf93cb0 8020
8d08fdba 8021 staticp = 0;
62d1db17
MM
8022 inlinep = !! declspecs->specs[(int)ds_inline];
8023 virtualp = !! declspecs->specs[(int)ds_virtual];
8024 explicitp = !! declspecs->specs[(int)ds_explicit];
8d08fdba 8025
1ff3c076
MM
8026 storage_class = declspecs->storage_class;
8027 if (storage_class == sc_static)
8d08fdba
MS
8028 staticp = 1 + (decl_context == FIELD);
8029
8030 if (virtualp && staticp == 2)
8031 {
2d01edd7 8032 error ("member %qD cannot be declared both virtual and static", dname);
7e1e0765 8033 storage_class = sc_none;
8d08fdba
MS
8034 staticp = 0;
8035 }
62d1db17 8036 friendp = !! declspecs->specs[(int)ds_friend];
8d08fdba 8037
d1c78882 8038 if (dependent_name && !friendp)
d5614afb 8039 {
d1c78882 8040 error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
13dbe691 8041 return error_mark_node;
d5614afb 8042 }
8d08fdba 8043
62d1db17
MM
8044 /* Issue errors about use of storage classes for parameters. */
8045 if (decl_context == PARM)
8d08fdba 8046 {
62d1db17 8047 if (declspecs->specs[(int)ds_typedef])
709f9dcf
VR
8048 {
8049 error ("typedef declaration invalid in parameter declaration");
8050 return error_mark_node;
8051 }
1ff3c076
MM
8052 else if (storage_class == sc_static
8053 || storage_class == sc_extern
8054 || thread_p)
8251199e 8055 error ("storage class specifiers invalid in parameter declarations");
8d08fdba
MS
8056 }
8057
8058 /* Give error if `virtual' is used outside of class declaration. */
b7484fbe
MS
8059 if (virtualp
8060 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba 8061 {
bcac2b89 8062 error ("%<virtual%> outside class declaration");
8d08fdba
MS
8063 virtualp = 0;
8064 }
8d08fdba
MS
8065
8066 /* Static anonymous unions are dealt with here. */
8067 if (staticp && decl_context == TYPENAME
62d1db17
MM
8068 && declspecs->type
8069 && ANON_AGGR_TYPE_P (declspecs->type))
8d08fdba
MS
8070 decl_context = FIELD;
8071
8d08fdba
MS
8072 /* Warn about storage classes that are invalid for certain
8073 kinds of declarations (parameters, typenames, etc.). */
3e66d096
JJ
8074 if (thread_p
8075 && ((storage_class
8076 && storage_class != sc_extern
8077 && storage_class != sc_static)
8078 || declspecs->specs[(int)ds_typedef]))
8079 {
8080 error ("multiple storage classes in declaration of %qs", name);
8081 thread_p = false;
8082 }
9b70c6b0
PC
8083 if (decl_context != NORMAL
8084 && ((storage_class != sc_none
8085 && storage_class != sc_mutable)
8086 || thread_p))
8d08fdba 8087 {
db5ae43f 8088 if ((decl_context == PARM || decl_context == CATCHPARM)
1ff3c076
MM
8089 && (storage_class == sc_register
8090 || storage_class == sc_auto))
8d08fdba 8091 ;
62d1db17 8092 else if (declspecs->specs[(int)ds_typedef])
fc378698 8093 ;
8d08fdba 8094 else if (decl_context == FIELD
f4f206f4 8095 /* C++ allows static class elements. */
1ff3c076 8096 && storage_class == sc_static)
d363e7bf
AJ
8097 /* C++ also allows inlines and signed and unsigned elements,
8098 but in those cases we don't come in here. */
8d08fdba
MS
8099 ;
8100 else
8101 {
8102 if (decl_context == FIELD)
389c6c8b 8103 error ("storage class specified for %qs", name);
8d08fdba 8104 else
b9d12519
KG
8105 {
8106 if (decl_context == PARM || decl_context == CATCHPARM)
2d01edd7 8107 error ("storage class specified for parameter %qs", name);
b9d12519
KG
8108 else
8109 error ("storage class specified for typename");
8110 }
1ff3c076
MM
8111 if (storage_class == sc_register
8112 || storage_class == sc_auto
8113 || storage_class == sc_extern
8114 || thread_p)
8115 storage_class = sc_none;
8d08fdba
MS
8116 }
8117 }
1ff3c076 8118 else if (storage_class == sc_extern && funcdef_flag
a9aedbc2 8119 && ! toplevel_bindings_p ())
2d01edd7 8120 error ("nested function %qs declared %<extern%>", name);
a9aedbc2 8121 else if (toplevel_bindings_p ())
8d08fdba 8122 {
1ff3c076 8123 if (storage_class == sc_auto)
2d01edd7 8124 error ("top-level declaration of %qs specifies %<auto%>", name);
8d08fdba 8125 }
1ff3c076
MM
8126 else if (thread_p
8127 && storage_class != sc_extern
8128 && storage_class != sc_static)
7a1f3f5f 8129 {
2d01edd7 8130 error ("function-scope %qs implicitly auto and declared %<__thread%>",
7a1f3f5f 8131 name);
1ff3c076 8132 thread_p = false;
7a1f3f5f 8133 }
8d08fdba 8134
1ff3c076 8135 if (storage_class && friendp)
ff7437d0
SM
8136 {
8137 error ("storage class specifiers invalid in friend function declarations");
8138 storage_class = sc_none;
8139 staticp = 0;
8140 }
909e536a 8141
058b15c1
MM
8142 if (!id_declarator)
8143 unqualified_id = NULL_TREE;
8144 else
8d08fdba 8145 {
1d786913 8146 unqualified_id = id_declarator->u.id.unqualified_name;
058b15c1 8147 switch (TREE_CODE (unqualified_id))
8d08fdba 8148 {
058b15c1 8149 case BIT_NOT_EXPR:
caf93cb0 8150 unqualified_id
058b15c1
MM
8151 = constructor_name (TREE_OPERAND (unqualified_id, 0));
8152 break;
caf93cb0 8153
058b15c1
MM
8154 case IDENTIFIER_NODE:
8155 case TEMPLATE_ID_EXPR:
52fbc847 8156 break;
caf93cb0 8157
058b15c1 8158 default:
8dc2b103 8159 gcc_unreachable ();
058b15c1
MM
8160 }
8161 }
52fbc847 8162
058b15c1
MM
8163 /* Determine the type of the entity declared by recurring on the
8164 declarator. */
f4f18103 8165 for (; declarator; declarator = declarator->declarator)
058b15c1
MM
8166 {
8167 const cp_declarator *inner_declarator;
8168 tree attrs;
8d08fdba 8169
058b15c1
MM
8170 if (type == error_mark_node)
8171 return error_mark_node;
c1b177ec 8172
058b15c1
MM
8173 attrs = declarator->attributes;
8174 if (attrs)
8175 {
8176 int attr_flags;
caf93cb0 8177
058b15c1
MM
8178 attr_flags = 0;
8179 if (declarator == NULL || declarator->kind == cdk_id)
8180 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8181 if (declarator->kind == cdk_function)
8182 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8183 if (declarator->kind == cdk_array)
8184 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8185 returned_attrs = decl_attributes (&type,
8186 chainon (returned_attrs, attrs),
8187 attr_flags);
8188 }
8189
f4f18103
MM
8190 if (declarator->kind == cdk_id)
8191 break;
8192
8193 inner_declarator = declarator->declarator;
8194
058b15c1
MM
8195 switch (declarator->kind)
8196 {
8197 case cdk_array:
caf93cb0 8198 type = create_array_type_for_decl (dname, type,
058b15c1 8199 declarator->u.array.bounds);
8d08fdba
MS
8200 break;
8201
058b15c1 8202 case cdk_function:
8d08fdba
MS
8203 {
8204 tree arg_types;
f376e137 8205 int funcdecl_p;
8d08fdba
MS
8206
8207 /* Declaring a function type.
8208 Make sure we have a valid type for the function to return. */
8d08fdba 8209
1891dec4
DM
8210 if (type_quals != TYPE_UNQUALIFIED)
8211 {
8212 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
5db2e9ca 8213 warning (OPT_Wignored_qualifiers,
1891dec4
DM
8214 "type qualifiers ignored on function return type");
8215 /* We now know that the TYPE_QUALS don't apply to the
8216 decl, but to its return type. */
8217 type_quals = TYPE_UNQUALIFIED;
8218 set_no_warning = true;
8219 }
8d08fdba 8220
e3276457 8221 /* Error about some types functions can't return. */
8d08fdba
MS
8222
8223 if (TREE_CODE (type) == FUNCTION_TYPE)
8224 {
2d01edd7 8225 error ("%qs declared as function returning a function", name);
e3276457 8226 return error_mark_node;
8d08fdba
MS
8227 }
8228 if (TREE_CODE (type) == ARRAY_TYPE)
8229 {
2d01edd7 8230 error ("%qs declared as function returning an array", name);
e3276457 8231 return error_mark_node;
8d08fdba
MS
8232 }
8233
b7484fbe 8234 /* Pick up type qualifiers which should be applied to `this'. */
e2537f2c 8235 memfn_quals = declarator->u.function.qualifiers;
b7484fbe 8236
c11b6f21 8237 /* Pick up the exception specifications. */
058b15c1 8238 raises = declarator->u.function.exception_specification;
c11b6f21 8239
4f48b9c1
JJ
8240 /* Say it's a definition only for the CALL_EXPR
8241 closest to the identifier. */
8242 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
8243
f57ca1ea 8244 /* Handle a late-specified return type. */
4f48b9c1
JJ
8245 if (funcdecl_p)
8246 {
8247 if (type_uses_auto (type))
8248 {
8249 if (!declarator->u.function.late_return_type)
8250 {
8251 error ("%qs function uses auto type specifier without"
8252 " late return type", name);
8253 return error_mark_node;
8254 }
8255 else if (!is_auto (type))
8256 {
8257 error ("%qs function with late return type not using"
8258 " auto type specifier as its type", name);
8259 return error_mark_node;
8260 }
8261 }
8262 else if (declarator->u.function.late_return_type)
8263 {
8264 error ("%qs function with late return type not declared"
8265 " with auto type specifier", name);
8266 return error_mark_node;
8267 }
8268 }
f57ca1ea
JM
8269 type = splice_late_return_type
8270 (type, declarator->u.function.late_return_type);
8271 if (type == error_mark_node)
8272 return error_mark_node;
8273
8d08fdba
MS
8274 if (ctype == NULL_TREE
8275 && decl_context == FIELD
f376e137 8276 && funcdecl_p
8d08fdba
MS
8277 && (friendp == 0 || dname == current_class_name))
8278 ctype = current_class_type;
8279
058b15c1
MM
8280 if (ctype && (sfk == sfk_constructor
8281 || sfk == sfk_destructor))
8d08fdba
MS
8282 {
8283 /* We are within a class's scope. If our declarator name
8284 is the same as the class name, and we are defining
8285 a function, then it is a constructor/destructor, and
8286 therefore returns a void type. */
3db45ab5 8287
e2537f2c
MM
8288 /* ISO C++ 12.4/2. A destructor may not be declared
8289 const or volatile. A destructor may not be
8290 static.
3db45ab5 8291
e2537f2c
MM
8292 ISO C++ 12.1. A constructor may not be declared
8293 const or volatile. A constructor may not be
8294 virtual. A constructor may not be static. */
3db45ab5 8295 if (staticp == 2)
e2537f2c
MM
8296 error ((flags == DTOR_FLAG)
8297 ? "destructor cannot be static member function"
8298 : "constructor cannot be static member function");
8299 if (memfn_quals)
8d08fdba 8300 {
e2537f2c
MM
8301 error ((flags == DTOR_FLAG)
8302 ? "destructors may not be cv-qualified"
8303 : "constructors may not be cv-qualified");
8304 memfn_quals = TYPE_UNQUALIFIED;
8d08fdba 8305 }
e2537f2c
MM
8306
8307 if (decl_context == FIELD
8308 && !member_function_or_else (ctype,
8309 current_class_type,
8310 flags))
13dbe691 8311 return error_mark_node;
e2537f2c
MM
8312
8313 if (flags != DTOR_FLAG)
8d08fdba 8314 {
e2537f2c 8315 /* It's a constructor. */
db5ae43f
MS
8316 if (explicitp == 1)
8317 explicitp = 2;
8d08fdba
MS
8318 if (virtualp)
8319 {
cbe5f3b3 8320 permerror (input_location, "constructors cannot be declared virtual");
8d08fdba
MS
8321 virtualp = 0;
8322 }
7137605e
MM
8323 if (decl_context == FIELD
8324 && sfk != sfk_constructor)
13dbe691 8325 return error_mark_node;
8d08fdba
MS
8326 }
8327 if (decl_context == FIELD)
8328 staticp = 0;
8329 }
b7484fbe 8330 else if (friendp)
8d08fdba 8331 {
b7484fbe 8332 if (initialized)
2d01edd7 8333 error ("can't initialize friend function %qs", name);
b7484fbe
MS
8334 if (virtualp)
8335 {
8336 /* Cannot be both friend and virtual. */
8251199e 8337 error ("virtual functions cannot be friends");
b7484fbe
MS
8338 friendp = 0;
8339 }
28cbf42c 8340 if (decl_context == NORMAL)
8251199e 8341 error ("friend declaration not in class definition");
28cbf42c 8342 if (current_function_decl && funcdef_flag)
2d01edd7 8343 error ("can't define friend function %qs in a local "
0cbd7506
MS
8344 "class definition",
8345 name);
8d08fdba
MS
8346 }
8347
caf93cb0 8348 arg_types = grokparms (declarator->u.function.parameters,
058b15c1 8349 &parms);
8d08fdba 8350
058b15c1
MM
8351 if (inner_declarator
8352 && inner_declarator->kind == cdk_id
8353 && inner_declarator->u.id.sfk == sfk_destructor
8354 && arg_types != void_list_node)
8d08fdba 8355 {
058b15c1
MM
8356 error ("destructors may not have parameters");
8357 arg_types = void_list_node;
8358 parms = NULL_TREE;
8d08fdba 8359 }
caf93cb0 8360
d22c8596 8361 type = build_function_type (type, arg_types);
8d08fdba
MS
8362 }
8363 break;
8364
058b15c1
MM
8365 case cdk_pointer:
8366 case cdk_reference:
8367 case cdk_ptrmem:
8d08fdba
MS
8368 /* Filter out pointers-to-references and references-to-references.
8369 We can get these if a TYPE_DECL is used. */
8370
8371 if (TREE_CODE (type) == REFERENCE_TYPE)
8372 {
8af2fec4
RY
8373 if (declarator->kind != cdk_reference)
8374 {
8375 error ("cannot declare pointer to %q#T", type);
8376 type = TREE_TYPE (type);
8377 }
8378
8379 /* In C++0x, we allow reference to reference declarations
8380 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
8381 and template type arguments [14.3.1/4 temp.arg.type]. The
8382 check for direct reference to reference declarations, which
8383 are still forbidden, occurs below. Reasoning behind the change
8384 can be found in DR106, DR540, and the rvalue reference
8385 proposals. */
c1ae8be5 8386 else if (cxx_dialect == cxx98)
8af2fec4
RY
8387 {
8388 error ("cannot declare reference to %q#T", type);
8389 type = TREE_TYPE (type);
8390 }
a5894242 8391 }
058b15c1
MM
8392 else if (VOID_TYPE_P (type))
8393 {
8394 if (declarator->kind == cdk_reference)
2d01edd7 8395 error ("cannot declare reference to %q#T", type);
058b15c1 8396 else if (declarator->kind == cdk_ptrmem)
2d01edd7 8397 error ("cannot declare pointer to %q#T member", type);
058b15c1 8398 }
61a127b3 8399
91063b51
MM
8400 /* We now know that the TYPE_QUALS don't apply to the decl,
8401 but to the target of the pointer. */
8402 type_quals = TYPE_UNQUALIFIED;
8d08fdba 8403
058b15c1 8404 if (declarator->kind == cdk_ptrmem
1b021ff4
JJ
8405 && (TREE_CODE (type) == FUNCTION_TYPE
8406 || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
058b15c1 8407 {
e2537f2c 8408 memfn_quals |= cp_type_quals (type);
3db45ab5 8409 type = build_memfn_type (type,
e2537f2c
MM
8410 declarator->u.pointer.class_type,
8411 memfn_quals);
8412 memfn_quals = TYPE_UNQUALIFIED;
058b15c1
MM
8413 }
8414
8415 if (declarator->kind == cdk_reference)
8d08fdba 8416 {
8af2fec4
RY
8417 /* In C++0x, the type we are creating a reference to might be
8418 a typedef which is itself a reference type. In that case,
8419 we follow the reference collapsing rules in
8420 [7.1.3/8 dcl.typedef] to create the final reference type:
8421
8422 "If a typedef TD names a type that is a reference to a type
8423 T, an attempt to create the type 'lvalue reference to cv TD'
8424 creates the type 'lvalue reference to T,' while an attempt
8425 to create the type "rvalue reference to cv TD' creates the
8426 type TD."
8427 */
dd29188b 8428 if (!VOID_TYPE_P (type))
8af2fec4
RY
8429 type = cp_build_reference_type
8430 ((TREE_CODE (type) == REFERENCE_TYPE
8431 ? TREE_TYPE (type) : type),
8432 (declarator->u.reference.rvalue_ref
8433 && (TREE_CODE(type) != REFERENCE_TYPE
8434 || TYPE_REF_IS_RVALUE (type))));
8435
8436 /* In C++0x, we need this check for direct reference to
8437 reference declarations, which are forbidden by
8438 [8.3.2/5 dcl.ref]. Reference to reference declarations
8439 are only allowed indirectly through typedefs and template
8440 type arguments. Example:
8441
8442 void foo(int & &); // invalid ref-to-ref decl
8443
8444 typedef int & int_ref;
8445 void foo(int_ref &); // valid ref-to-ref decl
8446 */
8447 if (inner_declarator && inner_declarator->kind == cdk_reference)
8448 error ("cannot declare reference to %q#T, which is not "
8449 "a typedef or a template type argument", type);
8d08fdba
MS
8450 }
8451 else if (TREE_CODE (type) == METHOD_TYPE)
d8f8dca1 8452 type = build_ptrmemfunc_type (build_pointer_type (type));
058b15c1 8453 else if (declarator->kind == cdk_ptrmem)
f4ed7d21 8454 {
63c9a190
MM
8455 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
8456 != NAMESPACE_DECL);
8457 if (declarator->u.pointer.class_type == error_mark_node)
4230cec2
NS
8458 /* We will already have complained. */
8459 type = error_mark_node;
f4ed7d21
NS
8460 else
8461 type = build_ptrmem_type (declarator->u.pointer.class_type,
8462 type);
8463 }
8d08fdba
MS
8464 else
8465 type = build_pointer_type (type);
8466
8467 /* Process a list of type modifier keywords (such as
8468 const or volatile) that were given inside the `*' or `&'. */
8469
058b15c1 8470 if (declarator->u.pointer.qualifiers)
8d08fdba 8471 {
caf93cb0
EC
8472 type
8473 = cp_build_qualified_type (type,
3c01e5df 8474 declarator->u.pointer.qualifiers);
4f2b0fb2 8475 type_quals = cp_type_quals (type);
8d08fdba 8476 }
8d08fdba
MS
8477 ctype = NULL_TREE;
8478 break;
8479
058b15c1
MM
8480 case cdk_error:
8481 break;
8d08fdba 8482
058b15c1 8483 default:
8dc2b103 8484 gcc_unreachable ();
058b15c1
MM
8485 }
8486 }
caf93cb0 8487
058b15c1
MM
8488 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
8489 && TREE_CODE (type) != FUNCTION_TYPE
8490 && TREE_CODE (type) != METHOD_TYPE)
8491 {
2d01edd7 8492 error ("template-id %qD used as a declarator",
058b15c1
MM
8493 unqualified_id);
8494 unqualified_id = dname;
8495 }
386b8a85 8496
9c12301f
MM
8497 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
8498 qualified with a class-name, turn it into a METHOD_TYPE, unless
8499 we know that the function is static. We take advantage of this
8500 opportunity to do other processing that pertains to entities
8501 explicitly declared to be class members. Note that if DECLARATOR
8502 is non-NULL, we know it is a cdk_id declarator; otherwise, we
8503 would not have exited the loop above. */
caf93cb0 8504 if (declarator
1d786913
MM
8505 && declarator->u.id.qualifying_scope
8506 && TYPE_P (declarator->u.id.qualifying_scope))
058b15c1
MM
8507 {
8508 tree t;
8d08fdba 8509
1d786913
MM
8510 ctype = declarator->u.id.qualifying_scope;
8511 ctype = TYPE_MAIN_VARIANT (ctype);
058b15c1
MM
8512 t = ctype;
8513 while (t != NULL_TREE && CLASS_TYPE_P (t))
8514 {
8515 /* You're supposed to have one `template <...>' for every
8516 template class, but you don't need one for a full
8517 specialization. For example:
8d08fdba 8518
058b15c1
MM
8519 template <class T> struct S{};
8520 template <> struct S<int> { void f(); };
8521 void S<int>::f () {}
28cbf42c 8522
058b15c1
MM
8523 is correct; there shouldn't be a `template <>' for the
8524 definition of `S<int>::f'. */
f0d60e22
MM
8525 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
8526 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
8527 /* T is an explicit (not partial) specialization. All
8528 containing classes must therefore also be explicitly
8529 specialized. */
8530 break;
8531 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
058b15c1
MM
8532 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
8533 template_count += 1;
28cbf42c 8534
058b15c1
MM
8535 t = TYPE_MAIN_DECL (t);
8536 t = DECL_CONTEXT (t);
8537 }
8d08fdba 8538
058b15c1 8539 if (ctype == current_class_type)
59e7c84c
VR
8540 {
8541 if (friendp)
b46ce77f 8542 {
cbe5f3b3 8543 permerror (input_location, "member functions are implicitly friends of their class");
b46ce77f
SM
8544 friendp = 0;
8545 }
59e7c84c 8546 else
cbe5f3b3 8547 permerror (declarator->id_loc,
7e99f74b
MLI
8548 "extra qualification %<%T::%> on member %qs",
8549 ctype, name);
59e7c84c 8550 }
fa6098f8
MM
8551 else if (/* If the qualifying type is already complete, then we
8552 can skip the following checks. */
8553 !COMPLETE_TYPE_P (ctype)
cc328145
MM
8554 && (/* If the function is being defined, then
8555 qualifying type must certainly be complete. */
3db45ab5 8556 funcdef_flag
cc328145
MM
8557 /* A friend declaration of "T::f" is OK, even if
8558 "T" is a template parameter. But, if this
8559 function is not a friend, the qualifying type
8560 must be a class. */
8561 || (!friendp && !CLASS_TYPE_P (ctype))
8562 /* For a declaration, the type need not be
8563 complete, if either it is dependent (since there
8564 is no meaningful definition of complete in that
8565 case) or the qualifying class is currently being
8566 defined. */
fa6098f8
MM
8567 || !(dependent_type_p (ctype)
8568 || currently_open_class (ctype)))
9f9a713e 8569 /* Check that the qualifying type is complete. */
fa6098f8
MM
8570 && !complete_type_or_else (ctype, NULL_TREE))
8571 return error_mark_node;
058b15c1
MM
8572 else if (TREE_CODE (type) == FUNCTION_TYPE)
8573 {
1d786913 8574 tree sname = declarator->u.id.unqualified_name;
50ad9642 8575
357d956e
MM
8576 if (current_class_type
8577 && (!friendp || funcdef_flag))
8578 {
8579 error (funcdef_flag
8580 ? "cannot define member function %<%T::%s%> within %<%T%>"
8581 : "cannot declare member function %<%T::%s%> within %<%T%>",
8582 ctype, name, current_class_type);
8583 return error_mark_node;
8584 }
8585
058b15c1
MM
8586 if (TREE_CODE (sname) == IDENTIFIER_NODE
8587 && NEW_DELETE_OPNAME_P (sname))
8588 /* Overloaded operator new and operator delete
8589 are always static functions. */
8590 ;
058b15c1 8591 else
e2537f2c 8592 type = build_memfn_type (type, ctype, memfn_quals);
058b15c1 8593 }
62d1db17 8594 else if (declspecs->specs[(int)ds_typedef]
fa6098f8 8595 && current_class_type)
058b15c1 8596 {
fa6098f8
MM
8597 error ("cannot declare member %<%T::%s%> within %qT",
8598 ctype, name, current_class_type);
058b15c1 8599 return error_mark_node;
8d08fdba
MS
8600 }
8601 }
8602
9c12301f
MM
8603 /* Now TYPE has the actual type. */
8604
91d231cb 8605 if (returned_attrs)
1eab9b56 8606 {
91d231cb
JM
8607 if (attrlist)
8608 *attrlist = chainon (returned_attrs, *attrlist);
1eab9b56 8609 else
91d231cb 8610 attrlist = &returned_attrs;
1eab9b56
JM
8611 }
8612
5d80a306
DG
8613 /* Handle parameter packs. */
8614 if (parameter_pack_p)
8615 {
8616 if (decl_context == PARM)
8617 /* Turn the type into a pack expansion.*/
8618 type = make_pack_expansion (type);
8619 else
8620 error ("non-parameter %qs cannot be a parameter pack", name);
8621 }
8622
55b3d665
JM
8623 /* Did array size calculations overflow? */
8624
8625 if (TREE_CODE (type) == ARRAY_TYPE
8626 && COMPLETE_TYPE_P (type)
96ce2ac9
JW
8627 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8628 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
55b3d665 8629 {
2d01edd7 8630 error ("size of array %qs is too large", name);
aba649ba 8631 /* If we proceed with the array type as it is, we'll eventually
55b3d665
JM
8632 crash in tree_low_cst(). */
8633 type = error_mark_node;
8634 }
8635
2fff6d71 8636 if ((decl_context == FIELD || decl_context == PARM)
caf93cb0 8637 && !processing_template_decl
5377d5ba 8638 && variably_modified_type_p (type, NULL_TREE))
dac45b5c 8639 {
2fff6d71 8640 if (decl_context == FIELD)
2d01edd7 8641 error ("data member may not have variably modified type %qT", type);
2fff6d71 8642 else
2d01edd7 8643 error ("parameter may not have variably modified type %qT", type);
dac45b5c
MM
8644 type = error_mark_node;
8645 }
8646
34fc957d 8647 if (explicitp == 1 || (explicitp && friendp))
db5ae43f 8648 {
34fc957d 8649 /* [dcl.fct.spec] The explicit specifier shall only be used in
0cbd7506 8650 declarations of constructors within a class definition. */
2d01edd7 8651 error ("only declarations of constructors can be %<explicit%>");
db5ae43f
MS
8652 explicitp = 0;
8653 }
8654
1ff3c076 8655 if (storage_class == sc_mutable)
f30432d7 8656 {
4223f82f 8657 if (decl_context != FIELD || friendp)
0cbd7506 8658 {
2d01edd7 8659 error ("non-member %qs cannot be declared %<mutable%>", name);
1ff3c076 8660 storage_class = sc_none;
0cbd7506 8661 }
62d1db17 8662 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
f30432d7 8663 {
2d01edd7 8664 error ("non-object member %qs cannot be declared %<mutable%>", name);
1ff3c076 8665 storage_class = sc_none;
f30432d7 8666 }
34fc957d 8667 else if (TREE_CODE (type) == FUNCTION_TYPE
0cbd7506
MS
8668 || TREE_CODE (type) == METHOD_TYPE)
8669 {
2d01edd7 8670 error ("function %qs cannot be declared %<mutable%>", name);
1ff3c076 8671 storage_class = sc_none;
0cbd7506 8672 }
f30432d7
MS
8673 else if (staticp)
8674 {
2d01edd7 8675 error ("static %qs cannot be declared %<mutable%>", name);
1ff3c076 8676 storage_class = sc_none;
f30432d7 8677 }
34fc957d
NS
8678 else if (type_quals & TYPE_QUAL_CONST)
8679 {
2d01edd7 8680 error ("const %qs cannot be declared %<mutable%>", name);
1ff3c076 8681 storage_class = sc_none;
34fc957d 8682 }
f30432d7
MS
8683 }
8684
419c6212 8685 /* If this is declaring a typedef name, return a TYPE_DECL. */
62d1db17 8686 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
8d08fdba
MS
8687 {
8688 tree decl;
8689
8690 /* Note that the grammar rejects storage classes
8691 in typenames, fields or parameters. */
eff71ab0
PB
8692 if (current_lang_name == lang_name_java)
8693 TYPE_FOR_JAVA (type) = 1;
3db45ab5 8694
e2537f2c
MM
8695 /* This declaration:
8696
3db45ab5 8697 typedef void f(int) const;
e2537f2c 8698
3db45ab5 8699 declares a function type which is not a member of any
e2537f2c 8700 particular class, but which is cv-qualified; for
3db45ab5 8701 example "f S::*" declares a pointer to a const-qualified
e2537f2c
MM
8702 member function of S. We record the cv-qualification in the
8703 function type. */
8704 if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
771026dd
DG
8705 {
8706 type = cp_build_qualified_type (type, memfn_quals);
8707
8708 /* We have now dealt with these qualifiers. */
8709 memfn_quals = TYPE_UNQUALIFIED;
8710 }
8d08fdba 8711
d2e5ee5c 8712 if (decl_context == FIELD)
e3016344 8713 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
d2e5ee5c 8714 else
e3016344 8715 decl = build_decl (TYPE_DECL, unqualified_id, type);
dcbdf612 8716 if (id_declarator && declarator->u.id.qualifying_scope) {
e3016344 8717 error ("%Jtypedef name may not be a nested-name-specifier", decl);
dcbdf612
SM
8718 TREE_TYPE (decl) = error_mark_node;
8719 }
e3016344
MM
8720
8721 if (decl_context != FIELD)
6bda7a5e 8722 {
6bda7a5e
NS
8723 if (!current_function_decl)
8724 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
1dc82a99 8725 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
c8094d83 8726 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
1dc82a99
MM
8727 (current_function_decl)))
8728 /* The TYPE_DECL is "abstract" because there will be
8729 clones of this constructor/destructor, and there will
8730 be copies of this TYPE_DECL generated in those
8731 clones. */
8732 DECL_ABSTRACT (decl) = 1;
6bda7a5e 8733 }
e3016344 8734 else if (constructor_name_p (unqualified_id, current_class_type))
cbe5f3b3 8735 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
37ec60ed
JW
8736 "as enclosing class",
8737 unqualified_id);
caf93cb0 8738
9188c363
MM
8739 /* If the user declares "typedef struct {...} foo" then the
8740 struct will have an anonymous name. Fill that name in now.
8741 Nothing can refer to it, so nothing needs know about the name
8742 change. */
8d08fdba 8743 if (type != error_mark_node
058b15c1 8744 && unqualified_id
8d08fdba
MS
8745 && TYPE_NAME (type)
8746 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1951a1b6 8747 && TYPE_ANONYMOUS_P (type)
89d684bb 8748 && cp_type_quals (type) == TYPE_UNQUALIFIED)
8d08fdba 8749 {
dcd08efc
JM
8750 tree oldname = TYPE_NAME (type);
8751 tree t;
8752
2c73f9f5 8753 /* Replace the anonymous name with the real name everywhere. */
dcd08efc
JM
8754 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
8755 if (TYPE_NAME (t) == oldname)
8756 TYPE_NAME (t) = decl;
8d08fdba
MS
8757
8758 if (TYPE_LANG_SPECIFIC (type))
8759 TYPE_WAS_ANONYMOUS (type) = 1;
8760
33964bf4
MM
8761 /* If this is a typedef within a template class, the nested
8762 type is a (non-primary) template. The name for the
8763 template needs updating as well. */
8764 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
68642fb6 8765 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
33964bf4
MM
8766 = TYPE_IDENTIFIER (type);
8767
50a6dbd7
JM
8768 /* FIXME remangle member functions; member functions of a
8769 type with external linkage have external linkage. */
fc378698 8770 }
fc378698 8771
1ff3c076 8772 if (signed_p
8d08fdba
MS
8773 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8774 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
8775
3db45ab5 8776 bad_specifiers (decl, "type", virtualp,
e2537f2c 8777 memfn_quals != TYPE_UNQUALIFIED,
c91a56d2
MS
8778 inlinep, friendp, raises != NULL_TREE);
8779
8d08fdba
MS
8780 return decl;
8781 }
8782
8783 /* Detect the case of an array type of unspecified size
8784 which came, as such, direct from a typedef name.
8d6e459d
NS
8785 We must copy the type, so that the array's domain can be
8786 individually set by the object's initializer. */
8d08fdba 8787
8d6e459d
NS
8788 if (type && typedef_type
8789 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
55b3d665 8790 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8d6e459d 8791 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
8d08fdba 8792
969fd501 8793 /* Detect where we're using a typedef of function type to declare a
4546865e 8794 function. PARMS will not be set, so we must create it now. */
caf93cb0 8795
969fd501
NS
8796 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
8797 {
8798 tree decls = NULL_TREE;
8799 tree args;
8800
8801 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
8802 {
8e51619a 8803 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
969fd501
NS
8804
8805 TREE_CHAIN (decl) = decls;
8806 decls = decl;
8807 }
caf93cb0 8808
4546865e 8809 parms = nreverse (decls);
9804209d
DG
8810
8811 if (decl_context != TYPENAME)
0cbd7506
MS
8812 {
8813 /* A cv-qualifier-seq shall only be part of the function type
8814 for a non-static member function. [8.3.5/4 dcl.fct] */
8815 if (cp_type_quals (type) != TYPE_UNQUALIFIED
8816 && (current_class_type == NULL_TREE || staticp) )
8817 {
ebbc3ce1 8818 error (staticp
f88d05c0
DM
8819 ? G_("qualified function types cannot be used to "
8820 "declare static member functions")
8821 : G_("qualified function types cannot be used to "
8822 "declare free functions"));
0cbd7506
MS
8823 type = TYPE_MAIN_VARIANT (type);
8824 }
8825
8826 /* The qualifiers on the function type become the qualifiers on
8827 the non-static member function. */
e2537f2c 8828 memfn_quals |= cp_type_quals (type);
0cbd7506 8829 }
969fd501
NS
8830 }
8831
8d08fdba
MS
8832 /* If this is a type name (such as, in a cast or sizeof),
8833 compute the type and return it now. */
8834
8835 if (decl_context == TYPENAME)
8836 {
8837 /* Note that the grammar rejects storage classes
8838 in typenames, fields or parameters. */
91063b51 8839 if (type_quals != TYPE_UNQUALIFIED)
6eabb241 8840 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
8841
8842 /* Special case: "friend class foo" looks like a TYPENAME context. */
8843 if (friendp)
8844 {
91063b51 8845 if (type_quals != TYPE_UNQUALIFIED)
b7484fbe 8846 {
33bd39a2 8847 error ("type qualifiers specified for friend class declaration");
91063b51 8848 type_quals = TYPE_UNQUALIFIED;
b7484fbe
MS
8849 }
8850 if (inlinep)
8851 {
2d01edd7 8852 error ("%<inline%> specified for friend class declaration");
b7484fbe
MS
8853 inlinep = 0;
8854 }
f2ae0c45 8855
218e0eb6 8856 if (!current_aggr)
4b054b80 8857 {
218e0eb6 8858 /* Don't allow friend declaration without a class-key. */
4b054b80 8859 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
cbe5f3b3 8860 permerror (input_location, "template parameters cannot be friends");
f2ae0c45 8861 else if (TREE_CODE (type) == TYPENAME_TYPE)
cbe5f3b3 8862 permerror (input_location, "friend declaration requires class-key, "
37ec60ed
JW
8863 "i.e. %<friend class %T::%D%>",
8864 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
4b054b80 8865 else
cbe5f3b3 8866 permerror (input_location, "friend declaration requires class-key, "
37ec60ed
JW
8867 "i.e. %<friend %#T%>",
8868 type);
4b054b80 8869 }
b7484fbe
MS
8870
8871 /* Only try to do this stuff if we didn't already give up. */
8872 if (type != integer_type_node)
8873 {
8874 /* A friendly class? */
8875 if (current_class_type)
19db77ce
KL
8876 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8877 /*complain=*/true);
b7484fbe 8878 else
2d01edd7 8879 error ("trying to make class %qT a friend of global scope",
0cbd7506 8880 type);
d363e7bf 8881
b7484fbe
MS
8882 type = void_type_node;
8883 }
8d08fdba 8884 }
e2537f2c 8885 else if (memfn_quals)
8d08fdba 8886 {
8d08fdba
MS
8887 if (ctype == NULL_TREE)
8888 {
41cbc04c 8889 if (TREE_CODE (type) != METHOD_TYPE)
0cbd7506 8890 error ("invalid qualifiers on non-member function type");
41cbc04c 8891 else
0cbd7506 8892 ctype = TYPE_METHOD_BASETYPE (type);
41cbc04c
NS
8893 }
8894 if (ctype)
e2537f2c 8895 type = build_memfn_type (type, ctype, memfn_quals);
8d08fdba
MS
8896 }
8897
8898 return type;
8899 }
058b15c1 8900 else if (unqualified_id == NULL_TREE && decl_context != PARM
db5ae43f 8901 && decl_context != CATCHPARM
8d08fdba
MS
8902 && TREE_CODE (type) != UNION_TYPE
8903 && ! bitfield)
8904 {
2d01edd7 8905 error ("abstract declarator %qT used as declaration", type);
22ab714d 8906 return error_mark_node;
8d08fdba
MS
8907 }
8908
62e19030
MM
8909 /* Only functions may be declared using an operator-function-id. */
8910 if (unqualified_id
8911 && IDENTIFIER_OPNAME_P (unqualified_id)
8912 && TREE_CODE (type) != FUNCTION_TYPE
8913 && TREE_CODE (type) != METHOD_TYPE)
8d08fdba 8914 {
62e19030
MM
8915 error ("declaration of %qD as non-function", unqualified_id);
8916 return error_mark_node;
8d08fdba
MS
8917 }
8918
62e19030
MM
8919 /* We don't check parameter types here because we can emit a better
8920 error message later. */
8921 if (decl_context != PARM)
650fcd07
LM
8922 {
8923 type = check_var_type (unqualified_id, type);
8924 if (type == error_mark_node)
8925 return error_mark_node;
8926 }
62e19030 8927
8d08fdba
MS
8928 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
8929 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
8930
14ae7e7d
JM
8931 if (decl_context == PARM || decl_context == CATCHPARM)
8932 {
8933 if (ctype || in_namespace)
2d01edd7 8934 error ("cannot use %<::%> in parameter declaration");
14ae7e7d
JM
8935
8936 /* A parameter declared as an array of T is really a pointer to T.
8937 One declared as a function is really a pointer to a function.
8938 One declared as a member is really a pointer to member. */
8939
8940 if (TREE_CODE (type) == ARRAY_TYPE)
8941 {
8942 /* Transfer const-ness of array into that of type pointed to. */
8943 type = build_pointer_type (TREE_TYPE (type));
91063b51 8944 type_quals = TYPE_UNQUALIFIED;
14ae7e7d
JM
8945 }
8946 else if (TREE_CODE (type) == FUNCTION_TYPE)
8947 type = build_pointer_type (type);
14ae7e7d 8948 }
68642fb6 8949
8d08fdba 8950 {
926ce8bd 8951 tree decl;
8d08fdba
MS
8952
8953 if (decl_context == PARM)
8954 {
058b15c1 8955 decl = cp_build_parm_decl (unqualified_id, type);
8d08fdba 8956
3db45ab5 8957 bad_specifiers (decl, "parameter", virtualp,
e2537f2c 8958 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba 8959 inlinep, friendp, raises != NULL_TREE);
8d08fdba
MS
8960 }
8961 else if (decl_context == FIELD)
8962 {
01bf0f3e
JM
8963 /* The C99 flexible array extension. */
8964 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8965 && TYPE_DOMAIN (type) == NULL_TREE)
8966 {
8967 tree itype = compute_array_index_type (dname, integer_zero_node);
8968 type = build_cplus_array_type (TREE_TYPE (type), itype);
8969 }
8970
8d08fdba
MS
8971 if (type == error_mark_node)
8972 {
8973 /* Happens when declaring arrays of sizes which
8974 are error_mark_node, for example. */
8975 decl = NULL_TREE;
8976 }
997a088c 8977 else if (in_namespace && !friendp)
05008fb9
MM
8978 {
8979 /* Something like struct S { int N::j; }; */
2d01edd7 8980 error ("invalid use of %<::%>");
9a171ca4 8981 return error_mark_node;
05008fb9 8982 }
8d08fdba
MS
8983 else if (TREE_CODE (type) == FUNCTION_TYPE)
8984 {
8985 int publicp = 0;
e1467ff2 8986 tree function_context;
8d08fdba
MS
8987
8988 if (friendp == 0)
8989 {
8990 if (ctype == NULL_TREE)
8991 ctype = current_class_type;
8992
8993 if (ctype == NULL_TREE)
8994 {
2d01edd7 8995 error ("can't make %qD into a method -- not in a class",
058b15c1 8996 unqualified_id);
13dbe691 8997 return error_mark_node;
8d08fdba
MS
8998 }
8999
9000 /* ``A union may [ ... ] not [ have ] virtual functions.''
9001 ARM 9.5 */
9002 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9003 {
2d01edd7 9004 error ("function %qD declared virtual inside a union",
058b15c1 9005 unqualified_id);
13dbe691 9006 return error_mark_node;
8d08fdba
MS
9007 }
9008
058b15c1 9009 if (NEW_DELETE_OPNAME_P (unqualified_id))
8d08fdba
MS
9010 {
9011 if (virtualp)
9012 {
2d01edd7 9013 error ("%qD cannot be declared virtual, since it "
0cbd7506 9014 "is always static",
058b15c1 9015 unqualified_id);
8d08fdba
MS
9016 virtualp = 0;
9017 }
9018 }
9019 else if (staticp < 2)
e2537f2c 9020 type = build_memfn_type (type, ctype, memfn_quals);
8d08fdba
MS
9021 }
9022
88e95ee3 9023 /* Check that the name used for a destructor makes sense. */
6d2989e1 9024 if (sfk == sfk_destructor)
88e95ee3 9025 {
6d2989e1
VR
9026 if (!ctype)
9027 {
9028 gcc_assert (friendp);
9029 error ("expected qualified name in friend declaration "
9030 "for destructor %qD",
9031 id_declarator->u.id.unqualified_name);
9032 return error_mark_node;
9033 }
9034
9035 if (!same_type_p (TREE_OPERAND
9036 (id_declarator->u.id.unqualified_name, 0),
9037 ctype))
9038 {
9039 error ("declaration of %qD as member of %qT",
9040 id_declarator->u.id.unqualified_name, ctype);
9041 return error_mark_node;
9042 }
88e95ee3 9043 }
ac3b1156
JJ
9044 else if (sfk == sfk_constructor && friendp)
9045 {
9046 error ("expected qualified name in friend declaration "
9047 "for constructor %qD",
9048 id_declarator->u.id.unqualified_name);
9049 return error_mark_node;
9050 }
88e95ee3 9051
8d08fdba 9052 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
68642fb6 9053 function_context = (ctype != NULL_TREE) ?
4f1c5b7d 9054 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
e1467ff2
MM
9055 publicp = (! friendp || ! staticp)
9056 && function_context == NULL_TREE;
68642fb6 9057 decl = grokfndecl (ctype, type,
058b15c1
MM
9058 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9059 ? unqualified_id : dname,
4546865e 9060 parms,
058b15c1 9061 unqualified_id,
e2537f2c 9062 virtualp, flags, memfn_quals, raises,
386b8a85 9063 friendp ? -1 : 0, friendp, publicp, inlinep,
27d6592c 9064 sfk,
402b8cf6
AH
9065 funcdef_flag, template_count, in_namespace,
9066 attrlist, declarator->id_loc);
20496fa2 9067 if (decl == NULL_TREE)
ba5719d9 9068 return error_mark_node;
6125f3be
DE
9069#if 0
9070 /* This clobbers the attrs stored in `decl' from `attrlist'. */
91d231cb
JM
9071 /* The decl and setting of decl_attr is also turned off. */
9072 decl = build_decl_attribute_variant (decl, decl_attr);
6125f3be 9073#endif
f0e01782 9074
cc804e51
MM
9075 /* [class.conv.ctor]
9076
9077 A constructor declared without the function-specifier
9078 explicit that can be called with a single parameter
9079 specifies a conversion from the type of its first
9080 parameter to the type of its class. Such a constructor
9081 is called a converting constructor. */
db5ae43f
MS
9082 if (explicitp == 2)
9083 DECL_NONCONVERTING_P (decl) = 1;
cc804e51
MM
9084 else if (DECL_CONSTRUCTOR_P (decl))
9085 {
09357846 9086 /* A constructor with no parms is not a conversion.
e0fff4b3
JM
9087 Ignore any compiler-added parms. */
9088 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
cc804e51 9089
09357846 9090 if (arg_types == void_list_node)
cc804e51
MM
9091 DECL_NONCONVERTING_P (decl) = 1;
9092 }
8d08fdba
MS
9093 }
9094 else if (TREE_CODE (type) == METHOD_TYPE)
9095 {
faae18ab
MS
9096 /* We only get here for friend declarations of
9097 members of other classes. */
8d08fdba
MS
9098 /* All method decls are public, so tell grokfndecl to set
9099 TREE_PUBLIC, also. */
866eb556 9100 decl = grokfndecl (ctype, type,
058b15c1
MM
9101 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9102 ? unqualified_id : dname,
4546865e 9103 parms,
058b15c1 9104 unqualified_id,
e2537f2c 9105 virtualp, flags, memfn_quals, raises,
27d6592c 9106 friendp ? -1 : 0, friendp, 1, 0, sfk,
c8094d83 9107 funcdef_flag, template_count, in_namespace,
402b8cf6
AH
9108 attrlist,
9109 declarator->id_loc);
f0e01782 9110 if (decl == NULL_TREE)
13dbe691 9111 return error_mark_node;
8d08fdba 9112 }
a9f46cbb 9113 else if (!staticp && !dependent_type_p (type)
d0f062fb 9114 && !COMPLETE_TYPE_P (complete_type (type))
8d08fdba
MS
9115 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9116 {
058b15c1 9117 if (unqualified_id)
2d01edd7 9118 error ("field %qD has incomplete type", unqualified_id);
b7484fbe 9119 else
2d01edd7 9120 error ("name %qT has incomplete type", type);
8d08fdba
MS
9121
9122 /* If we're instantiating a template, tell them which
9123 instantiation made the field's type be incomplete. */
9124 if (current_class_type
9125 && TYPE_NAME (current_class_type)
d2e5ee5c 9126 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
62d1db17
MM
9127 && declspecs->type
9128 && declspecs->type == type)
2d01edd7 9129 error (" in instantiation of template %qT",
0cbd7506 9130 current_class_type);
db5ae43f 9131
623c65f1 9132 return error_mark_node;
8d08fdba
MS
9133 }
9134 else
9135 {
9136 if (friendp)
9137 {
2d01edd7 9138 error ("%qE is neither function nor member function; "
0cbd7506 9139 "cannot be declared friend", unqualified_id);
8d08fdba
MS
9140 friendp = 0;
9141 }
9142 decl = NULL_TREE;
9143 }
9144
9145 if (friendp)
9146 {
9147 /* Friends are treated specially. */
9148 if (ctype == current_class_type)
37ec60ed 9149 ; /* We already issued a permerror. */
0cbd7506 9150 else if (decl && DECL_NAME (decl))
8db1028e
NS
9151 {
9152 if (template_class_depth (current_class_type) == 0)
9153 {
9154 decl = check_explicit_specialization
058b15c1 9155 (unqualified_id, decl, template_count,
357d956e 9156 2 * funcdef_flag + 4);
8db1028e
NS
9157 if (decl == error_mark_node)
9158 return error_mark_node;
9159 }
caf93cb0 9160
058b15c1 9161 decl = do_friend (ctype, unqualified_id, decl,
3db45ab5 9162 *attrlist, flags,
e2537f2c 9163 funcdef_flag);
8db1028e
NS
9164 return decl;
9165 }
9166 else
13dbe691 9167 return error_mark_node;
8d08fdba
MS
9168 }
9169
f4f206f4 9170 /* Structure field. It may not be a function, except for C++. */
8d08fdba
MS
9171
9172 if (decl == NULL_TREE)
9173 {
8d08fdba
MS
9174 if (initialized)
9175 {
3ac3d9ea
MM
9176 if (!staticp)
9177 {
9178 /* An attempt is being made to initialize a non-static
9179 member. But, from [class.mem]:
68642fb6 9180
3ac3d9ea
MM
9181 4 A member-declarator can contain a
9182 constant-initializer only if it declares a static
9183 member (_class.static_) of integral or enumeration
68642fb6 9184 type, see _class.static.data_.
3ac3d9ea
MM
9185
9186 This used to be relatively common practice, but
9187 the rest of the compiler does not correctly
9188 handle the initialization unless the member is
9189 static so we make it static below. */
cbe5f3b3 9190 permerror (input_location, "ISO C++ forbids initialization of member %qD",
37ec60ed 9191 unqualified_id);
cbe5f3b3 9192 permerror (input_location, "making %qD static", unqualified_id);
3ac3d9ea
MM
9193 staticp = 1;
9194 }
9195
6ba89f8e
MM
9196 if (uses_template_parms (type))
9197 /* We'll check at instantiation time. */
9198 ;
058b15c1 9199 else if (check_static_variable_definition (unqualified_id,
6ba89f8e
MM
9200 type))
9201 /* If we just return the declaration, crashes
9202 will sometimes occur. We therefore return
72a93143
JM
9203 void_type_node, as if this was a friend
9204 declaration, to cause callers to completely
9205 ignore this declaration. */
13dbe691 9206 return error_mark_node;
8d08fdba
MS
9207 }
9208
3ac3d9ea 9209 if (staticp)
8d08fdba 9210 {
f18a14bc
MM
9211 /* C++ allows static class members. All other work
9212 for this is done by grokfield. */
058b15c1 9213 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
4684cd27
MM
9214 set_linkage_for_static_data_member (decl);
9215 /* Even if there is an in-class initialization, DECL
9216 is considered undefined until an out-of-class
9217 definition is provided. */
9218 DECL_EXTERNAL (decl) = 1;
31a79236
JJ
9219
9220 if (thread_p)
8893239d 9221 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8d08fdba
MS
9222 }
9223 else
9224 {
058b15c1 9225 decl = build_decl (FIELD_DECL, unqualified_id, type);
2bf105ab 9226 DECL_NONADDRESSABLE_P (decl) = bitfield;
ab53bae2
AO
9227 if (bitfield && !unqualified_id)
9228 TREE_NO_WARNING (decl) = 1;
9229
1ff3c076 9230 if (storage_class == sc_mutable)
8d08fdba
MS
9231 {
9232 DECL_MUTABLE_P (decl) = 1;
1ff3c076 9233 storage_class = sc_none;
8d08fdba
MS
9234 }
9235 }
9236
3db45ab5 9237 bad_specifiers (decl, "field", virtualp,
e2537f2c 9238 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba
MS
9239 inlinep, friendp, raises != NULL_TREE);
9240 }
9241 }
fd9aef9d
NS
9242 else if (TREE_CODE (type) == FUNCTION_TYPE
9243 || TREE_CODE (type) == METHOD_TYPE)
8d08fdba 9244 {
386b8a85 9245 tree original_name;
8d08fdba
MS
9246 int publicp = 0;
9247
058b15c1 9248 if (!unqualified_id)
13dbe691 9249 return error_mark_node;
8d08fdba 9250
058b15c1 9251 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
386b8a85
JM
9252 original_name = dname;
9253 else
058b15c1 9254 original_name = unqualified_id;
386b8a85 9255
1ff3c076 9256 if (storage_class == sc_auto)
2d01edd7 9257 error ("storage class %<auto%> invalid for function %qs", name);
1ff3c076 9258 else if (storage_class == sc_register)
2d01edd7 9259 error ("storage class %<register%> invalid for function %qs", name);
1ff3c076 9260 else if (thread_p)
2d01edd7 9261 error ("storage class %<__thread%> invalid for function %qs", name);
8d08fdba
MS
9262
9263 /* Function declaration not at top level.
9264 Storage classes other than `extern' are not allowed
9265 and `extern' makes no difference. */
a9aedbc2 9266 if (! toplevel_bindings_p ()
1ff3c076 9267 && (storage_class == sc_static
62d1db17 9268 || declspecs->specs[(int)ds_inline])
8d08fdba 9269 && pedantic)
8926095f 9270 {
1ff3c076 9271 if (storage_class == sc_static)
509c9d60 9272 pedwarn (input_location, OPT_pedantic,
fcf73884 9273 "%<static%> specified invalid for function %qs "
0cbd7506 9274 "declared out of global scope", name);
8926095f 9275 else
509c9d60 9276 pedwarn (input_location, OPT_pedantic,
fcf73884 9277 "%<inline%> specifier invalid for function %qs "
0cbd7506 9278 "declared out of global scope", name);
8926095f 9279 }
68642fb6 9280
8d08fdba
MS
9281 if (ctype == NULL_TREE)
9282 {
9283 if (virtualp)
9284 {
2d01edd7 9285 error ("virtual non-class function %qs", name);
8d08fdba
MS
9286 virtualp = 0;
9287 }
8d08fdba 9288 }
4546865e
MM
9289 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9290 && !NEW_DELETE_OPNAME_P (original_name))
caf93cb0 9291 type = build_method_type_directly (ctype,
43dc123f
MM
9292 TREE_TYPE (type),
9293 TYPE_ARG_TYPES (type));
8d08fdba 9294
eb66be0e 9295 /* Record presence of `static'. */
faae18ab 9296 publicp = (ctype != NULL_TREE
1ff3c076
MM
9297 || storage_class == sc_extern
9298 || storage_class != sc_static);
8d08fdba 9299
058b15c1 9300 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
e2537f2c 9301 virtualp, flags, memfn_quals, raises,
75650646 9302 1, friendp,
27d6592c 9303 publicp, inlinep, sfk, funcdef_flag,
402b8cf6
AH
9304 template_count, in_namespace, attrlist,
9305 declarator->id_loc);
f0e01782 9306 if (decl == NULL_TREE)
13dbe691 9307 return error_mark_node;
8d08fdba 9308
8d08fdba
MS
9309 if (staticp == 1)
9310 {
0e339752 9311 int invalid_static = 0;
8d08fdba
MS
9312
9313 /* Don't allow a static member function in a class, and forbid
9314 declaring main to be static. */
9315 if (TREE_CODE (type) == METHOD_TYPE)
9316 {
cbe5f3b3 9317 permerror (input_location, "cannot declare member function %qD to have "
37ec60ed 9318 "static linkage", decl);
0e339752 9319 invalid_static = 1;
8d08fdba 9320 }
8d08fdba
MS
9321 else if (current_function_decl)
9322 {
9323 /* FIXME need arm citation */
8251199e 9324 error ("cannot declare static function inside another function");
0e339752 9325 invalid_static = 1;
8d08fdba
MS
9326 }
9327
0e339752 9328 if (invalid_static)
8d08fdba
MS
9329 {
9330 staticp = 0;
1ff3c076 9331 storage_class = sc_none;
8d08fdba
MS
9332 }
9333 }
8d08fdba
MS
9334 }
9335 else
9336 {
9337 /* It's a variable. */
9338
9339 /* An uninitialized decl with `extern' is a reference. */
caf93cb0 9340 decl = grokvardecl (type, unqualified_id,
62d1db17 9341 declspecs,
68642fb6
UD
9342 initialized,
9343 (type_quals & TYPE_QUAL_CONST) != 0,
9e259dd1 9344 ctype ? ctype : in_namespace);
3db45ab5 9345 bad_specifiers (decl, "variable", virtualp,
e2537f2c 9346 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba
MS
9347 inlinep, friendp, raises != NULL_TREE);
9348
9349 if (ctype)
9350 {
f0e01782 9351 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
9352 if (staticp == 1)
9353 {
cbe5f3b3 9354 permerror (input_location, "%<static%> may not be used when defining "
37ec60ed 9355 "(as opposed to declaring) a static data member");
0cbd7506 9356 staticp = 0;
1ff3c076 9357 storage_class = sc_none;
8d08fdba 9358 }
1ff3c076 9359 if (storage_class == sc_register && TREE_STATIC (decl))
b7484fbe 9360 {
2d01edd7 9361 error ("static member %qD declared %<register%>", decl);
1ff3c076 9362 storage_class = sc_none;
b7484fbe 9363 }
1ff3c076 9364 if (storage_class == sc_extern && pedantic)
8d08fdba 9365 {
509c9d60 9366 pedwarn (input_location, OPT_pedantic,
fcf73884
MLI
9367 "cannot explicitly declare member %q#D to have "
9368 "extern linkage", decl);
1ff3c076 9369 storage_class = sc_none;
8d08fdba
MS
9370 }
9371 }
9372 }
9373
94eeabbe
DS
9374 if (storage_class == sc_extern && initialized && !funcdef_flag)
9375 {
9376 if (toplevel_bindings_p ())
9377 {
9378 /* It's common practice (and completely valid) to have a const
9379 be initialized and declared extern. */
9380 if (!(type_quals & TYPE_QUAL_CONST))
9381 warning (0, "%qs initialized and declared %<extern%>", name);
9382 }
9383 else
0450a966
PC
9384 {
9385 error ("%qs has both %<extern%> and initializer", name);
9386 return error_mark_node;
9387 }
94eeabbe
DS
9388 }
9389
8d08fdba
MS
9390 /* Record `register' declaration for warnings on &
9391 and in case doing stupid register allocation. */
9392
1ff3c076 9393 if (storage_class == sc_register)
8d08fdba 9394 DECL_REGISTER (decl) = 1;
1ff3c076 9395 else if (storage_class == sc_extern)
8926095f 9396 DECL_THIS_EXTERN (decl) = 1;
1ff3c076 9397 else if (storage_class == sc_static)
faae18ab
MS
9398 DECL_THIS_STATIC (decl) = 1;
9399
15896502
MM
9400 /* Record constancy and volatility on the DECL itself . There's
9401 no need to do this when processing a template; we'll do this
9402 for the instantiated declaration based on the type of DECL. */
adecb3f4 9403 if (!processing_template_decl)
9804209d 9404 cp_apply_type_quals_to_decl (type_quals, decl);
8d08fdba 9405
1891dec4
DM
9406 if (set_no_warning)
9407 TREE_NO_WARNING (decl) = 1;
9408
8d08fdba
MS
9409 return decl;
9410 }
9411}
9412\f
f181d4ae
MM
9413/* Subroutine of start_function. Ensure that each of the parameter
9414 types (as listed in PARMS) is complete, as is required for a
9415 function definition. */
e92cc029 9416
8d08fdba 9417static void
11f6b451 9418require_complete_types_for_parms (tree parms)
8d08fdba 9419{
07c88314 9420 for (; parms; parms = TREE_CHAIN (parms))
8d08fdba 9421 {
c9387915
GB
9422 if (dependent_type_p (TREE_TYPE (parms)))
9423 continue;
dff1b563
VR
9424 if (!VOID_TYPE_P (TREE_TYPE (parms))
9425 && complete_type_or_else (TREE_TYPE (parms), parms))
753225c1 9426 {
7523dc31 9427 relayout_decl (parms);
753225c1
JM
9428 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9429 }
dff1b563
VR
9430 else
9431 /* grokparms or complete_type_or_else will have already issued
9432 an error. */
9433 TREE_TYPE (parms) = error_mark_node;
8d08fdba
MS
9434 }
9435}
9436
838dfd8a 9437/* Returns nonzero if T is a local variable. */
297e73d8 9438
46e8c075 9439int
ac7d7749 9440local_variable_p (const_tree t)
297e73d8 9441{
68642fb6 9442 if ((TREE_CODE (t) == VAR_DECL
297e73d8
MM
9443 /* A VAR_DECL with a context that is a _TYPE is a static data
9444 member. */
9445 && !TYPE_P (CP_DECL_CONTEXT (t))
9446 /* Any other non-local variable must be at namespace scope. */
46e8c075 9447 && !DECL_NAMESPACE_SCOPE_P (t))
297e73d8 9448 || (TREE_CODE (t) == PARM_DECL))
46e8c075 9449 return 1;
297e73d8 9450
46e8c075
MM
9451 return 0;
9452}
9453
46e8c075
MM
9454/* Like local_variable_p, but suitable for use as a tree-walking
9455 function. */
9456
9457static tree
44de5aeb
RK
9458local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9459 void *data ATTRIBUTE_UNUSED)
46e8c075 9460{
44de5aeb
RK
9461 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
9462 return *tp;
9463 else if (TYPE_P (*tp))
9464 *walk_subtrees = 0;
9465
9466 return NULL_TREE;
297e73d8
MM
9467}
9468
44de5aeb 9469
297e73d8 9470/* Check that ARG, which is a default-argument expression for a
0e339752 9471 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
297e73d8
MM
9472 something goes wrong. DECL may also be a _TYPE node, rather than a
9473 DECL, if there is no DECL available. */
9474
9475tree
11f6b451 9476check_default_argument (tree decl, tree arg)
297e73d8
MM
9477{
9478 tree var;
9479 tree decl_type;
9480
9481 if (TREE_CODE (arg) == DEFAULT_ARG)
9482 /* We get a DEFAULT_ARG when looking at an in-class declaration
9483 with a default argument. Ignore the argument for now; we'll
9484 deal with it after the class is complete. */
9485 return arg;
9486
297e73d8
MM
9487 if (TYPE_P (decl))
9488 {
9489 decl_type = decl;
9490 decl = NULL_TREE;
9491 }
9492 else
9493 decl_type = TREE_TYPE (decl);
9494
68642fb6 9495 if (arg == error_mark_node
297e73d8
MM
9496 || decl == error_mark_node
9497 || TREE_TYPE (arg) == error_mark_node
9498 || decl_type == error_mark_node)
9499 /* Something already went wrong. There's no need to check
9500 further. */
9501 return error_mark_node;
9502
9503 /* [dcl.fct.default]
68642fb6 9504
297e73d8
MM
9505 A default argument expression is implicitly converted to the
9506 parameter type. */
9507 if (!TREE_TYPE (arg)
30f86ec3 9508 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
297e73d8
MM
9509 {
9510 if (decl)
2d01edd7 9511 error ("default argument for %q#D has type %qT",
0cbd7506 9512 decl, TREE_TYPE (arg));
297e73d8 9513 else
2d01edd7 9514 error ("default argument for parameter of type %qT has type %qT",
0cbd7506 9515 decl_type, TREE_TYPE (arg));
297e73d8
MM
9516
9517 return error_mark_node;
9518 }
9519
9520 /* [dcl.fct.default]
9521
9522 Local variables shall not be used in default argument
68642fb6 9523 expressions.
297e73d8
MM
9524
9525 The keyword `this' shall not be used in a default argument of a
9526 member function. */
14588106 9527 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
297e73d8
MM
9528 if (var)
9529 {
2d01edd7 9530 error ("default argument %qE uses local variable %qD", arg, var);
297e73d8
MM
9531 return error_mark_node;
9532 }
9533
9534 /* All is well. */
9535 return arg;
9536}
9537
b344d949
JM
9538/* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
9539
9540static tree
9541type_is_deprecated (tree type)
9542{
9543 enum tree_code code;
9544 if (TREE_DEPRECATED (type))
9545 return type;
9546 if (TYPE_NAME (type)
9547 && TREE_DEPRECATED (TYPE_NAME (type)))
9548 return type;
9549
9550 code = TREE_CODE (type);
9551
9552 if (code == POINTER_TYPE || code == REFERENCE_TYPE
9553 || code == OFFSET_TYPE || code == FUNCTION_TYPE
9554 || code == METHOD_TYPE || code == ARRAY_TYPE)
9555 return type_is_deprecated (TREE_TYPE (type));
9556
9557 if (TYPE_PTRMEMFUNC_P (type))
9558 return type_is_deprecated
9559 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
9560
9561 return NULL_TREE;
9562}
9563
8d08fdba
MS
9564/* Decode the list of parameter types for a function type.
9565 Given the list of things declared inside the parens,
9566 return a list of types.
9567
058b15c1
MM
9568 If this parameter does not end with an ellipsis, we append
9569 void_list_node.
5cce22b6 9570
4546865e 9571 *PARMS is set to the chain of PARM_DECLs created. */
8d08fdba
MS
9572
9573static tree
b344d949 9574grokparms (tree parmlist, tree *parms)
8d08fdba
MS
9575{
9576 tree result = NULL_TREE;
9577 tree decls = NULL_TREE;
b344d949 9578 tree parm;
5cce22b6 9579 int any_error = 0;
8d08fdba 9580
b344d949 9581 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
8d08fdba 9582 {
0657c69c 9583 tree type = NULL_TREE;
b344d949
JM
9584 tree init = TREE_PURPOSE (parm);
9585 tree decl = TREE_VALUE (parm);
8d08fdba 9586
b344d949 9587 if (parm == void_list_node)
0cbd7506 9588 break;
8d08fdba 9589
5cce22b6 9590 if (! decl || TREE_TYPE (decl) == error_mark_node)
0cbd7506 9591 continue;
d363e7bf 9592
5cce22b6
NS
9593 type = TREE_TYPE (decl);
9594 if (VOID_TYPE_P (type))
0cbd7506
MS
9595 {
9596 if (same_type_p (type, void_type_node)
e7e53192 9597 && DECL_SELF_REFERENCE_P (type)
b344d949 9598 && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
0cbd7506
MS
9599 /* this is a parmlist of `(void)', which is ok. */
9600 break;
9601 cxx_incomplete_type_error (decl, type);
0657c69c
MM
9602 /* It's not a good idea to actually create parameters of
9603 type `void'; other parts of the compiler assume that a
9604 void type terminates the parameter list. */
04f3dc2b 9605 type = error_mark_node;
0657c69c 9606 TREE_TYPE (decl) = error_mark_node;
0cbd7506 9607 }
8d08fdba 9608
360f866c
JJ
9609 if (type != error_mark_node
9610 && TYPE_FOR_JAVA (type)
9e1e64ec 9611 && MAYBE_CLASS_TYPE_P (type))
360f866c
JJ
9612 {
9613 error ("parameter %qD has Java class type", decl);
9614 type = error_mark_node;
9615 TREE_TYPE (decl) = error_mark_node;
9616 init = NULL_TREE;
9617 }
9618
d363e7bf 9619 if (type != error_mark_node)
04f3dc2b 9620 {
b344d949
JM
9621 if (deprecated_state != DEPRECATED_SUPPRESS)
9622 {
9623 tree deptype = type_is_deprecated (type);
9624 if (deptype)
9625 warn_deprecated_use (deptype);
9626 }
9627
04f3dc2b
MM
9628 /* Top-level qualifiers on the parameters are
9629 ignored for function types. */
79a1a736 9630 type = cp_build_qualified_type (type, 0);
04f3dc2b
MM
9631 if (TREE_CODE (type) == METHOD_TYPE)
9632 {
2d01edd7 9633 error ("parameter %qD invalidly declared method type", decl);
04f3dc2b
MM
9634 type = build_pointer_type (type);
9635 TREE_TYPE (decl) = type;
9636 }
04f3dc2b 9637 else if (abstract_virtuals_error (decl, type))
a1c65f9f 9638 any_error = 1; /* Seems like a good idea. */
04f3dc2b
MM
9639 else if (POINTER_TYPE_P (type))
9640 {
9641 /* [dcl.fct]/6, parameter types cannot contain pointers
9642 (references) to arrays of unknown bound. */
98979fe0
NS
9643 tree t = TREE_TYPE (type);
9644 int ptr = TYPE_PTR_P (type);
9645
0cbd7506
MS
9646 while (1)
9647 {
9648 if (TYPE_PTR_P (t))
9649 ptr = 1;
9650 else if (TREE_CODE (t) != ARRAY_TYPE)
9651 break;
9652 else if (!TYPE_DOMAIN (t))
9653 break;
9654 t = TREE_TYPE (t);
9655 }
04f3dc2b 9656 if (TREE_CODE (t) == ARRAY_TYPE)
2d01edd7 9657 error ("parameter %qD includes %s to array of unknown "
0cbd7506
MS
9658 "bound %qT",
9659 decl, ptr ? "pointer" : "reference", t);
04f3dc2b
MM
9660 }
9661
c3ee4651 9662 if (any_error)
04f3dc2b 9663 init = NULL_TREE;
c3ee4651
NS
9664 else if (init && !processing_template_decl)
9665 init = check_default_argument (decl, init);
04f3dc2b 9666 }
8d08fdba 9667
5d80a306
DG
9668 if (TREE_CODE (decl) == PARM_DECL
9669 && FUNCTION_PARAMETER_PACK_P (decl)
b344d949
JM
9670 && TREE_CHAIN (parm)
9671 && TREE_CHAIN (parm) != void_list_node)
5d80a306
DG
9672 error ("parameter packs must be at the end of the parameter list");
9673
5cce22b6
NS
9674 TREE_CHAIN (decl) = decls;
9675 decls = decl;
0657c69c 9676 result = tree_cons (init, type, result);
8d08fdba 9677 }
5cce22b6
NS
9678 decls = nreverse (decls);
9679 result = nreverse (result);
b344d949 9680 if (parm)
5cce22b6 9681 result = chainon (result, void_list_node);
4546865e 9682 *parms = decls;
8d08fdba 9683
8d08fdba
MS
9684 return result;
9685}
42976354 9686
8d08fdba 9687\f
271e6f02
NS
9688/* D is a constructor or overloaded `operator='.
9689
9690 Let T be the class in which D is declared. Then, this function
9691 returns:
9692
9693 -1 if D's is an ill-formed constructor or copy assignment operator
9694 whose first parameter is of type `T'.
9695 0 if D is not a copy constructor or copy assignment
9696 operator.
9697 1 if D is a copy constructor or copy assignment operator whose
9698 first parameter is a reference to const qualified T.
9699 2 if D is a copy constructor or copy assignment operator whose
9700 first parameter is a reference to non-const qualified T.
9701
9702 This function can be used as a predicate. Positive values indicate
838dfd8a 9703 a copy constructor and nonzero values indicate a copy assignment
4f1c5b7d
MM
9704 operator. */
9705
c11b6f21 9706int
58f9752a 9707copy_fn_p (const_tree d)
c11b6f21 9708{
271e6f02
NS
9709 tree args;
9710 tree arg_type;
9711 int result = 1;
caf93cb0 9712
398cd199 9713 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
4f1c5b7d 9714
7137605e
MM
9715 if (TREE_CODE (d) == TEMPLATE_DECL
9716 || (DECL_TEMPLATE_INFO (d)
9717 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
271e6f02
NS
9718 /* Instantiations of template member functions are never copy
9719 functions. Note that member functions of templated classes are
9720 represented as template functions internally, and we must
9721 accept those as copy functions. */
9722 return 0;
caf93cb0 9723
271e6f02
NS
9724 args = FUNCTION_FIRST_USER_PARMTYPE (d);
9725 if (!args)
4f1c5b7d
MM
9726 return 0;
9727
271e6f02 9728 arg_type = TREE_VALUE (args);
139a78c7
VR
9729 if (arg_type == error_mark_node)
9730 return 0;
271e6f02
NS
9731
9732 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
9733 {
9734 /* Pass by value copy assignment operator. */
9735 result = -1;
9736 }
9737 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8af2fec4 9738 && !TYPE_REF_IS_RVALUE (arg_type)
271e6f02
NS
9739 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
9740 {
9741 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
9742 result = 2;
9743 }
9744 else
9745 return 0;
caf93cb0 9746
271e6f02
NS
9747 args = TREE_CHAIN (args);
9748
9749 if (args && args != void_list_node && !TREE_PURPOSE (args))
9750 /* There are more non-optional args. */
9751 return 0;
9752
9753 return result;
9754}
9755
8af2fec4
RY
9756/* D is a constructor or overloaded `operator='.
9757
9758 Let T be the class in which D is declared. Then, this function
9759 returns true when D is a move constructor or move assignment
9760 operator, false otherwise. */
9761
9762bool
58f9752a 9763move_fn_p (const_tree d)
8af2fec4
RY
9764{
9765 tree args;
9766 tree arg_type;
9767 bool result = false;
9768
9769 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9770
c1ae8be5
SM
9771 if (cxx_dialect == cxx98)
9772 /* There are no move constructors if we are in C++98 mode. */
8af2fec4
RY
9773 return false;
9774
9775 if (TREE_CODE (d) == TEMPLATE_DECL
9776 || (DECL_TEMPLATE_INFO (d)
9777 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9778 /* Instantiations of template member functions are never copy
9779 functions. Note that member functions of templated classes are
9780 represented as template functions internally, and we must
9781 accept those as copy functions. */
9782 return 0;
9783
9784 args = FUNCTION_FIRST_USER_PARMTYPE (d);
9785 if (!args)
9786 return 0;
9787
9788 arg_type = TREE_VALUE (args);
9789 if (arg_type == error_mark_node)
9790 return 0;
9791
9792 if (TREE_CODE (arg_type) == REFERENCE_TYPE
9793 && TYPE_REF_IS_RVALUE (arg_type)
9794 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
9795 DECL_CONTEXT (d)))
9796 result = true;
9797
9798 args = TREE_CHAIN (args);
9799
9800 if (args && args != void_list_node && !TREE_PURPOSE (args))
9801 /* There are more non-optional args. */
9802 return false;
9803
9804 return result;
9805}
9806
271e6f02
NS
9807/* Remember any special properties of member function DECL. */
9808
0fcedd9c
JM
9809void
9810grok_special_member_properties (tree decl)
271e6f02 9811{
7137605e
MM
9812 tree class_type;
9813
6d69fe27 9814 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
7137605e
MM
9815 return;
9816
9817 class_type = DECL_CONTEXT (decl);
9818 if (DECL_CONSTRUCTOR_P (decl))
271e6f02
NS
9819 {
9820 int ctor = copy_fn_p (decl);
caf93cb0 9821
0fcedd9c
JM
9822 if (!DECL_ARTIFICIAL (decl))
9823 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
7137605e 9824
271e6f02
NS
9825 if (ctor > 0)
9826 {
9827 /* [class.copy]
caf93cb0 9828
0cbd7506
MS
9829 A non-template constructor for class X is a copy
9830 constructor if its first parameter is of type X&, const
9831 X&, volatile X& or const volatile X&, and either there
9832 are no other parameters or else all other parameters have
9833 default arguments. */
7137605e 9834 TYPE_HAS_INIT_REF (class_type) = 1;
b87d79e6
JM
9835 if (!DECL_DEFAULTED_FN (decl))
9836 TYPE_HAS_COMPLEX_INIT_REF (class_type) = 1;
271e6f02 9837 if (ctor > 1)
7137605e 9838 TYPE_HAS_CONST_INIT_REF (class_type) = 1;
271e6f02
NS
9839 }
9840 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
7137605e 9841 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
09357846
JM
9842 else if (is_list_ctor (decl))
9843 TYPE_HAS_LIST_CTOR (class_type) = 1;
271e6f02
NS
9844 }
9845 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
9846 {
9847 /* [class.copy]
caf93cb0 9848
0cbd7506
MS
9849 A non-template assignment operator for class X is a copy
9850 assignment operator if its parameter is of type X, X&, const
9851 X&, volatile X& or const volatile X&. */
caf93cb0 9852
271e6f02 9853 int assop = copy_fn_p (decl);
caf93cb0 9854
271e6f02
NS
9855 if (assop)
9856 {
7137605e 9857 TYPE_HAS_ASSIGN_REF (class_type) = 1;
b87d79e6
JM
9858 if (!DECL_DEFAULTED_FN (decl))
9859 TYPE_HAS_COMPLEX_ASSIGN_REF (class_type) = 1;
271e6f02 9860 if (assop != 1)
7137605e 9861 TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
271e6f02
NS
9862 }
9863 }
c11b6f21
MS
9864}
9865
271e6f02
NS
9866/* Check a constructor DECL has the correct form. Complains
9867 if the class has a constructor of the form X(X). */
e92cc029 9868
a0a33927 9869int
58f9752a 9870grok_ctor_properties (const_tree ctype, const_tree decl)
8d08fdba 9871{
271e6f02
NS
9872 int ctor_parm = copy_fn_p (decl);
9873
9874 if (ctor_parm < 0)
9875 {
9876 /* [class.copy]
caf93cb0 9877
0cbd7506
MS
9878 A declaration of a constructor for a class X is ill-formed if
9879 its first parameter is of type (optionally cv-qualified) X
9880 and either there are no other parameters or else all other
9881 parameters have default arguments.
9882
9883 We *don't* complain about member template instantiations that
9884 have this form, though; they can occur as we try to decide
9885 what constructor to use during overload resolution. Since
9886 overload resolution will never prefer such a constructor to
9887 the non-template copy constructor (which is either explicitly
9888 or implicitly defined), there's no need to worry about their
9889 existence. Theoretically, they should never even be
9890 instantiated, but that's hard to forestall. */
2d01edd7 9891 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
0b41abe6 9892 ctype, ctype);
0b41abe6 9893 return 0;
8d08fdba 9894 }
caf93cb0 9895
a0a33927 9896 return 1;
8d08fdba
MS
9897}
9898
596ea4e5 9899/* An operator with this code is unary, but can also be binary. */
e92cc029 9900
a28e3c7f 9901static int
11f6b451 9902ambi_op_p (enum tree_code code)
8d08fdba 9903{
596ea4e5
AS
9904 return (code == INDIRECT_REF
9905 || code == ADDR_EXPR
392e3d51 9906 || code == UNARY_PLUS_EXPR
596ea4e5
AS
9907 || code == NEGATE_EXPR
9908 || code == PREINCREMENT_EXPR
9909 || code == PREDECREMENT_EXPR);
8d08fdba
MS
9910}
9911
9912/* An operator with this name can only be unary. */
e92cc029 9913
a28e3c7f 9914static int
11f6b451 9915unary_op_p (enum tree_code code)
8d08fdba 9916{
596ea4e5
AS
9917 return (code == TRUTH_NOT_EXPR
9918 || code == BIT_NOT_EXPR
9919 || code == COMPONENT_REF
9920 || code == TYPE_EXPR);
8d08fdba
MS
9921}
9922
f2a79152 9923/* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
4b0d3cbe 9924 errors are issued for invalid declarations. */
e92cc029 9925
398cd199 9926bool
7e45bd18 9927grok_op_properties (tree decl, bool complain)
8d08fdba
MS
9928{
9929 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
596ea4e5 9930 tree argtype;
8d08fdba
MS
9931 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
9932 tree name = DECL_NAME (decl);
596ea4e5
AS
9933 enum tree_code operator_code;
9934 int arity;
64844139 9935 bool ellipsis_p;
7e45bd18 9936 tree class_type;
596ea4e5 9937
64844139 9938 /* Count the number of arguments and check for ellipsis. */
596ea4e5
AS
9939 for (argtype = argtypes, arity = 0;
9940 argtype && argtype != void_list_node;
9941 argtype = TREE_CHAIN (argtype))
9942 ++arity;
64844139 9943 ellipsis_p = !argtype;
8d08fdba 9944
7e45bd18
MM
9945 class_type = DECL_CONTEXT (decl);
9946 if (class_type && !CLASS_TYPE_P (class_type))
9947 class_type = NULL_TREE;
8d08fdba 9948
596ea4e5
AS
9949 if (DECL_CONV_FN_P (decl))
9950 operator_code = TYPE_EXPR;
9951 else
9952 do
9953 {
0c918ce5
MM
9954#define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
9955 if (ansi_opname (CODE) == name) \
9956 { \
75ac8dec 9957 operator_code = (CODE); \
0c918ce5
MM
9958 break; \
9959 } \
9960 else if (ansi_assopname (CODE) == name) \
9961 { \
75ac8dec 9962 operator_code = (CODE); \
0c918ce5
MM
9963 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
9964 break; \
596ea4e5
AS
9965 }
9966
9967#include "operators.def"
9968#undef DEF_OPERATOR
9969
8dc2b103 9970 gcc_unreachable ();
596ea4e5
AS
9971 }
9972 while (0);
c0ed0531 9973 gcc_assert (operator_code != MAX_TREE_CODES);
596ea4e5
AS
9974 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9975
7e45bd18
MM
9976 if (class_type)
9977 switch (operator_code)
9978 {
9979 case NEW_EXPR:
9980 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
9981 break;
5362b086 9982
7e45bd18
MM
9983 case DELETE_EXPR:
9984 TYPE_GETS_DELETE (class_type) |= 1;
9985 break;
5362b086 9986
7e45bd18
MM
9987 case VEC_NEW_EXPR:
9988 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
9989 break;
5362b086 9990
7e45bd18
MM
9991 case VEC_DELETE_EXPR:
9992 TYPE_GETS_DELETE (class_type) |= 2;
9993 break;
596ea4e5 9994
7e45bd18
MM
9995 default:
9996 break;
9997 }
596ea4e5 9998
3143d517
GB
9999 /* [basic.std.dynamic.allocation]/1:
10000
10001 A program is ill-formed if an allocation function is declared
10002 in a namespace scope other than global scope or declared static
10003 in global scope.
10004
10005 The same also holds true for deallocation functions. */
10006 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
10007 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10008 {
10009 if (DECL_NAMESPACE_SCOPE_P (decl))
10010 {
10011 if (CP_DECL_CONTEXT (decl) != global_namespace)
398cd199
VR
10012 {
10013 error ("%qD may not be declared within a namespace", decl);
10014 return false;
10015 }
3143d517 10016 else if (!TREE_PUBLIC (decl))
398cd199
VR
10017 {
10018 error ("%qD may not be declared as static", decl);
10019 return false;
10020 }
3143d517
GB
10021 }
10022 }
10023
596ea4e5 10024 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
1ea193c2
ILT
10025 {
10026 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10027 DECL_IS_OPERATOR_NEW (decl) = 1;
10028 }
596ea4e5 10029 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
4546865e 10030 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8d08fdba
MS
10031 else
10032 {
10033 /* An operator function must either be a non-static member function
10034 or have at least one parameter of a class, a reference to a class,
10035 an enumeration, or a reference to an enumeration. 13.4.0.6 */
700f8a87 10036 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba 10037 {
596ea4e5
AS
10038 if (operator_code == TYPE_EXPR
10039 || operator_code == CALL_EXPR
10040 || operator_code == COMPONENT_REF
10041 || operator_code == ARRAY_REF
10042 || operator_code == NOP_EXPR)
f2a79152
PC
10043 {
10044 error ("%qD must be a nonstatic member function", decl);
398cd199 10045 return false;
f2a79152 10046 }
8d08fdba
MS
10047 else
10048 {
4b0d3cbe 10049 tree p;
8d08fdba 10050
700f8a87 10051 if (DECL_STATIC_FUNCTION_P (decl))
f2a79152
PC
10052 {
10053 error ("%qD must be either a non-static member "
10054 "function or a non-member function", decl);
398cd199 10055 return false;
f2a79152 10056 }
700f8a87 10057
4b0d3cbe
MM
10058 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
10059 {
10060 tree arg = non_reference (TREE_VALUE (p));
85990800 10061 if (arg == error_mark_node)
398cd199 10062 return false;
85990800 10063
9e1e64ec 10064 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
4b0d3cbe
MM
10065 because these checks are performed even on
10066 template functions. */
9e1e64ec
PC
10067 if (MAYBE_CLASS_TYPE_P (arg)
10068 || TREE_CODE (arg) == ENUMERAL_TYPE)
4b0d3cbe
MM
10069 break;
10070 }
10071
10072 if (!p || p == void_list_node)
10073 {
398cd199
VR
10074 if (complain)
10075 error ("%qD must have an argument of class or "
10076 "enumerated type", decl);
10077 return false;
4b0d3cbe 10078 }
8d08fdba
MS
10079 }
10080 }
68642fb6 10081
4b0d3cbe
MM
10082 /* There are no restrictions on the arguments to an overloaded
10083 "operator ()". */
596ea4e5 10084 if (operator_code == CALL_EXPR)
398cd199 10085 return true;
8d08fdba 10086
7e45bd18 10087 /* Warn about conversion operators that will never be used. */
c8094d83 10088 if (IDENTIFIER_TYPENAME_P (name)
7e45bd18
MM
10089 && ! DECL_TEMPLATE_INFO (decl)
10090 && warn_conversion
10091 /* Warn only declaring the function; there is no need to
10092 warn again about out-of-class definitions. */
10093 && class_type == current_class_type)
a0a33927
MS
10094 {
10095 tree t = TREE_TYPE (name);
7e45bd18
MM
10096 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
10097 const char *what = 0;
5362b086 10098
7e45bd18
MM
10099 if (ref)
10100 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
a0a33927 10101
7e45bd18
MM
10102 if (TREE_CODE (t) == VOID_TYPE)
10103 what = "void";
10104 else if (class_type)
10105 {
10106 if (t == class_type)
a0a33927 10107 what = "the same type";
9a3b49ac 10108 /* Don't force t to be complete here. */
9e1e64ec 10109 else if (MAYBE_CLASS_TYPE_P (t)
d0f062fb 10110 && COMPLETE_TYPE_P (t)
7e45bd18 10111 && DERIVED_FROM_P (t, class_type))
a0a33927 10112 what = "a base class";
a0a33927 10113 }
7e45bd18
MM
10114
10115 if (what)
b323323f 10116 warning (OPT_Wconversion, "conversion to %s%s will never use a type "
7e45bd18
MM
10117 "conversion operator",
10118 ref ? "a reference to " : "", what);
a0a33927 10119 }
64844139 10120
271e6f02 10121 if (operator_code == COND_EXPR)
8d08fdba
MS
10122 {
10123 /* 13.4.0.3 */
33bd39a2 10124 error ("ISO C++ prohibits overloading operator ?:");
398cd199 10125 return false;
68642fb6 10126 }
64844139 10127 else if (ellipsis_p)
398cd199
VR
10128 {
10129 error ("%qD must not have variable number of arguments", decl);
10130 return false;
10131 }
596ea4e5 10132 else if (ambi_op_p (operator_code))
8d08fdba 10133 {
596ea4e5
AS
10134 if (arity == 1)
10135 /* We pick the one-argument operator codes by default, so
10136 we don't have to change anything. */
10137 ;
10138 else if (arity == 2)
8d08fdba 10139 {
596ea4e5
AS
10140 /* If we thought this was a unary operator, we now know
10141 it to be a binary operator. */
10142 switch (operator_code)
10143 {
10144 case INDIRECT_REF:
10145 operator_code = MULT_EXPR;
10146 break;
10147
10148 case ADDR_EXPR:
10149 operator_code = BIT_AND_EXPR;
10150 break;
10151
392e3d51 10152 case UNARY_PLUS_EXPR:
596ea4e5
AS
10153 operator_code = PLUS_EXPR;
10154 break;
10155
10156 case NEGATE_EXPR:
10157 operator_code = MINUS_EXPR;
10158 break;
10159
10160 case PREINCREMENT_EXPR:
10161 operator_code = POSTINCREMENT_EXPR;
10162 break;
10163
10164 case PREDECREMENT_EXPR:
655dc6ee 10165 operator_code = POSTDECREMENT_EXPR;
596ea4e5
AS
10166 break;
10167
10168 default:
8dc2b103 10169 gcc_unreachable ();
596ea4e5
AS
10170 }
10171
10172 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10173
10174 if ((operator_code == POSTINCREMENT_EXPR
10175 || operator_code == POSTDECREMENT_EXPR)
5156628f 10176 && ! processing_template_decl
007e5fea 10177 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8d08fdba
MS
10178 {
10179 if (methodp)
2d01edd7 10180 error ("postfix %qD must take %<int%> as its argument",
398cd199 10181 decl);
8d08fdba 10182 else
398cd199
VR
10183 error ("postfix %qD must take %<int%> as its second "
10184 "argument", decl);
10185 return false;
8d08fdba
MS
10186 }
10187 }
10188 else
10189 {
10190 if (methodp)
2d01edd7 10191 error ("%qD must take either zero or one argument", decl);
8d08fdba 10192 else
2d01edd7 10193 error ("%qD must take either one or two arguments", decl);
398cd199 10194 return false;
8d08fdba 10195 }
824b9a4c
MS
10196
10197 /* More Effective C++ rule 6. */
eb448459 10198 if (warn_ecpp
596ea4e5
AS
10199 && (operator_code == POSTINCREMENT_EXPR
10200 || operator_code == POSTDECREMENT_EXPR
10201 || operator_code == PREINCREMENT_EXPR
10202 || operator_code == PREDECREMENT_EXPR))
824b9a4c
MS
10203 {
10204 tree arg = TREE_VALUE (argtypes);
10205 tree ret = TREE_TYPE (TREE_TYPE (decl));
10206 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10207 arg = TREE_TYPE (arg);
10208 arg = TYPE_MAIN_VARIANT (arg);
596ea4e5
AS
10209 if (operator_code == PREINCREMENT_EXPR
10210 || operator_code == PREDECREMENT_EXPR)
824b9a4c
MS
10211 {
10212 if (TREE_CODE (ret) != REFERENCE_TYPE
3bfdc719
MM
10213 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10214 arg))
b323323f 10215 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
0cbd7506 10216 build_reference_type (arg));
824b9a4c
MS
10217 }
10218 else
10219 {
3bfdc719 10220 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
b323323f 10221 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
824b9a4c
MS
10222 }
10223 }
8d08fdba 10224 }
596ea4e5 10225 else if (unary_op_p (operator_code))
8d08fdba 10226 {
596ea4e5 10227 if (arity != 1)
8d08fdba
MS
10228 {
10229 if (methodp)
2d01edd7 10230 error ("%qD must take %<void%>", decl);
8d08fdba 10231 else
2d01edd7 10232 error ("%qD must take exactly one argument", decl);
398cd199 10233 return false;
8d08fdba
MS
10234 }
10235 }
596ea4e5 10236 else /* if (binary_op_p (operator_code)) */
8d08fdba 10237 {
596ea4e5 10238 if (arity != 2)
8d08fdba
MS
10239 {
10240 if (methodp)
2d01edd7 10241 error ("%qD must take exactly one argument", decl);
8d08fdba 10242 else
2d01edd7 10243 error ("%qD must take exactly two arguments", decl);
398cd199 10244 return false;
8d08fdba 10245 }
824b9a4c
MS
10246
10247 /* More Effective C++ rule 7. */
eb448459 10248 if (warn_ecpp
596ea4e5
AS
10249 && (operator_code == TRUTH_ANDIF_EXPR
10250 || operator_code == TRUTH_ORIF_EXPR
10251 || operator_code == COMPOUND_EXPR))
b323323f 10252 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
0cbd7506 10253 decl);
824b9a4c
MS
10254 }
10255
10256 /* Effective C++ rule 23. */
eb448459 10257 if (warn_ecpp
596ea4e5 10258 && arity == 2
4bd7c270 10259 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
596ea4e5
AS
10260 && (operator_code == PLUS_EXPR
10261 || operator_code == MINUS_EXPR
10262 || operator_code == TRUNC_DIV_EXPR
4bd7c270
NS
10263 || operator_code == MULT_EXPR
10264 || operator_code == TRUNC_MOD_EXPR)
824b9a4c 10265 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
b323323f 10266 warning (OPT_Weffc__, "%qD should return by value", decl);
8d08fdba 10267
271e6f02 10268 /* [over.oper]/8 */
34332678 10269 for (; argtypes && argtypes != void_list_node;
0cbd7506
MS
10270 argtypes = TREE_CHAIN (argtypes))
10271 if (TREE_PURPOSE (argtypes))
10272 {
10273 TREE_PURPOSE (argtypes) = NULL_TREE;
10274 if (operator_code == POSTINCREMENT_EXPR
596ea4e5 10275 || operator_code == POSTDECREMENT_EXPR)
0cbd7506 10276 {
509c9d60 10277 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments",
fcf73884 10278 decl);
0cbd7506
MS
10279 }
10280 else
398cd199
VR
10281 {
10282 error ("%qD cannot have default arguments", decl);
10283 return false;
10284 }
0cbd7506 10285 }
8d08fdba 10286 }
398cd199 10287 return true;
8d08fdba
MS
10288}
10289\f
0c88d886
MM
10290/* Return a string giving the keyword associate with CODE. */
10291
d8e178a0 10292static const char *
11f6b451 10293tag_name (enum tag_types code)
094fe153
JM
10294{
10295 switch (code)
10296 {
10297 case record_type:
10298 return "struct";
10299 case class_type:
10300 return "class";
10301 case union_type:
0c88d886 10302 return "union";
094fe153
JM
10303 case enum_type:
10304 return "enum";
0c88d886
MM
10305 case typename_type:
10306 return "typename";
094fe153 10307 default:
8dc2b103 10308 gcc_unreachable ();
094fe153
JM
10309 }
10310}
10311
befcd99b 10312/* Name lookup in an elaborated-type-specifier (after the keyword
4b0d3cbe 10313 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
befcd99b 10314 elaborated-type-specifier is invalid, issue a diagnostic and return
4b0d3cbe 10315 error_mark_node; otherwise, return the *_TYPE to which it referred.
cbd63935 10316 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
befcd99b 10317
560ad596 10318tree
befcd99b 10319check_elaborated_type_specifier (enum tag_types tag_code,
4b0d3cbe 10320 tree decl,
cbd63935 10321 bool allow_template_p)
befcd99b 10322{
4b0d3cbe 10323 tree type;
befcd99b 10324
4b0d3cbe
MM
10325 /* In the case of:
10326
10327 struct S { struct S *p; };
10328
10329 name lookup will find the TYPE_DECL for the implicit "S::S"
10330 typedef. Adjust for that here. */
10331 if (DECL_SELF_REFERENCE_P (decl))
10332 decl = TYPE_NAME (TREE_TYPE (decl));
10333
10334 type = TREE_TYPE (decl);
10335
461c6fce
KL
10336 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10337 is false for this case as well. */
10338 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10339 {
10340 error ("using template type parameter %qT after %qs",
10341 type, tag_name (tag_code));
10342 return error_mark_node;
10343 }
caf93cb0 10344 /* [dcl.type.elab]
4b0d3cbe
MM
10345
10346 If the identifier resolves to a typedef-name or a template
10347 type-parameter, the elaborated-type-specifier is ill-formed.
10348
10349 In other words, the only legitimate declaration to use in the
10350 elaborated type specifier is the implicit typedef created when
10351 the type is declared. */
0c88d886
MM
10352 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
10353 && tag_code != typename_type)
befcd99b 10354 {
2d01edd7 10355 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
dee15844 10356 error ("%q+D has a previous declaration here", decl);
4b0d3cbe 10357 return error_mark_node;
befcd99b 10358 }
cbd63935
KL
10359 else if (TREE_CODE (type) != RECORD_TYPE
10360 && TREE_CODE (type) != UNION_TYPE
0c88d886
MM
10361 && tag_code != enum_type
10362 && tag_code != typename_type)
cbd63935 10363 {
2d01edd7 10364 error ("%qT referred to as %qs", type, tag_name (tag_code));
dee15844 10365 error ("%q+T has a previous declaration here", type);
4b0d3cbe 10366 return error_mark_node;
cbd63935
KL
10367 }
10368 else if (TREE_CODE (type) != ENUMERAL_TYPE
4fe8db68 10369 && tag_code == enum_type)
cbd63935 10370 {
2d01edd7 10371 error ("%qT referred to as enum", type);
dee15844 10372 error ("%q+T has a previous declaration here", type);
4b0d3cbe 10373 return error_mark_node;
cbd63935
KL
10374 }
10375 else if (!allow_template_p
10376 && TREE_CODE (type) == RECORD_TYPE
10377 && CLASSTYPE_IS_TEMPLATE (type))
10378 {
10379 /* If a class template appears as elaborated type specifier
10380 without a template header such as:
10381
10382 template <class T> class C {};
10383 void f(class C); // No template header here
10384
10385 then the required template argument is missing. */
2d01edd7 10386 error ("template argument required for %<%s %T%>",
cbd63935
KL
10387 tag_name (tag_code),
10388 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
4b0d3cbe 10389 return error_mark_node;
cbd63935 10390 }
befcd99b 10391
4b0d3cbe 10392 return type;
befcd99b
MM
10393}
10394
461c6fce 10395/* Lookup NAME in elaborate type specifier in scope according to
29ef83de 10396 SCOPE and issue diagnostics if necessary.
461c6fce
KL
10397 Return *_TYPE node upon success, NULL_TREE when the NAME is not
10398 found, and ERROR_MARK_NODE for type error. */
10399
10400static tree
10401lookup_and_check_tag (enum tag_types tag_code, tree name,
29ef83de 10402 tag_scope scope, bool template_header_p)
461c6fce
KL
10403{
10404 tree t;
10405 tree decl;
29ef83de 10406 if (scope == ts_global)
bd3d082e
KL
10407 {
10408 /* First try ordinary name lookup, ignoring hidden class name
10409 injected via friend declaration. */
10e6657a 10410 decl = lookup_name_prefer_type (name, 2);
bd3d082e
KL
10411 /* If that fails, the name will be placed in the smallest
10412 non-class, non-function-prototype scope according to 3.3.1/5.
10413 We may already have a hidden name declared as friend in this
105d72c5 10414 scope. So lookup again but not ignoring hidden names.
bd3d082e
KL
10415 If we find one, that name will be made visible rather than
10416 creating a new tag. */
10417 if (!decl)
10418 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10419 }
461c6fce 10420 else
29ef83de 10421 decl = lookup_type_scope (name, scope);
461c6fce
KL
10422
10423 if (decl && DECL_CLASS_TEMPLATE_P (decl))
10424 decl = DECL_TEMPLATE_RESULT (decl);
10425
10426 if (decl && TREE_CODE (decl) == TYPE_DECL)
10427 {
4104f0f4
KL
10428 /* Look for invalid nested type:
10429 class C {
10430 class C {};
10431 }; */
10432 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
10433 {
10434 error ("%qD has the same name as the class in which it is "
10435 "declared",
10436 decl);
10437 return error_mark_node;
10438 }
10439
461c6fce
KL
10440 /* Two cases we need to consider when deciding if a class
10441 template is allowed as an elaborated type specifier:
10442 1. It is a self reference to its own class.
10443 2. It comes with a template header.
10444
10445 For example:
10446
10447 template <class T> class C {
10448 class C *c1; // DECL_SELF_REFERENCE_P is true
10449 class D;
10450 };
10451 template <class U> class C; // template_header_p is true
10452 template <class T> class C<T>::D {
10453 class C *c2; // DECL_SELF_REFERENCE_P is true
10454 }; */
10455
10456 t = check_elaborated_type_specifier (tag_code,
10457 decl,
10458 template_header_p
10459 | DECL_SELF_REFERENCE_P (decl));
10460 return t;
10461 }
af92ab36
OW
10462 else if (decl && TREE_CODE (decl) == TREE_LIST)
10463 {
10464 error ("reference to %qD is ambiguous", name);
10465 print_candidates (decl);
10466 return error_mark_node;
10467 }
461c6fce
KL
10468 else
10469 return NULL_TREE;
10470}
10471
cbd63935 10472/* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
8d08fdba
MS
10473 Define the tag as a forward-reference if it is not defined.
10474
cbd63935 10475 If a declaration is given, process it here, and report an error if
38b305d0 10476 multiple declarations are not identical.
8d08fdba 10477
29ef83de 10478 SCOPE is TS_CURRENT when this is also a definition. Only look in
8d08fdba 10479 the current frame for the name (since C++ allows new names in any
29ef83de
KL
10480 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
10481 declaration. Only look beginning from the current scope outward up
10482 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
cbd63935
KL
10483
10484 TEMPLATE_HEADER_P is true when this declaration is preceded by
10485 a set of template parameters. */
8d08fdba 10486
8d08fdba 10487tree
38b305d0 10488xref_tag (enum tag_types tag_code, tree name,
29ef83de 10489 tag_scope scope, bool template_header_p)
8d08fdba 10490{
8d08fdba 10491 enum tree_code code;
926ce8bd 10492 tree t;
25aab5d0 10493 tree context = NULL_TREE;
dc8263bc 10494
22ffcc6f 10495 timevar_push (TV_NAME_LOOKUP);
cbd63935 10496
50bc768d 10497 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
cbd63935 10498
8d08fdba
MS
10499 switch (tag_code)
10500 {
10501 case record_type:
10502 case class_type:
8d08fdba 10503 code = RECORD_TYPE;
8d08fdba
MS
10504 break;
10505 case union_type:
10506 code = UNION_TYPE;
8d08fdba
MS
10507 break;
10508 case enum_type:
10509 code = ENUMERAL_TYPE;
10510 break;
10511 default:
8dc2b103 10512 gcc_unreachable ();
8d08fdba
MS
10513 }
10514
461c6fce
KL
10515 /* In case of anonymous name, xref_tag is only called to
10516 make type node and push name. Name lookup is not required. */
10517 if (ANON_AGGRNAME_P (name))
10518 t = NULL_TREE;
8d08fdba 10519 else
461c6fce 10520 t = lookup_and_check_tag (tag_code, name,
29ef83de 10521 scope, template_header_p);
cbd63935 10522
461c6fce
KL
10523 if (t == error_mark_node)
10524 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
68642fb6 10525
29ef83de 10526 if (scope != ts_current && t && current_class_type
461c6fce
KL
10527 && template_class_depth (current_class_type)
10528 && template_header_p)
10529 {
29ef83de 10530 /* Since SCOPE is not TS_CURRENT, we are not looking at a
461c6fce
KL
10531 definition of this tag. Since, in addition, we are currently
10532 processing a (member) template declaration of a template
10533 class, we must be very careful; consider:
25aab5d0 10534
461c6fce
KL
10535 template <class X>
10536 struct S1
25aab5d0 10537
461c6fce
KL
10538 template <class U>
10539 struct S2
10540 { template <class V>
10541 friend struct S1; };
25aab5d0 10542
461c6fce
KL
10543 Here, the S2::S1 declaration should not be confused with the
10544 outer declaration. In particular, the inner version should
10545 have a template parameter of level 2, not level 1. This
10546 would be particularly important if the member declaration
10547 were instead:
25aab5d0 10548
461c6fce 10549 template <class V = U> friend struct S1;
25aab5d0 10550
461c6fce
KL
10551 say, when we should tsubst into `U' when instantiating
10552 S2. On the other hand, when presented with:
25aab5d0 10553
461c6fce
KL
10554 template <class T>
10555 struct S1 {
10556 template <class U>
10557 struct S2 {};
10558 template <class U>
10559 friend struct S2;
10560 };
25aab5d0 10561
461c6fce
KL
10562 we must find the inner binding eventually. We
10563 accomplish this by making sure that the new type we
10564 create to represent this declaration has the right
10565 TYPE_CONTEXT. */
10566 context = TYPE_CONTEXT (t);
10567 t = NULL_TREE;
8d08fdba
MS
10568 }
10569
cbd63935 10570 if (! t)
8d08fdba
MS
10571 {
10572 /* If no such tag is yet defined, create a forward-reference node
10573 and record it as the "definition".
10574 When a real declaration of this type is found,
10575 the forward-reference will be altered into a real type. */
8d08fdba
MS
10576 if (code == ENUMERAL_TYPE)
10577 {
2d01edd7 10578 error ("use of enum %q#D without previous declaration", name);
30fc3df7 10579 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
8d08fdba 10580 }
8d08fdba
MS
10581 else
10582 {
9e1e64ec 10583 t = make_class_type (code);
cbd63935 10584 TYPE_CONTEXT (t) = context;
bd3d082e 10585 t = pushtag (name, t, scope);
8d08fdba
MS
10586 }
10587 }
10588 else
10589 {
9e1e64ec 10590 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
60feef2c
LM
10591 {
10592 if (!redeclare_class_template (t, current_template_parms))
10593 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10594 }
caf93cb0 10595 else if (!processing_template_decl
9ce1594a
MM
10596 && CLASS_TYPE_P (t)
10597 && CLASSTYPE_IS_TEMPLATE (t))
10598 {
2d01edd7 10599 error ("redeclaration of %qT as a non-template", t);
b646edb8
VR
10600 error ("previous declaration %q+D", t);
10601 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9ce1594a 10602 }
bd3d082e
KL
10603
10604 /* Make injected friend class visible. */
10605 if (scope != ts_within_enclosing_non_class
10606 && hidden_name_p (TYPE_NAME (t)))
10607 {
10608 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
10609 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
10610
10611 if (TYPE_TEMPLATE_INFO (t))
10612 {
10613 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
10614 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
10615 }
0cbd7506 10616 }
8d08fdba
MS
10617 }
10618
cbd63935 10619 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
8d08fdba 10620}
8ccc31eb 10621
fc378698 10622tree
29ef83de 10623xref_tag_from_type (tree old, tree id, tag_scope scope)
fc378698 10624{
88e5899c 10625 enum tag_types tag_kind;
fc378698
MS
10626
10627 if (TREE_CODE (old) == RECORD_TYPE)
88e5899c 10628 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
fc378698 10629 else
88e5899c 10630 tag_kind = union_type;
fc378698
MS
10631
10632 if (id == NULL_TREE)
10633 id = TYPE_IDENTIFIER (old);
10634
29ef83de 10635 return xref_tag (tag_kind, id, scope, false);
fc378698
MS
10636}
10637
48b45647
NS
10638/* Create the binfo hierarchy for REF with (possibly NULL) base list
10639 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
10640 access_* node, and the TREE_VALUE is the type of the base-class.
72f8fc59
LM
10641 Non-NULL TREE_TYPE indicates virtual inheritance.
10642
bd6f7848 10643 Returns true if the binfo hierarchy was successfully created,
72f8fc59 10644 false if an error was detected. */
3fd71a52 10645
72f8fc59 10646bool
dbbf88d1 10647xref_basetypes (tree ref, tree base_list)
8ccc31eb 10648{
8fbc5ae7 10649 tree *basep;
fa743e8c 10650 tree binfo, base_binfo;
03fd3f84 10651 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
77880ae4 10652 unsigned max_bases = 0; /* Maximum direct bases. */
8fbc5ae7 10653 int i;
48b45647
NS
10654 tree default_access;
10655 tree igo_prev; /* Track Inheritance Graph Order. */
a5d7c4a3 10656
bef89e9e 10657 if (ref == error_mark_node)
72f8fc59 10658 return false;
bef89e9e 10659
48b45647
NS
10660 /* The base of a derived class is private by default, all others are
10661 public. */
10662 default_access = (TREE_CODE (ref) == RECORD_TYPE
10663 && CLASSTYPE_DECLARED_CLASS (ref)
10664 ? access_private_node : access_public_node);
da15dae6 10665
d6479fe7
MM
10666 /* First, make sure that any templates in base-classes are
10667 instantiated. This ensures that if we call ourselves recursively
10668 we do not get confused about which classes are marked and which
10669 are not. */
caf93cb0
EC
10670 basep = &base_list;
10671 while (*basep)
8fbc5ae7
MM
10672 {
10673 tree basetype = TREE_VALUE (*basep);
caf93cb0 10674
8fbc5ae7
MM
10675 if (!(processing_template_decl && uses_template_parms (basetype))
10676 && !complete_type_or_else (basetype, NULL))
dbbf88d1 10677 /* An incomplete type. Remove it from the list. */
8fbc5ae7
MM
10678 *basep = TREE_CHAIN (*basep);
10679 else
48b45647
NS
10680 {
10681 max_bases++;
10682 if (TREE_TYPE (*basep))
10683 max_vbases++;
10684 if (CLASS_TYPE_P (basetype))
10685 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
10686 basep = &TREE_CHAIN (*basep);
10687 }
8fbc5ae7 10688 }
d6479fe7 10689
3543e114 10690 TYPE_MARKED_P (ref) = 1;
48b45647 10691
cad7e87b
NS
10692 /* The binfo slot should be empty, unless this is an (ill-formed)
10693 redefinition. */
50bc768d
NS
10694 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
10695 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
caf93cb0 10696
fa743e8c 10697 binfo = make_tree_binfo (max_bases);
caf93cb0 10698
48b45647
NS
10699 TYPE_BINFO (ref) = binfo;
10700 BINFO_OFFSET (binfo) = size_zero_node;
10701 BINFO_TYPE (binfo) = ref;
caf93cb0 10702
48b45647
NS
10703 if (max_bases)
10704 {
d4e6fecb 10705 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
48b45647
NS
10706 /* An aggregate cannot have baseclasses. */
10707 CLASSTYPE_NON_AGGREGATE (ref) = 1;
caf93cb0 10708
48b45647 10709 if (TREE_CODE (ref) == UNION_TYPE)
72f8fc59
LM
10710 {
10711 error ("derived union %qT invalid", ref);
10712 return false;
10713 }
48b45647 10714 }
caf93cb0 10715
48b45647 10716 if (max_bases > 1)
dbbf88d1 10717 {
48b45647 10718 if (TYPE_FOR_JAVA (ref))
72f8fc59
LM
10719 {
10720 error ("Java class %qT cannot have multiple bases", ref);
10721 return false;
10722 }
48b45647 10723 }
caf93cb0 10724
48b45647
NS
10725 if (max_vbases)
10726 {
d4e6fecb 10727 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
caf93cb0 10728
48b45647 10729 if (TYPE_FOR_JAVA (ref))
72f8fc59
LM
10730 {
10731 error ("Java class %qT cannot have virtual bases", ref);
10732 return false;
10733 }
48b45647 10734 }
cad7e87b 10735
48b45647
NS
10736 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
10737 {
10738 tree access = TREE_PURPOSE (base_list);
10739 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
10740 tree basetype = TREE_VALUE (base_list);
caf93cb0 10741
48b45647
NS
10742 if (access == access_default_node)
10743 access = default_access;
caf93cb0 10744
5d80a306
DG
10745 if (PACK_EXPANSION_P (basetype))
10746 basetype = PACK_EXPANSION_PATTERN (basetype);
48b45647
NS
10747 if (TREE_CODE (basetype) == TYPE_DECL)
10748 basetype = TREE_TYPE (basetype);
76871f0f 10749 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
48b45647 10750 {
2d01edd7 10751 error ("base type %qT fails to be a struct or class type",
48b45647 10752 basetype);
72f8fc59 10753 return false;
8ccc31eb 10754 }
caf93cb0 10755
48b45647
NS
10756 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
10757 TYPE_FOR_JAVA (ref) = 1;
10758
fa743e8c 10759 base_binfo = NULL_TREE;
48b45647 10760 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
dbbf88d1 10761 {
48b45647 10762 base_binfo = TYPE_BINFO (basetype);
77880ae4 10763 /* The original basetype could have been a typedef'd type. */
48b45647 10764 basetype = BINFO_TYPE (base_binfo);
caf93cb0 10765
48b45647
NS
10766 /* Inherit flags from the base. */
10767 TYPE_HAS_NEW_OPERATOR (ref)
10768 |= TYPE_HAS_NEW_OPERATOR (basetype);
10769 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
10770 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
10771 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
48b45647 10772 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
3543e114
NS
10773 CLASSTYPE_DIAMOND_SHAPED_P (ref)
10774 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
10775 CLASSTYPE_REPEATED_BASE_P (ref)
10776 |= CLASSTYPE_REPEATED_BASE_P (basetype);
8fbc5ae7 10777 }
c8094d83 10778
98d6e9af
NS
10779 /* We must do this test after we've seen through a typedef
10780 type. */
10781 if (TYPE_MARKED_P (basetype))
10782 {
10783 if (basetype == ref)
2d01edd7 10784 error ("recursive type %qT undefined", basetype);
98d6e9af 10785 else
2d01edd7 10786 error ("duplicate base type %qT invalid", basetype);
72f8fc59 10787 return false;
98d6e9af 10788 }
5d80a306
DG
10789
10790 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
10791 /* Regenerate the pack expansion for the bases. */
10792 basetype = make_pack_expansion (basetype);
10793
98d6e9af 10794 TYPE_MARKED_P (basetype) = 1;
caf93cb0 10795
48b45647
NS
10796 base_binfo = copy_binfo (base_binfo, basetype, ref,
10797 &igo_prev, via_virtual);
10798 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
10799 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
f5c28a15 10800
fa743e8c 10801 BINFO_BASE_APPEND (binfo, base_binfo);
63d1c7b3 10802 BINFO_BASE_ACCESS_APPEND (binfo, access);
cad7e87b
NS
10803 }
10804
3543e114
NS
10805 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
10806 /* If we have space in the vbase vector, we must have shared at
10807 least one of them, and are therefore diamond shaped. */
10808 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
10809
dbbf88d1 10810 /* Unmark all the types. */
fa743e8c 10811 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
3543e114
NS
10812 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10813 TYPE_MARKED_P (ref) = 0;
10814
10815 /* Now see if we have a repeated base type. */
10816 if (!CLASSTYPE_REPEATED_BASE_P (ref))
10817 {
10818 for (base_binfo = binfo; base_binfo;
10819 base_binfo = TREE_CHAIN (base_binfo))
10820 {
10821 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10822 {
10823 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
10824 break;
10825 }
10826 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
10827 }
10828 for (base_binfo = binfo; base_binfo;
10829 base_binfo = TREE_CHAIN (base_binfo))
10830 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10831 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10832 else
10833 break;
10834 }
72f8fc59
LM
10835
10836 return true;
8ccc31eb 10837}
68642fb6 10838
8d08fdba 10839\f
8d08fdba 10840/* Begin compiling the definition of an enumeration type.
adf2edec
DG
10841 NAME is its name,
10842
10843 UNDERLYING_TYPE is the type that will be used as the storage for
10844 the enumeration type. This should be NULL_TREE if no storage type
10845 was specified.
10846
10847 SCOPED_ENUM_P is true if this is a scoped enumeration type.
10848
8d08fdba
MS
10849 Returns the type object, as yet incomplete.
10850 Also records info about it so that build_enumerator
10851 may be used to declare the individual values as they are read. */
10852
10853tree
adf2edec 10854start_enum (tree name, tree underlying_type, bool scoped_enum_p)
8d08fdba 10855{
29ef83de
KL
10856 tree enumtype;
10857
10858 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
8d08fdba
MS
10859
10860 /* If this is the real definition for a previous forward reference,
10861 fill in the contents in the same object that used to be the
10862 forward reference. */
10863
29ef83de
KL
10864 enumtype = lookup_and_check_tag (enum_type, name,
10865 /*tag_scope=*/ts_current,
10866 /*template_header_p=*/false);
8d08fdba
MS
10867
10868 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
30ff8252 10869 {
2d01edd7 10870 error ("multiple definition of %q#T", enumtype);
ddd2d57e 10871 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
58595203
MM
10872 /* Clear out TYPE_VALUES, and start again. */
10873 TYPE_VALUES (enumtype) = NULL_TREE;
30ff8252 10874 }
8d08fdba
MS
10875 else
10876 {
29ef83de
KL
10877 /* In case of error, make a dummy enum to allow parsing to
10878 continue. */
10879 if (enumtype == error_mark_node)
10880 name = make_anon_name ();
10881
8d08fdba 10882 enumtype = make_node (ENUMERAL_TYPE);
bd3d082e 10883 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
8d08fdba
MS
10884 }
10885
adf2edec
DG
10886 if (scoped_enum_p)
10887 {
10888 SET_SCOPED_ENUM_P (enumtype, 1);
10889 begin_scope (sk_scoped_enum, enumtype);
10890
10891 /* [C++0x dcl.enum]p5:
10892
10893 If not explicitly specified, the underlying type of a scoped
10894 enumeration type is int. */
10895 if (!underlying_type)
10896 underlying_type = integer_type_node;
10897 }
10898
10899 if (underlying_type)
10900 {
10901 if (CP_INTEGRAL_TYPE_P (underlying_type))
10902 {
10903 TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (underlying_type);
10904 TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (underlying_type);
10905 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
10906 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
10907 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
10908 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
10909 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
10910 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
10911 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
10912 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
10913 }
10914 else
10915 error ("underlying type %<%T%> of %<%T%> must be an integral type",
10916 underlying_type, enumtype);
10917 }
10918
8d08fdba
MS
10919 return enumtype;
10920}
10921
10922/* After processing and defining all the values of an enumeration type,
10923 install their decls in the enumeration type and finish it off.
968b956a 10924 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
8d08fdba 10925
968b956a 10926void
11f6b451 10927finish_enum (tree enumtype)
8d08fdba 10928{
7b6d72fc
MM
10929 tree values;
10930 tree decl;
968b956a
MM
10931 tree minnode;
10932 tree maxnode;
adf2edec 10933 tree value;
968b956a
MM
10934 tree t;
10935 bool unsignedp;
f6af9a15 10936 bool use_short_enum;
968b956a 10937 int lowprec;
caf93cb0 10938 int highprec;
968b956a 10939 int precision;
7b6d72fc 10940 integer_type_kind itk;
ad96995b 10941 tree underlying_type = NULL_TREE;
adf2edec
DG
10942 bool fixed_underlying_type_p
10943 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
968b956a
MM
10944
10945 /* We built up the VALUES in reverse order. */
10946 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
10947
f5d70cc0
JM
10948 /* For an enum defined in a template, just set the type of the values;
10949 all further processing is postponed until the template is
10950 instantiated. We need to set the type so that tsubst of a CONST_DECL
10951 works. */
968b956a
MM
10952 if (processing_template_decl)
10953 {
caf93cb0
EC
10954 for (values = TYPE_VALUES (enumtype);
10955 values;
7b6d72fc
MM
10956 values = TREE_CHAIN (values))
10957 TREE_TYPE (TREE_VALUE (values)) = enumtype;
5f261ba9 10958 if (at_function_scope_p ())
968b956a 10959 add_stmt (build_min (TAG_DEFN, enumtype));
968b956a
MM
10960 return;
10961 }
10962
7b6d72fc 10963 /* Determine the minimum and maximum values of the enumerators. */
968b956a 10964 if (TYPE_VALUES (enumtype))
8d08fdba 10965 {
968b956a 10966 minnode = maxnode = NULL_TREE;
5566b478 10967
caf93cb0 10968 for (values = TYPE_VALUES (enumtype);
adf2edec
DG
10969 values;
10970 values = TREE_CHAIN (values))
10971 {
10972 decl = TREE_VALUE (values);
10973
10974 /* [dcl.enum]: Following the closing brace of an enum-specifier,
10975 each enumerator has the type of its enumeration. Prior to the
10976 closing brace, the type of each enumerator is the type of its
10977 initializing value. */
10978 TREE_TYPE (decl) = enumtype;
10979
10980 /* Update the minimum and maximum values, if appropriate. */
10981 value = DECL_INITIAL (decl);
10982 if (value == error_mark_node)
10983 value = integer_zero_node;
10984 /* Figure out what the minimum and maximum values of the
10985 enumerators are. */
10986 if (!minnode)
10987 minnode = maxnode = value;
10988 else if (tree_int_cst_lt (maxnode, value))
10989 maxnode = value;
10990 else if (tree_int_cst_lt (value, minnode))
10991 minnode = value;
10992 }
8d08fdba 10993 }
f376e137 10994 else
7b6d72fc 10995 /* [dcl.enum]
adf2edec 10996
7b6d72fc
MM
10997 If the enumerator-list is empty, the underlying type is as if
10998 the enumeration had a single enumerator with value 0. */
968b956a
MM
10999 minnode = maxnode = integer_zero_node;
11000
11001 /* Compute the number of bits require to represent all values of the
11002 enumeration. We must do this before the type of MINNODE and
cdd6a337
MLI
11003 MAXNODE are transformed, since tree_int_cst_min_precision relies
11004 on the TREE_TYPE of the value it is passed. */
968b956a 11005 unsignedp = tree_int_cst_sgn (minnode) >= 0;
cdd6a337
MLI
11006 lowprec = tree_int_cst_min_precision (minnode, unsignedp);
11007 highprec = tree_int_cst_min_precision (maxnode, unsignedp);
968b956a
MM
11008 precision = MAX (lowprec, highprec);
11009
adf2edec
DG
11010 if (!fixed_underlying_type_p)
11011 {
11012 /* Determine the underlying type of the enumeration.
7b6d72fc 11013
adf2edec 11014 [dcl.enum]
7b6d72fc 11015
adf2edec
DG
11016 The underlying type of an enumeration is an integral type that
11017 can represent all the enumerator values defined in the
11018 enumeration. It is implementation-defined which integral type is
11019 used as the underlying type for an enumeration except that the
11020 underlying type shall not be larger than int unless the value of
11021 an enumerator cannot fit in an int or unsigned int.
7b6d72fc 11022
adf2edec
DG
11023 We use "int" or an "unsigned int" as the underlying type, even if
11024 a smaller integral type would work, unless the user has
11025 explicitly requested that we use the smallest possible type. The
11026 user can request that for all enumerations with a command line
11027 flag, or for just one enumeration with an attribute. */
f6af9a15 11028
adf2edec
DG
11029 use_short_enum = flag_short_enums
11030 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
f6af9a15 11031
adf2edec
DG
11032 for (itk = (use_short_enum ? itk_char : itk_int);
11033 itk != itk_none;
11034 itk++)
11035 {
11036 underlying_type = integer_types[itk];
11037 if (TYPE_PRECISION (underlying_type) >= precision
11038 && TYPE_UNSIGNED (underlying_type) == unsignedp)
11039 break;
11040 }
11041 if (itk == itk_none)
11042 {
11043 /* DR 377
11044
11045 IF no integral type can represent all the enumerator values, the
11046 enumeration is ill-formed. */
11047 error ("no integral type can represent all of the enumerator values "
11048 "for %qT", enumtype);
11049 precision = TYPE_PRECISION (long_long_integer_type_node);
11050 underlying_type = integer_types[itk_unsigned_long_long];
11051 }
7b6d72fc 11052
adf2edec
DG
11053 /* [dcl.enum]
11054
11055 The value of sizeof() applied to an enumeration type, an object
11056 of an enumeration type, or an enumerator, is the value of sizeof()
11057 applied to the underlying type. */
11058 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11059 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11060 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
11061 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11062 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11063 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11064
11065 /* Set the underlying type of the enumeration type to the
11066 computed enumeration type, restricted to the enumerator
11067 values. */
11068 ENUM_UNDERLYING_TYPE (enumtype) = copy_node (underlying_type);
11069 set_min_and_max_values_for_integral_type
11070 (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
e455bc27 11071 }
adf2edec
DG
11072 else
11073 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
e455bc27 11074
39a13be5 11075 /* Compute the minimum and maximum values for the type.
8d08fdba 11076
7b6d72fc
MM
11077 [dcl.enum]
11078
11079 For an enumeration where emin is the smallest enumerator and emax
11080 is the largest, the values of the enumeration are the values of the
11081 underlying type in the range bmin to bmax, where bmin and bmax are,
11082 respectively, the smallest and largest values of the smallest bit-
11083 field that can store emin and emax. */
adf2edec 11084
d0c5c9b1
RS
11085 /* The middle-end currently assumes that types with TYPE_PRECISION
11086 narrower than their underlying type are suitably zero or sign
11087 extended to fill their mode. g++ doesn't make these guarantees.
11088 Until the middle-end can represent such paradoxical types, we
77880ae4 11089 set the TYPE_PRECISION to the width of the underlying type. */
d0c5c9b1 11090 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
adf2edec 11091
7b6d72fc 11092 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
adf2edec 11093
7b6d72fc
MM
11094 /* Convert each of the enumerators to the type of the underlying
11095 type of the enumeration. */
11096 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
11097 {
3c955a04
MM
11098 location_t saved_location;
11099
7b6d72fc 11100 decl = TREE_VALUE (values);
3c955a04
MM
11101 saved_location = input_location;
11102 input_location = DECL_SOURCE_LOCATION (decl);
adf2edec
DG
11103 if (fixed_underlying_type_p)
11104 /* If the enumeration type has a fixed underlying type, we
11105 already checked all of the enumerator values. */
11106 value = DECL_INITIAL (decl);
11107 else
11108 value = perform_implicit_conversion (underlying_type,
11109 DECL_INITIAL (decl),
11110 tf_warning_or_error);
3c955a04 11111 input_location = saved_location;
89b0433e
NS
11112
11113 /* Do not clobber shared ints. */
11114 value = copy_node (value);
c8094d83 11115
7b6d72fc
MM
11116 TREE_TYPE (value) = enumtype;
11117 DECL_INITIAL (decl) = value;
e455bc27 11118 }
8d08fdba 11119
968b956a
MM
11120 /* Fix up all variant types of this enum type. */
11121 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
11122 {
11123 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
11124 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
11125 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
11126 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
11127 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
11128 TYPE_MODE (t) = TYPE_MODE (enumtype);
11129 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
11130 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
11131 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
8df83eae 11132 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
adf2edec 11133 ENUM_UNDERLYING_TYPE (t) = ENUM_UNDERLYING_TYPE (enumtype);
cbf882af
MM
11134 }
11135
adf2edec
DG
11136 /* Finish up the scope of a scoped enumeration. */
11137 if (SCOPED_ENUM_P (enumtype))
11138 finish_scope ();
11139
968b956a
MM
11140 /* Finish debugging output for this type. */
11141 rest_of_type_compilation (enumtype, namespace_bindings_p ());
8d08fdba
MS
11142}
11143
079e1098 11144/* Build and install a CONST_DECL for an enumeration constant of the
58595203 11145 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
8d08fdba
MS
11146 Assignment of sequential values by default is handled here. */
11147
58595203 11148void
11f6b451 11149build_enumerator (tree name, tree value, tree enumtype)
8d08fdba 11150{
58595203 11151 tree decl;
e8bd800e 11152 tree context;
58595203 11153 tree type;
8d08fdba 11154
93678513
MM
11155 /* If the VALUE was erroneous, pretend it wasn't there; that will
11156 result in the enum being assigned the next value in sequence. */
11157 if (value == error_mark_node)
11158 value = NULL_TREE;
11159
8d08fdba
MS
11160 /* Remove no-op casts from the value. */
11161 if (value)
11162 STRIP_TYPE_NOPS (value);
11163
58595203
MM
11164 if (! processing_template_decl)
11165 {
11166 /* Validate and default VALUE. */
11167 if (value != NULL_TREE)
11168 {
8a784e4a 11169 value = integral_constant_value (value);
58595203
MM
11170
11171 if (TREE_CODE (value) == INTEGER_CST)
11172 {
0a72704b 11173 value = perform_integral_promotions (value);
58595203
MM
11174 constant_expression_warning (value);
11175 }
11176 else
11177 {
253e0d15 11178 error ("enumerator value for %qD is not an integer constant", name);
58595203
MM
11179 value = NULL_TREE;
11180 }
11181 }
11182
11183 /* Default based on previous value. */
6a540f3c 11184 if (value == NULL_TREE)
58595203 11185 {
58595203
MM
11186 if (TYPE_VALUES (enumtype))
11187 {
ff4eb0b5
ZW
11188 HOST_WIDE_INT hi;
11189 unsigned HOST_WIDE_INT lo;
11190 tree prev_value;
11191 bool overflowed;
11192
0f7a47dd 11193 /* The next value is the previous value plus one.
ff4eb0b5
ZW
11194 add_double doesn't know the type of the target expression,
11195 so we must check with int_fits_type_p as well. */
58595203 11196 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
0f7a47dd
JJ
11197 if (error_operand_p (prev_value))
11198 value = error_mark_node;
11199 else
3c955a04 11200 {
0f7a47dd
JJ
11201 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
11202 TREE_INT_CST_HIGH (prev_value),
11203 1, 0, &lo, &hi);
11204 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
11205 overflowed
11206 |= !int_fits_type_p (value, TREE_TYPE (prev_value));
11207
11208 if (overflowed)
11209 {
11210 error ("overflow in enumeration values at %qD", name);
11211 value = error_mark_node;
11212 }
3c955a04 11213 }
58595203
MM
11214 }
11215 else
11216 value = integer_zero_node;
11217 }
11218
11219 /* Remove no-op casts from the value. */
f5d70cc0 11220 STRIP_TYPE_NOPS (value);
adf2edec
DG
11221
11222 /* If the underlying type of the enum is fixed, check whether
11223 the enumerator values fits in the underlying type. If it
11224 does not fit, the program is ill-formed [C++0x dcl.enum]. */
11225 if (ENUM_UNDERLYING_TYPE (enumtype)
11226 && value
11227 && TREE_CODE (value) == INTEGER_CST
11228 && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
11229 {
11230 error ("enumerator value %E is too large for underlying type %<%T%>",
11231 value, ENUM_UNDERLYING_TYPE (enumtype));
11232
11233 /* Silently convert the value so that we can continue. */
11234 value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
11235 value, tf_none);
adf2edec 11236 }
58595203 11237 }
8d08fdba 11238
8d08fdba 11239 /* C++ associates enums with global, function, or class declarations. */
58595203
MM
11240 context = current_scope ();
11241
11242 /* Build the actual enumeration constant. Note that the enumeration
adf2edec
DG
11243 constants have the underlying type of the enum (if it is fixed)
11244 or the type of their initializer (if the underlying type of the
11245 enum is not fixed):
11246
11247 [ C++0x dcl.enum ]
11248
11249 If the underlying type is fixed, the type of each enumerator
11250 prior to the closing brace is the underlying type; if the
11251 initializing value of an enumerator cannot be represented by
11252 the underlying type, the program is ill-formed. If the
11253 underlying type is not fixed, the type of each enumerator is
11254 the type of its initializing value.
11255
11256 If the underlying type is not fixed, it will be computed by
11257 finish_enum and we will reset the type of this enumerator. Of
11258 course, if we're processing a template, there may be no value. */
58595203
MM
11259 type = value ? TREE_TYPE (value) : NULL_TREE;
11260
11261 if (context && context == current_class_type)
11262 /* This enum declaration is local to the class. We need the full
8f17b5c5 11263 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
58595203
MM
11264 decl = build_lang_decl (CONST_DECL, name, type);
11265 else
11266 /* It's a global enum, or it's local to a function. (Note local to
e8bd800e 11267 a function could mean local to a class method. */
58595203 11268 decl = build_decl (CONST_DECL, name, type);
e8bd800e 11269
58595203 11270 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
6de9cd9a 11271 TREE_CONSTANT (decl) = 1;
6de9cd9a 11272 TREE_READONLY (decl) = 1;
58595203 11273 DECL_INITIAL (decl) = value;
e8bd800e 11274
58595203
MM
11275 if (context && context == current_class_type)
11276 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
7b6d72fc
MM
11277 on the TYPE_FIELDS list for `S'. (That's so that you can say
11278 things like `S::i' later.) */
58595203
MM
11279 finish_member_declaration (decl);
11280 else
9780c24f 11281 pushdecl (decl);
58595203
MM
11282
11283 /* Add this enumeration constant to the list for this type. */
11284 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
8d08fdba
MS
11285}
11286
adf2edec
DG
11287/* Look for an enumerator with the given NAME within the enumeration
11288 type ENUMTYPE. This routine is used primarily for qualified name
11289 lookup into an enumerator in C++0x, e.g.,
11290
11291 enum class Color { Red, Green, Blue };
11292
11293 Color color = Color::Red;
11294
11295 Returns the value corresponding to the enumerator, or
11296 NULL_TREE if no such enumerator was found. */
11297tree
11298lookup_enumerator (tree enumtype, tree name)
11299{
11300 tree e;
11301 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
11302
11303 e = purpose_member (name, TYPE_VALUES (enumtype));
11304 return e? TREE_VALUE (e) : NULL_TREE;
11305}
11306
8d08fdba 11307\f
a8f73d4b
MM
11308/* We're defining DECL. Make sure that it's type is OK. */
11309
11310static void
11f6b451 11311check_function_type (tree decl, tree current_function_parms)
a8f73d4b
MM
11312{
11313 tree fntype = TREE_TYPE (decl);
d0f062fb 11314 tree return_type = complete_type (TREE_TYPE (fntype));
a8f73d4b
MM
11315
11316 /* In a function definition, arg types must be complete. */
11317 require_complete_types_for_parms (current_function_parms);
11318
c9387915
GB
11319 if (dependent_type_p (return_type))
11320 return;
360f866c 11321 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
9e1e64ec 11322 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
a8f73d4b 11323 {
51b15ede 11324 tree args = TYPE_ARG_TYPES (fntype);
3db45ab5 11325
360f866c
JJ
11326 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
11327 error ("return type %q#T is incomplete", return_type);
11328 else
11329 error ("return type has Java class type %q#T", return_type);
a8f73d4b 11330
51b15ede 11331 /* Make it return void instead. */
a8f73d4b 11332 if (TREE_CODE (fntype) == METHOD_TYPE)
51b15ede
NS
11333 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
11334 void_type_node,
11335 TREE_CHAIN (args));
a8f73d4b 11336 else
51b15ede 11337 fntype = build_function_type (void_type_node, args);
68642fb6 11338 TREE_TYPE (decl)
a8f73d4b 11339 = build_exception_variant (fntype,
51b15ede 11340 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
a8f73d4b
MM
11341 }
11342 else
11343 abstract_virtuals_error (decl, TREE_TYPE (fntype));
11344}
11345
8d08fdba
MS
11346/* Create the FUNCTION_DECL for a function definition.
11347 DECLSPECS and DECLARATOR are the parts of the declaration;
11348 they describe the function's name and the type it returns,
11349 but twisted together in a fashion that parallels the syntax of C.
11350
a8f73d4b
MM
11351 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
11352 DECLARATOR is really the DECL for the function we are about to
11353 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
f444e36b 11354 indicating that the function is an inline defined in-class.
68642fb6 11355
8d08fdba
MS
11356 This function creates a binding context for the function body
11357 as well as setting up the FUNCTION_DECL in current_function_decl.
11358
8d08fdba
MS
11359 For C++, we must first check whether that datum makes any sense.
11360 For example, "class A local_a(1,2);" means that variable local_a
11361 is an aggregate of type A, which should have a constructor
72c4a4ca
GK
11362 applied to it with the argument list [1, 2].
11363
11364 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
11365 or may be a BLOCK if the function has been defined previously
11366 in this translation unit. On exit, DECL_INITIAL (decl1) will be
11367 error_mark_node if the function has never been defined, or
11368 a BLOCK if the function has been defined somewhere. */
8d08fdba 11369
058b15c1
MM
11370void
11371start_preparsed_function (tree decl1, tree attrs, int flags)
8d08fdba 11372{
8d08fdba
MS
11373 tree ctype = NULL_TREE;
11374 tree fntype;
11375 tree restype;
8d08fdba 11376 int doing_friend = 0;
e2500fed 11377 struct cp_binding_level *bl;
f444e36b 11378 tree current_function_parms;
3e3935a9 11379 struct c_fileinfo *finfo
c533e34d 11380 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
1ef0df47 11381 bool honor_interface;
8d08fdba 11382
8d08fdba 11383 /* Sanity check. */
50bc768d
NS
11384 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
11385 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
8d08fdba 11386
058b15c1
MM
11387 fntype = TREE_TYPE (decl1);
11388 if (TREE_CODE (fntype) == METHOD_TYPE)
11389 ctype = TYPE_METHOD_BASETYPE (fntype);
caf93cb0 11390
058b15c1
MM
11391 /* ISO C++ 11.4/5. A friend function defined in a class is in
11392 the (lexical) scope of the class in which it is defined. */
11393 if (!ctype && DECL_FRIEND_P (decl1))
8d08fdba 11394 {
058b15c1 11395 ctype = DECL_FRIEND_CONTEXT (decl1);
caf93cb0 11396
058b15c1
MM
11397 /* CTYPE could be null here if we're dealing with a template;
11398 for example, `inline friend float foo()' inside a template
11399 will have no CTYPE set. */
11400 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11401 ctype = NULL_TREE;
11402 else
11403 doing_friend = 1;
8d08fdba 11404 }
68642fb6 11405
97055d5c
AO
11406 if (DECL_DECLARED_INLINE_P (decl1)
11407 && lookup_attribute ("noinline", attrs))
dee15844 11408 warning (0, "inline function %q+D given attribute noinline", decl1);
97055d5c 11409
3a47c4e4
AO
11410 /* Handle gnu_inline attribute. */
11411 if (GNU_INLINE_P (decl1))
11412 {
11413 DECL_EXTERNAL (decl1) = 1;
11414 DECL_NOT_REALLY_EXTERN (decl1) = 0;
11415 DECL_INTERFACE_KNOWN (decl1) = 1;
12cdc4fa 11416 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
3a47c4e4
AO
11417 }
11418
5f6eeeb3
NS
11419 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
11420 /* This is a constructor, we must ensure that any default args
11421 introduced by this definition are propagated to the clones
11422 now. The clones are used directly in overload resolution. */
11423 adjust_clone_args (decl1);
11424
b35d4555
MM
11425 /* Sometimes we don't notice that a function is a static member, and
11426 build a METHOD_TYPE for it. Fix that up now. */
11427 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
11428 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
11429 {
3afb32a4 11430 revert_static_member_fn (decl1);
b35d4555
MM
11431 ctype = NULL_TREE;
11432 }
8d08fdba 11433
f181d4ae
MM
11434 /* Set up current_class_type, and enter the scope of the class, if
11435 appropriate. */
11436 if (ctype)
14d22dd6 11437 push_nested_class (ctype);
f181d4ae 11438 else if (DECL_STATIC_FUNCTION_P (decl1))
14d22dd6 11439 push_nested_class (DECL_CONTEXT (decl1));
f181d4ae
MM
11440
11441 /* Now that we have entered the scope of the class, we must restore
11442 the bindings for any template parameters surrounding DECL1, if it
11443 is an inline member template. (Order is important; consider the
11444 case where a template parameter has the same name as a field of
11445 the class.) It is not until after this point that
11446 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
a8f73d4b 11447 if (flags & SF_INCLASS_INLINE)
f181d4ae
MM
11448 maybe_begin_member_template_processing (decl1);
11449
56cb9733 11450 /* Effective C++ rule 15. */
9188c363 11451 if (warn_ecpp
596ea4e5 11452 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9188c363 11453 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
b323323f 11454 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
9188c363
MM
11455
11456 /* Make the init_value nonzero so pushdecl knows this is not tentative.
11457 error_mark_node is replaced below (in poplevel) with the BLOCK. */
b35d4555
MM
11458 if (!DECL_INITIAL (decl1))
11459 DECL_INITIAL (decl1) = error_mark_node;
9188c363 11460
9188c363
MM
11461 /* This function exists in static storage.
11462 (This does not mean `static' in the C sense!) */
11463 TREE_STATIC (decl1) = 1;
11464
11465 /* We must call push_template_decl after current_class_type is set
11466 up. (If we are processing inline definitions after exiting a
11467 class scope, current_class_type will be NULL_TREE until set above
11468 by push_nested_class.) */
11469 if (processing_template_decl)
11e97737
VR
11470 {
11471 /* FIXME: Handle error_mark_node more gracefully. */
11472 tree newdecl1 = push_template_decl (decl1);
11473 if (newdecl1 != error_mark_node)
0cbd7506 11474 decl1 = newdecl1;
11e97737 11475 }
9188c363 11476
f181d4ae 11477 /* We are now in the scope of the function being defined. */
8d08fdba 11478 current_function_decl = decl1;
f181d4ae 11479
5566b478
MS
11480 /* Save the parm names or decls from this function's declarator
11481 where store_parm_decls will find them. */
4546865e 11482 current_function_parms = DECL_ARGUMENTS (decl1);
8d08fdba 11483
a8f73d4b
MM
11484 /* Make sure the parameter and return types are reasonable. When
11485 you declare a function, these types can be incomplete, but they
11486 must be complete when you define the function. */
c9387915 11487 check_function_type (decl1, current_function_parms);
f181d4ae 11488
a8f73d4b
MM
11489 /* Build the return declaration for the function. */
11490 restype = TREE_TYPE (fntype);
e89a6075 11491 if (DECL_RESULT (decl1) == NULL_TREE)
a8f73d4b 11492 {
b785f485
RH
11493 tree resdecl;
11494
f7c0ffb4 11495 resdecl = build_decl (RESULT_DECL, 0, restype);
b785f485
RH
11496 DECL_ARTIFICIAL (resdecl) = 1;
11497 DECL_IGNORED_P (resdecl) = 1;
11498 DECL_RESULT (decl1) = resdecl;
11499
9804209d 11500 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
5566b478 11501 }
a8f73d4b 11502
a8f73d4b 11503 /* Let the user know we're compiling this function. */
ea11ca7e 11504 announce_function (decl1);
b7484fbe 11505
878cd289
MS
11506 /* Record the decl so that the function name is defined.
11507 If we already have a decl for this name, and it is a FUNCTION_DECL,
11508 use the old decl. */
a8f73d4b 11509 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
878cd289 11510 {
75650646 11511 /* A specialization is not used to guide overload resolution. */
18f5be99 11512 if (!DECL_FUNCTION_MEMBER_P (decl1)
caf93cb0 11513 && !(DECL_USE_TEMPLATE (decl1) &&
18f5be99 11514 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
b1a19c7c
MM
11515 {
11516 tree olddecl = pushdecl (decl1);
11517
11518 if (olddecl == error_mark_node)
11519 /* If something went wrong when registering the declaration,
11520 use DECL1; we have to have a FUNCTION_DECL to use when
11521 parsing the body of the function. */
11522 ;
11523 else
dfdec7a7
ILT
11524 {
11525 /* Otherwise, OLDDECL is either a previous declaration
11526 of the same function or DECL1 itself. */
11527
11528 if (warn_missing_declarations
11529 && olddecl == decl1
11530 && !DECL_MAIN_P (decl1)
11531 && TREE_PUBLIC (decl1)
11532 && !DECL_DECLARED_INLINE_P (decl1))
11533 {
11534 tree context;
11535
11536 /* Check whether DECL1 is in an anonymous
11537 namespace. */
11538 for (context = DECL_CONTEXT (decl1);
11539 context;
11540 context = DECL_CONTEXT (context))
11541 {
11542 if (TREE_CODE (context) == NAMESPACE_DECL
11543 && DECL_NAME (context) == NULL_TREE)
11544 break;
11545 }
11546
11547 if (context == NULL)
11548 warning (OPT_Wmissing_declarations,
11549 "no previous declaration for %q+D", decl1);
11550 }
11551
11552 decl1 = olddecl;
11553 }
b1a19c7c 11554 }
2c73f9f5 11555 else
b7698cf0 11556 {
a1c65f9f 11557 /* We need to set the DECL_CONTEXT. */
b7698cf0
JM
11558 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
11559 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
b7698cf0 11560 }
878cd289 11561 fntype = TREE_TYPE (decl1);
2ef06beb
MM
11562
11563 /* If #pragma weak applies, mark the decl appropriately now.
11564 The pragma only applies to global functions. Because
11565 determining whether or not the #pragma applies involves
11566 computing the mangled name for the declaration, we cannot
11567 apply the pragma until after we have merged this declaration
11568 with any previous declarations; if the original declaration
11569 has a linkage specification, that specification applies to
11570 the definition as well, and may affect the mangled name. */
11571 if (!DECL_CONTEXT (decl1))
11572 maybe_apply_pragma_weak (decl1);
878cd289 11573 }
5566b478 11574
72c4a4ca 11575 /* Reset this in case the call to pushdecl changed it. */
5566b478 11576 current_function_decl = decl1;
72c4a4ca
GK
11577
11578 gcc_assert (DECL_INITIAL (decl1));
11579
11580 /* This function may already have been parsed, in which case just
11581 return; our caller will skip over the body without parsing. */
11582 if (DECL_INITIAL (decl1) != error_mark_node)
11583 return;
11584
11585 /* Initialize RTL machinery. We cannot do this until
11586 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
11587 even when processing a template; this is how we get
11588 CFUN set up, and our per-function variables initialized.
11589 FIXME factor out the non-RTL stuff. */
11590 bl = current_binding_level;
182e0d71 11591 allocate_struct_function (decl1, processing_template_decl);
e8924938
PB
11592
11593 /* Initialize the language data structures. Whenever we start
11594 a new function, we destroy temporaries in the usual way. */
11595 cfun->language = GGC_CNEW (struct language_function);
11596 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
72c4a4ca
GK
11597 current_binding_level = bl;
11598
11599 /* Even though we're inside a function body, we still don't want to
11600 call expand_expr to calculate the size of a variable-sized array.
11601 We haven't necessarily assigned RTL to all variables yet, so it's
11602 not safe to try to expand expressions involving them. */
e3b5732b 11603 cfun->dont_save_pending_sizes_p = 1;
72c4a4ca
GK
11604
11605 /* Start the statement-tree, start the tree now. */
11606 DECL_SAVED_TREE (decl1) = push_stmt_list ();
878cd289 11607
78c120b5
MM
11608 /* If we are (erroneously) defining a function that we have already
11609 defined before, wipe out what we knew before. */
e2500fed
GK
11610 if (!DECL_PENDING_INLINE_P (decl1))
11611 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
b35d4555 11612
f444e36b 11613 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
b35d4555
MM
11614 {
11615 /* We know that this was set up by `grokclassfn'. We do not
11616 wait until `store_parm_decls', since evil parse errors may
11617 never get us to that point. Here we keep the consistency
11618 between `current_class_type' and `current_class_ptr'. */
11619 tree t = DECL_ARGUMENTS (decl1);
68642fb6 11620
50bc768d
NS
11621 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
11622 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
68642fb6
UD
11623
11624 cp_function_chain->x_current_class_ref
5ade1ed2 11625 = cp_build_indirect_ref (t, NULL, tf_warning_or_error);
b35d4555
MM
11626 cp_function_chain->x_current_class_ptr = t;
11627
018fc244
MM
11628 /* Constructors and destructors need to know whether they're "in
11629 charge" of initializing virtual base classes. */
e0fff4b3 11630 t = TREE_CHAIN (t);
454fa7a7 11631 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
e0fff4b3
JM
11632 {
11633 current_in_charge_parm = t;
11634 t = TREE_CHAIN (t);
11635 }
11636 if (DECL_HAS_VTT_PARM_P (decl1))
11637 {
8dc2b103 11638 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
e0fff4b3
JM
11639 current_vtt_parm = t;
11640 }
b35d4555
MM
11641 }
11642
1ef0df47
MM
11643 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
11644 /* Implicitly-defined methods (like the
11645 destructor for a class in which no destructor
11646 is explicitly declared) must not be defined
11647 until their definition is needed. So, we
11648 ignore interface specifications for
11649 compiler-generated functions. */
11650 && !DECL_ARTIFICIAL (decl1));
3db45ab5 11651
db5ae43f 11652 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 11653 {
4f1c5b7d 11654 tree ctx = decl_function_context (decl1);
86052cc3 11655
faae18ab
MS
11656 if (DECL_NOT_REALLY_EXTERN (decl1))
11657 DECL_EXTERNAL (decl1) = 0;
86052cc3 11658
79065db2 11659 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
86052cc3
JM
11660 && TREE_PUBLIC (ctx))
11661 /* This is a function in a local class in an extern inline
11662 function. */
11663 comdat_linkage (decl1);
faae18ab 11664 }
8d08fdba
MS
11665 /* If this function belongs to an interface, it is public.
11666 If it belongs to someone else's interface, it is also external.
1f901793 11667 This only affects inlines and template instantiations. */
1ef0df47 11668 else if (!finfo->interface_unknown && honor_interface)
8d08fdba 11669 {
caf93cb0 11670 if (DECL_DECLARED_INLINE_P (decl1)
79065db2 11671 || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 11672 || processing_template_decl)
1f901793
JM
11673 {
11674 DECL_EXTERNAL (decl1)
5d709b00 11675 = (finfo->interface_only
caf93cb0 11676 || (DECL_DECLARED_INLINE_P (decl1)
79065db2 11677 && ! flag_implement_inlines
9c73ec84 11678 && !DECL_VINDEX (decl1)));
1f901793
JM
11679
11680 /* For WIN32 we also want to put these in linkonce sections. */
11681 maybe_make_one_only (decl1);
11682 }
db5ae43f 11683 else
893de33c 11684 DECL_EXTERNAL (decl1) = 0;
db5ae43f 11685 DECL_INTERFACE_KNOWN (decl1) = 1;
4684cd27 11686 /* If this function is in an interface implemented in this file,
3b426391 11687 make sure that the back end knows to emit this function
4684cd27
MM
11688 here. */
11689 if (!DECL_EXTERNAL (decl1))
11690 mark_needed (decl1);
8d08fdba 11691 }
5d709b00 11692 else if (finfo->interface_unknown && finfo->interface_only
1ef0df47 11693 && honor_interface)
c16c47fb
JM
11694 {
11695 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
5d709b00
ZW
11696 interface, we will have both finfo->interface_unknown and
11697 finfo->interface_only set. In that case, we don't want to
11698 use the normal heuristics because someone will supply a
11699 #pragma implementation elsewhere, and deducing it here would
11700 produce a conflict. */
c16c47fb
JM
11701 comdat_linkage (decl1);
11702 DECL_EXTERNAL (decl1) = 0;
11703 DECL_INTERFACE_KNOWN (decl1) = 1;
11704 DECL_DEFER_OUTPUT (decl1) = 1;
11705 }
8d08fdba 11706 else
a0a33927
MS
11707 {
11708 /* This is a definition, not a reference.
3a47c4e4
AO
11709 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
11710 if (!GNU_INLINE_P (decl1))
11711 DECL_EXTERNAL (decl1) = 0;
faae18ab 11712
caf93cb0 11713 if ((DECL_DECLARED_INLINE_P (decl1)
79065db2 11714 || DECL_TEMPLATE_INSTANTIATION (decl1))
5566b478
MS
11715 && ! DECL_INTERFACE_KNOWN (decl1)
11716 /* Don't try to defer nested functions for now. */
4f1c5b7d 11717 && ! decl_function_context (decl1))
878cd289
MS
11718 DECL_DEFER_OUTPUT (decl1) = 1;
11719 else
893de33c 11720 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 11721 }
a9aedbc2 11722
0ed5edac
JM
11723 /* Determine the ELF visibility attribute for the function. We must not
11724 do this before calling "pushdecl", as we must allow "duplicate_decls"
11725 to merge any attributes appropriately. We also need to wait until
11726 linkage is set. */
11727 if (!DECL_CLONED_FUNCTION_P (decl1))
11728 determine_visibility (decl1);
11729
ac20c67a 11730 begin_scope (sk_function_parms, decl1);
8d08fdba 11731
5566b478
MS
11732 ++function_depth;
11733
44d10c10
PB
11734 if (DECL_DESTRUCTOR_P (decl1)
11735 || (DECL_CONSTRUCTOR_P (decl1)
11736 && targetm.cxx.cdtor_returns_this ()))
46e8c075 11737 {
44d10c10
PB
11738 cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
11739 DECL_CONTEXT (cdtor_label) = current_function_decl;
46e8c075 11740 }
8d08fdba 11741
0ba8a114 11742 start_fname_decls ();
caf93cb0 11743
f444e36b 11744 store_parm_decls (current_function_parms);
058b15c1
MM
11745}
11746
11747
11748/* Like start_preparsed_function, except that instead of a
11749 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
11750
11751 Returns 1 on success. If the DECLARATOR is not suitable for a function
11752 (it defines a datum instead), we return 0, which tells
11753 yyparse to report a parse error. */
11754
11755int
caf93cb0 11756start_function (cp_decl_specifier_seq *declspecs,
62d1db17 11757 const cp_declarator *declarator,
058b15c1
MM
11758 tree attrs)
11759{
11760 tree decl1;
11761
058b15c1
MM
11762 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
11763 /* If the declarator is not suitable for a function definition,
11764 cause a syntax error. */
11765 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
11766 return 0;
caf93cb0 11767
058b15c1 11768 if (DECL_MAIN_P (decl1))
2cfe82fe
ZW
11769 /* main must return int. grokfndecl should have corrected it
11770 (and issued a diagnostic) if the user got it wrong. */
11771 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
11772 integer_type_node));
058b15c1
MM
11773
11774 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
f444e36b 11775
8d08fdba
MS
11776 return 1;
11777}
11778\f
68d04c67
MM
11779/* Returns true iff an EH_SPEC_BLOCK should be created in the body of
11780 FN. */
11781
11782static bool
11783use_eh_spec_block (tree fn)
11784{
11785 return (flag_exceptions && flag_enforce_eh_specs
11786 && !processing_template_decl
11787 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
11788 /* We insert the EH_SPEC_BLOCK only in the original
11789 function; then, it is copied automatically to the
11790 clones. */
11791 && !DECL_CLONED_FUNCTION_P (fn)
11792 /* Implicitly-generated constructors and destructors have
11793 exception specifications. However, those specifications
11794 are the union of the possible exceptions specified by the
11795 constructors/destructors for bases and members, so no
11796 unallowed exception will ever reach this function. By
11797 not creating the EH_SPEC_BLOCK we save a little memory,
11798 and we avoid spurious warnings about unreachable
11799 code. */
11800 && !DECL_ARTIFICIAL (fn));
11801}
11802
8d08fdba
MS
11803/* Store the parameter declarations into the current function declaration.
11804 This is called after parsing the parameter declarations, before
11805 digesting the body of the function.
11806
11807 Also install to binding contour return value identifier, if any. */
11808
f444e36b 11809static void
11f6b451 11810store_parm_decls (tree current_function_parms)
8d08fdba 11811{
926ce8bd
KH
11812 tree fndecl = current_function_decl;
11813 tree parm;
8d08fdba 11814
8d08fdba
MS
11815 /* This is a chain of any other decls that came in among the parm
11816 declarations. If a parm is declared with enum {foo, bar} x;
11817 then CONST_DECLs for foo and bar are put here. */
11818 tree nonparms = NULL_TREE;
11819
b35d4555 11820 if (current_function_parms)
8d08fdba
MS
11821 {
11822 /* This case is when the function was defined with an ANSI prototype.
11823 The parms already have decls, so we need not do anything here
11824 except record them as in effect
11825 and complain if any redundant old-style parm decls were written. */
11826
b35d4555
MM
11827 tree specparms = current_function_parms;
11828 tree next;
11829
f444e36b 11830 /* Must clear this because it might contain TYPE_DECLs declared
b35d4555 11831 at class level. */
00e8de68 11832 current_binding_level->names = NULL;
8d08fdba 11833
f444e36b 11834 /* If we're doing semantic analysis, then we'll call pushdecl
b35d4555
MM
11835 for each of these. We must do them in reverse order so that
11836 they end in the correct forward order. */
f444e36b 11837 specparms = nreverse (specparms);
5566b478 11838
b35d4555 11839 for (parm = specparms; parm; parm = next)
8d08fdba
MS
11840 {
11841 next = TREE_CHAIN (parm);
11842 if (TREE_CODE (parm) == PARM_DECL)
11843 {
f444e36b
MM
11844 if (DECL_NAME (parm) == NULL_TREE
11845 || TREE_CODE (parm) != VOID_TYPE)
11846 pushdecl (parm);
11847 else
2d01edd7 11848 error ("parameter %qD declared void", parm);
8d08fdba
MS
11849 }
11850 else
11851 {
11852 /* If we find an enum constant or a type tag,
11853 put it aside for the moment. */
11854 TREE_CHAIN (parm) = NULL_TREE;
11855 nonparms = chainon (nonparms, parm);
11856 }
11857 }
11858
f444e36b
MM
11859 /* Get the decls in their original chain order and record in the
11860 function. This is all and only the PARM_DECLs that were
11861 pushed into scope by the loop above. */
11862 DECL_ARGUMENTS (fndecl) = getdecls ();
8d08fdba
MS
11863 }
11864 else
11865 DECL_ARGUMENTS (fndecl) = NULL_TREE;
11866
11867 /* Now store the final chain of decls for the arguments
11868 as the decl-chain of the current lexical scope.
11869 Put the enumerators in as well, at the front so that
11870 DECL_ARGUMENTS is not modified. */
00e8de68 11871 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
eb448459 11872
68d04c67
MM
11873 if (use_eh_spec_block (current_function_decl))
11874 current_eh_spec_block = begin_eh_spec_block ();
8d08fdba
MS
11875}
11876
8d08fdba 11877\f
59026e79
MM
11878/* We have finished doing semantic analysis on DECL, but have not yet
11879 generated RTL for its body. Save away our current state, so that
11880 when we want to generate RTL later we know what to do. */
11881
11882static void
11f6b451 11883save_function_data (tree decl)
59026e79 11884{
e2500fed 11885 struct language_function *f;
59026e79
MM
11886
11887 /* Save the language-specific per-function data so that we can
11888 get it back when we really expand this function. */
50bc768d 11889 gcc_assert (!DECL_PENDING_INLINE_P (decl));
68642fb6 11890
59026e79 11891 /* Make a copy. */
99dd239f 11892 f = GGC_NEW (struct language_function);
e2500fed 11893 memcpy (f, cp_function_chain, sizeof (struct language_function));
59026e79
MM
11894 DECL_SAVED_FUNCTION_DATA (decl) = f;
11895
11896 /* Clear out the bits we don't need. */
325c3691 11897 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
59026e79 11898 f->bindings = NULL;
8e4ce833 11899 f->x_local_names = NULL;
59026e79
MM
11900}
11901
cdd2559c 11902
44d10c10 11903/* Set the return value of the constructor (if present). */
efee38a9
MM
11904
11905static void
11f6b451 11906finish_constructor_body (void)
efee38a9 11907{
44d10c10
PB
11908 tree val;
11909 tree exprstmt;
11910
298b7d2b
AH
11911 if (targetm.cxx.cdtor_returns_this ()
11912 && (! TYPE_FOR_JAVA (current_class_type)))
44d10c10
PB
11913 {
11914 /* Any return from a constructor will end up here. */
11915 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
11916
11917 val = DECL_ARGUMENTS (current_function_decl);
f293ce4b
RS
11918 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
11919 DECL_RESULT (current_function_decl), val);
44d10c10
PB
11920 /* Return the address of the object. */
11921 exprstmt = build_stmt (RETURN_EXPR, val);
11922 add_stmt (exprstmt);
11923 }
efee38a9
MM
11924}
11925
cdd2559c
JM
11926/* Do all the processing for the beginning of a destructor; set up the
11927 vtable pointers and cleanups for bases and members. */
11928
11929static void
11f6b451 11930begin_destructor_body (void)
cdd2559c 11931{
cdd2559c
JM
11932 tree compound_stmt;
11933
0e686aa6
MM
11934 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
11935 issued an error message. We still want to try to process the
11936 body of the function, but initialize_vtbl_ptrs will crash if
11937 TYPE_BINFO is NULL. */
11938 if (COMPLETE_TYPE_P (current_class_type))
11939 {
11940 compound_stmt = begin_compound_stmt (0);
11941 /* Make all virtual function table pointers in non-virtual base
11942 classes point to CURRENT_CLASS_TYPE's virtual function
11943 tables. */
11944 initialize_vtbl_ptrs (current_class_ptr);
11945 finish_compound_stmt (compound_stmt);
3db45ab5 11946
0e686aa6
MM
11947 /* And insert cleanups for our bases and members so that they
11948 will be properly destroyed if we throw. */
11949 push_base_cleanups ();
11950 }
cdd2559c
JM
11951}
11952
ade3dc07
JM
11953/* At the end of every destructor we generate code to delete the object if
11954 necessary. Do that now. */
9bfadf57
MM
11955
11956static void
11f6b451 11957finish_destructor_body (void)
9bfadf57 11958{
9bfadf57
MM
11959 tree exprstmt;
11960
5633b37c
MM
11961 /* Any return from a destructor will end up here; that way all base
11962 and member cleanups will be run when the function returns. */
44d10c10 11963 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
5633b37c 11964
52682a1b
MM
11965 /* In a virtual destructor, we must call delete. */
11966 if (DECL_VIRTUAL_P (current_function_decl))
11967 {
11968 tree if_stmt;
fa72b064 11969 tree virtual_size = cxx_sizeof (current_class_type);
68642fb6 11970
52682a1b 11971 /* [class.dtor]
68642fb6 11972
ade3dc07
JM
11973 At the point of definition of a virtual destructor (including
11974 an implicit definition), non-placement operator delete shall
11975 be looked up in the scope of the destructor's class and if
11976 found shall be accessible and unambiguous. */
3db45ab5 11977 exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
63c9a190 11978 virtual_size,
3db45ab5
MS
11979 /*global_p=*/false,
11980 /*placement=*/NULL_TREE,
63c9a190 11981 /*alloc_fn=*/NULL_TREE);
298d6f60 11982
52682a1b 11983 if_stmt = begin_if_stmt ();
f293ce4b
RS
11984 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
11985 current_in_charge_parm,
11986 integer_one_node),
52682a1b
MM
11987 if_stmt);
11988 finish_expr_stmt (exprstmt);
11989 finish_then_clause (if_stmt);
325c3691 11990 finish_if_stmt (if_stmt);
52682a1b 11991 }
44d10c10
PB
11992
11993 if (targetm.cxx.cdtor_returns_this ())
11994 {
11995 tree val;
11996
11997 val = DECL_ARGUMENTS (current_function_decl);
f293ce4b
RS
11998 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
11999 DECL_RESULT (current_function_decl), val);
44d10c10
PB
12000 /* Return the address of the object. */
12001 exprstmt = build_stmt (RETURN_EXPR, val);
12002 add_stmt (exprstmt);
12003 }
ade3dc07 12004}
9bfadf57 12005
ade3dc07
JM
12006/* Do the necessary processing for the beginning of a function body, which
12007 in this case includes member-initializers, but not the catch clauses of
12008 a function-try-block. Currently, this means opening a binding level
86ad3aa9 12009 for the member-initializers (in a ctor) and member cleanups (in a dtor). */
ade3dc07
JM
12010
12011tree
11f6b451 12012begin_function_body (void)
ade3dc07 12013{
cdd2559c
JM
12014 tree stmt;
12015
86ad3aa9
JM
12016 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12017 return NULL_TREE;
12018
b5856475
JM
12019 if (processing_template_decl)
12020 /* Do nothing now. */;
12021 else
12022 /* Always keep the BLOCK node associated with the outermost pair of
12023 curly braces of a function. These are needed for correct
12024 operation of dwarfout.c. */
ac20c67a 12025 keep_next_level (true);
b5856475 12026
325c3691 12027 stmt = begin_compound_stmt (BCS_FN_BODY);
cdd2559c
JM
12028
12029 if (processing_template_decl)
12030 /* Do nothing now. */;
cdd2559c
JM
12031 else if (DECL_DESTRUCTOR_P (current_function_decl))
12032 begin_destructor_body ();
12033
ade3dc07 12034 return stmt;
9bfadf57
MM
12035}
12036
ade3dc07
JM
12037/* Do the processing for the end of a function body. Currently, this means
12038 closing out the cleanups for fully-constructed bases and members, and in
12039 the case of the destructor, deleting the object if desired. Again, this
12040 is only meaningful for [cd]tors, since they are the only functions where
12041 there is a significant distinction between the main body and any
12042 function catch clauses. Handling, say, main() return semantics here
12043 would be wrong, as flowing off the end of a function catch clause for
12044 main() would also need to return 0. */
12045
12046void
11f6b451 12047finish_function_body (tree compstmt)
ade3dc07 12048{
86ad3aa9
JM
12049 if (compstmt == NULL_TREE)
12050 return;
3db45ab5 12051
5633b37c 12052 /* Close the block. */
7a3397c7 12053 finish_compound_stmt (compstmt);
ade3dc07
JM
12054
12055 if (processing_template_decl)
12056 /* Do nothing now. */;
12057 else if (DECL_CONSTRUCTOR_P (current_function_decl))
12058 finish_constructor_body ();
12059 else if (DECL_DESTRUCTOR_P (current_function_decl))
12060 finish_destructor_body ();
caf93cb0 12061}
ade3dc07 12062
86ad3aa9
JM
12063/* Given a function, returns the BLOCK corresponding to the outermost level
12064 of curly braces, skipping the artificial block created for constructor
12065 initializers. */
12066
a68ab351 12067tree
86ad3aa9
JM
12068outer_curly_brace_block (tree fndecl)
12069{
12070 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
12071 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12072 /* Skip the artificial function body block. */
12073 block = BLOCK_SUBBLOCKS (block);
12074 return block;
12075}
12076
8d08fdba
MS
12077/* Finish up a function declaration and compile that function
12078 all the way to assembler language output. The free the storage
12079 for the function definition.
12080
68642fb6 12081 FLAGS is a bitwise or of the following values:
f181d4ae
MM
12082 2 - INCLASS_INLINE
12083 We just finished processing the body of an in-class inline
12084 function definition. (This processing will have taken place
87e3dbc9 12085 after the class definition is complete.) */
8d08fdba 12086
4d6abc1c 12087tree
11f6b451 12088finish_function (int flags)
8d08fdba 12089{
926ce8bd 12090 tree fndecl = current_function_decl;
8d08fdba 12091 tree fntype, ctype = NULL_TREE;
f181d4ae 12092 int inclass_inline = (flags & 2) != 0;
87e3dbc9 12093 int nested;
8d08fdba
MS
12094
12095 /* When we get some parse errors, we can end up without a
12096 current_function_decl, so cope. */
12097 if (fndecl == NULL_TREE)
4d6abc1c 12098 return error_mark_node;
8d08fdba 12099
3368cdd3
JJ
12100 gcc_assert (!defer_mark_used_calls);
12101 defer_mark_used_calls = true;
12102
9aad8f83
MA
12103 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
12104 && DECL_VIRTUAL_P (fndecl)
12105 && !processing_template_decl)
12106 {
12107 tree fnclass = DECL_CONTEXT (fndecl);
12108 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
12109 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
12110 }
12111
87e3dbc9 12112 nested = function_depth > 1;
8d08fdba
MS
12113 fntype = TREE_TYPE (fndecl);
12114
9bfadf57
MM
12115 /* TREE_READONLY (fndecl) = 1;
12116 This caused &foo to be of type ptr-to-const-function
12117 which then got a warning when stored in a ptr-to-function variable. */
8d08fdba 12118
50bc768d 12119 gcc_assert (building_stmt_tree ());
72c4a4ca
GK
12120 /* The current function is being defined, so its DECL_INITIAL should
12121 be set, and unless there's a multiple definition, it should be
12122 error_mark_node. */
12123 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
caf93cb0 12124
db9b2174
MM
12125 /* For a cloned function, we've already got all the code we need;
12126 there's no need to add any extra bits. */
f444e36b 12127 if (!DECL_CLONED_FUNCTION_P (fndecl))
8d08fdba 12128 {
ade3dc07 12129 if (DECL_MAIN_P (current_function_decl))
efee38a9 12130 {
43e05e45
SB
12131 tree stmt;
12132
12133 /* Make it so that `main' always returns 0 by default (or
12134 1 for VMS). */
08c7ae5a 12135#if VMS_TARGET
43e05e45 12136 stmt = finish_return_stmt (integer_one_node);
efee38a9 12137#else
43e05e45 12138 stmt = finish_return_stmt (integer_zero_node);
efee38a9 12139#endif
43e05e45
SB
12140 /* Hack. We don't want the middle-end to warn that this
12141 return is unreachable, so put the statement on the
12142 special line 0. */
5ffeb913
TT
12143 {
12144 location_t linezero = linemap_line_start (line_table, 0, 1);
12145 SET_EXPR_LOCATION (stmt, linezero);
12146 }
efee38a9 12147 }
87e3dbc9 12148
68d04c67 12149 if (use_eh_spec_block (current_function_decl))
52a11cbf
RH
12150 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
12151 (TREE_TYPE (current_function_decl)),
12152 current_eh_spec_block);
5566b478 12153 }
68642fb6 12154
558475f0 12155 /* If we're saving up tree structure, tie off the function now. */
325c3691
RH
12156 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
12157
12158 finish_fname_decls ();
8d2733ca 12159
b2dd096b
MM
12160 /* If this function can't throw any exceptions, remember that. */
12161 if (!processing_template_decl
12162 && !cp_function_chain->can_throw
be0436d7 12163 && !flag_non_call_exceptions
56fd65c7 12164 && !DECL_REPLACEABLE_P (fndecl))
b2dd096b
MM
12165 TREE_NOTHROW (fndecl) = 1;
12166
8d08fdba
MS
12167 /* This must come after expand_function_end because cleanups might
12168 have declarations (from inline functions) that need to go into
12169 this function's blocks. */
caf93cb0 12170
7437519c
ZW
12171 /* If the current binding level isn't the outermost binding level
12172 for this function, either there is a bug, or we have experienced
12173 syntax errors and the statement tree is malformed. */
a7e8c268 12174 if (current_binding_level->kind != sk_function_parms)
7437519c
ZW
12175 {
12176 /* Make sure we have already experienced errors. */
8dc2b103 12177 gcc_assert (errorcount);
7437519c
ZW
12178
12179 /* Throw away the broken statement tree and extra binding
0cbd7506 12180 levels. */
5882f0f3 12181 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
7437519c 12182
a7e8c268 12183 while (current_binding_level->kind != sk_function_parms)
7437519c 12184 {
a7e8c268 12185 if (current_binding_level->kind == sk_class)
7437519c
ZW
12186 pop_nested_class ();
12187 else
12188 poplevel (0, 0, 0);
12189 }
12190 }
f444e36b 12191 poplevel (1, 0, 1);
8d08fdba 12192
4985cde3
RH
12193 /* Statements should always be full-expressions at the outermost set
12194 of curly braces for a function. */
50bc768d 12195 gcc_assert (stmts_are_full_exprs_p ());
4985cde3 12196
6de9cd9a 12197 /* Set up the named return value optimization, if we can. Candidate
59fe9274 12198 variables are selected in check_return_expr. */
07b2f2fd
JM
12199 if (current_function_return_value)
12200 {
12201 tree r = current_function_return_value;
35e939ae
JM
12202 tree outer;
12203
07b2f2fd 12204 if (r != error_mark_node
35e939ae
JM
12205 /* This is only worth doing for fns that return in memory--and
12206 simpler, since we don't have to worry about promoted modes. */
61f71b34 12207 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
35e939ae
JM
12208 /* Only allow this for variables declared in the outer scope of
12209 the function so we know that their lifetime always ends with a
12210 return; see g++.dg/opt/nrv6.C. We could be more flexible if
12211 we were to do this optimization in tree-ssa. */
86ad3aa9 12212 && (outer = outer_curly_brace_block (fndecl))
325c3691 12213 && chain_member (r, BLOCK_VARS (outer)))
6de9cd9a
DN
12214 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
12215
12216 current_function_return_value = NULL_TREE;
07b2f2fd
JM
12217 }
12218
a8f73d4b 12219 /* Remember that we were in class scope. */
db5ae43f 12220 if (current_class_name)
a8f73d4b 12221 ctype = current_class_type;
db5ae43f 12222
1caa11d3
MM
12223 /* Must mark the RESULT_DECL as being in this function. */
12224 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12225
12226 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12227 to the FUNCTION_DECL node itself. */
12228 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12229
59026e79 12230 /* Save away current state, if appropriate. */
f444e36b 12231 if (!processing_template_decl)
59026e79
MM
12232 save_function_data (fndecl);
12233
efe49da0 12234 /* Complain if there's just no return statement. */
46cfb101 12235 if (warn_return_type
efe49da0 12236 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
c1b83cc9 12237 && !dependent_type_p (TREE_TYPE (fntype))
57d5032b 12238 && !current_function_returns_value && !current_function_returns_null
efe49da0
JM
12239 /* Don't complain if we abort or throw. */
12240 && !current_function_returns_abnormally
55e99d52 12241 && !DECL_NAME (DECL_RESULT (fndecl))
4847609e 12242 && !TREE_NO_WARNING (fndecl)
44d10c10
PB
12243 /* Structor return values (if any) are set by the compiler. */
12244 && !DECL_CONSTRUCTOR_P (fndecl)
12245 && !DECL_DESTRUCTOR_P (fndecl))
4847609e
JH
12246 {
12247 warning (OPT_Wreturn_type,
12248 "no return statement in function returning non-void");
12249 TREE_NO_WARNING (fndecl) = 1;
12250 }
4985cde3 12251
6de9cd9a
DN
12252 /* Store the end of the function, so that we get good line number
12253 info for the epilogue. */
12254 cfun->function_end_locus = input_location;
12255
12256 /* Genericize before inlining. */
12257 if (!processing_template_decl)
12258 {
37e6d6fe 12259 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
5a508662 12260 cp_genericize (fndecl);
37e6d6fe
JH
12261 /* Clear out the bits we don't need. */
12262 f->x_current_class_ptr = NULL;
12263 f->x_current_class_ref = NULL;
12264 f->x_eh_spec_block = NULL;
12265 f->x_in_charge_parm = NULL;
12266 f->x_vtt_parm = NULL;
12267 f->x_return_value = NULL;
12268 f->bindings = NULL;
10827cd8 12269 f->extern_decl_map = NULL;
6de9cd9a
DN
12270
12271 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
726a989a 12272 c_warn_unused_result (gimple_body (fndecl));
6de9cd9a 12273 }
37e6d6fe
JH
12274 /* Clear out the bits we don't need. */
12275 local_names = NULL;
6de9cd9a
DN
12276
12277 /* We're leaving the context of this function, so zap cfun. It's still in
12278 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
db2960f4 12279 set_cfun (NULL);
c1f927e8 12280 current_function_decl = NULL;
a8f73d4b 12281
27631dae 12282 /* If this is an in-class inline definition, we may have to pop the
a8f73d4b
MM
12283 bindings for the template parameters that we added in
12284 maybe_begin_member_template_processing when start_function was
12285 called. */
12286 if (inclass_inline)
12287 maybe_end_member_template_processing ();
12288
12289 /* Leave the scope of the class. */
12290 if (ctype)
12291 pop_nested_class ();
5566b478
MS
12292
12293 --function_depth;
8d08fdba 12294
4d6abc1c 12295 /* Clean up. */
28cbf42c 12296 if (! nested)
1f8f4a0b
MM
12297 /* Let the error reporting routines know that we're outside a
12298 function. For a nested function, this value is used in
b03e38e1 12299 cxx_pop_function_context and then reset via pop_function_context. */
1f8f4a0b 12300 current_function_decl = NULL_TREE;
4d6abc1c 12301
3368cdd3
JJ
12302 defer_mark_used_calls = false;
12303 if (deferred_mark_used_calls)
12304 {
12305 unsigned int i;
12306 tree decl;
12307
12308 for (i = 0; VEC_iterate (tree, deferred_mark_used_calls, i, decl); i++)
12309 mark_used (decl);
12310 VEC_free (tree, gc, deferred_mark_used_calls);
12311 }
12312
4d6abc1c 12313 return fndecl;
8d08fdba
MS
12314}
12315\f
12316/* Create the FUNCTION_DECL for a function definition.
8d08fdba
MS
12317 DECLSPECS and DECLARATOR are the parts of the declaration;
12318 they describe the return type and the name of the function,
12319 but twisted together in a fashion that parallels the syntax of C.
12320
12321 This function creates a binding context for the function body
12322 as well as setting up the FUNCTION_DECL in current_function_decl.
12323
12324 Returns a FUNCTION_DECL on success.
12325
12326 If the DECLARATOR is not suitable for a function (it defines a datum
12327 instead), we return 0, which tells yyparse to report a parse error.
12328
12329 May return void_type_node indicating that this method is actually
12330 a friend. See grokfield for more details.
12331
12332 Came here with a `.pushlevel' .
12333
12334 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
12335 CHANGES TO CODE IN `grokfield'. */
e92cc029 12336
8d08fdba 12337tree
caf93cb0 12338start_method (cp_decl_specifier_seq *declspecs,
0cbd7506 12339 const cp_declarator *declarator, tree attrlist)
8d08fdba 12340{
c11b6f21 12341 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
91d231cb 12342 &attrlist);
8d08fdba 12343
a723baf1
MM
12344 if (fndecl == error_mark_node)
12345 return error_mark_node;
12346
12347 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
12348 {
12349 error ("invalid member function declaration");
12350 return error_mark_node;
12351 }
8d08fdba 12352
195a5def
IR
12353 if (attrlist)
12354 cplus_decl_attributes (&fndecl, attrlist, 0);
12355
8d08fdba 12356 /* Pass friends other than inline friend functions back. */
a1774733 12357 if (fndecl == void_type_node)
8d08fdba
MS
12358 return fndecl;
12359
8d08fdba
MS
12360 if (DECL_IN_AGGR_P (fndecl))
12361 {
58ec3cc5 12362 if (DECL_CONTEXT (fndecl)
6d69fe27 12363 && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
2d01edd7 12364 error ("%qD is already defined in class %qT", fndecl,
58ec3cc5 12365 DECL_CONTEXT (fndecl));
8ca4bf25 12366 return error_mark_node;
8d08fdba
MS
12367 }
12368
f3400fe2
JM
12369 check_template_shadow (fndecl);
12370
79065db2 12371 DECL_DECLARED_INLINE_P (fndecl) = 1;
0494626a 12372 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
8d08fdba 12373
36a117a5
MM
12374 /* We process method specializations in finish_struct_1. */
12375 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
4b0d3cbe
MM
12376 {
12377 fndecl = push_template_decl (fndecl);
12378 if (fndecl == error_mark_node)
12379 return fndecl;
12380 }
a0a33927 12381
8d08fdba
MS
12382 if (! DECL_FRIEND_P (fndecl))
12383 {
8d08fdba
MS
12384 if (TREE_CHAIN (fndecl))
12385 {
12386 fndecl = copy_node (fndecl);
12387 TREE_CHAIN (fndecl) = NULL_TREE;
12388 }
8d08fdba
MS
12389 }
12390
d174af6c 12391 finish_decl (fndecl, NULL_TREE, NULL_TREE);
8d08fdba 12392
f4f206f4 12393 /* Make a place for the parms. */
ac20c67a 12394 begin_scope (sk_function_parms, fndecl);
68642fb6 12395
8d08fdba
MS
12396 DECL_IN_AGGR_P (fndecl) = 1;
12397 return fndecl;
12398}
12399
12400/* Go through the motions of finishing a function definition.
12401 We don't compile this method until after the whole class has
12402 been processed.
12403
12404 FINISH_METHOD must return something that looks as though it
12405 came from GROKFIELD (since we are defining a method, after all).
12406
12407 This is called after parsing the body of the function definition.
12408 STMTS is the chain of statements that makes up the function body.
12409
12410 DECL is the ..._DECL that `start_method' provided. */
12411
12412tree
11f6b451 12413finish_method (tree decl)
8d08fdba 12414{
926ce8bd 12415 tree fndecl = decl;
8d08fdba 12416 tree old_initial;
8d08fdba 12417
926ce8bd 12418 tree link;
8d08fdba 12419
a1774733 12420 if (decl == void_type_node)
8d08fdba
MS
12421 return decl;
12422
12423 old_initial = DECL_INITIAL (fndecl);
12424
12425 /* Undo the level for the parms (from start_method).
12426 This is like poplevel, but it causes nothing to be
12427 saved. Saving information here confuses symbol-table
12428 output routines. Besides, this information will
12429 be correctly output when this method is actually
12430 compiled. */
12431
12432 /* Clear out the meanings of the local variables of this level;
12433 also record in each decl which block it belongs to. */
12434
12435 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
12436 {
12437 if (DECL_NAME (link) != NULL_TREE)
d8f8dca1 12438 pop_binding (DECL_NAME (link), link);
50bc768d 12439 gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
8d08fdba
MS
12440 DECL_CONTEXT (link) = NULL_TREE;
12441 }
12442
8d08fdba
MS
12443 poplevel (0, 0, 0);
12444
12445 DECL_INITIAL (fndecl) = old_initial;
12446
12447 /* We used to check if the context of FNDECL was different from
12448 current_class_type as another way to get inside here. This didn't work
12449 for String.cc in libg++. */
12450 if (DECL_FRIEND_P (fndecl))
12451 {
d4e6fecb 12452 VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
585b44d3 12453 fndecl);
8d08fdba
MS
12454 decl = void_type_node;
12455 }
12456
12457 return decl;
12458}
12459\f
0154eaa8
MM
12460
12461/* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
12462 we can lay it out later, when and if its type becomes complete. */
8d08fdba
MS
12463
12464void
11f6b451 12465maybe_register_incomplete_var (tree var)
8d08fdba 12466{
50bc768d 12467 gcc_assert (TREE_CODE (var) == VAR_DECL);
8d08fdba 12468
0154eaa8 12469 /* Keep track of variables with incomplete types. */
caf93cb0 12470 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
0154eaa8 12471 && DECL_EXTERNAL (var))
70adf8a9 12472 {
0154eaa8 12473 tree inner_type = TREE_TYPE (var);
caf93cb0 12474
0154eaa8
MM
12475 while (TREE_CODE (inner_type) == ARRAY_TYPE)
12476 inner_type = TREE_TYPE (inner_type);
12477 inner_type = TYPE_MAIN_VARIANT (inner_type);
caf93cb0 12478
0154eaa8
MM
12479 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
12480 /* RTTI TD entries are created while defining the type_info. */
12481 || (TYPE_LANG_SPECIFIC (inner_type)
12482 && TYPE_BEING_DEFINED (inner_type)))
12483 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
70adf8a9 12484 }
0154eaa8 12485}
70adf8a9 12486
0154eaa8 12487/* Called when a class type (given by TYPE) is defined. If there are
39a13be5 12488 any existing VAR_DECLs whose type has been completed by this
0154eaa8 12489 declaration, update them now. */
70adf8a9 12490
0154eaa8 12491void
11f6b451 12492complete_vars (tree type)
0154eaa8
MM
12493{
12494 tree *list = &incomplete_vars;
12495
50bc768d 12496 gcc_assert (CLASS_TYPE_P (type));
caf93cb0 12497 while (*list)
0154eaa8
MM
12498 {
12499 if (same_type_p (type, TREE_PURPOSE (*list)))
70adf8a9 12500 {
0154eaa8 12501 tree var = TREE_VALUE (*list);
67935995 12502 tree type = TREE_TYPE (var);
c740732f
MM
12503 /* Complete the type of the variable. The VAR_DECL itself
12504 will be laid out in expand_expr. */
67935995
MM
12505 complete_type (type);
12506 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
0154eaa8
MM
12507 /* Remove this entry from the list. */
12508 *list = TREE_CHAIN (*list);
f30432d7
MS
12509 }
12510 else
0154eaa8 12511 list = &TREE_CHAIN (*list);
f30432d7 12512 }
7fb213d8
GB
12513
12514 /* Check for pending declarations which may have abstract type. */
12515 complete_type_check_abstract (type);
8d08fdba
MS
12516}
12517
5c113154
MM
12518/* If DECL is of a type which needs a cleanup, build and return an
12519 expression to perform that cleanup here. Return NULL_TREE if no
12520 cleanup need be done. */
e92cc029 12521
86f45d2c 12522tree
11f6b451 12523cxx_maybe_build_cleanup (tree decl)
8d08fdba 12524{
5c113154
MM
12525 tree type;
12526 tree attr;
12527 tree cleanup;
12528
12529 /* Assume no cleanup is required. */
12530 cleanup = NULL_TREE;
86f45d2c 12531
5c113154
MM
12532 if (error_operand_p (decl))
12533 return cleanup;
12534
12535 /* Handle "__attribute__((cleanup))". We run the cleanup function
12536 before the destructor since the destructor is what actually
12537 terminates the lifetime of the object. */
12538 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
12539 if (attr)
12540 {
12541 tree id;
12542 tree fn;
12543 tree arg;
12544
12545 /* Get the name specified by the user for the cleanup function. */
12546 id = TREE_VALUE (TREE_VALUE (attr));
12547 /* Look up the name to find the cleanup function to call. It is
12548 important to use lookup_name here because that is what is
12549 used in c-common.c:handle_cleanup_attribute when performing
12550 initial checks on the attribute. Note that those checks
12551 include ensuring that the function found is not an overloaded
12552 function, or an object with an overloaded call operator,
39a13be5 12553 etc.; we can rely on the fact that the function found is an
5c113154
MM
12554 ordinary FUNCTION_DECL. */
12555 fn = lookup_name (id);
12556 arg = build_address (decl);
12557 mark_used (decl);
5ade1ed2
DG
12558 cleanup = cp_build_function_call (fn, build_tree_list (NULL_TREE,
12559 arg),
12560 tf_warning_or_error);
5c113154
MM
12561 }
12562 /* Handle ordinary C++ destructors. */
12563 type = TREE_TYPE (decl);
12564 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8d08fdba 12565 {
80048418 12566 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
5775a06a
NS
12567 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
12568 && CLASSTYPE_VBASECLASSES (type));
5c113154
MM
12569 tree addr;
12570 tree call;
8d08fdba 12571
8d08fdba 12572 if (TREE_CODE (type) == ARRAY_TYPE)
5c113154 12573 addr = decl;
8d08fdba 12574 else
5818c8e4 12575 addr = build_address (decl);
8d08fdba
MS
12576
12577 /* Optimize for space over speed here. */
5775a06a 12578 if (!has_vbases || flag_expensive_optimizations)
8d08fdba
MS
12579 flags |= LOOKUP_NONVIRTUAL;
12580
5c113154 12581 call = build_delete (TREE_TYPE (addr), addr,
86f45d2c 12582 sfk_complete_destructor, flags, 0);
5c113154 12583 if (cleanup)
525521b6 12584 cleanup = build_compound_expr (cleanup, call);
5c113154
MM
12585 else
12586 cleanup = call;
8d08fdba 12587 }
5c113154
MM
12588
12589 return cleanup;
8d08fdba
MS
12590}
12591\f
558475f0 12592/* When a stmt has been parsed, this function is called. */
8d08fdba
MS
12593
12594void
11f6b451 12595finish_stmt (void)
8d08fdba 12596{
8d08fdba
MS
12597}
12598
3afb32a4
MM
12599/* DECL was originally constructed as a non-static member function,
12600 but turned out to be static. Update it accordingly. */
700f8a87 12601
8857f91e 12602void
11f6b451 12603revert_static_member_fn (tree decl)
8d08fdba 12604{
700f8a87 12605 tree tmp;
3afb32a4
MM
12606 tree function = TREE_TYPE (decl);
12607 tree args = TYPE_ARG_TYPES (function);
8d08fdba 12608
89d684bb 12609 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
91063b51 12610 != TYPE_UNQUALIFIED)
c4f73174 12611 error ("static member function %q#D declared with type qualifiers", decl);
f30432d7 12612
700f8a87
MS
12613 args = TREE_CHAIN (args);
12614 tmp = build_function_type (TREE_TYPE (function), args);
89d684bb 12615 tmp = build_qualified_type (tmp, cp_type_quals (function));
f30432d7 12616 tmp = build_exception_variant (tmp,
8d08fdba 12617 TYPE_RAISES_EXCEPTIONS (function));
3afb32a4
MM
12618 TREE_TYPE (decl) = tmp;
12619 if (DECL_ARGUMENTS (decl))
12620 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
12621 DECL_STATIC_FUNCTION_P (decl) = 1;
8d08fdba 12622}
a4443a08 12623
e2500fed
GK
12624/* Return which tree structure is used by T, or TS_CP_GENERIC if T is
12625 one of the language-independent trees. */
4519c0a8 12626
e2500fed 12627enum cp_tree_node_structure_enum
11f6b451 12628cp_tree_node_structure (union lang_tree_node * t)
4519c0a8 12629{
e2500fed 12630 switch (TREE_CODE (&t->generic))
4519c0a8 12631 {
a723baf1 12632 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
e2500fed 12633 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
e2500fed
GK
12634 case OVERLOAD: return TS_CP_OVERLOAD;
12635 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
12636 case PTRMEM_CST: return TS_CP_PTRMEM;
0cbd7506 12637 case BASELINK: return TS_CP_BASELINK;
54e67af0 12638 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
5d80a306 12639 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
cb68ec50 12640 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
e2500fed 12641 default: return TS_CP_GENERIC;
4519c0a8
MM
12642 }
12643}
5fd8e536 12644
eaa7c03f
JM
12645/* Build the void_list_node (void_type_node having been created). */
12646tree
11f6b451 12647build_void_list_node (void)
eaa7c03f
JM
12648{
12649 tree t = build_tree_list (NULL_TREE, void_type_node);
eaa7c03f
JM
12650 return t;
12651}
12652
6de9cd9a 12653bool
11f6b451 12654cp_missing_noreturn_ok_p (tree decl)
d363e7bf
AJ
12655{
12656 /* A missing noreturn is ok for the `main' function. */
92643fea 12657 return DECL_MAIN_P (decl);
d363e7bf 12658}
e2500fed 12659
c18a5b6c
MM
12660/* Return the COMDAT group into which DECL should be placed. */
12661
12662const char *
12663cxx_comdat_group (tree decl)
12664{
12665 tree name;
12666
12667 /* Virtual tables, construction virtual tables, and virtual table
12668 tables all go in a single COMDAT group, named after the primary
12669 virtual table. */
12670 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
12671 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
12672 /* For all other DECLs, the COMDAT group is the mangled name of the
12673 declaration itself. */
12674 else
5591e5f9
JJ
12675 {
12676 while (DECL_THUNK_P (decl))
12677 {
12678 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
12679 into the same section as the target function. In that case
12680 we must return target's name. */
12681 tree target = THUNK_TARGET (decl);
12682 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
12683 && DECL_SECTION_NAME (target) != NULL
12684 && DECL_ONE_ONLY (target))
12685 decl = target;
12686 else
12687 break;
12688 }
12689 name = DECL_ASSEMBLER_NAME (decl);
12690 }
c18a5b6c
MM
12691
12692 return IDENTIFIER_POINTER (name);
12693}
12694
e2500fed 12695#include "gt-cp-decl.h"
This page took 7.759569 seconds and 5 git commands to generate.