]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/decl.c
crx.h (IRA_COVER_CLASSES): Define.
[gcc.git] / gcc / cp / decl.c
CommitLineData
3fd5abcf 1/* Process declarations and variables for C++ compiler.
d363e7bf 2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
1ea193c2
ILT
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
4 Free Software Foundation, Inc.
e5e809f4 5 Contributed by Michael Tiemann (tiemann@cygnus.com)
8d08fdba 6
1c313945 7This file is part of GCC.
8d08fdba 8
1c313945 9GCC is free software; you can redistribute it and/or modify
8d08fdba 10it under the terms of the GNU General Public License as published by
e77f031d 11the Free Software Foundation; either version 3, or (at your option)
8d08fdba
MS
12any later version.
13
1c313945 14GCC is distributed in the hope that it will be useful,
8d08fdba
MS
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
e77f031d
NC
20along with GCC; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>. */
8d08fdba
MS
22
23
1c313945 24/* Process declarations and symbol lookup for C++ front end.
8d08fdba
MS
25 Also constructs types; the standard scalar types at initialization,
26 and structure, union, array and enum types when they are declared. */
27
28/* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
30
8d08fdba 31#include "config.h"
8d052bc7 32#include "system.h"
4977bab6
ZW
33#include "coretypes.h"
34#include "tm.h"
8d08fdba
MS
35#include "tree.h"
36#include "rtl.h"
3bdf5ad1 37#include "expr.h"
8d08fdba
MS
38#include "flags.h"
39#include "cp-tree.h"
25af8512 40#include "tree-inline.h"
8d08fdba 41#include "decl.h"
49c249e1
JM
42#include "output.h"
43#include "except.h"
54f92bfb 44#include "toplev.h"
e2500fed 45#include "hashtab.h"
0e9295cf 46#include "tm_p.h"
672a6f42 47#include "target.h"
26f943fd 48#include "c-common.h"
ecb0eece 49#include "c-pragma.h"
7437519c 50#include "diagnostic.h"
e7c41c99 51#include "intl.h"
e2500fed 52#include "debug.h"
22ffcc6f 53#include "timevar.h"
6de9cd9a 54#include "tree-flow.h"
0d83bf5a 55#include "pointer-set.h"
8d08fdba 56
62d1db17 57static tree grokparms (cp_parameter_declarator *, tree *);
11f6b451
NN
58static const char *redeclaration_error_message (tree, tree);
59
11f6b451 60static int decl_jump_unsafe (tree);
11f6b451
NN
61static void require_complete_types_for_parms (tree);
62static int ambi_op_p (enum tree_code);
63static int unary_op_p (enum tree_code);
11f6b451 64static void push_local_name (tree);
7e99327d 65static tree grok_reference_init (tree, tree, tree, tree *);
caf93cb0 66static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
1ff3c076 67 int, int, tree);
11f6b451 68static void record_unknown_type (tree, const char *);
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. */
caf93cb0 239
e23bd218
IR
240enum deprecated_states {
241 DEPRECATED_NORMAL,
242 DEPRECATED_SUPPRESS
243};
244
245static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
246
8d08fdba 247\f
0154eaa8
MM
248/* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
249 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
250 time the VAR_DECL was declared, the type was incomplete. */
251
e2500fed 252static GTY(()) tree incomplete_vars;
8d08fdba 253\f
74b846e0
MM
254/* Returns the kind of template specialization we are currently
255 processing, given that it's declaration contained N_CLASS_SCOPES
256 explicit scope qualifications. */
257
258tmpl_spec_kind
11f6b451 259current_tmpl_spec_kind (int n_class_scopes)
74b846e0
MM
260{
261 int n_template_parm_scopes = 0;
262 int seen_specialization_p = 0;
263 int innermost_specialization_p = 0;
e2500fed 264 struct cp_binding_level *b;
74b846e0
MM
265
266 /* Scan through the template parameter scopes. */
caf93cb0
EC
267 for (b = current_binding_level;
268 b->kind == sk_template_parms;
a7e8c268 269 b = b->level_chain)
74b846e0
MM
270 {
271 /* If we see a specialization scope inside a parameter scope,
272 then something is wrong. That corresponds to a declaration
273 like:
274
275 template <class T> template <> ...
276
0e339752 277 which is always invalid since [temp.expl.spec] forbids the
74b846e0
MM
278 specialization of a class member template if the enclosing
279 class templates are not explicitly specialized as well. */
a7e8c268 280 if (b->explicit_spec_p)
74b846e0
MM
281 {
282 if (n_template_parm_scopes == 0)
283 innermost_specialization_p = 1;
284 else
285 seen_specialization_p = 1;
286 }
287 else if (seen_specialization_p == 1)
288 return tsk_invalid_member_spec;
289
290 ++n_template_parm_scopes;
291 }
292
293 /* Handle explicit instantiations. */
294 if (processing_explicit_instantiation)
295 {
296 if (n_template_parm_scopes != 0)
297 /* We've seen a template parameter list during an explicit
298 instantiation. For example:
299
300 template <class T> template void f(int);
301
302 This is erroneous. */
303 return tsk_invalid_expl_inst;
304 else
305 return tsk_expl_inst;
306 }
307
308 if (n_template_parm_scopes < n_class_scopes)
309 /* We've not seen enough template headers to match all the
310 specialized classes present. For example:
311
0cbd7506 312 template <class T> void R<T>::S<T>::f(int);
74b846e0 313
0e339752 314 This is invalid; there needs to be one set of template
74b846e0
MM
315 parameters for each class. */
316 return tsk_insufficient_parms;
317 else if (n_template_parm_scopes == n_class_scopes)
318 /* We're processing a non-template declaration (even though it may
319 be a member of a template class.) For example:
320
0cbd7506 321 template <class T> void S<T>::f(int);
74b846e0 322
39a13be5 323 The `class T' matches the `S<T>', leaving no template headers
74b846e0
MM
324 corresponding to the `f'. */
325 return tsk_none;
326 else if (n_template_parm_scopes > n_class_scopes + 1)
327 /* We've got too many template headers. For example:
328
0cbd7506 329 template <> template <class T> void f (T);
74b846e0
MM
330
331 There need to be more enclosing classes. */
332 return tsk_excessive_parms;
333 else
334 /* This must be a template. It's of the form:
335
0cbd7506 336 template <class T> template <class U> void S<T>::f(U);
74b846e0
MM
337
338 This is a specialization if the innermost level was a
339 specialization; otherwise it's just a definition of the
340 template. */
341 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
8d08fdba
MS
342}
343
74b846e0
MM
344/* Exit the current scope. */
345
346void
11f6b451 347finish_scope (void)
74b846e0
MM
348{
349 poplevel (0, 0, 0);
350}
351
acef433b
MM
352/* When a label goes out of scope, check to see if that label was used
353 in a valid manner, and issue any appropriate warnings or errors. */
354
355static void
11f6b451 356pop_label (tree label, tree old_value)
acef433b 357{
a7e8c268 358 if (!processing_template_decl)
acef433b 359 {
88848bde
MM
360 if (DECL_INITIAL (label) == NULL_TREE)
361 {
5b030314
NS
362 location_t location;
363
dee15844 364 error ("label %q+D used but not defined", label);
93409b8c 365 location = input_location; /* FIXME want (input_filename, (line)0) */
88848bde 366 /* Avoid crashing later. */
5b030314 367 define_label (location, DECL_NAME (label));
88848bde 368 }
c616e51b
MLI
369 else
370 warn_for_unused_label (label);
acef433b 371 }
acef433b 372
6625cdb5 373 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
acef433b
MM
374}
375
0811ea8f 376/* At the end of a function, all labels declared within the function
68642fb6 377 go out of scope. BLOCK is the top-level block for the
acef433b
MM
378 function. */
379
1799e5d5
RH
380static int
381pop_labels_1 (void **slot, void *data)
382{
383 struct named_label_entry *ent = (struct named_label_entry *) *slot;
384 tree block = (tree) data;
385
386 pop_label (ent->label_decl, NULL_TREE);
387
388 /* Put the labels into the "variables" of the top-level block,
389 so debugger can see them. */
390 TREE_CHAIN (ent->label_decl) = BLOCK_VARS (block);
391 BLOCK_VARS (block) = ent->label_decl;
392
393 htab_clear_slot (named_labels, slot);
394
395 return 1;
396}
397
acef433b 398static void
11f6b451 399pop_labels (tree block)
acef433b 400{
1799e5d5 401 if (named_labels)
acef433b 402 {
1799e5d5
RH
403 htab_traverse (named_labels, pop_labels_1, block);
404 named_labels = NULL;
acef433b 405 }
1799e5d5
RH
406}
407
408/* At the end of a block with local labels, restore the outer definition. */
acef433b 409
1799e5d5
RH
410static void
411pop_local_label (tree label, tree old_value)
412{
413 struct named_label_entry dummy;
414 void **slot;
415
416 pop_label (label, old_value);
417
418 dummy.label_decl = label;
419 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
420 htab_clear_slot (named_labels, slot);
acef433b
MM
421}
422
80aa8340
ZL
423/* The following two routines are used to interface to Objective-C++.
424 The binding level is purposely treated as an opaque type. */
425
426void *
427objc_get_current_scope (void)
428{
429 return current_binding_level;
430}
431
432/* The following routine is used by the NeXT-style SJLJ exceptions;
433 variables get marked 'volatile' so as to not be clobbered by
f749f3c2
ZL
434 _setjmp()/_longjmp() calls. All variables in the current scope,
435 as well as parent scopes up to (but not including) ENCLOSING_BLK
436 shall be thusly marked. */
80aa8340
ZL
437
438void
439objc_mark_locals_volatile (void *enclosing_blk)
440{
441 struct cp_binding_level *scope;
442
443 for (scope = current_binding_level;
e58a9aa1 444 scope && scope != enclosing_blk;
80aa8340
ZL
445 scope = scope->level_chain)
446 {
447 tree decl;
448
449 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
660845bf 450 objc_volatilize_decl (decl);
e58a9aa1
ZL
451
452 /* Do not climb up past the current function. */
453 if (scope->kind == sk_function_parms)
454 break;
80aa8340
ZL
455 }
456}
457
1799e5d5
RH
458/* Update data for defined and undefined labels when leaving a scope. */
459
460static int
461poplevel_named_label_1 (void **slot, void *data)
462{
463 struct named_label_entry *ent = (struct named_label_entry *) *slot;
464 struct cp_binding_level *bl = (struct cp_binding_level *) data;
465 struct cp_binding_level *obl = bl->level_chain;
466
467 if (ent->binding_level == bl)
468 {
469 tree decl;
470
471 for (decl = ent->names_in_scope; decl; decl = TREE_CHAIN (decl))
472 if (decl_jump_unsafe (decl))
473 ent->bad_decls = tree_cons (NULL, decl, ent->bad_decls);
474
475 ent->binding_level = obl;
476 ent->names_in_scope = obl->names;
477 switch (bl->kind)
478 {
479 case sk_try:
480 ent->in_try_scope = true;
481 break;
482 case sk_catch:
483 ent->in_catch_scope = true;
484 break;
485 case sk_omp:
486 ent->in_omp_scope = true;
487 break;
488 default:
489 break;
490 }
491 }
492 else if (ent->uses)
493 {
494 struct named_label_use_entry *use;
495
496 for (use = ent->uses; use ; use = use->next)
497 if (use->binding_level == bl)
498 {
499 use->binding_level = obl;
500 use->names_in_scope = obl->names;
501 if (bl->kind == sk_omp)
502 use->in_omp_scope = true;
503 }
504 }
505
506 return 1;
507}
508
8d08fdba
MS
509/* Exit a binding level.
510 Pop the level off, and restore the state of the identifier-decl mappings
511 that were in effect when this level was entered.
512
513 If KEEP == 1, this level had explicit declarations, so
514 and create a "block" (a BLOCK node) for the level
515 to record its declarations and subblocks for symbol table output.
516
8d08fdba
MS
517 If FUNCTIONBODY is nonzero, this level is the body of a function,
518 so create a block as if KEEP were set and also clear out all
519 label names.
520
521 If REVERSE is nonzero, reverse the order of decls before putting
522 them into the BLOCK. */
523
524tree
11f6b451 525poplevel (int keep, int reverse, int functionbody)
8d08fdba 526{
926ce8bd 527 tree link;
8d08fdba
MS
528 /* The chain of decls was accumulated in reverse order.
529 Put it into forward order, just for cleanliness. */
530 tree decls;
531 int tmp = functionbody;
b35d4555 532 int real_functionbody;
b35d4555 533 tree subblocks;
325c3691 534 tree block;
8d08fdba 535 tree decl;
f181d4ae 536 int leaving_for_scope;
ac20c67a 537 scope_kind kind;
f181d4ae 538
22ffcc6f 539 timevar_push (TV_NAME_LOOKUP);
325c3691
RH
540 restart:
541
542 block = NULL_TREE;
b35d4555 543
50bc768d 544 gcc_assert (current_binding_level->kind != sk_class);
b74a0560 545
ac20c67a 546 real_functionbody = (current_binding_level->kind == sk_cleanup
b35d4555 547 ? ((functionbody = 0), tmp) : functionbody);
b35d4555
MM
548 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
549
50bc768d
NS
550 gcc_assert (!VEC_length(cp_class_binding,
551 current_binding_level->class_shadowed));
8d08fdba 552
536333d4
MM
553 /* We used to use KEEP == 2 to indicate that the new block should go
554 at the beginning of the list of blocks at this binding level,
555 rather than the end. This hack is no longer used. */
50bc768d 556 gcc_assert (keep == 0 || keep == 1);
536333d4 557
ac20c67a 558 if (current_binding_level->keep)
8d08fdba
MS
559 keep = 1;
560
6625cdb5
JM
561 /* Any uses of undefined labels, and any defined labels, now operate
562 under constraints of next binding contour. */
1799e5d5
RH
563 if (cfun && !functionbody && named_labels)
564 htab_traverse (named_labels, poplevel_named_label_1,
565 current_binding_level);
6625cdb5 566
8d08fdba
MS
567 /* Get the decls in the order they were written.
568 Usually current_binding_level->names is in reverse order.
569 But parameter decls were previously put in forward order. */
570
571 if (reverse)
572 current_binding_level->names
573 = decls = nreverse (current_binding_level->names);
574 else
575 decls = current_binding_level->names;
576
8d08fdba
MS
577 /* If there were any declarations or structure tags in that level,
578 or if this level is a function body,
579 create a BLOCK to record them for the life of this function. */
8d08fdba 580 block = NULL_TREE;
f444e36b 581 if (keep == 1 || functionbody)
8d08fdba
MS
582 block = make_node (BLOCK);
583 if (block != NULL_TREE)
584 {
f444e36b
MM
585 BLOCK_VARS (block) = decls;
586 BLOCK_SUBBLOCKS (block) = subblocks;
8d08fdba
MS
587 }
588
589 /* In each subblock, record that this is its superior. */
8d08fdba 590 if (keep >= 0)
87caf699 591 for (link = subblocks; link; link = BLOCK_CHAIN (link))
8d08fdba
MS
592 BLOCK_SUPERCONTEXT (link) = block;
593
f181d4ae
MM
594 /* We still support the old for-scope rules, whereby the variables
595 in a for-init statement were in scope after the for-statement
92bc1323 596 ended. We only use the new rules if flag_new_for_scope is
f181d4ae 597 nonzero. */
68642fb6 598 leaving_for_scope
a7e8c268 599 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
f181d4ae 600
caf93cb0
EC
601 /* Before we remove the declarations first check for unused variables. */
602 if (warn_unused_variable
603 && !processing_template_decl)
604 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
605 if (TREE_CODE (decl) == VAR_DECL
606 && ! TREE_USED (decl)
607 && ! DECL_IN_SYSTEM_HEADER (decl)
608 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
b323323f 609 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
caf93cb0 610
f181d4ae
MM
611 /* Remove declarations for all the DECLs in this level. */
612 for (link = decls; link; link = TREE_CHAIN (link))
613 {
c3783399 614 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
0cbd7506 615 && DECL_NAME (link))
f181d4ae 616 {
90ea9897
MM
617 tree name = DECL_NAME (link);
618 cxx_binding *ob;
f181d4ae
MM
619 tree ns_binding;
620
90ea9897
MM
621 ob = outer_binding (name,
622 IDENTIFIER_BINDING (name),
623 /*class_p=*/true);
624 if (!ob)
625 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
c7dda1e3
MM
626 else
627 ns_binding = NULL_TREE;
628
90ea9897 629 if (ob && ob->scope == current_binding_level->level_chain)
f181d4ae 630 /* We have something like:
68642fb6 631
0cbd7506
MS
632 int i;
633 for (int i; ;);
68642fb6 634
f181d4ae
MM
635 and we are leaving the `for' scope. There's no reason to
636 keep the binding of the inner `i' in this case. */
90ea9897
MM
637 pop_binding (name, link);
638 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
147135cc 639 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
f181d4ae
MM
640 /* Here, we have something like:
641
642 typedef int I;
643
644 void f () {
645 for (int I; ;);
646 }
647
648 We must pop the for-scope binding so we know what's a
649 type and what isn't. */
90ea9897 650 pop_binding (name, link);
e76a2646 651 else
e76a2646 652 {
f181d4ae
MM
653 /* Mark this VAR_DECL as dead so that we can tell we left it
654 there only for backward compatibility. */
655 DECL_DEAD_FOR_LOCAL (link) = 1;
68642fb6 656
517f3315 657 /* Keep track of what should have happened when we
f181d4ae 658 popped the binding. */
90ea9897 659 if (ob && ob->value)
820cc88f
DB
660 {
661 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
662 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
663 }
f181d4ae
MM
664
665 /* Add it to the list of dead variables in the next
666 outermost binding to that we can remove these when we
667 leave that binding. */
668 current_binding_level->level_chain->dead_vars_from_for
669 = tree_cons (NULL_TREE, link,
670 current_binding_level->level_chain->
671 dead_vars_from_for);
672
af6fd53f 673 /* Although we don't pop the cxx_binding, we do clear
147135cc 674 its SCOPE since the scope is going away now. */
caf93cb0 675 IDENTIFIER_BINDING (name)->scope
90ea9897 676 = current_binding_level->level_chain;
e76a2646 677 }
2ee887f2 678 }
68642fb6 679 else
8d6e462b 680 {
8dc2b103 681 tree name;
c8094d83 682
f181d4ae 683 /* Remove the binding. */
0034cf72 684 decl = link;
caf93cb0 685
0034cf72
JM
686 if (TREE_CODE (decl) == TREE_LIST)
687 decl = TREE_VALUE (decl);
8dc2b103 688 name = decl;
c8094d83 689
8dc2b103
NS
690 if (TREE_CODE (name) == OVERLOAD)
691 name = OVL_FUNCTION (name);
caf93cb0 692
8dc2b103
NS
693 gcc_assert (DECL_P (name));
694 pop_binding (DECL_NAME (name), decl);
8d08fdba 695 }
f181d4ae 696 }
8d08fdba 697
f181d4ae
MM
698 /* Remove declarations for any `for' variables from inner scopes
699 that we kept around. */
700 for (link = current_binding_level->dead_vars_from_for;
701 link; link = TREE_CHAIN (link))
d8f8dca1 702 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
2ee887f2 703
f181d4ae
MM
704 /* Restore the IDENTIFIER_TYPE_VALUEs. */
705 for (link = current_binding_level->type_shadowed;
706 link; link = TREE_CHAIN (link))
707 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
acef433b
MM
708
709 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
710 for (link = current_binding_level->shadowed_labels;
68642fb6 711 link;
acef433b 712 link = TREE_CHAIN (link))
1799e5d5 713 pop_local_label (TREE_VALUE (link), TREE_PURPOSE (link));
acef433b 714
f181d4ae
MM
715 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
716 list if a `using' declaration put them there. The debugging
3b426391 717 back ends won't understand OVERLOAD, so we remove them here.
f181d4ae
MM
718 Because the BLOCK_VARS are (temporarily) shared with
719 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
720 popped all the bindings. */
721 if (block)
722 {
723 tree* d;
8d6e462b 724
a06d48ef
JM
725 for (d = &BLOCK_VARS (block); *d; )
726 {
727 if (TREE_CODE (*d) == TREE_LIST)
728 *d = TREE_CHAIN (*d);
729 else
730 d = &TREE_CHAIN (*d);
731 }
8d6e462b 732 }
8d08fdba
MS
733
734 /* If the level being exited is the top level of a function,
735 check over all the labels. */
8d08fdba
MS
736 if (functionbody)
737 {
acef433b
MM
738 /* Since this is the top level block of a function, the vars are
739 the function's parameters. Don't leave them in the BLOCK
740 because they are found in the FUNCTION_DECL instead. */
8d08fdba 741 BLOCK_VARS (block) = 0;
acef433b 742 pop_labels (block);
8d08fdba
MS
743 }
744
ac20c67a 745 kind = current_binding_level->kind;
325c3691
RH
746 if (kind == sk_cleanup)
747 {
748 tree stmt;
749
750 /* If this is a temporary binding created for a cleanup, then we'll
751 have pushed a statement list level. Pop that, create a new
752 BIND_EXPR for the block, and insert it into the stream. */
753 stmt = pop_stmt_list (current_binding_level->statement_list);
754 stmt = c_build_bind_expr (block, stmt);
755 add_stmt (stmt);
756 }
8d08fdba 757
1a6daf15 758 leave_scope ();
8d08fdba 759 if (functionbody)
72c4a4ca
GK
760 {
761 /* The current function is being defined, so its DECL_INITIAL
762 should be error_mark_node. */
763 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
764 DECL_INITIAL (current_function_decl) = block;
765 }
8d08fdba 766 else if (block)
f444e36b
MM
767 current_binding_level->blocks
768 = chainon (current_binding_level->blocks, block);
769
8d08fdba
MS
770 /* If we did not make a block for the level just exited,
771 any blocks made for inner levels
772 (since they cannot be recorded as subblocks in that level)
773 must be carried forward so they will later become subblocks
774 of something else. */
775 else if (subblocks)
536333d4
MM
776 current_binding_level->blocks
777 = chainon (current_binding_level->blocks, subblocks);
8d08fdba 778
d9b2d9da
MM
779 /* Each and every BLOCK node created here in `poplevel' is important
780 (e.g. for proper debugging information) so if we created one
781 earlier, mark it as "used". */
782 if (block)
783 TREE_USED (block) = 1;
784
325c3691 785 /* All temporary bindings created for cleanups are popped silently. */
ac20c67a 786 if (kind == sk_cleanup)
325c3691 787 goto restart;
8d08fdba 788
22ffcc6f 789 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
8d08fdba
MS
790}
791
8d08fdba
MS
792/* Insert BLOCK at the end of the list of subblocks of the
793 current binding level. This is used when a BIND_EXPR is expanded,
794 to handle the BLOCK node inside the BIND_EXPR. */
795
796void
11f6b451 797insert_block (tree block)
8d08fdba
MS
798{
799 TREE_USED (block) = 1;
800 current_binding_level->blocks
801 = chainon (current_binding_level->blocks, block);
802}
803
0aafb128
MM
804/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
805 itself, calling F for each. The DATA is passed to F as well. */
806
00e8de68 807static int
be93747e 808walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
00e8de68
GDR
809{
810 int result = 0;
be93747e 811 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
8d08fdba 812
be93747e 813 result |= (*f) (name_space, data);
8d08fdba 814
00e8de68
GDR
815 for (; current; current = TREE_CHAIN (current))
816 result |= walk_namespaces_r (current, f, data);
fc0e7bf5 817
00e8de68 818 return result;
5566b478
MS
819}
820
00e8de68
GDR
821/* Walk all the namespaces, calling F for each. The DATA is passed to
822 F as well. */
823
824int
825walk_namespaces (walk_namespaces_fn f, void* data)
5566b478 826{
00e8de68 827 return walk_namespaces_r (global_namespace, f, data);
8d08fdba
MS
828}
829
00e8de68
GDR
830/* Call wrapup_globals_declarations for the globals in NAMESPACE. If
831 DATA is non-NULL, this is the last time we will call
832 wrapup_global_declarations for this NAMESPACE. */
39c01e4c 833
00e8de68 834int
be93747e 835wrapup_globals_for_namespace (tree name_space, void* data)
39c01e4c 836{
be93747e 837 struct cp_binding_level *level = NAMESPACE_LEVEL (name_space);
9857866d
KH
838 VEC(tree,gc) *statics = level->static_decls;
839 tree *vec = VEC_address (tree, statics);
840 int len = VEC_length (tree, statics);
00e8de68 841 int last_time = (data != 0);
68642fb6 842
00e8de68 843 if (last_time)
39c01e4c 844 {
00e8de68 845 check_global_declarations (vec, len);
db5f8b93 846 emit_debug_global_declarations (vec, len);
00e8de68 847 return 0;
39c01e4c
MM
848 }
849
00e8de68
GDR
850 /* Write out any globals that need to be output. */
851 return wrapup_global_declarations (vec, len);
39c01e4c
MM
852}
853
00e8de68 854\f
9188c363
MM
855/* In C++, you don't have to write `struct S' to refer to `S'; you
856 can just use `S'. We accomplish this by creating a TYPE_DECL as
857 if the user had written `typedef struct S S'. Create and return
858 the TYPE_DECL for TYPE. */
859
860tree
11f6b451 861create_implicit_typedef (tree name, tree type)
9188c363
MM
862{
863 tree decl;
864
865 decl = build_decl (TYPE_DECL, name, type);
c727aa5e 866 DECL_ARTIFICIAL (decl) = 1;
9188c363
MM
867 /* There are other implicit type declarations, like the one *within*
868 a class that allows you to write `S::S'. We must distinguish
869 amongst these. */
870 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
871 TYPE_NAME (type) = decl;
872
873 return decl;
874}
875
8e4ce833
JJ
876/* Remember a local name for name-mangling purposes. */
877
878static void
11f6b451 879push_local_name (tree decl)
8e4ce833
JJ
880{
881 size_t i, nelts;
882 tree t, name;
883
22ffcc6f 884 timevar_push (TV_NAME_LOOKUP);
8e4ce833
JJ
885
886 name = DECL_NAME (decl);
887
9acaf84a 888 nelts = VEC_length (tree, local_names);
8e4ce833
JJ
889 for (i = 0; i < nelts; i++)
890 {
9acaf84a 891 t = VEC_index (tree, local_names, i);
8e4ce833
JJ
892 if (DECL_NAME (t) == name)
893 {
894 if (!DECL_LANG_SPECIFIC (decl))
895 retrofit_lang_decl (decl);
e2500fed 896 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
8e4ce833
JJ
897 if (DECL_LANG_SPECIFIC (t))
898 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
899 else
900 DECL_DISCRIMINATOR (decl) = 1;
901
9acaf84a 902 VEC_replace (tree, local_names, i, decl);
de94b46c
KG
903 timevar_pop (TV_NAME_LOOKUP);
904 return;
8e4ce833
JJ
905 }
906 }
907
9acaf84a 908 VEC_safe_push (tree, gc, local_names, decl);
22ffcc6f 909 timevar_pop (TV_NAME_LOOKUP);
8e4ce833 910}
8d08fdba
MS
911\f
912/* Subroutine of duplicate_decls: return truthvalue of whether
913 or not types of these decls match.
914
915 For C++, we must compare the parameter list so that `int' can match
916 `int&' in a parameter position, but `int&' is not confused with
917 `const int&'. */
e92cc029 918
6060a796 919int
11f6b451 920decls_match (tree newdecl, tree olddecl)
8d08fdba
MS
921{
922 int types_match;
923
347d73d7
ML
924 if (newdecl == olddecl)
925 return 1;
926
6b4b3deb
MM
927 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
928 /* If the two DECLs are not even the same kind of thing, we're not
929 interested in their types. */
930 return 0;
931
932 if (TREE_CODE (newdecl) == FUNCTION_DECL)
8d08fdba
MS
933 {
934 tree f1 = TREE_TYPE (newdecl);
935 tree f2 = TREE_TYPE (olddecl);
936 tree p1 = TYPE_ARG_TYPES (f1);
937 tree p2 = TYPE_ARG_TYPES (f2);
938
4f1c5b7d 939 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
eb68cb58
MM
940 && ! (DECL_EXTERN_C_P (newdecl)
941 && DECL_EXTERN_C_P (olddecl)))
c5a6fc45
JM
942 return 0;
943
8d08fdba 944 if (TREE_CODE (f1) != TREE_CODE (f2))
0cbd7506 945 return 0;
8d08fdba 946
3bfdc719 947 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8926095f 948 {
8b27e9ef
NS
949 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
950 && (DECL_BUILT_IN (olddecl)
951#ifndef NO_IMPLICIT_EXTERN_C
0cbd7506
MS
952 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
953 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
8b27e9ef
NS
954#endif
955 ))
a28e3c7f
MS
956 {
957 types_match = self_promoting_args_p (p1);
958 if (p1 == void_list_node)
959 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
960 }
8b27e9ef
NS
961#ifndef NO_IMPLICIT_EXTERN_C
962 else if (p1 == NULL_TREE
963 && (DECL_EXTERN_C_P (olddecl)
0cbd7506
MS
964 && DECL_IN_SYSTEM_HEADER (olddecl)
965 && !DECL_CLASS_SCOPE_P (olddecl))
8b27e9ef 966 && (DECL_EXTERN_C_P (newdecl)
0cbd7506
MS
967 && DECL_IN_SYSTEM_HEADER (newdecl)
968 && !DECL_CLASS_SCOPE_P (newdecl)))
a28e3c7f
MS
969 {
970 types_match = self_promoting_args_p (p2);
971 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
972 }
8b27e9ef 973#endif
8926095f 974 else
91063b51 975 types_match = compparms (p1, p2);
8926095f 976 }
8d08fdba
MS
977 else
978 types_match = 0;
979 }
6b4b3deb 980 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
51c184be 981 {
2bb5d995
JM
982 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
983 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
984 return 0;
985
ee935db4
MM
986 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
987 DECL_TEMPLATE_PARMS (olddecl)))
988 return 0;
989
f84b4be9 990 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
ee935db4
MM
991 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
992 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
f84b4be9
JM
993 else
994 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
995 DECL_TEMPLATE_RESULT (newdecl));
51c184be 996 }
8d08fdba
MS
997 else
998 {
91a5bc9f
KL
999 /* Need to check scope for variable declaration (VAR_DECL).
1000 For typedef (TYPE_DECL), scope is ignored. */
1001 if (TREE_CODE (newdecl) == VAR_DECL
ace4831d
MM
1002 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1003 /* [dcl.link]
1004 Two declarations for an object with C language linkage
1005 with the same name (ignoring the namespace that qualify
1006 it) that appear in different namespace scopes refer to
1007 the same object. */
1008 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
91a5bc9f
KL
1009 return 0;
1010
8d08fdba
MS
1011 if (TREE_TYPE (newdecl) == error_mark_node)
1012 types_match = TREE_TYPE (olddecl) == error_mark_node;
1013 else if (TREE_TYPE (olddecl) == NULL_TREE)
1014 types_match = TREE_TYPE (newdecl) == NULL_TREE;
a0a33927
MS
1015 else if (TREE_TYPE (newdecl) == NULL_TREE)
1016 types_match = 0;
8d08fdba 1017 else
96d84882
PB
1018 types_match = comptypes (TREE_TYPE (newdecl),
1019 TREE_TYPE (olddecl),
1020 COMPARE_REDECLARATION);
8d08fdba
MS
1021 }
1022
1023 return types_match;
1024}
1025
1026/* If NEWDECL is `static' and an `extern' was seen previously,
24f30ed4 1027 warn about it. OLDDECL is the previous declaration.
8d08fdba
MS
1028
1029 Note that this does not apply to the C++ case of declaring
1030 a variable `extern const' and then later `const'.
1031
8d08fdba
MS
1032 Don't complain about built-in functions, since they are beyond
1033 the user's control. */
1034
a5e6b29b 1035void
11f6b451 1036warn_extern_redeclared_static (tree newdecl, tree olddecl)
8d08fdba 1037{
24f30ed4
MM
1038 tree name;
1039
68642fb6 1040 if (TREE_CODE (newdecl) == TYPE_DECL
655dc6ee 1041 || TREE_CODE (newdecl) == TEMPLATE_DECL
a2a9e21c
GDR
1042 || TREE_CODE (newdecl) == CONST_DECL
1043 || TREE_CODE (newdecl) == NAMESPACE_DECL)
8d08fdba 1044 return;
68642fb6 1045
963d5758
MM
1046 /* Don't get confused by static member functions; that's a different
1047 use of `static'. */
1048 if (TREE_CODE (newdecl) == FUNCTION_DECL
1049 && DECL_STATIC_FUNCTION_P (newdecl))
1050 return;
8d08fdba 1051
24f30ed4
MM
1052 /* If the old declaration was `static', or the new one isn't, then
1053 then everything is OK. */
1054 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1055 return;
1056
1057 /* It's OK to declare a builtin function as `static'. */
1058 if (TREE_CODE (olddecl) == FUNCTION_DECL
1059 && DECL_ARTIFICIAL (olddecl))
1060 return;
1061
8d08fdba 1062 name = DECL_ASSEMBLER_NAME (newdecl);
cbe5f3b3
MLI
1063 permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1064 permerror (input_location, "previous declaration of %q+D", olddecl);
8d08fdba
MS
1065}
1066
e1f0e7a6
MM
1067/* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1068 function templates. If their exception specifications do not
b9704fc5 1069 match, issue a diagnostic. */
e1f0e7a6
MM
1070
1071static void
1072check_redeclaration_exception_specification (tree new_decl,
1073 tree old_decl)
1074{
1075 tree new_type;
1076 tree old_type;
1077 tree new_exceptions;
1078 tree old_exceptions;
1079
1080 new_type = TREE_TYPE (new_decl);
1081 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1082 old_type = TREE_TYPE (old_decl);
1083 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1084
1085 /* [except.spec]
1086
1087 If any declaration of a function has an exception-specification,
1088 all declarations, including the definition and an explicit
1089 specialization, of that function shall have an
1090 exception-specification with the same set of type-ids. */
1091 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1092 && ! DECL_IS_BUILTIN (old_decl)
1093 && flag_exceptions
3db45ab5 1094 && !comp_except_specs (new_exceptions, old_exceptions,
e1f0e7a6
MM
1095 /*exact=*/true))
1096 {
1097 error ("declaration of %qF throws different exceptions", new_decl);
1098 error ("from previous declaration %q+F", old_decl);
1099 }
1100}
1101
3a47c4e4
AO
1102#define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1103 && lookup_attribute ("gnu_inline", \
1104 DECL_ATTRIBUTES (fn)))
1105
b1a19c7c
MM
1106/* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1107 If the redeclaration is invalid, a diagnostic is issued, and the
1108 error_mark_node is returned. Otherwise, OLDDECL is returned.
8d08fdba 1109
b1a19c7c 1110 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
d63d5d0c
ILT
1111 returned.
1112
1113 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
8d08fdba 1114
b1a19c7c 1115tree
d63d5d0c 1116duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
8d08fdba 1117{
8d08fdba 1118 unsigned olddecl_uid = DECL_UID (olddecl);
d63d5d0c 1119 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
0b60dfe3 1120 int new_defines_function = 0;
50b56799 1121 tree new_template;
5566b478
MS
1122
1123 if (newdecl == olddecl)
b1a19c7c 1124 return olddecl;
8d08fdba 1125
8926095f 1126 types_match = decls_match (newdecl, olddecl);
8d08fdba 1127
8d08fdba
MS
1128 /* If either the type of the new decl or the type of the old decl is an
1129 error_mark_node, then that implies that we have already issued an
1130 error (earlier) for some bogus type specification, and in that case,
1131 it is rather pointless to harass the user with yet more error message
0b60dfe3 1132 about the same declaration, so just pretend the types match here. */
bd6dd845
MS
1133 if (TREE_TYPE (newdecl) == error_mark_node
1134 || TREE_TYPE (olddecl) == error_mark_node)
dc5395cc 1135 return error_mark_node;
68642fb6 1136
97055d5c
AO
1137 if (DECL_P (olddecl)
1138 && TREE_CODE (newdecl) == FUNCTION_DECL
1139 && TREE_CODE (olddecl) == FUNCTION_DECL
1140 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1141 {
1142 if (DECL_DECLARED_INLINE_P (newdecl)
1143 && DECL_UNINLINABLE (newdecl)
1144 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1145 /* Already warned elsewhere. */;
1146 else if (DECL_DECLARED_INLINE_P (olddecl)
1147 && DECL_UNINLINABLE (olddecl)
1148 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1149 /* Already warned. */;
1150 else if (DECL_DECLARED_INLINE_P (newdecl)
1151 && DECL_UNINLINABLE (olddecl)
1152 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1153 {
dee15844
JM
1154 warning (OPT_Wattributes, "function %q+D redeclared as inline",
1155 newdecl);
1156 warning (OPT_Wattributes, "previous declaration of %q+D "
1157 "with attribute noinline", olddecl);
97055d5c
AO
1158 }
1159 else if (DECL_DECLARED_INLINE_P (olddecl)
1160 && DECL_UNINLINABLE (newdecl)
1161 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1162 {
dee15844
JM
1163 warning (OPT_Wattributes, "function %q+D redeclared with "
1164 "attribute noinline", newdecl);
1165 warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1166 olddecl);
97055d5c
AO
1167 }
1168 }
1169
a1c65f9f 1170 /* Check for redeclaration and other discrepancies. */
d22c8596 1171 if (TREE_CODE (olddecl) == FUNCTION_DECL
9f33663b
JM
1172 && DECL_ARTIFICIAL (olddecl))
1173 {
d63d5d0c 1174 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
9f33663b
JM
1175 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1176 {
d63d5d0c
ILT
1177 /* Avoid warnings redeclaring built-ins which have not been
1178 explicitly declared. */
0cbd7506
MS
1179 if (DECL_ANTICIPATED (olddecl))
1180 return NULL_TREE;
d52e4867 1181
9f33663b
JM
1182 /* If you declare a built-in or predefined function name as static,
1183 the old definition is overridden, but optionally warn this was a
1184 bad choice of name. */
1185 if (! TREE_PUBLIC (newdecl))
1186 {
b323323f
LM
1187 warning (OPT_Wshadow, "shadowing %s function %q#D",
1188 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1189 olddecl);
9f33663b 1190 /* Discard the old built-in function. */
b1a19c7c 1191 return NULL_TREE;
9f33663b
JM
1192 }
1193 /* If the built-in is not ansi, then programs can override
1194 it even globally without an error. */
1195 else if (! DECL_BUILT_IN (olddecl))
d4ee4d25 1196 warning (0, "library function %q#D redeclared as non-function %q#D",
0cbd7506 1197 olddecl, newdecl);
9f33663b
JM
1198 else
1199 {
2d01edd7
GDR
1200 error ("declaration of %q#D", newdecl);
1201 error ("conflicts with built-in declaration %q#D",
0cbd7506 1202 olddecl);
9f33663b 1203 }
b1a19c7c 1204 return NULL_TREE;
a4443a08 1205 }
9f33663b 1206 else if (!types_match)
8d08fdba 1207 {
d63d5d0c
ILT
1208 /* Avoid warnings redeclaring built-ins which have not been
1209 explicitly declared. */
0cbd7506 1210 if (DECL_ANTICIPATED (olddecl))
498c0f27
JJ
1211 {
1212 /* Deal with fileptr_type_node. FILE type is not known
1213 at the time we create the builtins. */
1214 tree t1, t2;
1215
1216 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1217 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1218 t1 || t2;
1219 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1220 if (!t1 || !t2)
1221 break;
1222 else if (TREE_VALUE (t2) == fileptr_type_node)
1223 {
1224 tree t = TREE_VALUE (t1);
1225
1226 if (TREE_CODE (t) == POINTER_TYPE
1227 && TYPE_NAME (TREE_TYPE (t))
1228 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1229 == get_identifier ("FILE")
1230 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1231 {
1232 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1233
1234 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1235 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1236 types_match = decls_match (newdecl, olddecl);
1237 if (types_match)
d63d5d0c
ILT
1238 return duplicate_decls (newdecl, olddecl,
1239 newdecl_is_friend);
498c0f27
JJ
1240 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1241 }
1242 }
1243 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1244 break;
1245 }
d52e4867 1246 else if ((DECL_EXTERN_C_P (newdecl)
7e99327d
MM
1247 && DECL_EXTERN_C_P (olddecl))
1248 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1249 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
a4443a08 1250 {
9f33663b
JM
1251 /* A near match; override the builtin. */
1252
1253 if (TREE_PUBLIC (newdecl))
a4443a08 1254 {
d4ee4d25
DD
1255 warning (0, "new declaration %q#D", newdecl);
1256 warning (0, "ambiguates built-in declaration %q#D",
0cbd7506 1257 olddecl);
a4443a08 1258 }
b323323f
LM
1259 else
1260 warning (OPT_Wshadow, "shadowing %s function %q#D",
0cbd7506
MS
1261 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1262 olddecl);
a4443a08 1263 }
9f33663b
JM
1264 else
1265 /* Discard the old built-in function. */
b1a19c7c 1266 return NULL_TREE;
04a9d080
RS
1267
1268 /* Replace the old RTL to avoid problems with inlining. */
84b8b0e0 1269 COPY_DECL_RTL (newdecl, olddecl);
8d08fdba 1270 }
d63d5d0c
ILT
1271 /* Even if the types match, prefer the new declarations type for
1272 built-ins which have not been explicitly declared, for
1273 exception lists, etc... */
10326855 1274 else if (DECL_ANTICIPATED (olddecl))
7072018e 1275 {
74869a85
NS
1276 tree type = TREE_TYPE (newdecl);
1277 tree attribs = (*targetm.merge_type_attributes)
1278 (TREE_TYPE (olddecl), type);
1279
e9525111 1280 type = cp_build_type_attribute_variant (type, attribs);
74869a85 1281 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
7072018e 1282 }
68642fb6 1283
62bedd31
JJ
1284 /* If a function is explicitly declared "throw ()", propagate that to
1285 the corresponding builtin. */
1286 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1287 && DECL_ANTICIPATED (olddecl)
1288 && TREE_NOTHROW (newdecl)
1289 && !TREE_NOTHROW (olddecl)
1290 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != NULL_TREE
1291 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != olddecl
1292 && types_match)
1293 TREE_NOTHROW (built_in_decls [DECL_FUNCTION_CODE (olddecl)]) = 1;
1294
7e99327d
MM
1295 /* Whether or not the builtin can throw exceptions has no
1296 bearing on this declarator. */
1297 TREE_NOTHROW (olddecl) = 0;
1298
24f30ed4
MM
1299 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1300 {
1301 /* If a builtin function is redeclared as `static', merge
1302 the declarations, but make the original one static. */
1303 DECL_THIS_STATIC (olddecl) = 1;
1304 TREE_PUBLIC (olddecl) = 0;
9bfadf57 1305
421844e7
MM
1306 /* Make the old declaration consistent with the new one so
1307 that all remnants of the builtin-ness of this function
1308 will be banished. */
5d2ed28c 1309 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
84b8b0e0 1310 COPY_DECL_RTL (newdecl, olddecl);
24f30ed4 1311 }
39211cd5
MS
1312 }
1313 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1314 {
6936461f
OW
1315 /* C++ Standard, 3.3, clause 4:
1316 "[Note: a namespace name or a class template name must be unique
1317 in its declarative region (7.3.2, clause 14). ]" */
1318 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1319 && TREE_CODE (newdecl) != NAMESPACE_DECL
1320 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1321 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1322 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1323 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
9ed182dc 1324 {
6936461f
OW
1325 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1326 && TREE_CODE (newdecl) != TYPE_DECL)
1327 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1328 && TREE_CODE (olddecl) != TYPE_DECL))
1329 {
1330 /* We do nothing special here, because C++ does such nasty
1331 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1332 get shadowed, and know that if we need to find a TYPE_DECL
1333 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1334 slot of the identifier. */
1335 return NULL_TREE;
1336 }
1337
1338 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1339 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1340 || (TREE_CODE (olddecl) == FUNCTION_DECL
1341 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1342 return NULL_TREE;
9ed182dc
JM
1343 }
1344
2d01edd7 1345 error ("%q#D redeclared as different kind of symbol", newdecl);
39211cd5
MS
1346 if (TREE_CODE (olddecl) == TREE_LIST)
1347 olddecl = TREE_VALUE (olddecl);
dee15844 1348 error ("previous declaration of %q+#D", olddecl);
39211cd5 1349
c0694c4b 1350 return error_mark_node;
8d08fdba 1351 }
8d08fdba
MS
1352 else if (!types_match)
1353 {
4f1c5b7d 1354 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
7bdbfa05
MM
1355 /* These are certainly not duplicate declarations; they're
1356 from different scopes. */
b1a19c7c 1357 return NULL_TREE;
7bdbfa05 1358
8926095f 1359 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
f0e01782
MS
1360 {
1361 /* The name of a class template may not be declared to refer to
1362 any other template, class, function, object, namespace, value,
e92cc029 1363 or type in the same scope. */
5566b478
MS
1364 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1365 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
f0e01782 1366 {
2d01edd7 1367 error ("declaration of template %q#D", newdecl);
dee15844 1368 error ("conflicts with previous declaration %q+#D", olddecl);
f0e01782 1369 }
ec255269
MS
1370 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1371 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1372 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
91063b51 1373 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
75650646 1374 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
b9201622
NS
1375 DECL_TEMPLATE_PARMS (olddecl))
1376 /* Template functions can be disambiguated by
1377 return type. */
1378 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1379 TREE_TYPE (TREE_TYPE (olddecl))))
ec255269 1380 {
2d01edd7 1381 error ("new declaration %q#D", newdecl);
dee15844 1382 error ("ambiguates old declaration %q+#D", olddecl);
ec255269 1383 }
b1a19c7c 1384 return NULL_TREE;
f0e01782 1385 }
8926095f
MS
1386 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1387 {
eb68cb58 1388 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
8926095f 1389 {
2d01edd7 1390 error ("declaration of C function %q#D conflicts with",
0cbd7506 1391 newdecl);
dee15844 1392 error ("previous declaration %q+#D here", olddecl);
8926095f 1393 }
00595019 1394 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
91063b51 1395 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
700f8a87 1396 {
2d01edd7 1397 error ("new declaration %q#D", newdecl);
dee15844 1398 error ("ambiguates old declaration %q+#D", olddecl);
492b73bd 1399 return error_mark_node;
700f8a87
MS
1400 }
1401 else
b1a19c7c 1402 return NULL_TREE;
8926095f 1403 }
58ec3cc5 1404 else
8d08fdba 1405 {
2d01edd7 1406 error ("conflicting declaration %q#D", newdecl);
dee15844 1407 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
0cbd7506 1408 return error_mark_node;
8d08fdba
MS
1409 }
1410 }
68642fb6 1411 else if (TREE_CODE (newdecl) == FUNCTION_DECL
75650646
MM
1412 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1413 && (!DECL_TEMPLATE_INFO (newdecl)
68642fb6 1414 || (DECL_TI_TEMPLATE (newdecl)
75650646
MM
1415 != DECL_TI_TEMPLATE (olddecl))))
1416 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1417 && (!DECL_TEMPLATE_INFO (olddecl)
68642fb6 1418 || (DECL_TI_TEMPLATE (olddecl)
75650646 1419 != DECL_TI_TEMPLATE (newdecl))))))
386b8a85
JM
1420 /* It's OK to have a template specialization and a non-template
1421 with the same type, or to have specializations of two
75650646
MM
1422 different templates with the same type. Note that if one is a
1423 specialization, and the other is an instantiation of the same
1424 template, that we do not exit at this point. That situation
1425 can occur if we instantiate a template class, and then
0e339752 1426 specialize one of its methods. This situation is valid, but
75650646 1427 the declarations must be merged in the usual way. */
b1a19c7c 1428 return NULL_TREE;
68642fb6
UD
1429 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1430 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
75650646
MM
1431 && !DECL_USE_TEMPLATE (newdecl))
1432 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1433 && !DECL_USE_TEMPLATE (olddecl))))
1434 /* One of the declarations is a template instantiation, and the
1435 other is not a template at all. That's OK. */
b1a19c7c 1436 return NULL_TREE;
c30b4add
MM
1437 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1438 {
1439 /* In [namespace.alias] we have:
c8094d83 1440
0cbd7506 1441 In a declarative region, a namespace-alias-definition can be
c30b4add
MM
1442 used to redefine a namespace-alias declared in that declarative
1443 region to refer only to the namespace to which it already
1444 refers.
c8094d83 1445
c30b4add
MM
1446 Therefore, if we encounter a second alias directive for the same
1447 alias, we can just ignore the second directive. */
1448 if (DECL_NAMESPACE_ALIAS (newdecl)
c8094d83 1449 && (DECL_NAMESPACE_ALIAS (newdecl)
c30b4add
MM
1450 == DECL_NAMESPACE_ALIAS (olddecl)))
1451 return olddecl;
1452 /* [namespace.alias]
1453
0cbd7506 1454 A namespace-name or namespace-alias shall not be declared as
c30b4add
MM
1455 the name of any other entity in the same declarative region.
1456 A namespace-name defined at global scope shall not be
77880ae4 1457 declared as the name of any other entity in any global scope
c30b4add 1458 of the program. */
2d01edd7 1459 error ("declaration of namespace %qD conflicts with", newdecl);
dee15844 1460 error ("previous declaration of namespace %q+D here", olddecl);
c30b4add
MM
1461 return error_mark_node;
1462 }
8d08fdba
MS
1463 else
1464 {
d8e178a0 1465 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
8251199e 1466 if (errmsg)
8d08fdba 1467 {
33bd39a2 1468 error (errmsg, newdecl);
8d08fdba 1469 if (DECL_NAME (olddecl) != NULL_TREE)
dee15844
JM
1470 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1471 ? "%q+#D previously defined here"
1472 : "%q+#D previously declared here", olddecl);
b1a19c7c 1473 return error_mark_node;
8d08fdba
MS
1474 }
1475 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1476 && DECL_INITIAL (olddecl) != NULL_TREE
1477 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1478 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1479 {
1480 /* Prototype decl follows defn w/o prototype. */
dee15844 1481 warning (0, "prototype for %q+#D", newdecl);
d4ee4d25 1482 warning (0, "%Jfollows non-prototype definition here", olddecl);
8d08fdba 1483 }
ace4831d
MM
1484 else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1485 || TREE_CODE (olddecl) == VAR_DECL)
8d08fdba 1486 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
8926095f 1487 {
ace4831d
MM
1488 /* [dcl.link]
1489 If two declarations of the same function or object
1490 specify different linkage-specifications ..., the program
1491 is ill-formed.... Except for functions with C++ linkage,
1492 a function declaration without a linkage specification
1493 shall not precede the first linkage specification for
1494 that function. A function can be declared without a
1495 linkage specification after an explicit linkage
1496 specification has been seen; the linkage explicitly
1497 specified in the earlier declaration is not affected by
1498 such a function declaration.
1499
1500 DR 563 raises the question why the restrictions on
1501 functions should not also apply to objects. Older
1502 versions of G++ silently ignore the linkage-specification
1503 for this example:
1504
1505 namespace N {
1506 extern int i;
1507 extern "C" int i;
1508 }
1509
1510 which is clearly wrong. Therefore, we now treat objects
1511 like functions. */
46ccf50a 1512 if (current_lang_depth () == 0)
ace4831d
MM
1513 {
1514 /* There is no explicit linkage-specification, so we use
1515 the linkage from the previous declaration. */
1516 if (!DECL_LANG_SPECIFIC (newdecl))
1517 retrofit_lang_decl (newdecl);
1518 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1519 }
8926095f
MS
1520 else
1521 {
dee15844
JM
1522 error ("previous declaration of %q+#D with %qL linkage",
1523 olddecl, DECL_LANGUAGE (olddecl));
2d01edd7 1524 error ("conflicts with new declaration with %qL linkage",
0cbd7506 1525 DECL_LANGUAGE (newdecl));
8926095f
MS
1526 }
1527 }
e1cd6e56 1528
a6f02587 1529 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
c32381b1
JM
1530 ;
1531 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
e1cd6e56
MS
1532 {
1533 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1534 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1535 int i = 1;
1536
1537 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1538 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
68642fb6 1539
e1cd6e56
MS
1540 for (; t1 && t1 != void_list_node;
1541 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1542 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1543 {
2507f3b5
RK
1544 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1545 TREE_PURPOSE (t2)))
e1cd6e56 1546 {
cbe5f3b3 1547 permerror (input_location, "default argument given for parameter %d of %q#D",
37ec60ed 1548 i, newdecl);
cbe5f3b3 1549 permerror (input_location, "after previous specification in %q+#D", olddecl);
e1cd6e56
MS
1550 }
1551 else
1552 {
2d01edd7 1553 error ("default argument given for parameter %d of %q#D",
0cbd7506 1554 i, newdecl);
dee15844 1555 error ("after previous specification in %q+#D",
e1cd6e56
MS
1556 olddecl);
1557 }
1558 }
1559 }
8d08fdba
MS
1560 }
1561
4782bd5b
RS
1562 /* Do not merge an implicit typedef with an explicit one. In:
1563
1564 class A;
1565 ...
1566 typedef class A A __attribute__ ((foo));
1567
1568 the attribute should apply only to the typedef. */
1569 if (TREE_CODE (olddecl) == TYPE_DECL
1570 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1571 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
b1a19c7c 1572 return NULL_TREE;
4782bd5b 1573
8d08fdba
MS
1574 /* If new decl is `static' and an `extern' was seen previously,
1575 warn about it. */
1576 warn_extern_redeclared_static (newdecl, olddecl);
1577
e92cc029 1578 /* We have committed to returning 1 at this point. */
8d08fdba
MS
1579 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1580 {
1581 /* Now that functions must hold information normally held
1582 by field decls, there is extra work to do so that
1583 declaration information does not get destroyed during
1584 definition. */
1585 if (DECL_VINDEX (olddecl))
1586 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1587 if (DECL_CONTEXT (olddecl))
1588 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
e1cd6e56
MS
1589 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1590 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
fee7654e 1591 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
864b83b9 1592 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
815951d8 1593 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
963d5758 1594 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
e0fff4b3
JM
1595 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1596 SET_OVERLOADED_OPERATOR_CODE
1597 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
0b60dfe3 1598 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
68642fb6 1599
0b60dfe3 1600 /* Optionally warn about more than one declaration for the same
0cbd7506
MS
1601 name, but don't warn about a function declaration followed by a
1602 definition. */
0b60dfe3
BK
1603 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1604 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
a1c65f9f 1605 /* Don't warn about extern decl followed by definition. */
0b60dfe3 1606 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
a1c65f9f 1607 /* Don't warn about friends, let add_friend take care of it. */
d63d5d0c 1608 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
0b60dfe3 1609 {
b323323f
LM
1610 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1611 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
0b60dfe3 1612 }
b87d79e6
JM
1613
1614 if (DECL_DELETED_FN (newdecl))
1615 {
1616 error ("deleted definition of %qD", newdecl);
1617 error ("after previous declaration %q+D", olddecl);
1618 }
8d08fdba
MS
1619 }
1620
1621 /* Deal with C++: must preserve virtual function table size. */
1622 if (TREE_CODE (olddecl) == TYPE_DECL)
1623 {
926ce8bd
KH
1624 tree newtype = TREE_TYPE (newdecl);
1625 tree oldtype = TREE_TYPE (olddecl);
8d08fdba
MS
1626
1627 if (newtype != error_mark_node && oldtype != error_mark_node
1628 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
e93ee644
MM
1629 CLASSTYPE_FRIEND_CLASSES (newtype)
1630 = CLASSTYPE_FRIEND_CLASSES (oldtype);
7df87825 1631
970d6386 1632 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
8d08fdba
MS
1633 }
1634
8d08fdba
MS
1635 /* Copy all the DECL_... slots specified in the new decl
1636 except for any that we copy here from the old type. */
91d231cb 1637 DECL_ATTRIBUTES (newdecl)
f6897b10 1638 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
8d08fdba 1639
5566b478
MS
1640 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1641 {
e1f0e7a6
MM
1642 tree old_result;
1643 tree new_result;
1644 old_result = DECL_TEMPLATE_RESULT (olddecl);
1645 new_result = DECL_TEMPLATE_RESULT (newdecl);
1646 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
68642fb6 1647 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
4d85e00e
MM
1648 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1649 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
68642fb6 1650
3a47c4e4
AO
1651 DECL_ATTRIBUTES (old_result)
1652 = (*targetm.merge_decl_attributes) (old_result, new_result);
1653
e1f0e7a6
MM
1654 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1655 {
3a47c4e4
AO
1656 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1657 && DECL_INITIAL (new_result))
1658 {
1659 if (DECL_INITIAL (old_result))
99355518 1660 DECL_UNINLINABLE (old_result) = 1;
3a47c4e4 1661 else
99355518 1662 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
3a47c4e4
AO
1663 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1664 DECL_NOT_REALLY_EXTERN (old_result)
1665 = DECL_NOT_REALLY_EXTERN (new_result);
1666 DECL_INTERFACE_KNOWN (old_result)
1667 = DECL_INTERFACE_KNOWN (new_result);
1668 DECL_DECLARED_INLINE_P (old_result)
1669 = DECL_DECLARED_INLINE_P (new_result);
1eea53df
AP
1670 DECL_DISREGARD_INLINE_LIMITS (old_result)
1671 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1672
3a47c4e4
AO
1673 }
1674 else
1675 {
3a47c4e4
AO
1676 DECL_DECLARED_INLINE_P (old_result)
1677 |= DECL_DECLARED_INLINE_P (new_result);
1eea53df
AP
1678 DECL_DISREGARD_INLINE_LIMITS (old_result)
1679 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
3a47c4e4
AO
1680 check_redeclaration_exception_specification (newdecl, olddecl);
1681 }
e1f0e7a6
MM
1682 }
1683
daa8df65 1684 /* If the new declaration is a definition, update the file and
72c4a4ca
GK
1685 line information on the declaration, and also make
1686 the old declaration the same definition. */
3a47c4e4 1687 if (DECL_INITIAL (new_result) != NULL_TREE)
daa8df65 1688 {
caf93cb0 1689 DECL_SOURCE_LOCATION (olddecl)
e1f0e7a6 1690 = DECL_SOURCE_LOCATION (old_result)
f31686a3 1691 = DECL_SOURCE_LOCATION (newdecl);
72c4a4ca 1692 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
26bcf8fc 1693 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
e1f0e7a6
MM
1694 DECL_ARGUMENTS (old_result)
1695 = DECL_ARGUMENTS (new_result);
c11889ce
MM
1696 }
1697
b1a19c7c 1698 return olddecl;
5566b478 1699 }
68642fb6 1700
8d08fdba
MS
1701 if (types_match)
1702 {
1703 /* Automatically handles default parameters. */
1704 tree oldtype = TREE_TYPE (olddecl);
e1cd6e56 1705 tree newtype;
8d08fdba 1706
e1cd6e56 1707 /* Merge the data types specified in the two decls. */
6da794e8 1708 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
e1cd6e56 1709
6da794e8 1710 /* If merge_types produces a non-typedef type, just use the old type. */
9076e292
JM
1711 if (TREE_CODE (newdecl) == TYPE_DECL
1712 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1713 newtype = oldtype;
1714
8d08fdba 1715 if (TREE_CODE (newdecl) == VAR_DECL)
17bbb839
MM
1716 {
1717 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1718 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
3db45ab5 1719 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
6c06fbce 1720 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
39703eb9
MM
1721 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1722 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1799e5d5
RH
1723
1724 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1725 if (DECL_LANG_SPECIFIC (olddecl)
1726 && CP_DECL_THREADPRIVATE_P (olddecl))
1727 {
1728 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1729 if (!DECL_LANG_SPECIFIC (newdecl))
1730 retrofit_lang_decl (newdecl);
1731
1732 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1733 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1734 }
17bbb839
MM
1735 }
1736
6da794e8 1737 /* Do this after calling `merge_types' so that default
8d08fdba 1738 parameters don't confuse us. */
e1f0e7a6
MM
1739 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1740 check_redeclaration_exception_specification (newdecl, olddecl);
8d08fdba
MS
1741 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1742
4a2f6dc0
VR
1743 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1744 check_default_args (newdecl);
1745
8d08fdba 1746 /* Lay the type out, unless already done. */
407f03b8 1747 if (! same_type_p (newtype, oldtype)
5566b478 1748 && TREE_TYPE (newdecl) != error_mark_node
5156628f 1749 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe
MS
1750 layout_type (TREE_TYPE (newdecl));
1751
5566b478
MS
1752 if ((TREE_CODE (newdecl) == VAR_DECL
1753 || TREE_CODE (newdecl) == PARM_DECL
1754 || TREE_CODE (newdecl) == RESULT_DECL
1755 || TREE_CODE (newdecl) == FIELD_DECL
1756 || TREE_CODE (newdecl) == TYPE_DECL)
5156628f 1757 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe 1758 layout_decl (newdecl, 0);
8d08fdba
MS
1759
1760 /* Merge the type qualifiers. */
1761 if (TREE_READONLY (newdecl))
1762 TREE_READONLY (olddecl) = 1;
1763 if (TREE_THIS_VOLATILE (newdecl))
1764 TREE_THIS_VOLATILE (olddecl) = 1;
5cefa0d9
JM
1765 if (TREE_NOTHROW (newdecl))
1766 TREE_NOTHROW (olddecl) = 1;
8d08fdba 1767
302a2cc5
JM
1768 /* Merge deprecatedness. */
1769 if (TREE_DEPRECATED (newdecl))
1770 TREE_DEPRECATED (olddecl) = 1;
1771
5779e713
MM
1772 /* Preserve function specific target and optimization options */
1773 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1774 {
1775 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1776 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1777 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1778 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1779
1780 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1781 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1782 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1783 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1784 }
1785
8d08fdba 1786 /* Merge the initialization information. */
8926095f
MS
1787 if (DECL_INITIAL (newdecl) == NULL_TREE
1788 && DECL_INITIAL (olddecl) != NULL_TREE)
1789 {
1790 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
f31686a3 1791 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
b0d06515
MM
1792 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1793 && DECL_LANG_SPECIFIC (newdecl)
4d85e00e 1794 && DECL_LANG_SPECIFIC (olddecl))
69ee8086
RH
1795 {
1796 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1da326c3 1797 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
69ee8086 1798 }
8926095f 1799 }
39211cd5
MS
1800
1801 /* Merge the section attribute.
0cbd7506 1802 We want to issue an error if the sections conflict but that must be
39211cd5
MS
1803 done later in decl_attributes since we are called before attributes
1804 are assigned. */
1805 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1806 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1807
a157febd
GK
1808 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1809 {
1810 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1811 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1331d16f 1812 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
220a35cc 1813 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
220a35cc 1814 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1331d16f 1815 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1ea193c2 1816 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
becfd6e5
KZ
1817 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1818 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1819 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
1820 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
c740732f
MM
1821 /* Keep the old RTL. */
1822 COPY_DECL_RTL (olddecl, newdecl);
1823 }
caf93cb0 1824 else if (TREE_CODE (newdecl) == VAR_DECL
c740732f
MM
1825 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1826 {
1827 /* Keep the old RTL. We cannot keep the old RTL if the old
1828 declaration was for an incomplete object and the new
1829 declaration is not since many attributes of the RTL will
1830 change. */
1831 COPY_DECL_RTL (olddecl, newdecl);
a157febd 1832 }
8d08fdba
MS
1833 }
1834 /* If cannot merge, then use the new type and qualifiers,
1835 and don't preserve the old rtl. */
1836 else
1837 {
1838 /* Clean out any memory we had of the old declaration. */
1839 tree oldstatic = value_member (olddecl, static_aggregates);
1840 if (oldstatic)
1841 TREE_VALUE (oldstatic) = error_mark_node;
1842
1843 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1844 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1845 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1846 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1847 }
1848
1849 /* Merge the storage class information. */
45806a3f
FS
1850 merge_weak (newdecl, olddecl);
1851
e92cc029 1852 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
794d4a61 1853 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
a9aedbc2
MS
1854 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1855 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1856 if (! DECL_EXTERNAL (olddecl))
1857 DECL_EXTERNAL (newdecl) = 0;
68642fb6 1858
50b56799 1859 new_template = NULL_TREE;
0b60dfe3 1860 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
8d08fdba 1861 {
fea10e36
AO
1862 bool new_redefines_gnu_inline = false;
1863
1864 if (new_defines_function
1865 && ((DECL_INTERFACE_KNOWN (olddecl)
1866 && TREE_CODE (olddecl) == FUNCTION_DECL)
1867 || (TREE_CODE (olddecl) == TEMPLATE_DECL
1868 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1869 == FUNCTION_DECL))))
3a47c4e4
AO
1870 {
1871 tree fn = olddecl;
1872
1873 if (TREE_CODE (fn) == TEMPLATE_DECL)
1874 fn = DECL_TEMPLATE_RESULT (olddecl);
1875
fea10e36 1876 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
3a47c4e4 1877 }
3a47c4e4 1878
fea10e36 1879 if (!new_redefines_gnu_inline)
3a47c4e4 1880 {
3a47c4e4
AO
1881 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1882 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1883 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1884 }
68642fb6 1885 DECL_TEMPLATE_INSTANTIATED (newdecl)
2b0a63a3 1886 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
c8094d83 1887
58fb06b4
NS
1888 /* If the OLDDECL is an instantiation and/or specialization,
1889 then the NEWDECL must be too. But, it may not yet be marked
1890 as such if the caller has created NEWDECL, but has not yet
1891 figured out that it is a redeclaration. */
1892 if (!DECL_USE_TEMPLATE (newdecl))
1893 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
c8094d83 1894
0b60dfe3
BK
1895 /* Don't really know how much of the language-specific
1896 values we should copy from old to new. */
1897 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
caf93cb0 1898 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
e2500fed 1899 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
0b60dfe3 1900 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
4684cd27 1901 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
50b56799
MM
1902 if (DECL_TEMPLATE_INFO (newdecl))
1903 new_template = DECL_TI_TEMPLATE (newdecl);
fbf1c34b 1904 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3febd123 1905 DECL_INITIALIZED_IN_CLASS_P (newdecl)
0cbd7506 1906 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
0b60dfe3 1907 olddecl_friend = DECL_FRIEND_P (olddecl);
d63d5d0c
ILT
1908 hidden_friend = (DECL_ANTICIPATED (olddecl)
1909 && DECL_HIDDEN_FRIEND_P (olddecl)
1910 && newdecl_is_friend);
6a629cac
MM
1911
1912 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1913 if (TREE_CODE (newdecl) == FUNCTION_DECL
1914 || DECL_FUNCTION_TEMPLATE_P (newdecl))
bb5e8a7f
MM
1915 {
1916 DECL_BEFRIENDING_CLASSES (newdecl)
1917 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1918 DECL_BEFRIENDING_CLASSES (olddecl));
ca9e1382
KL
1919 /* DECL_THUNKS is only valid for virtual functions,
1920 otherwise it is a DECL_FRIEND_CONTEXT. */
1921 if (DECL_VIRTUAL_P (newdecl))
1922 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
bb5e8a7f 1923 }
8d08fdba
MS
1924 }
1925
8d08fdba
MS
1926 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1927 {
68642fb6
UD
1928 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1929 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
75650646
MM
1930 {
1931 /* If newdecl is not a specialization, then it is not a
1932 template-related function at all. And that means that we
bf7c02dd 1933 should have exited above, returning 0. */
50bc768d 1934 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
75650646 1935
68642fb6 1936 if (TREE_USED (olddecl))
75650646 1937 /* From [temp.expl.spec]:
68642fb6 1938
75650646
MM
1939 If a template, a member template or the member of a class
1940 template is explicitly specialized then that
1941 specialization shall be declared before the first use of
1942 that specialization that would cause an implicit
1943 instantiation to take place, in every translation unit in
1944 which such a use occurs. */
9e637a26 1945 error ("explicit specialization of %qD after first use",
75650646
MM
1946 olddecl);
1947
1948 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
d03d18e8 1949
b9e75696
JM
1950 /* Don't propagate visibility from the template to the
1951 specialization here. We'll do that in determine_visibility if
1952 appropriate. */
1953 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
1954
d03d18e8
KL
1955 /* [temp.expl.spec/14] We don't inline explicit specialization
1956 just because the primary template says so. */
75650646 1957 }
3a47c4e4
AO
1958 else if (new_defines_function && DECL_INITIAL (olddecl))
1959 {
7e8b322a
JH
1960 /* Never inline re-defined extern inline functions.
1961 FIXME: this could be better handled by keeping both
1962 function as separate declarations. */
3a47c4e4
AO
1963 DECL_UNINLINABLE (newdecl) = 1;
1964 }
d03d18e8
KL
1965 else
1966 {
1967 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1968 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
faae18ab 1969
d03d18e8 1970 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
faae18ab 1971
d03d18e8
KL
1972 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1973 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
c536a6a7
RG
1974
1975 DECL_DISREGARD_INLINE_LIMITS (newdecl)
1976 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
1977 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
1978 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
d03d18e8 1979 }
97055d5c 1980
5daf7c0a
JM
1981 /* Preserve abstractness on cloned [cd]tors. */
1982 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1983
700f8a87
MS
1984 if (! types_match)
1985 {
5d2ed28c 1986 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
92643fea 1987 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
84b8b0e0 1988 COPY_DECL_RTL (newdecl, olddecl);
5566b478
MS
1989 }
1990 if (! types_match || new_defines_function)
1991 {
6f1b4c42
JM
1992 /* These need to be copied so that the names are available.
1993 Note that if the types do match, we'll preserve inline
1994 info and other bits, but if not, we won't. */
700f8a87
MS
1995 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1996 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
700f8a87 1997 }
8d08fdba
MS
1998 if (new_defines_function)
1999 /* If defining a function declared with other language
2000 linkage, use the previously declared language linkage. */
5d2ed28c 2001 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
6f1b4c42 2002 else if (types_match)
8d08fdba
MS
2003 {
2004 /* If redeclaring a builtin function, and not a definition,
2005 it stays built in. */
2006 if (DECL_BUILT_IN (olddecl))
2007 {
26db82d8 2008 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
39211cd5 2009 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
8d08fdba
MS
2010 /* If we're keeping the built-in definition, keep the rtl,
2011 regardless of declaration matches. */
84b8b0e0 2012 COPY_DECL_RTL (olddecl, newdecl);
8d08fdba 2013 }
8d08fdba
MS
2014
2015 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
8d08fdba
MS
2016 /* Don't clear out the arguments if we're redefining a function. */
2017 if (DECL_ARGUMENTS (olddecl))
2018 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2019 }
2020 }
0b1161fc
MM
2021 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2022 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
a9aedbc2 2023
8d08fdba
MS
2024 /* Now preserve various other info from the definition. */
2025 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2026 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2027 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
92643fea 2028 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
8d08fdba 2029
d7afec4b 2030 /* Warn about conflicting visibility specifications. */
c8094d83 2031 if (DECL_VISIBILITY_SPECIFIED (olddecl)
73a8adb6 2032 && DECL_VISIBILITY_SPECIFIED (newdecl)
d7afec4b
ND
2033 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2034 {
dee15844
JM
2035 warning (OPT_Wattributes, "%q+D: visibility attribute ignored "
2036 "because it", newdecl);
5c498b10
DD
2037 warning (OPT_Wattributes, "%Jconflicts with previous "
2038 "declaration here", olddecl);
d7afec4b
ND
2039 }
2040 /* Choose the declaration which specified visibility. */
2041 if (DECL_VISIBILITY_SPECIFIED (olddecl))
facef326 2042 {
facef326 2043 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
d7afec4b
ND
2044 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2045 }
3db45ab5 2046 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
820cc88f
DB
2047 so keep this behavior. */
2048 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2049 {
2050 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2051 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2052 }
facef326 2053
1d786913
MM
2054 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2055 with that from NEWDECL below. */
2056 if (DECL_LANG_SPECIFIC (olddecl))
2057 {
c8094d83 2058 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
1d786913
MM
2059 != DECL_LANG_SPECIFIC (newdecl));
2060 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2061 }
2062
e27fb29c
MLI
2063 /* Merge the USED information. */
2064 if (TREE_USED (olddecl))
2065 TREE_USED (newdecl) = 1;
2066 else if (TREE_USED (newdecl))
2067 TREE_USED (olddecl) = 1;
2068
8d08fdba
MS
2069 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2070 {
2071 int function_size;
8d08fdba 2072
820cc88f 2073 function_size = sizeof (struct tree_decl_common);
8d08fdba 2074
730e1556
KG
2075 memcpy ((char *) olddecl + sizeof (struct tree_common),
2076 (char *) newdecl + sizeof (struct tree_common),
2077 function_size - sizeof (struct tree_common));
8d08fdba 2078
820cc88f
DB
2079 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2080 (char *) newdecl + sizeof (struct tree_decl_common),
2081 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
50b56799 2082 if (new_template)
b3445994
MM
2083 /* If newdecl is a template instantiation, it is possible that
2084 the following sequence of events has occurred:
2085
2086 o A friend function was declared in a class template. The
2087 class template was instantiated.
2088
2089 o The instantiation of the friend declaration was
2090 recorded on the instantiation list, and is newdecl.
2091
2092 o Later, however, instantiate_class_template called pushdecl
2093 on the newdecl to perform name injection. But, pushdecl in
2094 turn called duplicate_decls when it discovered that another
2095 declaration of a global function with the same name already
2096 existed.
2097
2098 o Here, in duplicate_decls, we decided to clobber newdecl.
2099
2100 If we're going to do that, we'd better make sure that
2101 olddecl, and not newdecl, is on the list of
2102 instantiations so that if we try to do the instantiation
2103 again we won't get the clobbered declaration. */
caf93cb0 2104 reregister_specialization (newdecl,
50b56799 2105 new_template,
b3445994 2106 olddecl);
8d08fdba
MS
2107 }
2108 else
2109 {
820cc88f 2110 size_t size = tree_code_size (TREE_CODE (olddecl));
730e1556
KG
2111 memcpy ((char *) olddecl + sizeof (struct tree_common),
2112 (char *) newdecl + sizeof (struct tree_common),
820cc88f 2113 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
3db45ab5 2114 switch (TREE_CODE (olddecl))
820cc88f
DB
2115 {
2116 case LABEL_DECL:
2117 case VAR_DECL:
2118 case RESULT_DECL:
2119 case PARM_DECL:
2120 case FIELD_DECL:
2121 case TYPE_DECL:
2122 case CONST_DECL:
2123 {
2124 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2125 (char *) newdecl + sizeof (struct tree_decl_common),
2126 size - sizeof (struct tree_decl_common)
2127 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2128 }
2129 break;
2130 default:
2131 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2132 (char *) newdecl + sizeof (struct tree_decl_common),
2133 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2134 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2135 break;
2136 }
8d08fdba 2137 }
8d08fdba
MS
2138 DECL_UID (olddecl) = olddecl_uid;
2139 if (olddecl_friend)
2140 DECL_FRIEND_P (olddecl) = 1;
d63d5d0c
ILT
2141 if (hidden_friend)
2142 {
2143 DECL_ANTICIPATED (olddecl) = 1;
2144 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2145 }
8d08fdba 2146
d9525bec
BK
2147 /* NEWDECL contains the merged attribute lists.
2148 Update OLDDECL to be the same. */
91d231cb 2149 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
d9525bec 2150
16e31964
DS
2151 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2152 so that encode_section_info has a chance to look at the new decl
2153 flags and attributes. */
caf93cb0 2154 if (DECL_RTL_SET_P (olddecl)
16e31964
DS
2155 && (TREE_CODE (olddecl) == FUNCTION_DECL
2156 || (TREE_CODE (olddecl) == VAR_DECL
2157 && TREE_STATIC (olddecl))))
0e6df31e 2158 make_decl_rtl (olddecl);
16e31964 2159
1d786913
MM
2160 /* The NEWDECL will no longer be needed. Because every out-of-class
2161 declaration of a member results in a call to duplicate_decls,
2162 freeing these nodes represents in a significant savings. */
2163 ggc_free (newdecl);
2164
b1a19c7c 2165 return olddecl;
8d08fdba 2166}
8d08fdba 2167\f
8251199e 2168/* Return zero if the declaration NEWDECL is valid
8d08fdba
MS
2169 when the declaration OLDDECL (assumed to be for the same name)
2170 has already been seen.
2171 Otherwise return an error message format string with a %s
2172 where the identifier should go. */
2173
d8e178a0 2174static const char *
11f6b451 2175redeclaration_error_message (tree newdecl, tree olddecl)
8d08fdba
MS
2176{
2177 if (TREE_CODE (newdecl) == TYPE_DECL)
2178 {
2179 /* Because C++ can put things into name space for free,
2180 constructs like "typedef struct foo { ... } foo"
2181 would look like an erroneous redeclaration. */
3bfdc719 2182 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
6aed477a 2183 return NULL;
8d08fdba 2184 else
2d01edd7 2185 return "redefinition of %q#D";
8d08fdba
MS
2186 }
2187 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2188 {
2189 /* If this is a pure function, its olddecl will actually be
2190 the original initialization to `0' (which we force to call
2191 abort()). Don't complain about redefinition in this case. */
d1fc3bbd
AO
2192 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2193 && DECL_INITIAL (olddecl) == NULL_TREE)
6aed477a 2194 return NULL;
8d08fdba 2195
2c73f9f5 2196 /* If both functions come from different namespaces, this is not
a1c65f9f 2197 a redeclaration - this is a conflict with a used function. */
6eb3bb27 2198 if (DECL_NAMESPACE_SCOPE_P (olddecl)
713101a6
AO
2199 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2200 && ! decls_match (olddecl, newdecl))
2d01edd7 2201 return "%qD conflicts with used function";
2c73f9f5 2202
db5ae43f 2203 /* We'll complain about linkage mismatches in
0cbd7506 2204 warn_extern_redeclared_static. */
db5ae43f 2205
2c73f9f5 2206 /* Defining the same name twice is no good. */
8d08fdba 2207 if (DECL_INITIAL (olddecl) != NULL_TREE
faae18ab 2208 && DECL_INITIAL (newdecl) != NULL_TREE)
8d08fdba
MS
2209 {
2210 if (DECL_NAME (olddecl) == NULL_TREE)
2d01edd7 2211 return "%q#D not declared in class";
3a47c4e4
AO
2212 else if (!GNU_INLINE_P (olddecl)
2213 || GNU_INLINE_P (newdecl))
2d01edd7 2214 return "redefinition of %q#D";
8d08fdba 2215 }
3a47c4e4
AO
2216
2217 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2218 {
2219 bool olda = GNU_INLINE_P (olddecl);
2220 bool newa = GNU_INLINE_P (newdecl);
2221
2222 if (olda != newa)
2223 {
2224 if (newa)
2225 return "%q+D redeclared inline with %<gnu_inline%> attribute";
2226 else
2227 return "%q+D redeclared inline without %<gnu_inline%> attribute";
2228 }
2229 }
2230
6aed477a 2231 return NULL;
8d08fdba 2232 }
51c184be
MS
2233 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2234 {
5bd61841
MM
2235 tree nt, ot;
2236
2237 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2238 {
2239 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2240 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2d01edd7 2241 return "redefinition of %q#D";
5bd61841
MM
2242 return NULL;
2243 }
2244
2245 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
caf93cb0 2246 || (DECL_TEMPLATE_RESULT (newdecl)
5bd61841
MM
2247 == DECL_TEMPLATE_RESULT (olddecl)))
2248 return NULL;
2249
2250 nt = DECL_TEMPLATE_RESULT (newdecl);
2251 if (DECL_TEMPLATE_INFO (nt))
2252 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2253 ot = DECL_TEMPLATE_RESULT (olddecl);
2254 if (DECL_TEMPLATE_INFO (ot))
2255 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
3a47c4e4
AO
2256 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2257 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2d01edd7 2258 return "redefinition of %q#D";
5bd61841 2259
3a47c4e4
AO
2260 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2261 {
2262 bool olda = GNU_INLINE_P (ot);
2263 bool newa = GNU_INLINE_P (nt);
2264
2265 if (olda != newa)
2266 {
2267 if (newa)
2268 return "%q+D redeclared inline with %<gnu_inline%> attribute";
2269 else
2270 return "%q+D redeclared inline without %<gnu_inline%> attribute";
2271 }
2272 }
2273
9b7dd5e8
DG
2274 /* Core issue #226 (C++0x):
2275
2276 If a friend function template declaration specifies a
2277 default template-argument, that declaration shall be a
2278 definition and shall be the only declaration of the
2279 function template in the translation unit. */
c1ae8be5 2280 if ((cxx_dialect != cxx98)
9b7dd5e8
DG
2281 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2282 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2283 /*is_primary=*/1, /*is_partial=*/0,
2284 /*is_friend_decl=*/2))
2285 return "redeclaration of friend %q#D may not have default template arguments";
2286
5bd61841 2287 return NULL;
51c184be 2288 }
31a79236 2289 else if (TREE_CODE (newdecl) == VAR_DECL
1799e5d5
RH
2290 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2291 && (! DECL_LANG_SPECIFIC (olddecl)
2292 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2293 || DECL_THREAD_LOCAL_P (newdecl)))
31a79236
JJ
2294 {
2295 /* Only variables can be thread-local, and all declarations must
2296 agree on this property. */
2297 if (DECL_THREAD_LOCAL_P (newdecl))
2298 return "thread-local declaration of %q#D follows "
2299 "non-thread-local declaration";
2300 else
2301 return "non-thread-local declaration of %q#D follows "
2302 "thread-local declaration";
2303 }
1f51a992 2304 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
8d08fdba 2305 {
555551c2
MM
2306 /* The objects have been declared at namespace scope. If either
2307 is a member of an anonymous union, then this is an invalid
2308 redeclaration. For example:
2309
2310 int i;
2311 union { int i; };
2312
2313 is invalid. */
aedfac0e
PC
2314 if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2315 || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
555551c2
MM
2316 return "redeclaration of %q#D";
2317 /* If at least one declaration is a reference, there is no
2318 conflict. For example:
2319
2320 int i = 3;
2321 extern int i;
2322
2323 is valid. */
8d08fdba 2324 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
6aed477a 2325 return NULL;
8926095f 2326 /* Reject two definitions. */
2d01edd7 2327 return "redefinition of %q#D";
8d08fdba
MS
2328 }
2329 else
2330 {
2331 /* Objects declared with block scope: */
2332 /* Reject two definitions, and reject a definition
2333 together with an external reference. */
2334 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2d01edd7 2335 return "redeclaration of %q#D";
6aed477a 2336 return NULL;
8d08fdba
MS
2337 }
2338}
2339\f
1799e5d5
RH
2340/* Hash and equality functions for the named_label table. */
2341
2342static hashval_t
2343named_label_entry_hash (const void *data)
2344{
2345 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2346 return DECL_UID (ent->label_decl);
2347}
2348
2349static int
2350named_label_entry_eq (const void *a, const void *b)
2351{
2352 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2353 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2354 return ent_a->label_decl == ent_b->label_decl;
2355}
2356
acef433b 2357/* Create a new label, named ID. */
8d08fdba 2358
acef433b 2359static tree
11f6b451 2360make_label_decl (tree id, int local_p)
8d08fdba 2361{
1799e5d5
RH
2362 struct named_label_entry *ent;
2363 void **slot;
acef433b 2364 tree decl;
8d08fdba 2365
acef433b 2366 decl = build_decl (LABEL_DECL, id, void_type_node);
acef433b
MM
2367
2368 DECL_CONTEXT (decl) = current_function_decl;
2369 DECL_MODE (decl) = VOIDmode;
2370 C_DECLARED_LABEL_FLAG (decl) = local_p;
8d08fdba 2371
acef433b
MM
2372 /* Say where one reference is to the label, for the sake of the
2373 error if it is not defined. */
f31686a3 2374 DECL_SOURCE_LOCATION (decl) = input_location;
acef433b
MM
2375
2376 /* Record the fact that this identifier is bound to this label. */
2377 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2378
1799e5d5
RH
2379 /* Create the label htab for the function on demand. */
2380 if (!named_labels)
2381 named_labels = htab_create_ggc (13, named_label_entry_hash,
2382 named_label_entry_eq, NULL);
6625cdb5 2383
1799e5d5
RH
2384 /* Record this label on the list of labels used in this function.
2385 We do this before calling make_label_decl so that we get the
2386 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2387 ent = GGC_CNEW (struct named_label_entry);
2388 ent->label_decl = decl;
6625cdb5 2389
1799e5d5
RH
2390 slot = htab_find_slot (named_labels, ent, INSERT);
2391 gcc_assert (*slot == NULL);
2392 *slot = ent;
2393
2394 return decl;
acef433b 2395}
8d08fdba 2396
acef433b
MM
2397/* Look for a label named ID in the current function. If one cannot
2398 be found, create one. (We keep track of used, but undefined,
2399 labels, and complain about them at the end of a function.) */
8d08fdba 2400
68642fb6 2401tree
11f6b451 2402lookup_label (tree id)
acef433b
MM
2403{
2404 tree decl;
8d08fdba 2405
22ffcc6f 2406 timevar_push (TV_NAME_LOOKUP);
acef433b
MM
2407 /* You can't use labels at global scope. */
2408 if (current_function_decl == NULL_TREE)
2409 {
2d01edd7 2410 error ("label %qE referenced outside of any function", id);
22ffcc6f 2411 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
acef433b 2412 }
68642fb6 2413
acef433b
MM
2414 /* See if we've already got this label. */
2415 decl = IDENTIFIER_LABEL_VALUE (id);
2416 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
22ffcc6f 2417 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba 2418
acef433b 2419 decl = make_label_decl (id, /*local_p=*/0);
22ffcc6f 2420 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba
MS
2421}
2422
acef433b 2423/* Declare a local label named ID. */
8d08fdba
MS
2424
2425tree
11f6b451 2426declare_local_label (tree id)
8d08fdba 2427{
1799e5d5 2428 tree decl, shadow;
8d08fdba 2429
acef433b 2430 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
1799e5d5
RH
2431 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2432 shadow = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2433 current_binding_level->shadowed_labels);
2434 current_binding_level->shadowed_labels = shadow;
2435
acef433b 2436 decl = make_label_decl (id, /*local_p=*/1);
1799e5d5 2437 TREE_VALUE (shadow) = decl;
68642fb6 2438
acef433b 2439 return decl;
8d08fdba
MS
2440}
2441
6625cdb5
JM
2442/* Returns nonzero if it is ill-formed to jump past the declaration of
2443 DECL. Returns 2 if it's also a real problem. */
2444
2445static int
11f6b451 2446decl_jump_unsafe (tree decl)
6625cdb5 2447{
b88b7ced
AP
2448 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2449 || TREE_TYPE (decl) == error_mark_node)
6625cdb5
JM
2450 return 0;
2451
6c06fbce
MM
2452 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
2453 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2454 return 2;
2455
2456 if (pod_type_p (TREE_TYPE (decl)))
6625cdb5
JM
2457 return 0;
2458
6c06fbce 2459 /* The POD stuff is just pedantry; why should it matter if the class
6625cdb5 2460 contains a field of pointer to member type? */
6625cdb5
JM
2461 return 1;
2462}
2463
1799e5d5
RH
2464/* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2465
2466static void
2467identify_goto (tree decl, const location_t *locus)
2468{
2469 if (decl)
cbe5f3b3 2470 permerror (input_location, "jump to label %qD", decl);
1799e5d5 2471 else
cbe5f3b3 2472 permerror (input_location, "jump to case label");
1799e5d5 2473 if (locus)
cbe5f3b3 2474 permerror (input_location, "%H from here", locus);
1799e5d5
RH
2475}
2476
6625cdb5
JM
2477/* Check that a single previously seen jump to a newly defined label
2478 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2479 the jump context; NAMES are the names in scope in LEVEL at the jump
3db45ab5 2480 context; LOCUS is the source position of the jump or 0. Returns
1799e5d5 2481 true if all is well. */
6625cdb5 2482
1799e5d5
RH
2483static bool
2484check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2485 bool exited_omp, const location_t *locus)
2486{
2487 struct cp_binding_level *b;
2488 bool identified = false, saw_eh = false, saw_omp = false;
2489
2490 if (exited_omp)
2491 {
2492 identify_goto (decl, locus);
2493 error (" exits OpenMP structured block");
2494 identified = saw_omp = true;
2495 }
2496
2497 for (b = current_binding_level; b ; b = b->level_chain)
2498 {
2499 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2500
2501 for (new_decls = b->names; new_decls != old_decls;
6625cdb5
JM
2502 new_decls = TREE_CHAIN (new_decls))
2503 {
2504 int problem = decl_jump_unsafe (new_decls);
2505 if (! problem)
2506 continue;
2507
1799e5d5 2508 if (!identified)
6625cdb5 2509 {
1799e5d5
RH
2510 identify_goto (decl, locus);
2511 identified = true;
6625cdb5 2512 }
826840d9 2513 if (problem > 1)
dee15844 2514 error (" crosses initialization of %q+#D", new_decls);
6625cdb5 2515 else
cbe5f3b3 2516 permerror (input_location, " enters scope of non-POD %q+#D", new_decls);
6625cdb5
JM
2517 }
2518
2519 if (b == level)
2520 break;
1799e5d5 2521 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
6625cdb5 2522 {
1799e5d5 2523 if (!identified)
6625cdb5 2524 {
1799e5d5
RH
2525 identify_goto (decl, locus);
2526 identified = true;
6625cdb5 2527 }
a7e8c268 2528 if (b->kind == sk_try)
826840d9
RH
2529 error (" enters try block");
2530 else
2531 error (" enters catch block");
1799e5d5
RH
2532 saw_eh = true;
2533 }
2534 if (b->kind == sk_omp && !saw_omp)
2535 {
2536 if (!identified)
2537 {
2538 identify_goto (decl, locus);
2539 identified = true;
2540 }
2541 error (" enters OpenMP structured block");
2542 saw_omp = true;
6625cdb5
JM
2543 }
2544 }
6625cdb5 2545
1799e5d5 2546 return !identified;
6625cdb5
JM
2547}
2548
2549static void
1799e5d5 2550check_previous_goto (tree decl, struct named_label_use_entry *use)
6625cdb5 2551{
1799e5d5
RH
2552 check_previous_goto_1 (decl, use->binding_level,
2553 use->names_in_scope, use->in_omp_scope,
2554 &use->o_goto_locus);
6625cdb5
JM
2555}
2556
1799e5d5
RH
2557static bool
2558check_switch_goto (struct cp_binding_level* level)
6625cdb5 2559{
1799e5d5 2560 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
6625cdb5
JM
2561}
2562
2563/* Check that a new jump to a label DECL is OK. Called by
2564 finish_goto_stmt. */
2565
2566void
11f6b451 2567check_goto (tree decl)
6625cdb5 2568{
1799e5d5
RH
2569 struct named_label_entry *ent, dummy;
2570 bool saw_catch = false, identified = false;
6625cdb5 2571 tree bad;
6625cdb5 2572
1799e5d5
RH
2573 /* We can't know where a computed goto is jumping.
2574 So we assume that it's OK. */
2575 if (TREE_CODE (decl) != LABEL_DECL)
2576 return;
2577
2578 /* We didn't record any information about this label when we created it,
2579 and there's not much point since it's trivial to analyze as a return. */
2580 if (decl == cdtor_label)
e3cd9945
APB
2581 return;
2582
1799e5d5
RH
2583 dummy.label_decl = decl;
2584 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2585 gcc_assert (ent != NULL);
2586
6625cdb5
JM
2587 /* If the label hasn't been defined yet, defer checking. */
2588 if (! DECL_INITIAL (decl))
2589 {
1799e5d5 2590 struct named_label_use_entry *new_use;
6625cdb5 2591
1799e5d5
RH
2592 /* Don't bother creating another use if the last goto had the
2593 same data, and will therefore create the same set of errors. */
2594 if (ent->uses
2595 && ent->uses->names_in_scope == current_binding_level->names)
2596 return;
6625cdb5 2597
1799e5d5
RH
2598 new_use = GGC_NEW (struct named_label_use_entry);
2599 new_use->binding_level = current_binding_level;
2600 new_use->names_in_scope = current_binding_level->names;
2601 new_use->o_goto_locus = input_location;
2602 new_use->in_omp_scope = false;
2603
2604 new_use->next = ent->uses;
2605 ent->uses = new_use;
2606 return;
2607 }
6625cdb5 2608
1799e5d5
RH
2609 if (ent->in_try_scope || ent->in_catch_scope
2610 || ent->in_omp_scope || ent->bad_decls)
6625cdb5 2611 {
cbe5f3b3
MLI
2612 permerror (input_location, "jump to label %q+D", decl);
2613 permerror (input_location, " from here");
1799e5d5 2614 identified = true;
6625cdb5
JM
2615 }
2616
1799e5d5 2617 for (bad = ent->bad_decls; bad; bad = TREE_CHAIN (bad))
6625cdb5
JM
2618 {
2619 tree b = TREE_VALUE (bad);
2620 int u = decl_jump_unsafe (b);
2621
2622 if (u > 1 && DECL_ARTIFICIAL (b))
1799e5d5
RH
2623 {
2624 /* Can't skip init of __exception_info. */
2625 error ("%J enters catch block", b);
2626 saw_catch = true;
2627 }
6625cdb5 2628 else if (u > 1)
dee15844 2629 error (" skips initialization of %q+#D", b);
6625cdb5 2630 else
cbe5f3b3 2631 permerror (input_location, " enters scope of non-POD %q+#D", b);
6625cdb5
JM
2632 }
2633
1799e5d5 2634 if (ent->in_try_scope)
6625cdb5 2635 error (" enters try block");
1799e5d5 2636 else if (ent->in_catch_scope && !saw_catch)
826840d9 2637 error (" enters catch block");
1799e5d5
RH
2638
2639 if (ent->in_omp_scope)
2640 error (" enters OpenMP structured block");
2641 else if (flag_openmp)
2642 {
2643 struct cp_binding_level *b;
2644 for (b = current_binding_level; b ; b = b->level_chain)
2645 {
2646 if (b == ent->binding_level)
2647 break;
2648 if (b->kind == sk_omp)
2649 {
2650 if (!identified)
2651 {
cbe5f3b3
MLI
2652 permerror (input_location, "jump to label %q+D", decl);
2653 permerror (input_location, " from here");
1799e5d5
RH
2654 identified = true;
2655 }
2656 error (" exits OpenMP structured block");
2657 break;
2658 }
2659 }
2660 }
2661}
2662
2663/* Check that a return is ok wrt OpenMP structured blocks.
2664 Called by finish_return_stmt. Returns true if all is well. */
2665
2666bool
2667check_omp_return (void)
2668{
2669 struct cp_binding_level *b;
2670 for (b = current_binding_level; b ; b = b->level_chain)
2671 if (b->kind == sk_omp)
2672 {
2673 error ("invalid exit from OpenMP structured block");
2674 return false;
2675 }
2676 return true;
6625cdb5
JM
2677}
2678
8d08fdba 2679/* Define a label, specifying the location in the source file.
b9c87401 2680 Return the LABEL_DECL node for the label. */
8d08fdba
MS
2681
2682tree
5b030314 2683define_label (location_t location, tree name)
8d08fdba 2684{
1799e5d5 2685 struct named_label_entry *ent, dummy;
926ce8bd 2686 struct cp_binding_level *p;
1799e5d5 2687 tree decl;
6625cdb5 2688
22ffcc6f 2689 timevar_push (TV_NAME_LOOKUP);
1799e5d5
RH
2690
2691 decl = lookup_label (name);
2692
2693 dummy.label_decl = decl;
2694 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2695 gcc_assert (ent != NULL);
8d08fdba 2696
3dc9aec6 2697 /* After labels, make any new cleanups in the function go into their
8d08fdba 2698 own new (temporary) binding contour. */
caf93cb0
EC
2699 for (p = current_binding_level;
2700 p->kind != sk_function_parms;
a7e8c268 2701 p = p->level_chain)
3dc9aec6 2702 p->more_cleanups_ok = 0;
8d08fdba 2703
e1cd6e56 2704 if (name == get_identifier ("wchar_t"))
cbe5f3b3 2705 permerror (input_location, "label named wchar_t");
e1cd6e56 2706
8d08fdba 2707 if (DECL_INITIAL (decl) != NULL_TREE)
417fa55b
LM
2708 {
2709 error ("duplicate label %qD", decl);
2710 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
2711 }
8d08fdba
MS
2712 else
2713 {
1799e5d5
RH
2714 struct named_label_use_entry *use;
2715
8d08fdba
MS
2716 /* Mark label as having been defined. */
2717 DECL_INITIAL (decl) = error_mark_node;
2718 /* Say where in the source. */
f31686a3 2719 DECL_SOURCE_LOCATION (decl) = location;
1799e5d5
RH
2720
2721 ent->binding_level = current_binding_level;
2722 ent->names_in_scope = current_binding_level->names;
2723
2724 for (use = ent->uses; use ; use = use->next)
2725 check_previous_goto (decl, use);
2726 ent->uses = NULL;
8d08fdba 2727 }
b9c87401 2728
be99edf8 2729 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba
MS
2730}
2731
a5894242
MS
2732struct cp_switch
2733{
e2500fed 2734 struct cp_binding_level *level;
a5894242 2735 struct cp_switch *next;
56cb9733
MM
2736 /* The SWITCH_STMT being built. */
2737 tree switch_stmt;
2738 /* A splay-tree mapping the low element of a case range to the high
2739 element, or NULL_TREE if there is no high element. Used to
2740 determine whether or not a new case label duplicates an old case
2741 label. We need a tree, rather than simply a hash table, because
2742 of the GNU case range extension. */
2743 splay_tree cases;
a5894242
MS
2744};
2745
56cb9733
MM
2746/* A stack of the currently active switch statements. The innermost
2747 switch statement is on the top of the stack. There is no need to
2748 mark the stack for garbage collection because it is only active
2749 during the processing of the body of a function, and we never
2750 collect at that point. */
5362b086 2751
a5894242
MS
2752static struct cp_switch *switch_stack;
2753
56cb9733
MM
2754/* Called right after a switch-statement condition is parsed.
2755 SWITCH_STMT is the switch statement being parsed. */
2756
a5894242 2757void
11f6b451 2758push_switch (tree switch_stmt)
a5894242 2759{
0ac1b889 2760 struct cp_switch *p = XNEW (struct cp_switch);
a5894242
MS
2761 p->level = current_binding_level;
2762 p->next = switch_stack;
56cb9733
MM
2763 p->switch_stmt = switch_stmt;
2764 p->cases = splay_tree_new (case_compare, NULL, NULL);
a5894242
MS
2765 switch_stack = p;
2766}
2767
2768void
11f6b451 2769pop_switch (void)
a5894242 2770{
6de9cd9a 2771 struct cp_switch *cs = switch_stack;
fbc315db 2772 location_t switch_location;
6de9cd9a
DN
2773
2774 /* Emit warnings as needed. */
fbc315db
ILT
2775 if (EXPR_HAS_LOCATION (cs->switch_stmt))
2776 switch_location = EXPR_LOCATION (cs->switch_stmt);
2777 else
2778 switch_location = input_location;
dddf9a0a
AP
2779 if (!processing_template_decl)
2780 c_do_switch_warnings (cs->cases, switch_location,
2781 SWITCH_STMT_TYPE (cs->switch_stmt),
2782 SWITCH_STMT_COND (cs->switch_stmt));
5362b086 2783
56cb9733 2784 splay_tree_delete (cs->cases);
a5894242 2785 switch_stack = switch_stack->next;
bedda2da 2786 free (cs);
a5894242
MS
2787}
2788
b0a1da19
JM
2789/* Note that we've seen a definition of a case label, and complain if this
2790 is a bad place for one. */
e92cc029 2791
3e4d04a1 2792tree
11f6b451 2793finish_case_label (tree low_value, tree high_value)
8d08fdba 2794{
3e4d04a1 2795 tree cond, r;
926ce8bd 2796 struct cp_binding_level *p;
a5894242 2797
56cb9733
MM
2798 if (processing_template_decl)
2799 {
8f17b5c5
MM
2800 tree label;
2801
56cb9733
MM
2802 /* For templates, just add the case label; we'll do semantic
2803 analysis at instantiation-time. */
8f17b5c5 2804 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
3e4d04a1 2805 return add_stmt (build_case_label (low_value, high_value, label));
56cb9733
MM
2806 }
2807
2808 /* Find the condition on which this switch statement depends. */
ebaae582 2809 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
56cb9733
MM
2810 if (cond && TREE_CODE (cond) == TREE_LIST)
2811 cond = TREE_VALUE (cond);
56cb9733 2812
1799e5d5
RH
2813 if (!check_switch_goto (switch_stack->level))
2814 return error_mark_node;
2815
a6c0a76c
SB
2816 r = c_add_case_label (switch_stack->cases, cond, TREE_TYPE (cond),
2817 low_value, high_value);
8d08fdba 2818
3dc9aec6 2819 /* After labels, make any new cleanups in the function go into their
8d08fdba 2820 own new (temporary) binding contour. */
caf93cb0
EC
2821 for (p = current_binding_level;
2822 p->kind != sk_function_parms;
a7e8c268 2823 p = p->level_chain)
3dc9aec6 2824 p->more_cleanups_ok = 0;
3e4d04a1
RH
2825
2826 return r;
8d08fdba
MS
2827}
2828\f
7ddedda4
MM
2829/* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2830
e2500fed 2831static hashval_t
11f6b451 2832typename_hash (const void* k)
7ddedda4 2833{
e2500fed 2834 hashval_t hash;
741ac903 2835 const_tree const t = (const_tree) k;
7ddedda4 2836
7bdfd72e
KG
2837 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2838 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
7ddedda4
MM
2839
2840 return hash;
2841}
2842
fc6a28d7
MM
2843typedef struct typename_info {
2844 tree scope;
2845 tree name;
2846 tree template_id;
2847 bool enum_p;
2848 bool class_p;
2849} typename_info;
2850
06d40de8
DG
2851/* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
2852 really of type `typename_info*' */
7ddedda4 2853
e2500fed 2854static int
11f6b451 2855typename_compare (const void * k1, const void * k2)
7ddedda4 2856{
741ac903
KG
2857 const_tree const t1 = (const_tree) k1;
2858 const typename_info *const t2 = (const typename_info *) k2;
fc6a28d7
MM
2859
2860 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2861 && TYPE_CONTEXT (t1) == t2->scope
2862 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2863 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2864 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
7ddedda4
MM
2865}
2866
45869a6c 2867/* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
fc6a28d7 2868 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
c8094d83 2869
45869a6c
MM
2870 Returns the new TYPENAME_TYPE. */
2871
e2500fed
GK
2872static GTY ((param_is (union tree_node))) htab_t typename_htab;
2873
8ce33230 2874static tree
fc6a28d7
MM
2875build_typename_type (tree context, tree name, tree fullname,
2876 enum tag_types tag_type)
45869a6c
MM
2877{
2878 tree t;
2879 tree d;
fc6a28d7 2880 typename_info ti;
fad205ff 2881 void **e;
fc6a28d7 2882 hashval_t hash;
45869a6c 2883
e2500fed 2884 if (typename_htab == NULL)
fc6a28d7
MM
2885 typename_htab = htab_create_ggc (61, &typename_hash,
2886 &typename_compare, NULL);
2887
c8094d83 2888 ti.scope = FROB_CONTEXT (context);
fc6a28d7
MM
2889 ti.name = name;
2890 ti.template_id = fullname;
2891 ti.enum_p = tag_type == enum_type;
2892 ti.class_p = (tag_type == class_type
2893 || tag_type == record_type
2894 || tag_type == union_type);
2895 hash = (htab_hash_pointer (ti.scope)
2896 ^ htab_hash_pointer (ti.name));
45869a6c 2897
7ddedda4 2898 /* See if we already have this type. */
fc6a28d7 2899 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
e2500fed
GK
2900 if (*e)
2901 t = (tree) *e;
7ddedda4 2902 else
fc6a28d7
MM
2903 {
2904 /* Build the TYPENAME_TYPE. */
9e1e64ec 2905 t = cxx_make_type (TYPENAME_TYPE);
fc6a28d7
MM
2906 TYPE_CONTEXT (t) = ti.scope;
2907 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2908 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2909 TYPENAME_IS_CLASS_P (t) = ti.class_p;
c8094d83 2910
fc6a28d7
MM
2911 /* Build the corresponding TYPE_DECL. */
2912 d = build_decl (TYPE_DECL, name, t);
2913 TYPE_NAME (TREE_TYPE (d)) = d;
2914 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2915 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2916 DECL_ARTIFICIAL (d) = 1;
2917
2918 /* Store it in the hash table. */
2919 *e = t;
06d40de8
DG
2920
2921 /* TYPENAME_TYPEs must always be compared structurally, because
2922 they may or may not resolve down to another type depending on
2923 the currently open classes. */
2924 SET_TYPE_STRUCTURAL_EQUALITY (t);
fc6a28d7 2925 }
c8094d83 2926
45869a6c
MM
2927 return t;
2928}
2929
fc6a28d7
MM
2930/* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
2931 provided to name the type. Returns an appropriate type, unless an
2932 error occurs, in which case error_mark_node is returned. If we
2933 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2934 return that, rather than the _TYPE it corresponds to, in other
2935 cases we look through the type decl. If TF_ERROR is set, complain
2936 about errors, otherwise be quiet. */
3baa501d 2937
5566b478 2938tree
fc6a28d7
MM
2939make_typename_type (tree context, tree name, enum tag_types tag_type,
2940 tsubst_flags_t complain)
5566b478 2941{
b2b7d40a 2942 tree fullname;
7d3bec9d
NS
2943 tree t;
2944 bool want_template;
a80e4195 2945
5dc5d13c
KL
2946 if (name == error_mark_node
2947 || context == NULL_TREE
2948 || context == error_mark_node)
2949 return error_mark_node;
2950
2f939d94 2951 if (TYPE_P (name))
78638e24 2952 {
68642fb6
UD
2953 if (!(TYPE_LANG_SPECIFIC (name)
2954 && (CLASSTYPE_IS_TEMPLATE (name)
78638e24
MM
2955 || CLASSTYPE_USE_TEMPLATE (name))))
2956 name = TYPE_IDENTIFIER (name);
2957 else
2958 /* Create a TEMPLATE_ID_EXPR for the type. */
2959 name = build_nt (TEMPLATE_ID_EXPR,
2960 CLASSTYPE_TI_TEMPLATE (name),
2961 CLASSTYPE_TI_ARGS (name));
2962 }
653cc74a 2963 else if (TREE_CODE (name) == TYPE_DECL)
a80e4195 2964 name = DECL_NAME (name);
b2b7d40a
JM
2965
2966 fullname = name;
2967
2968 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11686454
JM
2969 {
2970 name = TREE_OPERAND (name, 0);
2971 if (TREE_CODE (name) == TEMPLATE_DECL)
2972 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
50ef2c18
MM
2973 else if (TREE_CODE (name) == OVERLOAD)
2974 {
2975 error ("%qD is not a type", name);
2976 return error_mark_node;
2977 }
11686454 2978 }
8a2b77e7
JM
2979 if (TREE_CODE (name) == TEMPLATE_DECL)
2980 {
2d01edd7 2981 error ("%qD used without template parameters", name);
8a2b77e7
JM
2982 return error_mark_node;
2983 }
50bc768d 2984 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
0c88d886 2985 gcc_assert (TYPE_P (context));
04ddee1b 2986
7d3bec9d
NS
2987 /* When the CONTEXT is a dependent type, NAME could refer to a
2988 dependent base class of CONTEXT. So we cannot peek inside it,
2989 even if CONTEXT is a currently open scope. */
2990 if (dependent_type_p (context))
2991 return build_typename_type (context, name, fullname, tag_type);
caf93cb0 2992
9e1e64ec 2993 if (!MAYBE_CLASS_TYPE_P (context))
7d3bec9d
NS
2994 {
2995 if (complain & tf_error)
2996 error ("%q#T is not a class", context);
2997 return error_mark_node;
5566b478 2998 }
7d3bec9d
NS
2999
3000 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3001
3002 /* We should only set WANT_TYPE when we're a nested typename type.
3003 Then we can give better diagnostics if we find a non-type. */
3004 t = lookup_field (context, name, 0, /*want_type=*/true);
3005 if (!t)
11249cf0 3006 {
4f2b0fb2 3007 if (complain & tf_error)
7d3bec9d
NS
3008 error (want_template ? "no class template named %q#T in %q#T"
3009 : "no type named %q#T in %q#T", name, context);
11249cf0
MM
3010 return error_mark_node;
3011 }
7d3bec9d
NS
3012
3013 if (want_template && !DECL_CLASS_TEMPLATE_P (t))
3014 {
3015 if (complain & tf_error)
3016 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3017 context, name, t);
3018 return error_mark_node;
3019 }
3020 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3021 {
3022 if (complain & tf_error)
3023 error ("%<typename %T::%D%> names %q#T, which is not a type",
3024 context, name, t);
3025 return error_mark_node;
3026 }
3027
3028 if (complain & tf_error)
02022f3a 3029 perform_or_defer_access_check (TYPE_BINFO (context), t, t);
7d3bec9d
NS
3030
3031 if (want_template)
3032 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3033 NULL_TREE, context,
3034 /*entering_scope=*/0,
3035 tf_warning_or_error | tf_user);
3036
3037 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3038 t = TREE_TYPE (t);
3039
3040 return t;
5566b478
MS
3041}
3042
b939a023 3043/* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
c8094d83 3044 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
b939a023
KL
3045 in which case error_mark_node is returned.
3046
3047 If PARM_LIST is non-NULL, also make sure that the template parameter
3048 list of TEMPLATE_DECL matches.
3049
3050 If COMPLAIN zero, don't complain about any errors that occur. */
b8c6534b
KL
3051
3052tree
b939a023
KL
3053make_unbound_class_template (tree context, tree name, tree parm_list,
3054 tsubst_flags_t complain)
b8c6534b
KL
3055{
3056 tree t;
3057 tree d;
3058
3059 if (TYPE_P (name))
3060 name = TYPE_IDENTIFIER (name);
3061 else if (DECL_P (name))
3062 name = DECL_NAME (name);
8dc2b103 3063 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
b8c6534b 3064
9579624e 3065 if (!dependent_type_p (context)
b8c6534b
KL
3066 || currently_open_class (context))
3067 {
3068 tree tmpl = NULL_TREE;
3069
9e1e64ec 3070 if (MAYBE_CLASS_TYPE_P (context))
86ac0575 3071 tmpl = lookup_field (context, name, 0, false);
b8c6534b
KL
3072
3073 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
3074 {
4f09be91 3075 if (complain & tf_error)
2d01edd7 3076 error ("no class template named %q#T in %q#T", name, context);
b8c6534b
KL
3077 return error_mark_node;
3078 }
caf93cb0 3079
b939a023
KL
3080 if (parm_list
3081 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3082 {
3083 if (complain & tf_error)
3084 {
3085 error ("template parameters do not match template");
dee15844 3086 error ("%q+D declared here", tmpl);
b939a023
KL
3087 }
3088 return error_mark_node;
3089 }
3090
2b59fc25 3091 if (complain & tf_error)
02022f3a 3092 perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
b8c6534b
KL
3093
3094 return tmpl;
3095 }
3096
3097 /* Build the UNBOUND_CLASS_TEMPLATE. */
9e1e64ec 3098 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
b8c6534b
KL
3099 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3100 TREE_TYPE (t) = NULL_TREE;
06d40de8 3101 SET_TYPE_STRUCTURAL_EQUALITY (t);
b8c6534b
KL
3102
3103 /* Build the corresponding TEMPLATE_DECL. */
3104 d = build_decl (TEMPLATE_DECL, name, t);
3105 TYPE_NAME (TREE_TYPE (d)) = d;
3106 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3107 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3108 DECL_ARTIFICIAL (d) = 1;
b939a023 3109 DECL_TEMPLATE_PARMS (d) = parm_list;
b8c6534b
KL
3110
3111 return t;
3112}
3113
8d08fdba 3114\f
47aa0df4 3115
8d08fdba 3116/* Push the declarations of builtin types into the namespace.
4b0d3cbe
MM
3117 RID_INDEX is the index of the builtin type in the array
3118 RID_POINTERS. NAME is the name used when looking up the builtin
3119 type. TYPE is the _TYPE node for the builtin type. */
8d08fdba 3120
eaa7c03f 3121void
caf93cb0 3122record_builtin_type (enum rid rid_index,
0cbd7506
MS
3123 const char* name,
3124 tree type)
8d08fdba
MS
3125{
3126 tree rname = NULL_TREE, tname = NULL_TREE;
a703fb38 3127 tree tdecl = NULL_TREE;
8d08fdba 3128
0e5921e8 3129 if ((int) rid_index < (int) RID_MAX)
8d08fdba
MS
3130 rname = ridpointers[(int) rid_index];
3131 if (name)
3132 tname = get_identifier (name);
3133
4b0d3cbe
MM
3134 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3135 eliminated. Built-in types should not be looked up name; their
3136 names are keywords that the parser can recognize. However, there
3137 is code in c-common.c that uses identifier_global_value to look
3138 up built-in types by name. */
8d08fdba
MS
3139 if (tname)
3140 {
4b0d3cbe
MM
3141 tdecl = build_decl (TYPE_DECL, tname, type);
3142 DECL_ARTIFICIAL (tdecl) = 1;
a7e8c268 3143 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
8d08fdba 3144 }
4b0d3cbe 3145 if (rname)
8d08fdba 3146 {
4b0d3cbe 3147 if (!tdecl)
8d08fdba 3148 {
4b0d3cbe
MM
3149 tdecl = build_decl (TYPE_DECL, rname, type);
3150 DECL_ARTIFICIAL (tdecl) = 1;
8d08fdba 3151 }
4b0d3cbe 3152 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
8d08fdba 3153 }
4b0d3cbe
MM
3154
3155 if (!TYPE_NAME (type))
3156 TYPE_NAME (type) = tdecl;
47aa0df4
MM
3157
3158 if (tdecl)
21d13d83 3159 debug_hooks->type_decl (tdecl, 0);
8d08fdba
MS
3160}
3161
eff71ab0 3162/* Record one of the standard Java types.
4d8a1dd6
MM
3163 * Declare it as having the given NAME.
3164 * If SIZE > 0, it is the size of one of the integral types;
3165 * otherwise it is the negative of the size of one of the other types. */
eff71ab0
PB
3166
3167static tree
11f6b451 3168record_builtin_java_type (const char* name, int size)
eff71ab0
PB
3169{
3170 tree type, decl;
3171 if (size > 0)
3172 type = make_signed_type (size);
3173 else if (size > -32)
70fef63a 3174 { /* "__java_char" or ""__java_boolean". */
eff71ab0 3175 type = make_unsigned_type (-size);
70fef63a 3176 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
eff71ab0
PB
3177 }
3178 else
a1c65f9f 3179 { /* "__java_float" or ""__java_double". */
eff71ab0
PB
3180 type = make_node (REAL_TYPE);
3181 TYPE_PRECISION (type) = - size;
3182 layout_type (type);
3183 }
0e5921e8 3184 record_builtin_type (RID_MAX, name, type);
eff71ab0 3185 decl = TYPE_NAME (type);
e229f2cd
PB
3186
3187 /* Suppress generate debug symbol entries for these types,
3188 since for normal C++ they are just clutter.
a1c65f9f 3189 However, push_lang_context undoes this if extern "Java" is seen. */
eff71ab0 3190 DECL_IGNORED_P (decl) = 1;
e229f2cd 3191
eff71ab0
PB
3192 TYPE_FOR_JAVA (type) = 1;
3193 return type;
3194}
3195
3b426391 3196/* Push a type into the namespace so that the back ends ignore it. */
036407f7
ML
3197
3198static void
11f6b451 3199record_unknown_type (tree type, const char* name)
036407f7
ML
3200{
3201 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
3202 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3203 DECL_IGNORED_P (decl) = 1;
3204 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3205 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3206 TYPE_ALIGN (type) = 1;
11cf4d18 3207 TYPE_USER_ALIGN (type) = 0;
036407f7 3208 TYPE_MODE (type) = TYPE_MODE (void_type_node);
68642fb6 3209}
036407f7 3210
13a44ee0 3211/* A string for which we should create an IDENTIFIER_NODE at
d43829f9
MM
3212 startup. */
3213
3214typedef struct predefined_identifier
3215{
3216 /* The name of the identifier. */
8b60264b 3217 const char *const name;
d43829f9 3218 /* The place where the IDENTIFIER_NODE should be stored. */
8b60264b 3219 tree *const node;
838dfd8a 3220 /* Nonzero if this is the name of a constructor or destructor. */
8b60264b 3221 const int ctor_or_dtor_p;
d43829f9
MM
3222} predefined_identifier;
3223
3224/* Create all the predefined identifiers. */
3225
3226static void
11f6b451 3227initialize_predefined_identifiers (void)
d43829f9 3228{
8b60264b 3229 const predefined_identifier *pid;
d43829f9
MM
3230
3231 /* A table of identifiers to create at startup. */
8b60264b 3232 static const predefined_identifier predefined_identifiers[] = {
298d6f60
MM
3233 { "C++", &lang_name_cplusplus, 0 },
3234 { "C", &lang_name_c, 0 },
3235 { "Java", &lang_name_java, 0 },
d6eec208
MM
3236 /* Some of these names have a trailing space so that it is
3237 impossible for them to conflict with names written by users. */
3238 { "__ct ", &ctor_identifier, 1 },
3239 { "__base_ctor ", &base_ctor_identifier, 1 },
3240 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3241 { "__dt ", &dtor_identifier, 1 },
3242 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3243 { "__base_dtor ", &base_dtor_identifier, 1 },
3244 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
298d6f60 3245 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
298d6f60
MM
3246 { "nelts", &nelts_identifier, 0 },
3247 { THIS_NAME, &this_identifier, 0 },
c4372ef4 3248 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
298d6f60 3249 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
298d6f60 3250 { "_vptr", &vptr_identifier, 0 },
3ec6bad3 3251 { "__vtt_parm", &vtt_parm_identifier, 0 },
82a2669e 3252 { "::", &global_scope_name, 0 },
1f6e1acc 3253 { "std", &std_identifier, 0 },
298d6f60 3254 { NULL, NULL, 0 }
d43829f9
MM
3255 };
3256
3257 for (pid = predefined_identifiers; pid->name; ++pid)
298d6f60
MM
3258 {
3259 *pid->node = get_identifier (pid->name);
3260 if (pid->ctor_or_dtor_p)
3261 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3262 }
d43829f9
MM
3263}
3264
8d08fdba
MS
3265/* Create the predefined scalar types of C,
3266 and some nodes representing standard constants (0, 1, (void *)0).
3267 Initialize the global binding level.
3268 Make definitions for built-in primitive functions. */
3269
3270void
11f6b451 3271cxx_init_decl_processing (void)
8d08fdba 3272{
10841285
MM
3273 tree void_ftype;
3274 tree void_ftype_ptr;
8d08fdba 3275
8c1d6d62 3276 build_common_tree_nodes (flag_signed_char, false);
6de66680 3277
d43829f9
MM
3278 /* Create all the identifiers we need. */
3279 initialize_predefined_identifiers ();
8d08fdba 3280
9cd64686
MM
3281 /* Create the global variables. */
3282 push_to_top_level ();
8012c983 3283
82a2669e 3284 current_function_decl = NULL_TREE;
1ec57cf0 3285 current_binding_level = NULL;
a1c65f9f 3286 /* Enter the global namespace. */
50bc768d 3287 gcc_assert (global_namespace == NULL_TREE);
82a2669e 3288 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
0cbd7506 3289 void_type_node);
b9e75696 3290 TREE_PUBLIC (global_namespace) = 1;
ac20c67a 3291 begin_scope (sk_namespace, global_namespace);
82a2669e 3292
30394414
JM
3293 current_lang_name = NULL_TREE;
3294
ddbfd28d
GK
3295 if (flag_visibility_ms_compat)
3296 default_visibility = VISIBILITY_HIDDEN;
3297
8d08fdba
MS
3298 /* Initially, C. */
3299 current_lang_name = lang_name_c;
3300
6bcedb4e 3301 /* Create the `std' namespace. */
1dbb6023
NS
3302 push_namespace (std_identifier);
3303 std_node = current_namespace;
3304 pop_namespace ();
5362b086 3305
eaa7c03f 3306 c_common_nodes_and_builtins ();
37c46b43 3307
4d8a1dd6
MM
3308 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3309 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3310 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3311 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3312 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3313 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3314 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3315 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
eff71ab0 3316
7d60be94
NS
3317 integer_two_node = build_int_cst (NULL_TREE, 2);
3318 integer_three_node = build_int_cst (NULL_TREE, 3);
8d08fdba 3319
255512c1 3320 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
de7df9eb
JM
3321 truthvalue_type_node = boolean_type_node;
3322 truthvalue_false_node = boolean_false_node;
3323 truthvalue_true_node = boolean_true_node;
2986ae00 3324
4cc1d462 3325 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
5fd8e536
JM
3326
3327#if 0
3e411c3f 3328 record_builtin_type (RID_MAX, NULL, string_type_node);
5fd8e536
JM
3329#endif
3330
1f84ec23
MM
3331 delta_type_node = ptrdiff_type_node;
3332 vtable_index_type = ptrdiff_type_node;
c7e266a6 3333
3ec6bad3 3334 vtt_parm_type = build_pointer_type (const_ptr_type_node);
10841285
MM
3335 void_ftype = build_function_type (void_type_node, void_list_node);
3336 void_ftype_ptr = build_function_type (void_type_node,
3337 tree_cons (NULL_TREE,
caf93cb0 3338 ptr_type_node,
10841285 3339 void_list_node));
824b9a4c 3340 void_ftype_ptr
4cc1d462 3341 = build_exception_variant (void_ftype_ptr, empty_except_spec);
8d08fdba 3342
8d08fdba
MS
3343 /* C++ extensions */
3344
3345 unknown_type_node = make_node (UNKNOWN_TYPE);
036407f7
ML
3346 record_unknown_type (unknown_type_node, "unknown type");
3347
8d08fdba
MS
3348 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3349 TREE_TYPE (unknown_type_node) = unknown_type_node;
a6967cc0 3350
a6967cc0
JM
3351 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3352 result. */
8d08fdba
MS
3353 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3354 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3355
09357846
JM
3356 init_list_type_node = make_node (UNKNOWN_TYPE);
3357 record_unknown_type (init_list_type_node, "init list");
3358
c4372ef4
NS
3359 {
3360 /* Make sure we get a unique function type, so we can give
3361 its pointer type a name. (This wins for gdb.) */
3362 tree vfunc_type = make_node (FUNCTION_TYPE);
3363 TREE_TYPE (vfunc_type) = integer_type_node;
3364 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3365 layout_type (vfunc_type);
3366
3367 vtable_entry_type = build_pointer_type (vfunc_type);
3368 }
0e5921e8 3369 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
8d08fdba 3370
8d08fdba 3371 vtbl_type_node
52bf7d5d 3372 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
8d08fdba 3373 layout_type (vtbl_type_node);
91063b51 3374 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3e411c3f 3375 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
849da744
MM
3376 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3377 layout_type (vtbl_ptr_type_node);
3e411c3f 3378 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
8d08fdba 3379
1f84ec23
MM
3380 push_namespace (get_identifier ("__cxxabiv1"));
3381 abi_node = current_namespace;
3382 pop_namespace ();
6633d636 3383
2c73f9f5 3384 global_type_node = make_node (LANG_TYPE);
036407f7 3385 record_unknown_type (global_type_node, "global type");
2c73f9f5 3386
db5ae43f
MS
3387 /* Now, C++. */
3388 current_lang_name = lang_name_cplusplus;
8d08fdba 3389
ced78d8b 3390 {
4b0d3cbe
MM
3391 tree bad_alloc_id;
3392 tree bad_alloc_type_node;
3393 tree bad_alloc_decl;
3394 tree newtype, deltype;
10841285
MM
3395 tree ptr_ftype_sizetype;
3396
1dbb6023 3397 push_namespace (std_identifier);
4b0d3cbe 3398 bad_alloc_id = get_identifier ("bad_alloc");
9e1e64ec 3399 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4b0d3cbe 3400 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
caf93cb0 3401 bad_alloc_decl
4b0d3cbe
MM
3402 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3403 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3404 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
1dbb6023 3405 pop_namespace ();
caf93cb0
EC
3406
3407 ptr_ftype_sizetype
10841285
MM
3408 = build_function_type (ptr_type_node,
3409 tree_cons (NULL_TREE,
c9f8536c 3410 size_type_node,
10841285 3411 void_list_node));
2c73f9f5 3412 newtype = build_exception_variant
0ba8a114
NS
3413 (ptr_ftype_sizetype, add_exception_specifier
3414 (NULL_TREE, bad_alloc_type_node, -1));
4cc1d462 3415 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
596ea4e5
AS
3416 push_cp_library_fn (NEW_EXPR, newtype);
3417 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3418 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3419 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
ced78d8b 3420 }
8d08fdba
MS
3421
3422 abort_fndecl
1f84ec23 3423 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
8d08fdba 3424
8d08fdba
MS
3425 /* Perform other language dependent initializations. */
3426 init_class_processing ();
db48b831 3427 init_rtti_processing ();
8d08fdba 3428
6467930b 3429 if (flag_exceptions)
8d2733ca 3430 init_exception_processing ();
9e9ff709 3431
7fcdf4c2 3432 if (! supports_one_only ())
72b7eeff 3433 flag_weak = 0;
8d08fdba 3434
2ce07e2d 3435 make_fname_decl = cp_make_fname_decl;
0ba8a114 3436 start_fname_decls ();
8d08fdba 3437
e9a25f70 3438 /* Show we use EH for cleanups. */
6de9cd9a
DN
3439 if (flag_exceptions)
3440 using_eh_for_cleanups ();
62c154ed
JM
3441}
3442
0ba8a114 3443/* Generate an initializer for a function naming variable from
bb885938 3444 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
f4f206f4 3445 filled in with the type of the init. */
0ba8a114
NS
3446
3447tree
bb885938 3448cp_fname_init (const char* name, tree *type_p)
0ba8a114
NS
3449{
3450 tree domain = NULL_TREE;
3451 tree type;
3452 tree init = NULL_TREE;
3453 size_t length = 0;
3454
3455 if (name)
3456 {
3457 length = strlen (name);
3458 domain = build_index_type (size_int (length));
3459 init = build_string (length + 1, name);
3460 }
caf93cb0 3461
0ba8a114
NS
3462 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3463 type = build_cplus_array_type (type, domain);
3464
bb885938 3465 *type_p = type;
caf93cb0 3466
0ba8a114
NS
3467 if (init)
3468 TREE_TYPE (init) = type;
3469 else
bb885938 3470 init = error_mark_node;
caf93cb0 3471
0ba8a114
NS
3472 return init;
3473}
3474
2ce07e2d
NS
3475/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3476 decl, NAME is the initialization string and TYPE_DEP indicates whether
3477 NAME depended on the type of the function. We make use of that to detect
0ba8a114 3478 __PRETTY_FUNCTION__ inside a template fn. This is being done
a692ad2e 3479 lazily at the point of first use, so we mustn't push the decl now. */
2ce07e2d
NS
3480
3481static tree
11f6b451 3482cp_make_fname_decl (tree id, int type_dep)
2ce07e2d 3483{
83182544 3484 const char *const name = (type_dep && processing_template_decl
e913996d 3485 ? NULL : fname_as_string (type_dep));
bb885938
NS
3486 tree type;
3487 tree init = cp_fname_init (name, &type);
3488 tree decl = build_decl (VAR_DECL, id, type);
2ce07e2d 3489
9e6f2e7d 3490 if (name)
b1d5455a 3491 free (CONST_CAST (char *, name));
9e6f2e7d 3492
6cce57b0 3493 /* As we're using pushdecl_with_scope, we must set the context. */
0ba8a114
NS
3494 DECL_CONTEXT (decl) = current_function_decl;
3495 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
caf93cb0 3496
2ce07e2d
NS
3497 TREE_STATIC (decl) = 1;
3498 TREE_READONLY (decl) = 1;
2ce07e2d 3499 DECL_ARTIFICIAL (decl) = 1;
caf93cb0 3500
0ba8a114 3501 TREE_USED (decl) = 1;
5362b086 3502
6cce57b0
JM
3503 if (current_function_decl)
3504 {
3505 struct cp_binding_level *b = current_binding_level;
a7e8c268 3506 while (b->level_chain->kind != sk_function_parms)
6cce57b0 3507 b = b->level_chain;
d63d5d0c 3508 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3db45ab5 3509 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
d174af6c 3510 LOOKUP_ONLYCONVERTING);
e913996d 3511 }
ad16ae7f
MM
3512 else
3513 pushdecl_top_level_and_finish (decl, init);
caf93cb0 3514
2ce07e2d
NS
3515 return decl;
3516}
3517
c79efc4d 3518static tree
5779e713 3519builtin_function_1 (tree decl, tree context, bool is_global)
c79efc4d
RÁE
3520{
3521 tree id = DECL_NAME (decl);
3522 const char *name = IDENTIFIER_POINTER (id);
8d08fdba 3523
c79efc4d 3524 retrofit_lang_decl (decl);
0c11ada6 3525
c79efc4d
RÁE
3526 /* All nesting of C++ functions is lexical; there is never a "static
3527 chain" in the sense of GNU C nested functions. */
3528 DECL_NO_STATIC_CHAIN (decl) = 1;
3529
3530 DECL_ARTIFICIAL (decl) = 1;
3531 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3532 SET_DECL_LANGUAGE (decl, lang_c);
3533 /* Runtime library routines are, by definition, available in an
3534 external shared object. */
3535 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3536 DECL_VISIBILITY_SPECIFIED (decl) = 1;
8d08fdba 3537
d52e4867 3538 DECL_CONTEXT (decl) = context;
12a22e76 3539
5779e713
MM
3540 if (is_global)
3541 pushdecl_top_level (decl);
3542 else
3543 pushdecl (decl);
6bcedb4e 3544
d63d5d0c
ILT
3545 /* A function in the user's namespace should have an explicit
3546 declaration before it is used. Mark the built-in function as
3547 anticipated but not actually declared. */
935d1834
ZW
3548 if (name[0] != '_' || name[1] != '_')
3549 DECL_ANTICIPATED (decl) = 1;
012c4da9
JJ
3550 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3551 {
3552 size_t len = strlen (name);
3553
3554 /* Treat __*_chk fortification functions as anticipated as well,
3555 unless they are __builtin_*. */
3556 if (len > strlen ("___chk")
3557 && memcmp (name + len - strlen ("_chk"),
3558 "_chk", strlen ("_chk") + 1) == 0)
3559 DECL_ANTICIPATED (decl) = 1;
3560 }
935d1834 3561
8d08fdba
MS
3562 return decl;
3563}
7f4edbcb 3564
d52e4867 3565tree
c79efc4d 3566cxx_builtin_function (tree decl)
d52e4867 3567{
c79efc4d
RÁE
3568 tree id = DECL_NAME (decl);
3569 const char *name = IDENTIFIER_POINTER (id);
d52e4867
RS
3570 /* All builtins that don't begin with an '_' should additionally
3571 go in the 'std' namespace. */
3572 if (name[0] != '_')
3573 {
e5b44dfb 3574 tree decl2 = copy_node(decl);
d52e4867 3575 push_namespace (std_identifier);
5779e713
MM
3576 builtin_function_1 (decl2, std_node, false);
3577 pop_namespace ();
3578 }
3579
3580 return builtin_function_1 (decl, NULL_TREE, false);
3581}
3582
3583/* Like cxx_builtin_function, but guarantee the function is added to the global
3584 scope. This is to allow function specific options to add new machine
3585 dependent builtins when the target ISA changes via attribute((target(...)))
3586 which saves space on program startup if the program does not use non-generic
3587 ISAs. */
3588
3589tree
3590cxx_builtin_function_ext_scope (tree decl)
3591{
3592
3593 tree id = DECL_NAME (decl);
3594 const char *name = IDENTIFIER_POINTER (id);
3595 /* All builtins that don't begin with an '_' should additionally
3596 go in the 'std' namespace. */
3597 if (name[0] != '_')
3598 {
3599 tree decl2 = copy_node(decl);
3600 push_namespace (std_identifier);
3601 builtin_function_1 (decl2, std_node, true);
d52e4867
RS
3602 pop_namespace ();
3603 }
3604
5779e713 3605 return builtin_function_1 (decl, NULL_TREE, true);
d52e4867
RS
3606}
3607
0c11ada6
JM
3608/* Generate a FUNCTION_DECL with the typical flags for a runtime library
3609 function. Not called directly. */
3610
3611static tree
11f6b451 3612build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
0c11ada6
JM
3613{
3614 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3615 DECL_EXTERNAL (fn) = 1;
3616 TREE_PUBLIC (fn) = 1;
3617 DECL_ARTIFICIAL (fn) = 1;
596ea4e5 3618 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
5d2ed28c 3619 SET_DECL_LANGUAGE (fn, lang_c);
73a8adb6
MM
3620 /* Runtime library routines are, by definition, available in an
3621 external shared object. */
3622 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3623 DECL_VISIBILITY_SPECIFIED (fn) = 1;
0c11ada6
JM
3624 return fn;
3625}
c2a37c55 3626
0c11ada6
JM
3627/* Returns the _DECL for a library function with C linkage.
3628 We assume that such functions never throw; if this is incorrect,
3629 callers should unset TREE_NOTHROW. */
c2a37c55 3630
448083e5 3631static tree
11f6b451 3632build_library_fn (tree name, tree type)
0c11ada6 3633{
f59d2aad
RH
3634 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3635 TREE_NOTHROW (fn) = 1;
3636 return fn;
0c11ada6
JM
3637}
3638
3639/* Returns the _DECL for a library function with C++ linkage. */
3640
596ea4e5 3641static tree
11f6b451 3642build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
0c11ada6 3643{
596ea4e5 3644 tree fn = build_library_fn_1 (name, operator_code, type);
0c11ada6 3645 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6bbf1598 3646 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
5d2ed28c 3647 SET_DECL_LANGUAGE (fn, lang_cplusplus);
0c11ada6
JM
3648 return fn;
3649}
3650
3651/* Like build_library_fn, but takes a C string instead of an
3652 IDENTIFIER_NODE. */
3653
3654tree
11f6b451 3655build_library_fn_ptr (const char* name, tree type)
7f4edbcb 3656{
0c11ada6
JM
3657 return build_library_fn (get_identifier (name), type);
3658}
3659
3660/* Like build_cp_library_fn, but takes a C string instead of an
3661 IDENTIFIER_NODE. */
3662
3663tree
11f6b451 3664build_cp_library_fn_ptr (const char* name, tree type)
0c11ada6 3665{
596ea4e5 3666 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
3667}
3668
3669/* Like build_library_fn, but also pushes the function so that we will
448083e5
PC
3670 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
3671 may throw exceptions listed in RAISES. */
0c11ada6
JM
3672
3673tree
448083e5 3674push_library_fn (tree name, tree type, tree raises)
0c11ada6 3675{
448083e5
PC
3676 tree fn;
3677
3678 if (raises)
3679 type = build_exception_variant (type, raises);
3680
3681 fn = build_library_fn (name, type);
0c11ada6
JM
3682 pushdecl_top_level (fn);
3683 return fn;
3684}
3685
3686/* Like build_cp_library_fn, but also pushes the function so that it
3687 will be found by normal lookup. */
3688
596ea4e5 3689static tree
11f6b451 3690push_cp_library_fn (enum tree_code operator_code, tree type)
0c11ada6 3691{
5362b086 3692 tree fn = build_cp_library_fn (ansi_opname (operator_code),
596ea4e5
AS
3693 operator_code,
3694 type);
0c11ada6
JM
3695 pushdecl (fn);
3696 return fn;
3697}
3698
3699/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3700 a FUNCTION_TYPE. */
3701
3702tree
11f6b451 3703push_void_library_fn (tree name, tree parmtypes)
0c11ada6
JM
3704{
3705 tree type = build_function_type (void_type_node, parmtypes);
448083e5 3706 return push_library_fn (name, type, NULL_TREE);
0c11ada6
JM
3707}
3708
cf74fb86 3709/* Like push_library_fn, but also note that this function throws
0c11ada6
JM
3710 and does not return. Used for __throw_foo and the like. */
3711
3712tree
11f6b451 3713push_throw_library_fn (tree name, tree type)
0c11ada6 3714{
448083e5 3715 tree fn = push_library_fn (name, type, NULL_TREE);
0c11ada6
JM
3716 TREE_THIS_VOLATILE (fn) = 1;
3717 TREE_NOTHROW (fn) = 0;
3718 return fn;
7f4edbcb 3719}
8d08fdba 3720\f
61a127b3
MM
3721/* When we call finish_struct for an anonymous union, we create
3722 default copy constructors and such. But, an anonymous union
3723 shouldn't have such things; this function undoes the damage to the
3724 anonymous union type T.
3725
3726 (The reason that we create the synthesized methods is that we don't
3727 distinguish `union { int i; }' from `typedef union { int i; } U'.
3728 The first is an anonymous union; the second is just an ordinary
3729 union type.) */
3730
3731void
11f6b451 3732fixup_anonymous_aggr (tree t)
61a127b3
MM
3733{
3734 tree *q;
3735
f4f206f4 3736 /* Wipe out memory of synthesized methods. */
0fcedd9c 3737 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
61a127b3
MM
3738 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3739 TYPE_HAS_INIT_REF (t) = 0;
3740 TYPE_HAS_CONST_INIT_REF (t) = 0;
3741 TYPE_HAS_ASSIGN_REF (t) = 0;
61a127b3
MM
3742 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3743
3744 /* Splice the implicitly generated functions out of the TYPE_METHODS
3745 list. */
3746 q = &TYPE_METHODS (t);
3747 while (*q)
3748 {
3749 if (DECL_ARTIFICIAL (*q))
3750 *q = TREE_CHAIN (*q);
3751 else
3752 q = &TREE_CHAIN (*q);
3753 }
3754
cab1f180 3755 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
61a127b3 3756 if (TYPE_METHODS (t))
24f58e74
PC
3757 {
3758 tree decl = TYPE_MAIN_DECL (t);
3759
3760 if (TREE_CODE (t) != UNION_TYPE)
3761 error ("%Jan anonymous struct cannot have function members", decl);
3762 else
3763 error ("%Jan anonymous union cannot have function members", decl);
3764 }
a1c2b86d
JJ
3765
3766 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3767 assignment operators (because they cannot have these methods themselves).
3768 For anonymous unions this is already checked because they are not allowed
3769 in any union, otherwise we have to check it. */
3770 if (TREE_CODE (t) != UNION_TYPE)
3771 {
3772 tree field, type;
3773
3774 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3775 if (TREE_CODE (field) == FIELD_DECL)
3776 {
3777 type = TREE_TYPE (field);
3778 if (CLASS_TYPE_P (type))
3779 {
0cbd7506 3780 if (TYPE_NEEDS_CONSTRUCTING (type))
dee15844
JM
3781 error ("member %q+#D with constructor not allowed "
3782 "in anonymous aggregate", field);
a1c2b86d 3783 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
dee15844
JM
3784 error ("member %q+#D with destructor not allowed "
3785 "in anonymous aggregate", field);
a1c2b86d 3786 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
dee15844
JM
3787 error ("member %q+#D with copy assignment operator "
3788 "not allowed in anonymous aggregate", field);
a1c2b86d
JJ
3789 }
3790 }
3791 }
61a127b3
MM
3792}
3793
72a93143 3794/* Make sure that a declaration with no declarator is well-formed, i.e.
a723baf1 3795 just declares a tagged type or anonymous union.
8d08fdba 3796
a723baf1 3797 Returns the type declared; or NULL_TREE if none. */
8d08fdba 3798
72a93143 3799tree
62d1db17 3800check_tag_decl (cp_decl_specifier_seq *declspecs)
8d08fdba 3801{
62d1db17
MM
3802 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3803 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
a723baf1
MM
3804 /* If a class, struct, or enum type is declared by the DECLSPECS
3805 (i.e, if a class-specifier, enum-specifier, or non-typename
3806 elaborated-type-specifier appears in the DECLSPECS),
3807 DECLARED_TYPE is set to the corresponding type. */
3808 tree declared_type = NULL_TREE;
3809 bool error_p = false;
8d08fdba 3810
62d1db17 3811 if (declspecs->multiple_types_p)
72a93143 3812 error ("multiple types in one declaration");
62d1db17
MM
3813 else if (declspecs->redefined_builtin_type)
3814 {
3815 if (!in_system_header)
cbe5f3b3 3816 permerror (input_location, "redeclaration of C++ built-in type %qT",
37ec60ed 3817 declspecs->redefined_builtin_type);
62d1db17
MM
3818 return NULL_TREE;
3819 }
7e2067ca 3820
c827f22f
MM
3821 if (declspecs->type
3822 && TYPE_P (declspecs->type)
caf93cb0 3823 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
9e1e64ec 3824 && MAYBE_CLASS_TYPE_P (declspecs->type))
62d1db17
MM
3825 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3826 declared_type = declspecs->type;
3827 else if (declspecs->type == error_mark_node)
3828 error_p = true;
a723baf1 3829 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
cbe5f3b3 3830 permerror (input_location, "declaration does not declare anything");
1951a1b6 3831 /* Check for an anonymous union. */
9e1e64ec 3832 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
a723baf1 3833 && TYPE_ANONYMOUS_P (declared_type))
0dd3962d 3834 {
e8186ecf 3835 /* 7/3 In a simple-declaration, the optional init-declarator-list
0cbd7506
MS
3836 can be omitted only when declaring a class (clause 9) or
3837 enumeration (7.2), that is, when the decl-specifier-seq contains
3838 either a class-specifier, an elaborated-type-specifier with
3839 a class-key (9.1), or an enum-specifier. In these cases and
3840 whenever a class-specifier or enum-specifier is present in the
3841 decl-specifier-seq, the identifiers in these specifiers are among
3842 the names being declared by the declaration (as class-name,
3843 enum-names, or enumerators, depending on the syntax). In such
3844 cases, and except for the declaration of an unnamed bit-field (9.6),
3845 the decl-specifier-seq shall introduce one or more names into the
3846 program, or shall redeclare a name introduced by a previous
3847 declaration. [Example:
3848 enum { }; // ill-formed
3849 typedef class { }; // ill-formed
3850 --end example] */
e8186ecf 3851 if (saw_typedef)
0cbd7506
MS
3852 {
3853 error ("missing type-name in typedef-declaration");
3854 return NULL_TREE;
3855 }
0dd3962d 3856 /* Anonymous unions are objects, so they can have specifiers. */;
a723baf1 3857 SET_ANON_AGGR_TYPE_P (declared_type);
6bdb8141 3858
fcf73884 3859 if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
509c9d60 3860 pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
0dd3962d
JM
3861 }
3862
62d1db17 3863 else
8d08fdba 3864 {
62d1db17
MM
3865 if (declspecs->specs[(int)ds_inline]
3866 || declspecs->specs[(int)ds_virtual])
2d01edd7 3867 error ("%qs can only be specified for functions",
caf93cb0 3868 declspecs->specs[(int)ds_inline]
62d1db17
MM
3869 ? "inline" : "virtual");
3870 else if (saw_friend
caf93cb0 3871 && (!current_class_type
62d1db17 3872 || current_scope () != current_class_type))
2d01edd7 3873 error ("%<friend%> can only be specified inside a class");
62d1db17 3874 else if (declspecs->specs[(int)ds_explicit])
2d01edd7 3875 error ("%<explicit%> can only be specified for constructors");
62d1db17
MM
3876 else if (declspecs->storage_class)
3877 error ("a storage class can only be specified for objects "
3878 "and functions");
3879 else if (declspecs->specs[(int)ds_const]
3880 || declspecs->specs[(int)ds_volatile]
3881 || declspecs->specs[(int)ds_restrict]
3882 || declspecs->specs[(int)ds_thread])
3883 error ("qualifiers can only be specified for objects "
3884 "and functions");
41dc91a8
SB
3885 else if (saw_typedef)
3886 warning (0, "%<typedef%> was ignored in this declaration");
72a93143 3887 }
8d08fdba 3888
a723baf1 3889 return declared_type;
72a93143
JM
3890}
3891
3892/* Called when a declaration is seen that contains no names to declare.
3893 If its type is a reference to a structure, union or enum inherited
3894 from a containing scope, shadow that tag name for the current scope
3895 with a forward reference.
3896 If its type defines a new named structure or union
3897 or defines an enum, it is valid but we need not do anything here.
3898 Otherwise, it is an error.
3899
3900 C++: may have to grok the declspecs to learn about static,
caf93cb0 3901 complain for anonymous unions.
72a93143 3902
a723baf1
MM
3903 Returns the TYPE declared -- or NULL_TREE if none. */
3904
3905tree
62d1db17 3906shadow_tag (cp_decl_specifier_seq *declspecs)
72a93143
JM
3907{
3908 tree t = check_tag_decl (declspecs);
3909
a723baf1
MM
3910 if (!t)
3911 return NULL_TREE;
3912
3cabd8f9
MA
3913 if (declspecs->attributes)
3914 {
dee15844
JM
3915 warning (0, "attribute ignored in declaration of %q+#T", t);
3916 warning (0, "attribute for %q+#T must follow the %qs keyword",
3917 t, class_key_or_enum_as_string (t));
3cabd8f9
MA
3918
3919 }
3920
d2a8ac2c
LM
3921 if (maybe_process_partial_specialization (t) == error_mark_node)
3922 return NULL_TREE;
72a93143
JM
3923
3924 /* This is where the variables in an anonymous union are
3925 declared. An anonymous union declaration looks like:
3926 union { ... } ;
3927 because there is no declarator after the union, the parser
3928 sends that declaration here. */
a723baf1 3929 if (ANON_AGGR_TYPE_P (t))
72a93143 3930 {
6bdb8141 3931 fixup_anonymous_aggr (t);
72a93143
JM
3932
3933 if (TYPE_FIELDS (t))
3934 {
caf93cb0 3935 tree decl = grokdeclarator (/*declarator=*/NULL,
058b15c1 3936 declspecs, NORMAL, 0, NULL);
72a93143
JM
3937 finish_anon_union (decl);
3938 }
8d08fdba 3939 }
a723baf1
MM
3940
3941 return t;
8d08fdba
MS
3942}
3943\f
3944/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3945
3946tree
caf93cb0 3947groktypename (cp_decl_specifier_seq *type_specifiers,
62d1db17 3948 const cp_declarator *declarator)
8d08fdba 3949{
62d1db17 3950 tree attrs;
98884b26 3951 tree type;
62d1db17
MM
3952 attrs = type_specifiers->attributes;
3953 type_specifiers->attributes = NULL_TREE;
3954 type = grokdeclarator (declarator, type_specifiers, TYPENAME, 0, &attrs);
ba19e12f 3955 if (attrs && type != error_mark_node)
c206a697
JM
3956 {
3957 if (CLASS_TYPE_P (type))
b2a7def5
JM
3958 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
3959 "outside of definition", type);
9e1e64ec 3960 else if (MAYBE_CLASS_TYPE_P (type))
b2a7def5
JM
3961 /* A template type parameter or other dependent type. */
3962 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
3963 "type %qT without an associated declaration", type);
c206a697
JM
3964 else
3965 cplus_decl_attributes (&type, attrs, 0);
3966 }
98884b26 3967 return type;
8d08fdba
MS
3968}
3969
15896502
MM
3970/* Process a DECLARATOR for a function-scope variable declaration,
3971 namespace-scope variable declaration, or function declaration.
3972 (Function definitions go through start_function; class member
3973 declarations appearing in the body of the class go through
3974 grokfield.) The DECL corresponding to the DECLARATOR is returned.
3975 If an error occurs, the error_mark_node is returned instead.
3976
4ad610c9
JM
3977 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
3978 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
3979 for an explicitly defaulted function, or SD_DELETED for an explicitly
3980 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
3981 implicitly initialized via a default constructor. ATTRIBUTES and
3982 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
3983 *PUSHED_SCOPE_P is set to the scope entered in this function, if any; if
3984 set, the caller is responsible for calling pop_scope. */
8d08fdba 3985
8d08fdba 3986tree
caf93cb0 3987start_decl (const cp_declarator *declarator,
62d1db17 3988 cp_decl_specifier_seq *declspecs,
0cbd7506
MS
3989 int initialized,
3990 tree attributes,
3991 tree prefix_attributes,
4514aa8c 3992 tree *pushed_scope_p)
8d08fdba 3993{
59387d2e 3994 tree decl;
15896502 3995 tree type;
8d08fdba 3996 tree context;
c3b7031d 3997 bool was_public;
317c435f 3998 int flags;
8d08fdba 3999
4514aa8c 4000 *pushed_scope_p = NULL_TREE;
c8094d83 4001
e23bd218
IR
4002 /* An object declared as __attribute__((deprecated)) suppresses
4003 warnings of uses of other deprecated items. */
4004 if (lookup_attribute ("deprecated", attributes))
4005 deprecated_state = DEPRECATED_SUPPRESS;
4006
91d231cb 4007 attributes = chainon (attributes, prefix_attributes);
b17e2870 4008
c11b6f21 4009 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
91d231cb 4010 &attributes);
68642fb6 4011
e23bd218
IR
4012 deprecated_state = DEPRECATED_NORMAL;
4013
2d00b4f2
AP
4014 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4015 || decl == error_mark_node)
44370687 4016 return error_mark_node;
8d08fdba
MS
4017
4018 type = TREE_TYPE (decl);
4019
4f1c5b7d 4020 context = DECL_CONTEXT (decl);
8d08fdba 4021
73a8adb6 4022 if (context)
4514aa8c
NS
4023 {
4024 *pushed_scope_p = push_scope (context);
c8094d83 4025
4514aa8c
NS
4026 /* We are only interested in class contexts, later. */
4027 if (TREE_CODE (context) == NAMESPACE_DECL)
4028 context = NULL_TREE;
4029 }
2c73f9f5 4030
8d08fdba
MS
4031 if (initialized)
4032 /* Is it valid for this decl to have an initializer at all?
4033 If not, set INITIALIZED to zero, which will indirectly
82580166 4034 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba
MS
4035 switch (TREE_CODE (decl))
4036 {
4037 case TYPE_DECL:
b87d79e6 4038 error ("typedef %qD is initialized (use decltype instead)", decl);
cc011e7f 4039 return error_mark_node;
8d08fdba
MS
4040
4041 case FUNCTION_DECL:
4ad610c9 4042 if (initialized == SD_DELETED)
b87d79e6
JM
4043 /* We'll handle the rest of the semantics later, but we need to
4044 set this now so it's visible to duplicate_decls. */
4045 DECL_DELETED_FN (decl) = 1;
4046 break;
8d08fdba
MS
4047
4048 default:
3e41d13b 4049 break;
8d08fdba
MS
4050 }
4051
8d08fdba
MS
4052 if (initialized)
4053 {
a9aedbc2 4054 if (! toplevel_bindings_p ()
8d08fdba 4055 && DECL_EXTERNAL (decl))
d4ee4d25 4056 warning (0, "declaration of %q#D has %<extern%> and is initialized",
0cbd7506 4057 decl);
8d08fdba 4058 DECL_EXTERNAL (decl) = 0;
5566b478 4059 if (toplevel_bindings_p ())
8d08fdba 4060 TREE_STATIC (decl) = 1;
8d08fdba
MS
4061 }
4062
317c435f
JM
4063 /* If this is a typedef that names the class for linkage purposes
4064 (7.1.3p8), apply any attributes directly to the type. */
4065 if (TREE_CODE (decl) == TYPE_DECL
4066 && TAGGED_TYPE_P (TREE_TYPE (decl))
4067 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4068 flags = ATTR_FLAG_TYPE_IN_PLACE;
4069 else
4070 flags = 0;
4071
fa20888b 4072 /* Set attributes here so if duplicate decl, will have proper attributes. */
317c435f 4073 cplus_decl_attributes (&decl, attributes, flags);
fa20888b 4074
4e2bb0a4
DS
4075 /* Dllimported symbols cannot be defined. Static data members (which
4076 can be initialized in-class and dllimported) go through grokfield,
4077 not here, so we don't need to exclude those decls when checking for
4078 a definition. */
4079 if (initialized && DECL_DLLIMPORT_P (decl))
4080 {
4081 error ("definition of %q#D is marked %<dllimport%>", decl);
4082 DECL_DLLIMPORT_P (decl) = 0;
4083 }
4084
ecb0eece 4085 /* If #pragma weak was used, mark the decl weak now. */
3693d46c 4086 maybe_apply_pragma_weak (decl);
ecb0eece 4087
97055d5c
AO
4088 if (TREE_CODE (decl) == FUNCTION_DECL
4089 && DECL_DECLARED_INLINE_P (decl)
4090 && DECL_UNINLINABLE (decl)
4091 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
dee15844 4092 warning (0, "inline function %q+D given attribute noinline", decl);
97055d5c 4093
d0f062fb 4094 if (context && COMPLETE_TYPE_P (complete_type (context)))
5b605f68
MS
4095 {
4096 if (TREE_CODE (decl) == VAR_DECL)
4097 {
86ac0575 4098 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5b605f68 4099 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
2d01edd7 4100 error ("%q#D is not a static member of %q#T", decl, context);
e349ee73
MS
4101 else
4102 {
4103 if (DECL_CONTEXT (field) != context)
f2d773a2 4104 {
a723baf1 4105 if (!same_type_p (DECL_CONTEXT (field), context))
cbe5f3b3 4106 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
37ec60ed
JW
4107 "to be defined as %<%T::%D%>",
4108 DECL_CONTEXT (field), DECL_NAME (decl),
4109 context, DECL_NAME (decl));
f2d773a2
JM
4110 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4111 }
91146169
GB
4112 if (processing_specialization
4113 && template_class_depth (context) == 0
4114 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4115 error ("template header not allowed in member definition "
4116 "of explicitly specialized class");
75650646
MM
4117 /* Static data member are tricky; an in-class initialization
4118 still doesn't provide a definition, so the in-class
4119 declaration will have DECL_EXTERNAL set, but will have an
4120 initialization. Thus, duplicate_decls won't warn
4121 about this situation, and so we check here. */
e92fb501 4122 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
9e637a26 4123 error ("duplicate initialization of %qD", decl);
d63d5d0c 4124 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
e349ee73
MS
4125 decl = field;
4126 }
5b605f68 4127 }
f30432d7
MS
4128 else
4129 {
d43f603d 4130 tree field = check_classfn (context, decl,
44021471
GB
4131 (processing_template_decl
4132 > template_class_depth (context))
4133 ? current_template_parms
4134 : NULL_TREE);
f8c3b097
PC
4135 if (field && field != error_mark_node
4136 && duplicate_decls (decl, field,
4137 /*newdecl_is_friend=*/false))
f30432d7
MS
4138 decl = field;
4139 }
4140
4141 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
dff3e828 4142 DECL_IN_AGGR_P (decl) = 0;
9267ee62
NS
4143 /* Do not mark DECL as an explicit specialization if it was not
4144 already marked as an instantiation; a declaration should
4145 never be marked as a specialization unless we know what
c8094d83 4146 template is being specialized. */
9267ee62 4147 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
84e6233f 4148 {
9267ee62 4149 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
c8094d83 4150
84e6233f
JM
4151 /* [temp.expl.spec] An explicit specialization of a static data
4152 member of a template is a definition if the declaration
4153 includes an initializer; otherwise, it is a declaration.
c8094d83 4154
84e6233f
JM
4155 We check for processing_specialization so this only applies
4156 to the new specialization syntax. */
e92fb501 4157 if (!initialized && processing_specialization)
84e6233f
JM
4158 DECL_EXTERNAL (decl) = 1;
4159 }
f30432d7 4160
b7698cf0 4161 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
cbe5f3b3 4162 permerror (input_location, "declaration of %q#D outside of class is not definition",
37ec60ed 4163 decl);
5b605f68
MS
4164 }
4165
c3b7031d
JM
4166 was_public = TREE_PUBLIC (decl);
4167
9188c363 4168 /* Enter this declaration into the symbol table. */
15896502 4169 decl = maybe_push_decl (decl);
2ee887f2 4170
5156628f 4171 if (processing_template_decl)
15896502
MM
4172 decl = push_template_decl (decl);
4173 if (decl == error_mark_node)
156fc2bb 4174 return error_mark_node;
5566b478 4175
3b426391 4176 /* Tell the back end to use or not use .common as appropriate. If we say
a50f0918
MS
4177 -fconserve-space, we want this to save .data space, at the expense of
4178 wrong semantics. If we say -fno-conserve-space, we want this to
4179 produce errors about redefs; to do this we force variables into the
4180 data segment. */
434aeebb 4181 if (flag_conserve_space
15896502
MM
4182 && TREE_CODE (decl) == VAR_DECL
4183 && TREE_PUBLIC (decl)
4184 && !DECL_THREAD_LOCAL_P (decl)
434aeebb 4185 && !have_global_bss_p ())
15896502 4186 DECL_COMMON (decl) = 1;
68642fb6 4187
15896502
MM
4188 if (TREE_CODE (decl) == VAR_DECL
4189 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4190 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
c3b7031d
JM
4191 {
4192 /* This is a const variable with implicit 'static'. Set
4193 DECL_THIS_STATIC so we can tell it from variables that are
4194 !TREE_PUBLIC because of the anonymous namespace. */
15896502
MM
4195 gcc_assert (cp_type_readonly (TREE_TYPE (decl)));
4196 DECL_THIS_STATIC (decl) = 1;
c3b7031d
JM
4197 }
4198
15896502
MM
4199 if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4200 start_decl_1 (decl, initialized);
8d08fdba 4201
15896502 4202 return decl;
8d08fdba
MS
4203}
4204
15896502
MM
4205/* Process the declaration of a variable DECL. INITIALIZED is true
4206 iff DECL is explicitly initialized. (INITIALIZED is false if the
4207 variable is initialized via an implicitly-called constructor.)
4208 This function must be called for ordinary variables (including, for
4209 example, implicit instantiations of templates), but must not be
4210 called for template declarations. */
4211
5566b478 4212void
e92fb501 4213start_decl_1 (tree decl, bool initialized)
8d08fdba 4214{
e92fb501 4215 tree type;
15896502
MM
4216 bool complete_p;
4217 bool aggregate_definition_p;
8d08fdba 4218
e92fb501
MM
4219 gcc_assert (!processing_template_decl);
4220
4221 if (error_operand_p (decl))
44689c12
ML
4222 return;
4223
e92fb501 4224 gcc_assert (TREE_CODE (decl) == VAR_DECL);
15896502 4225
e92fb501 4226 type = TREE_TYPE (decl);
15896502 4227 complete_p = COMPLETE_TYPE_P (type);
9e1e64ec 4228 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
15896502
MM
4229
4230 /* If an explicit initializer is present, or if this is a definition
4231 of an aggregate, then we need a complete type at this point.
4232 (Scalars are always complete types, so there is nothing to
4233 check.) This code just sets COMPLETE_P; errors (if necessary)
4234 are issued below. */
4235 if ((initialized || aggregate_definition_p)
4236 && !complete_p
4237 && COMPLETE_TYPE_P (complete_type (type)))
4238 {
4239 complete_p = true;
4240 /* We will not yet have set TREE_READONLY on DECL if the type
4241 was "const", but incomplete, before this point. But, now, we
4242 have a complete type, so we can try again. */
4243 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4244 }
e92fb501 4245
5566b478 4246 if (initialized)
15896502 4247 /* Is it valid for this decl to have an initializer at all? */
8d08fdba 4248 {
5566b478
MS
4249 /* Don't allow initializations for incomplete types except for
4250 arrays which might be completed by the initialization. */
15896502 4251 if (complete_p)
5566b478 4252 ; /* A complete type is ok. */
86a09a9e
JM
4253 else if (type_uses_auto (type))
4254 ; /* An auto type is ok. */
5566b478 4255 else if (TREE_CODE (type) != ARRAY_TYPE)
8d08fdba 4256 {
2d01edd7 4257 error ("variable %q#D has initializer but incomplete type", decl);
25eb19ff 4258 type = TREE_TYPE (decl) = error_mark_node;
5566b478 4259 }
d0f062fb 4260 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5566b478
MS
4261 {
4262 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
2d01edd7 4263 error ("elements of array %q#D have incomplete type", decl);
5566b478 4264 /* else we already gave an error in start_decl. */
8d08fdba 4265 }
8d08fdba 4266 }
15896502 4267 else if (aggregate_definition_p && !complete_p)
8d08fdba 4268 {
86a09a9e
JM
4269 if (type_uses_auto (type))
4270 error ("declaration of %q#D has no initializer", decl);
4271 else
4272 error ("aggregate %q#D has incomplete type and cannot be defined",
4273 decl);
15896502
MM
4274 /* Change the type so that assemble_variable will give
4275 DECL an rtl we can live with: (mem (const_int 0)). */
4276 type = TREE_TYPE (decl) = error_mark_node;
5566b478
MS
4277 }
4278
c6671cbb
MM
4279 /* Create a new scope to hold this declaration if necessary.
4280 Whether or not a new scope is necessary cannot be determined
4281 until after the type has been completed; if the type is a
4282 specialization of a class template it is not until after
4283 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4284 will be set correctly. */
4285 maybe_push_cleanup_level (type);
5566b478
MS
4286}
4287
7e99327d
MM
4288/* Handle initialization of references. DECL, TYPE, and INIT have the
4289 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4290 but will be set to a new CLEANUP_STMT if a temporary is created
cd0be382 4291 that must be destroyed subsequently.
7e99327d
MM
4292
4293 Returns an initializer expression to use to initialize DECL, or
4294 NULL if the initialization can be performed statically.
e92cc029
MS
4295
4296 Quotes on semantics can be found in ARM 8.4.3. */
4297
8e4ce833 4298static tree
7e99327d 4299grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
5566b478
MS
4300{
4301 tree tmp;
4302
4303 if (init == NULL_TREE)
4304 {
4305 if ((DECL_LANG_SPECIFIC (decl) == 0
4306 || DECL_IN_AGGR_P (decl) == 0)
4307 && ! DECL_THIS_EXTERN (decl))
c4f73174 4308 error ("%qD declared as reference but not initialized", decl);
8e4ce833 4309 return NULL_TREE;
5566b478
MS
4310 }
4311
ed5511d9 4312 if (TREE_CODE (init) == CONSTRUCTOR)
5566b478 4313 {
2d01edd7 4314 error ("ISO C++ forbids use of initializer list to "
0cbd7506 4315 "initialize reference %qD", decl);
8e4ce833 4316 return NULL_TREE;
8d08fdba
MS
4317 }
4318
4319 if (TREE_CODE (init) == TREE_LIST)
c7b62f14 4320 init = build_x_compound_expr_from_list (init, "initializer");
8d08fdba
MS
4321
4322 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4323 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
0a72704b
MM
4324 /* Note: default conversion is only called in very special cases. */
4325 init = decay_conversion (init);
68642fb6 4326
24bef158
MM
4327 /* Convert INIT to the reference type TYPE. This may involve the
4328 creation of a temporary, whose lifetime must be the same as that
350fae66
RK
4329 of the reference. If so, a DECL_EXPR for the temporary will be
4330 added just after the DECL_EXPR for DECL. That's why we don't set
24bef158
MM
4331 DECL_INITIAL for local references (instead assigning to them
4332 explicitly); we need to allow the temporary to be initialized
4333 first. */
7e99327d 4334 tmp = initialize_reference (type, init, decl, cleanup);
8d08fdba 4335
a3203465 4336 if (tmp == error_mark_node)
8e4ce833
JJ
4337 return NULL_TREE;
4338 else if (tmp == NULL_TREE)
8d08fdba 4339 {
2d01edd7 4340 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
8e4ce833 4341 return NULL_TREE;
8d08fdba 4342 }
8d08fdba 4343
8e4ce833
JJ
4344 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4345 return tmp;
4346
08ac397c 4347 DECL_INITIAL (decl) = tmp;
8e4ce833
JJ
4348
4349 return NULL_TREE;
8d08fdba
MS
4350}
4351
09357846
JM
4352/* Subroutine of check_initializer. We're initializing a DECL of
4353 std::initializer_list<T> TYPE from a braced-init-list INIT, and need to
4354 extend the lifetime of the underlying array to match that of the decl,
4355 just like for reference initialization. CLEANUP is as for
4356 grok_reference_init. */
4357
4358static tree
4359build_init_list_var_init (tree decl, tree type, tree init, tree *cleanup)
4360{
4361 tree aggr_init, array, arrtype;
4362 init = perform_implicit_conversion (type, init, tf_warning_or_error);
4363 aggr_init = TARGET_EXPR_INITIAL (init);
4364 init = build2 (INIT_EXPR, type, decl, init);
4365
4366 array = AGGR_INIT_EXPR_ARG (aggr_init, 1);
4367 arrtype = TREE_TYPE (array);
4368 STRIP_NOPS (array);
4369 gcc_assert (TREE_CODE (array) == ADDR_EXPR);
4370 array = TREE_OPERAND (array, 0);
4371 /* If the array is constant, finish_compound_literal already made it a
4372 static variable and we don't need to do anything here. */
4373 if (decl && TREE_CODE (array) == TARGET_EXPR)
4374 {
4375 tree subinit;
4376 tree var = set_up_extended_ref_temp (decl, array, cleanup, &subinit);
4377 var = build_address (var);
4378 var = convert (arrtype, var);
4379 AGGR_INIT_EXPR_ARG (aggr_init, 1) = var;
4380 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
4381 }
4382 return init;
4383}
4384
76239779
MM
4385/* Designated initializers in arrays are not supported in GNU C++.
4386 The parser cannot detect this error since it does not know whether
4387 a given brace-enclosed initializer is for a class type or for an
4388 array. This function checks that CE does not use a designated
4389 initializer. If it does, an error is issued. Returns true if CE
4390 is valid, i.e., does not have a designated initializer. */
4391
4392static bool
4393check_array_designated_initializer (const constructor_elt *ce)
4394{
48c9a7f0 4395 /* Designated initializers for array elements are not supported. */
76239779
MM
4396 if (ce->index)
4397 {
4398 /* The parser only allows identifiers as designated
39a13be5 4399 initializers. */
76239779
MM
4400 gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4401 error ("name %qD used in a GNU-style designated "
4402 "initializer for an array", ce->index);
4403 return false;
4404 }
4405
4406 return true;
4407}
4408
27778b73
MM
4409/* When parsing `int a[] = {1, 2};' we don't know the size of the
4410 array until we finish parsing the initializer. If that's the
4411 situation we're in, update DECL accordingly. */
4412
4413static void
11f6b451 4414maybe_deduce_size_from_array_init (tree decl, tree init)
27778b73
MM
4415{
4416 tree type = TREE_TYPE (decl);
4417
4418 if (TREE_CODE (type) == ARRAY_TYPE
4419 && TYPE_DOMAIN (type) == NULL_TREE
4420 && TREE_CODE (decl) != TYPE_DECL)
4421 {
f2ae0c45
JM
4422 /* do_default is really a C-ism to deal with tentative definitions.
4423 But let's leave it here to ease the eventual merge. */
4424 int do_default = !DECL_EXTERNAL (decl);
27778b73 4425 tree initializer = init ? init : DECL_INITIAL (decl);
76239779 4426 int failure = 0;
27778b73 4427
76239779
MM
4428 /* Check that there are no designated initializers in INIT, as
4429 those are not supported in GNU C++, and as the middle-end
4430 will crash if presented with a non-numeric designated
4431 initializer. */
4432 if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
2b643eda 4433 {
76239779
MM
4434 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4435 constructor_elt *ce;
4436 HOST_WIDE_INT i;
4437 for (i = 0;
4438 VEC_iterate (constructor_elt, v, i, ce);
49b5e2f6 4439 ++i)
76239779
MM
4440 if (!check_array_designated_initializer (ce))
4441 failure = 1;
2b643eda 4442 }
76239779
MM
4443
4444 if (!failure)
27778b73 4445 {
76239779
MM
4446 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4447 do_default);
4448 if (failure == 1)
2b643eda 4449 {
76239779
MM
4450 error ("initializer fails to determine size of %qD", decl);
4451 TREE_TYPE (decl) = error_mark_node;
4452 }
4453 else if (failure == 2)
4454 {
4455 if (do_default)
4456 {
4457 error ("array size missing in %qD", decl);
4458 TREE_TYPE (decl) = error_mark_node;
4459 }
4460 /* If a `static' var's size isn't known, make it extern as
4461 well as static, so it does not get allocated. If it's not
4462 `static', then don't mark it extern; finish_incomplete_decl
4463 will give it a default size and it will get allocated. */
4464 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4465 DECL_EXTERNAL (decl) = 1;
4466 }
4467 else if (failure == 3)
4468 {
4469 error ("zero-size array %qD", decl);
2b643eda
MM
4470 TREE_TYPE (decl) = error_mark_node;
4471 }
2b643eda 4472 }
27778b73 4473
f23b8501
JJ
4474 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4475
27778b73
MM
4476 layout_decl (decl, 0);
4477 }
4478}
4479
4480/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
57b52417 4481 any appropriate error messages regarding the layout. */
27778b73 4482
57b52417 4483static void
11f6b451 4484layout_var_decl (tree decl)
27778b73 4485{
2b643eda
MM
4486 tree type;
4487
2b643eda
MM
4488 type = TREE_TYPE (decl);
4489 if (type == error_mark_node)
4490 return;
57b52417
MM
4491
4492 /* If we haven't already layed out this declaration, do so now.
4493 Note that we must not call complete type for an external object
4494 because it's type might involve templates that we are not
34cd5ae7 4495 supposed to instantiate yet. (And it's perfectly valid to say
57b52417
MM
4496 `extern X x' for some incomplete type `X'.) */
4497 if (!DECL_EXTERNAL (decl))
4498 complete_type (type);
caf93cb0 4499 if (!DECL_SIZE (decl)
328de7c2 4500 && TREE_TYPE (decl) != error_mark_node
7de85f7e 4501 && (COMPLETE_TYPE_P (type)
caf93cb0 4502 || (TREE_CODE (type) == ARRAY_TYPE
7de85f7e
MM
4503 && !TYPE_DOMAIN (type)
4504 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
27778b73
MM
4505 layout_decl (decl, 0);
4506
c82dbd95 4507 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
27778b73
MM
4508 {
4509 /* An automatic variable with an incomplete type: that is an error.
4510 Don't talk about array types here, since we took care of that
4511 message in grokdeclarator. */
2d01edd7 4512 error ("storage size of %qD isn't known", decl);
27778b73
MM
4513 TREE_TYPE (decl) = error_mark_node;
4514 }
ae673f14
JM
4515#if 0
4516 /* Keep this code around in case we later want to control debug info
4517 based on whether a type is "used". (jason 1999-11-11) */
4518
9e1e64ec 4519 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
27778b73
MM
4520 /* Let debugger know it should output info for this type. */
4521 note_debug_info_needed (ttype);
4522
4523 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4524 note_debug_info_needed (DECL_CONTEXT (decl));
ae673f14 4525#endif
27778b73
MM
4526
4527 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4528 && DECL_SIZE (decl) != NULL_TREE
4529 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4530 {
4531 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4532 constant_expression_warning (DECL_SIZE (decl));
4533 else
b97d8153
JJ
4534 {
4535 error ("storage size of %qD isn't constant", decl);
4536 TREE_TYPE (decl) = error_mark_node;
4537 }
27778b73
MM
4538 }
4539}
4540
27778b73
MM
4541/* If a local static variable is declared in an inline function, or if
4542 we have a weak definition, we must endeavor to create only one
4543 instance of the variable at link-time. */
4544
4545static void
11f6b451 4546maybe_commonize_var (tree decl)
27778b73
MM
4547{
4548 /* Static data in a function with comdat linkage also has comdat
4549 linkage. */
4550 if (TREE_STATIC (decl)
4551 /* Don't mess with __FUNCTION__. */
cf74fb86 4552 && ! DECL_ARTIFICIAL (decl)
0b50d7f1
MM
4553 && DECL_FUNCTION_SCOPE_P (decl)
4554 /* Unfortunately, import_export_decl has not always been called
4555 before the function is processed, so we cannot simply check
caf93cb0 4556 DECL_COMDAT. */
9e6aaf5e 4557 && (DECL_COMDAT (DECL_CONTEXT (decl))
0b50d7f1
MM
4558 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4559 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4560 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
27778b73 4561 {
0dbc5cd3 4562 if (flag_weak)
27778b73 4563 {
0dbc5cd3
MM
4564 /* With weak symbols, we simply make the variable COMDAT;
4565 that will cause copies in multiple translations units to
4566 be merged. */
4567 comdat_linkage (decl);
4568 }
4569 else
4570 {
4571 if (DECL_INITIAL (decl) == NULL_TREE
4572 || DECL_INITIAL (decl) == error_mark_node)
27778b73 4573 {
0dbc5cd3
MM
4574 /* Without weak symbols, we can use COMMON to merge
4575 uninitialized variables. */
27778b73
MM
4576 TREE_PUBLIC (decl) = 1;
4577 DECL_COMMON (decl) = 1;
4578 }
0dbc5cd3 4579 else
27778b73 4580 {
0dbc5cd3
MM
4581 /* While for initialized variables, we must use internal
4582 linkage -- which means that multiple copies will not
4583 be merged. */
4584 TREE_PUBLIC (decl) = 0;
4585 DECL_COMMON (decl) = 0;
dee15844
JM
4586 warning (0, "sorry: semantics of inline function static "
4587 "data %q+#D are wrong (you'll wind up "
4588 "with multiple copies)", decl);
d4ee4d25 4589 warning (0, "%J you can work around this by removing "
0cbd7506 4590 "the initializer",
ddd2d57e 4591 decl);
27778b73
MM
4592 }
4593 }
4594 }
4595 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4596 /* Set it up again; we might have set DECL_INITIAL since the last
4597 time. */
4598 comdat_linkage (decl);
4599}
4600
91063b51
MM
4601/* Issue an error message if DECL is an uninitialized const variable. */
4602
4603static void
11f6b451 4604check_for_uninitialized_const_var (tree decl)
91063b51
MM
4605{
4606 tree type = TREE_TYPE (decl);
4607
4608 /* ``Unless explicitly declared extern, a const object does not have
4609 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4610 7.1.6 */
4611 if (TREE_CODE (decl) == VAR_DECL
4612 && TREE_CODE (type) != REFERENCE_TYPE
4613 && CP_TYPE_CONST_P (type)
4614 && !TYPE_NEEDS_CONSTRUCTING (type)
4615 && !DECL_INITIAL (decl))
2d01edd7 4616 error ("uninitialized const %qD", decl);
91063b51
MM
4617}
4618
4038c495
GB
4619\f
4620/* Structure holding the current initializer being processed by reshape_init.
4621 CUR is a pointer to the current element being processed, END is a pointer
4622 after the last element present in the initializer. */
4623typedef struct reshape_iterator_t
4624{
4625 constructor_elt *cur;
4626 constructor_elt *end;
4627} reshape_iter;
4628
4629static tree reshape_init_r (tree, reshape_iter *, bool);
4630
8e3df2de
MM
4631/* FIELD is a FIELD_DECL or NULL. In the former case, the value
4632 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4633 initialized. If there are no more such fields, the return value
4634 will be NULL. */
4635
4636static tree
4637next_initializable_field (tree field)
4638{
4639 while (field
4640 && (TREE_CODE (field) != FIELD_DECL
4641 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4642 || DECL_ARTIFICIAL (field)))
4643 field = TREE_CHAIN (field);
4644
4645 return field;
4646}
4647
4038c495
GB
4648/* Subroutine of reshape_init_array and reshape_init_vector, which does
4649 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4650 INTEGER_CST representing the size of the array minus one (the maximum index),
4651 or NULL_TREE if the array was declared without specifying the size. D is
4652 the iterator within the constructor. */
4653
4654static tree
4655reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
3d142be2 4656{
4038c495 4657 tree new_init;
3d142be2 4658 bool sized_array_p = (max_index != NULL_TREE);
004c400a
JJ
4659 unsigned HOST_WIDE_INT max_index_cst = 0;
4660 unsigned HOST_WIDE_INT index;
3d142be2 4661
4038c495 4662 /* The initializer for an array is always a CONSTRUCTOR. */
09357846 4663 new_init = build_constructor (init_list_type_node, NULL);
4038c495 4664
3d142be2 4665 if (sized_array_p)
004c400a 4666 {
d7d93837
AH
4667 /* Minus 1 is used for zero sized arrays. */
4668 if (integer_all_onesp (max_index))
4669 return new_init;
4670
004c400a
JJ
4671 if (host_integerp (max_index, 1))
4672 max_index_cst = tree_low_cst (max_index, 1);
4673 /* sizetype is sign extended, not zero extended. */
4674 else
4675 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4676 1);
4677 }
3d142be2
GB
4678
4679 /* Loop until there are no more initializers. */
4680 for (index = 0;
4038c495 4681 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
3d142be2
GB
4682 ++index)
4683 {
4038c495
GB
4684 tree elt_init;
4685
76239779 4686 check_array_designated_initializer (d->cur);
4038c495 4687 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
07471dfb
MM
4688 if (elt_init == error_mark_node)
4689 return error_mark_node;
4038c495 4690 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
3d142be2
GB
4691 }
4692
4038c495 4693 return new_init;
3d142be2
GB
4694}
4695
4038c495
GB
4696/* Subroutine of reshape_init_r, processes the initializers for arrays.
4697 Parameters are the same of reshape_init_r. */
8e3df2de 4698
4038c495
GB
4699static tree
4700reshape_init_array (tree type, reshape_iter *d)
4701{
4702 tree max_index = NULL_TREE;
caf93cb0 4703
4038c495 4704 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
8e3df2de 4705
4038c495
GB
4706 if (TYPE_DOMAIN (type))
4707 max_index = array_type_nelts (type);
4708
4709 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4710}
4711
4712/* Subroutine of reshape_init_r, processes the initializers for vectors.
4713 Parameters are the same of reshape_init_r. */
8e3df2de
MM
4714
4715static tree
4038c495 4716reshape_init_vector (tree type, reshape_iter *d)
8e3df2de 4717{
4038c495
GB
4718 tree max_index = NULL_TREE;
4719 tree rtype;
4720
4721 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4722
3b2db49f 4723 if (COMPOUND_LITERAL_P (d->cur->value))
4038c495
GB
4724 {
4725 tree value = d->cur->value;
4726 if (!same_type_p (TREE_TYPE (value), type))
4727 {
4728 error ("invalid type %qT as initializer for a vector of type %qT",
4729 TREE_TYPE (d->cur->value), type);
3db45ab5 4730 value = error_mark_node;
4038c495
GB
4731 }
4732 ++d->cur;
4733 return value;
4734 }
4735
4736 /* For a vector, the representation type is a struct
4737 containing a single member which is an array of the
4738 appropriate size. */
4739 rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4740 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4741 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4742
4743 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4744}
4745
4746/* Subroutine of reshape_init_r, processes the initializers for classes
4747 or union. Parameters are the same of reshape_init_r. */
4748
4749static tree
4750reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4751{
4752 tree field;
8e3df2de 4753 tree new_init;
8e3df2de 4754
4038c495 4755 gcc_assert (CLASS_TYPE_P (type));
8e3df2de 4756
4038c495 4757 /* The initializer for a class is always a CONSTRUCTOR. */
09357846 4758 new_init = build_constructor (init_list_type_node, NULL);
4038c495 4759 field = next_initializable_field (TYPE_FIELDS (type));
ee7ecb29 4760
4038c495 4761 if (!field)
8e3df2de 4762 {
4038c495
GB
4763 /* [dcl.init.aggr]
4764
4765 An initializer for an aggregate member that is an
4766 empty class shall have the form of an empty
4767 initializer-list {}. */
4768 if (!first_initializer_p)
4769 {
4770 error ("initializer for %qT must be brace-enclosed", type);
4771 return error_mark_node;
4772 }
4773 return new_init;
8e3df2de 4774 }
4038c495
GB
4775
4776 /* Loop through the initializable fields, gathering initializers. */
4777 while (d->cur != d->end)
8e3df2de 4778 {
4038c495
GB
4779 tree field_init;
4780
4781 /* Handle designated initializers, as an extension. */
4782 if (d->cur->index)
4783 {
4038c495
GB
4784 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4785
4786 if (!field || TREE_CODE (field) != FIELD_DECL)
77bffd4c
SE
4787 {
4788 error ("%qT has no non-static data member named %qD", type,
4789 d->cur->index);
4790 return error_mark_node;
4791 }
4038c495
GB
4792 }
4793
4794 /* If we processed all the member of the class, we are done. */
4795 if (!field)
4796 break;
4797
4798 field_init = reshape_init_r (TREE_TYPE (field), d,
4799 /*first_initializer_p=*/false);
4800 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4801
4802 /* [dcl.init.aggr]
4803
4804 When a union is initialized with a brace-enclosed
4805 initializer, the braces shall only contain an
4806 initializer for the first member of the union. */
4807 if (TREE_CODE (type) == UNION_TYPE)
4808 break;
4809
4810 field = next_initializable_field (TREE_CHAIN (field));
8e3df2de
MM
4811 }
4812
4038c495
GB
4813 return new_init;
4814}
4815
4816/* Subroutine of reshape_init, which processes a single initializer (part of
4817 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4818 iterator within the CONSTRUCTOR which points to the initializer to process.
4819 FIRST_INITIALIZER_P is true if this is the first initializer of the
4820 CONSTRUCTOR node. */
4821
4822static tree
4823reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4824{
4825 tree init = d->cur->value;
4826
ffe79825
PC
4827 if (error_operand_p (init))
4828 return error_mark_node;
4829
8e3df2de
MM
4830 /* A non-aggregate type is always initialized with a single
4831 initializer. */
4832 if (!CP_AGGREGATE_TYPE_P (type))
4038c495
GB
4833 {
4834 /* It is invalid to initialize a non-aggregate type with a
b71836b0 4835 brace-enclosed initializer before C++0x.
4038c495
GB
4836 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4837 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4838 a CONSTRUCTOR (with a record type). */
4839 if (TREE_CODE (init) == CONSTRUCTOR
4840 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
4841 {
b71836b0
JM
4842 if (SCALAR_TYPE_P (type))
4843 {
4844 error ("braces around scalar initializer for type %qT", type);
4845 init = error_mark_node;
4846 }
4847 else
4848 maybe_warn_cpp0x ("extended initializer lists");
4038c495 4849 }
3db45ab5 4850
4038c495
GB
4851 d->cur++;
4852 return init;
4853 }
8e3df2de
MM
4854
4855 /* [dcl.init.aggr]
4856
4857 All implicit type conversions (clause _conv_) are considered when
4858 initializing the aggregate member with an initializer from an
4859 initializer-list. If the initializer can initialize a member,
4860 the member is initialized. Otherwise, if the member is itself a
4861 non-empty subaggregate, brace elision is assumed and the
4862 initializer is considered for the initialization of the first
4863 member of the subaggregate. */
4038c495 4864 if (TREE_CODE (init) != CONSTRUCTOR
30f86ec3 4865 && can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL))
8e3df2de 4866 {
4038c495
GB
4867 d->cur++;
4868 return init;
8e3df2de
MM
4869 }
4870
4038c495
GB
4871 /* [dcl.init.string]
4872
4873 A char array (whether plain char, signed char, or unsigned char)
4874 can be initialized by a string-literal (optionally enclosed in
4875 braces); a wchar_t array can be initialized by a wide
4876 string-literal (optionally enclosed in braces). */
4877 if (TREE_CODE (type) == ARRAY_TYPE
42328048 4878 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
8e3df2de 4879 {
4038c495 4880 tree str_init = init;
8e3df2de 4881
4038c495 4882 /* Strip one level of braces if and only if they enclose a single
3db45ab5 4883 element (as allowed by [dcl.init.string]). */
4038c495
GB
4884 if (!first_initializer_p
4885 && TREE_CODE (str_init) == CONSTRUCTOR
4886 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
8e3df2de 4887 {
4038c495
GB
4888 str_init = VEC_index (constructor_elt,
4889 CONSTRUCTOR_ELTS (str_init), 0)->value;
4890 }
3db45ab5 4891
4038c495 4892 /* If it's a string literal, then it's the initializer for the array
3db45ab5 4893 as a whole. Otherwise, continue with normal initialization for
4038c495
GB
4894 array types (one value per array element). */
4895 if (TREE_CODE (str_init) == STRING_CST)
4896 {
4897 d->cur++;
4898 return str_init;
4899 }
4900 }
8e3df2de 4901
4038c495
GB
4902 /* The following cases are about aggregates. If we are not within a full
4903 initializer already, and there is not a CONSTRUCTOR, it means that there
4904 is a missing set of braces (that is, we are processing the case for
4905 which reshape_init exists). */
4906 if (!first_initializer_p)
4907 {
4908 if (TREE_CODE (init) == CONSTRUCTOR)
4909 {
70ec16f7
AP
4910 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
4911 /* There is no need to reshape pointer-to-member function
4912 initializers, as they are always constructed correctly
4913 by the front end. */
4914 ;
4915 else if (COMPOUND_LITERAL_P (init))
4038c495
GB
4916 /* For a nested compound literal, there is no need to reshape since
4917 brace elision is not allowed. Even if we decided to allow it,
4918 we should add a call to reshape_init in finish_compound_literal,
4919 before calling digest_init, so changing this code would still
4920 not be necessary. */
70ec16f7
AP
4921 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
4922 else
8e3df2de 4923 {
4038c495
GB
4924 ++d->cur;
4925 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4926 return reshape_init (type, init);
8e3df2de 4927 }
8e3df2de 4928 }
f8e7a389 4929
4038c495
GB
4930 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
4931 type);
4932 }
8e3df2de 4933
4038c495
GB
4934 /* Dispatch to specialized routines. */
4935 if (CLASS_TYPE_P (type))
4936 return reshape_init_class (type, d, first_initializer_p);
4937 else if (TREE_CODE (type) == ARRAY_TYPE)
4938 return reshape_init_array (type, d);
4939 else if (TREE_CODE (type) == VECTOR_TYPE)
4940 return reshape_init_vector (type, d);
4941 else
4942 gcc_unreachable();
4943}
8e3df2de 4944
4038c495
GB
4945/* Undo the brace-elision allowed by [dcl.init.aggr] in a
4946 brace-enclosed aggregate initializer.
8e3df2de 4947
4038c495
GB
4948 INIT is the CONSTRUCTOR containing the list of initializers describing
4949 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
4950 It may not presently match the shape of the TYPE; for example:
4951
4952 struct S { int a; int b; };
4953 struct S a[] = { 1, 2, 3, 4 };
4954
4955 Here INIT will hold a VEC of four elements, rather than a
4956 VEC of two elements, each itself a VEC of two elements. This
4957 routine transforms INIT from the former form into the latter. The
4958 revised CONSTRUCTOR node is returned. */
4959
3b2db49f 4960tree
4038c495
GB
4961reshape_init (tree type, tree init)
4962{
4963 VEC(constructor_elt, gc) *v;
4964 reshape_iter d;
4965 tree new_init;
4966
4038c495
GB
4967 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4968
4969 v = CONSTRUCTOR_ELTS (init);
4970
4971 /* An empty constructor does not need reshaping, and it is always a valid
4972 initializer. */
4973 if (VEC_empty (constructor_elt, v))
4974 return init;
4975
4976 /* Recurse on this CONSTRUCTOR. */
4977 d.cur = VEC_index (constructor_elt, v, 0);
4978 d.end = d.cur + VEC_length (constructor_elt, v);
4979
4980 new_init = reshape_init_r (type, &d, true);
07471dfb
MM
4981 if (new_init == error_mark_node)
4982 return error_mark_node;
4038c495
GB
4983
4984 /* Make sure all the element of the constructor were used. Otherwise,
4985 issue an error about exceeding initializers. */
4986 if (d.cur != d.end)
4987 error ("too many initializers for %qT", type);
8e3df2de
MM
4988
4989 return new_init;
4990}
4991
23bee8f4
JJ
4992/* Verify array initializer. Returns true if errors have been reported. */
4993
4994bool
4995check_array_initializer (tree decl, tree type, tree init)
4996{
4997 tree element_type = TREE_TYPE (type);
4998
4999 /* The array type itself need not be complete, because the
5000 initializer may tell us how many elements are in the array.
5001 But, the elements of the array must be complete. */
5002 if (!COMPLETE_TYPE_P (complete_type (element_type)))
5003 {
5004 if (decl)
5005 error ("elements of array %q#D have incomplete type", decl);
5006 else
5007 error ("elements of array %q#T have incomplete type", type);
5008 return true;
5009 }
5010 /* It is not valid to initialize a VLA. */
5011 if (init
5012 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5013 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5014 {
5015 if (decl)
5016 error ("variable-sized object %qD may not be initialized", decl);
5017 else
5018 error ("variable-sized compound literal");
5019 return true;
5020 }
5021 return false;
5022}
5023
09357846
JM
5024/* Subroutine of check_initializer; args are passed down from that function.
5025 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
5026
5027static tree
5028build_aggr_init_full_exprs (tree decl, tree init, int flags)
5029
5030{
5031 int saved_stmts_are_full_exprs_p = 0;
5032 if (building_stmt_tree ())
5033 {
5034 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5035 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5036 }
5037 init = build_aggr_init (decl, init, flags, tf_warning_or_error);
5038 if (building_stmt_tree ())
5039 current_stmt_tree ()->stmts_are_full_exprs_p =
5040 saved_stmts_are_full_exprs_p;
5041 return init;
5042}
5043
c82dbd95 5044/* Verify INIT (the initializer for DECL), and record the
7e99327d
MM
5045 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
5046 grok_reference_init.
8e3df2de
MM
5047
5048 If the return value is non-NULL, it is an expression that must be
5049 evaluated dynamically to initialize DECL. */
27778b73 5050
c82dbd95 5051static tree
7e99327d 5052check_initializer (tree decl, tree init, int flags, tree *cleanup)
27778b73 5053{
17bbb839 5054 tree type = TREE_TYPE (decl);
25ebb82a 5055 tree init_code = NULL;
fc0e7bf5 5056
328de7c2
MM
5057 /* Things that are going to be initialized need to have complete
5058 type. */
5059 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
c82dbd95 5060
328de7c2
MM
5061 if (type == error_mark_node)
5062 /* We will have already complained. */
f724eac4
MM
5063 return NULL_TREE;
5064
5065 if (TREE_CODE (type) == ARRAY_TYPE)
328de7c2 5066 {
23bee8f4
JJ
5067 if (check_array_initializer (decl, type, init))
5068 return NULL_TREE;
328de7c2 5069 }
f724eac4 5070 else if (!COMPLETE_TYPE_P (type))
328de7c2 5071 {
2d01edd7 5072 error ("%qD has incomplete type", decl);
328de7c2 5073 TREE_TYPE (decl) = error_mark_node;
f724eac4 5074 return NULL_TREE;
27778b73 5075 }
f724eac4
MM
5076 else
5077 /* There is no way to make a variable-sized class type in GNU C++. */
5078 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
c1ae8be5
SM
5079
5080 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
f47165c9 5081 {
c1ae8be5
SM
5082 int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5083 if (SCALAR_TYPE_P (type))
5084 {
09357846
JM
5085 if (init_len == 0)
5086 {
5087 maybe_warn_cpp0x ("extended initializer lists");
5088 init = build_zero_init (type, NULL_TREE, false);
5089 }
5090 else if (init_len != 1)
c1ae8be5
SM
5091 {
5092 error ("scalar object %qD requires one element in initializer",
5093 decl);
5094 TREE_TYPE (decl) = error_mark_node;
5095 return NULL_TREE;
5096 }
5097 }
f47165c9 5098 }
27778b73
MM
5099
5100 if (TREE_CODE (decl) == CONST_DECL)
5101 {
7525db03 5102 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
27778b73
MM
5103
5104 DECL_INITIAL (decl) = init;
5105
50bc768d 5106 gcc_assert (init != NULL_TREE);
27778b73
MM
5107 init = NULL_TREE;
5108 }
c82dbd95 5109 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7e99327d 5110 init = grok_reference_init (decl, type, init, cleanup);
27778b73
MM
5111 else if (init)
5112 {
4038c495 5113 /* Do not reshape constructors of vectors (they don't need to be
3db45ab5 5114 reshaped. */
09357846 5115 if (BRACE_ENCLOSED_INITIALIZER_P (init))
a16f2357 5116 {
09357846
JM
5117 if (is_std_init_list (type))
5118 return build_init_list_var_init (decl, type, init, cleanup);
5119 else if (TYPE_NON_AGGREGATE_CLASS (type))
5120 {
5121 /* Don't reshape if the class has constructors. */
5122 if (cxx_dialect == cxx98)
5123 error ("in C++98 %qD must be initialized by constructor, "
5124 "not by %<{...}%>",
5125 decl);
5126 init = build_tree_list (NULL_TREE, init);
5127 }
5128 else if ((*targetm.vector_opaque_p) (type))
6e1b3a7c
AH
5129 {
5130 error ("opaque vector types cannot be initialized");
5131 init = error_mark_node;
5132 }
09357846
JM
5133 else
5134 init = reshape_init (type, init);
a16f2357 5135 }
8e3df2de
MM
5136
5137 /* If DECL has an array type without a specific bound, deduce the
5138 array size from the initializer. */
5139 maybe_deduce_size_from_array_init (decl, init);
5140 type = TREE_TYPE (decl);
2b643eda
MM
5141 if (type == error_mark_node)
5142 return NULL_TREE;
8e3df2de 5143
09357846
JM
5144 if (TYPE_NEEDS_CONSTRUCTING (type)
5145 || (CLASS_TYPE_P (type)
5146 && !BRACE_ENCLOSED_INITIALIZER_P (init)))
5147 return build_aggr_init_full_exprs (decl, init, flags);
5148 else if (TREE_CODE (init) != TREE_VEC)
27778b73 5149 {
09357846
JM
5150 init_code = store_init_value (decl, init);
5151 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5152 && DECL_INITIAL (decl)
5153 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5154 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5155 warning (0, "array %qD initialized by parenthesized string literal %qE",
5156 decl, DECL_INITIAL (decl));
5157 init = NULL;
27778b73 5158 }
27778b73
MM
5159 }
5160 else if (DECL_EXTERNAL (decl))
5161 ;
8e3df2de 5162 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
09357846 5163 return build_aggr_init_full_exprs (decl, init, flags);
9e1e64ec 5164 else if (MAYBE_CLASS_TYPE_P (type))
27778b73
MM
5165 {
5166 tree core_type = strip_array_types (type);
5167
8e3df2de 5168 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
2d01edd7 5169 error ("structure %qD with uninitialized const members", decl);
8e3df2de 5170 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
2d01edd7 5171 error ("structure %qD with uninitialized reference members", decl);
27778b73
MM
5172
5173 check_for_uninitialized_const_var (decl);
27778b73
MM
5174 }
5175 else
5176 check_for_uninitialized_const_var (decl);
68642fb6 5177
8e3df2de 5178 if (init && init != error_mark_node)
f293ce4b 5179 init_code = build2 (INIT_EXPR, type, decl, init);
8e3df2de 5180
25ebb82a 5181 return init_code;
27778b73
MM
5182}
5183
5184/* If DECL is not a local variable, give it RTL. */
5185
5186static void
11f6b451 5187make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
27778b73 5188{
95ee998c
MM
5189 int toplev = toplevel_bindings_p ();
5190 int defer_p;
9f12b095 5191 const char *filename;
27778b73 5192
0e6df31e
GK
5193 /* Set the DECL_ASSEMBLER_NAME for the object. */
5194 if (asmspec)
5195 {
5196 /* The `register' keyword, when used together with an
5197 asm-specification, indicates that the variable should be
5198 placed in a particular register. */
5199 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5200 {
11e3f4b6 5201 set_user_assembler_name (decl, asmspec);
0e6df31e
GK
5202 DECL_HARD_REGISTER (decl) = 1;
5203 }
5204 else
b482789c
MA
5205 {
5206 if (TREE_CODE (decl) == FUNCTION_DECL
5207 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5208 set_builtin_user_assembler_name (decl, asmspec);
5209 set_user_assembler_name (decl, asmspec);
5210 }
0e6df31e
GK
5211 }
5212
f39ee884
MM
5213 /* Handle non-variables up front. */
5214 if (TREE_CODE (decl) != VAR_DECL)
5215 {
0e6df31e 5216 rest_of_decl_compilation (decl, toplev, at_eof);
f39ee884
MM
5217 return;
5218 }
5219
95ee998c
MM
5220 /* If we see a class member here, it should be a static data
5221 member. */
5222 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5223 {
50bc768d 5224 gcc_assert (TREE_STATIC (decl));
95ee998c
MM
5225 /* An in-class declaration of a static data member should be
5226 external; it is only a declaration, and not a definition. */
5227 if (init == NULL_TREE)
dc472c59 5228 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
95ee998c
MM
5229 }
5230
95ee998c
MM
5231 /* We don't create any RTL for local variables. */
5232 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5233 return;
27778b73 5234
95ee998c 5235 /* We defer emission of local statics until the corresponding
350fae66 5236 DECL_EXPR is expanded. */
95ee998c
MM
5237 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5238
b602511f
JM
5239 /* We try to defer namespace-scope static constants so that they are
5240 not emitted into the object file unnecessarily. */
9f12b095 5241 filename = input_filename;
b602511f
JM
5242 if (!DECL_VIRTUAL_P (decl)
5243 && TREE_READONLY (decl)
5244 && DECL_INITIAL (decl) != NULL_TREE
5245 && DECL_INITIAL (decl) != error_mark_node
9f12b095 5246 && filename != NULL
b602511f
JM
5247 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5248 && toplev
5249 && !TREE_PUBLIC (decl))
5cc90635
JM
5250 {
5251 /* Fool with the linkage of static consts according to #pragma
5252 interface. */
c533e34d 5253 struct c_fileinfo *finfo = get_fileinfo (filename);
5d709b00 5254 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
27778b73 5255 {
95ee998c 5256 TREE_PUBLIC (decl) = 1;
5d709b00 5257 DECL_EXTERNAL (decl) = finfo->interface_only;
27778b73 5258 }
27778b73 5259
95ee998c 5260 defer_p = 1;
27778b73 5261 }
b602511f 5262 /* Likewise for template instantiations. */
4684cd27
MM
5263 else if (DECL_LANG_SPECIFIC (decl)
5264 && DECL_IMPLICIT_INSTANTIATION (decl))
b602511f 5265 defer_p = 1;
95ee998c 5266
95ee998c 5267 /* If we're not deferring, go ahead and assemble the variable. */
0e6df31e
GK
5268 if (!defer_p)
5269 rest_of_decl_compilation (decl, toplev, at_eof);
27778b73
MM
5270}
5271
a24549d4
JM
5272/* walk_tree helper for wrap_temporary_cleanups, below. */
5273
5274static tree
5275wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5276{
5277 if (TYPE_P (*stmt_p))
5278 {
5279 *walk_subtrees = 0;
5280 return NULL_TREE;
5281 }
5282
5283 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5284 {
5285 tree guard = (tree)data;
5286 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5287
5288 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
33b45227
JM
5289 /* Tell honor_protect_cleanup_actions to handle this as a separate
5290 cleanup. */
5291 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5292
a24549d4
JM
5293 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5294 }
5295
5296 return NULL_TREE;
5297}
5298
5299/* We're initializing a local variable which has a cleanup GUARD. If there
5300 are any temporaries used in the initializer INIT of this variable, we
5301 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
33b45227
JM
5302 variable will be cleaned up properly if one of them throws.
5303
5304 Unfortunately, there's no way to express this properly in terms of
5305 nesting, as the regions for the temporaries overlap the region for the
5306 variable itself; if there are two temporaries, the variable needs to be
5307 the first thing destroyed if either of them throws. However, we only
5308 want to run the variable's cleanup if it actually got constructed. So
5309 we need to guard the temporary cleanups with the variable's cleanup if
5310 they are run on the normal path, but not if they are run on the
5311 exceptional path. We implement this by telling
5312 honor_protect_cleanup_actions to strip the variable cleanup from the
5313 exceptional path. */
a24549d4
JM
5314
5315static void
5316wrap_temporary_cleanups (tree init, tree guard)
5317{
5318 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5319}
5320
ed5511d9 5321/* Generate code to initialize DECL (a local variable). */
27778b73 5322
8e3df2de 5323static void
11f6b451 5324initialize_local_var (tree decl, tree init)
27778b73 5325{
9ed9e79a 5326 tree type = TREE_TYPE (decl);
170b020f 5327 tree cleanup;
a24549d4 5328 int already_used;
27778b73 5329
50bc768d
NS
5330 gcc_assert (TREE_CODE (decl) == VAR_DECL
5331 || TREE_CODE (decl) == RESULT_DECL);
5332 gcc_assert (!TREE_STATIC (decl));
b7b8bcd2 5333
8e3df2de 5334 if (DECL_SIZE (decl) == NULL_TREE)
b7b8bcd2
MM
5335 {
5336 /* If we used it already as memory, it must stay in memory. */
5337 DECL_INITIAL (decl) = NULL_TREE;
5338 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
a24549d4 5339 return;
b7b8bcd2
MM
5340 }
5341
a24549d4
JM
5342 if (type == error_mark_node)
5343 return;
68642fb6 5344
a24549d4
JM
5345 /* Compute and store the initial value. */
5346 already_used = TREE_USED (decl) || TREE_USED (type);
27778b73 5347
a24549d4
JM
5348 /* Generate a cleanup, if necessary. */
5349 cleanup = cxx_maybe_build_cleanup (decl);
27778b73 5350
a24549d4
JM
5351 /* Perform the initialization. */
5352 if (init)
5353 {
5354 int saved_stmts_are_full_exprs_p;
5355
5356 /* If we're only initializing a single object, guard the destructors
5357 of any temporaries used in its initializer with its destructor.
5358 This isn't right for arrays because each element initialization is
5359 a full-expression. */
5360 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5361 wrap_temporary_cleanups (init, cleanup);
5362
5363 gcc_assert (building_stmt_tree ());
5364 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5365 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5366 finish_expr_stmt (init);
5367 current_stmt_tree ()->stmts_are_full_exprs_p =
5368 saved_stmts_are_full_exprs_p;
27778b73 5369 }
24bef158 5370
a24549d4
JM
5371 /* Set this to 0 so we can tell whether an aggregate which was
5372 initialized was ever used. Don't do this if it has a
5373 destructor, so we don't complain about the 'resource
5374 allocation is initialization' idiom. Now set
5375 attribute((unused)) on types so decls of that type will be
5376 marked used. (see TREE_USED, above.) */
5377 if (TYPE_NEEDS_CONSTRUCTING (type)
5378 && ! already_used
5379 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5380 && DECL_NAME (decl))
5381 TREE_USED (decl) = 0;
5382 else if (already_used)
5383 TREE_USED (decl) = 1;
5384
5385 if (cleanup)
170b020f 5386 finish_decl_cleanup (decl, cleanup);
24bef158
MM
5387}
5388
19c29b2f
MM
5389/* DECL is a VAR_DECL for a compiler-generated variable with static
5390 storage duration (like a virtual table) whose initializer is a
3b2db49f
MM
5391 compile-time constant. INIT must be either a TREE_LIST of values,
5392 or a CONSTRUCTOR. Initialize the variable and provide it to the
5393 back end. */
19c29b2f
MM
5394
5395void
5396initialize_artificial_var (tree decl, tree init)
5397{
d23f3d60 5398 gcc_assert (DECL_ARTIFICIAL (decl));
3b2db49f 5399 if (TREE_CODE (init) == TREE_LIST)
09357846 5400 init = build_constructor_from_list (TREE_TYPE (decl), init);
3b2db49f
MM
5401 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5402 DECL_INITIAL (decl) = init;
19c29b2f
MM
5403 DECL_INITIALIZED_P (decl) = 1;
5404 determine_visibility (decl);
5405 layout_var_decl (decl);
5406 maybe_commonize_var (decl);
5407 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5408}
5409
32a11c08
MM
5410/* INIT is the initializer for a variable, as represented by the
5411 parser. Returns true iff INIT is value-dependent. */
5412
5413static bool
5414value_dependent_init_p (tree init)
5415{
5416 if (TREE_CODE (init) == TREE_LIST)
5417 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5418 return any_value_dependent_elements_p (init);
5419 else if (TREE_CODE (init) == CONSTRUCTOR)
5420 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5421 {
5422 VEC(constructor_elt, gc) *elts;
5423 size_t nelts;
5424 size_t i;
5425
5426 elts = CONSTRUCTOR_ELTS (init);
5427 nelts = VEC_length (constructor_elt, elts);
5428 for (i = 0; i < nelts; ++i)
5429 if (value_dependent_init_p (VEC_index (constructor_elt,
5430 elts, i)->value))
5431 return true;
5432 }
5433 else
5434 /* It must be a simple expression, e.g., int i = 3; */
5435 return value_dependent_expression_p (init);
5436
5437 return false;
5438}
5439
8d08fdba
MS
5440/* Finish processing of a declaration;
5441 install its line number and initial value.
5442 If the length of an array type is not known before,
5443 it must be determined now, from the initial value, or it is an error.
5444
d174af6c
MM
5445 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
5446 true, then INIT is an integral constant expression.
8d08fdba 5447
920f9474 5448 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
f78c7bc6 5449 if the (init) syntax was used. */
8d08fdba
MS
5450
5451void
3db45ab5 5452cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
d174af6c 5453 tree asmspec_tree, int flags)
8d08fdba 5454{
7e99327d 5455 tree type;
7e99327d 5456 tree cleanup;
9c0758dd 5457 const char *asmspec = NULL;
8d08fdba 5458 int was_readonly = 0;
745d26d9 5459 bool var_definition_p = false;
2b643eda 5460 int saved_processing_template_decl;
86a09a9e 5461 tree auto_node;
8d08fdba 5462
11325dcd
KL
5463 if (decl == error_mark_node)
5464 return;
5465 else if (! decl)
8d08fdba
MS
5466 {
5467 if (init)
8251199e 5468 error ("assignment (not initialization) in declaration");
8d08fdba
MS
5469 return;
5470 }
5471
50bc768d 5472 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
2b643eda
MM
5473 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5474 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5475
5476 type = TREE_TYPE (decl);
5477 if (type == error_mark_node)
5478 return;
170b020f 5479
7e99327d
MM
5480 /* Assume no cleanup is required. */
5481 cleanup = NULL_TREE;
2b643eda 5482 saved_processing_template_decl = processing_template_decl;
7e99327d 5483
a4443a08 5484 /* If a name was specified, get the string. */
5f52c0e0 5485 if (global_scope_p (current_binding_level))
41c64394 5486 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4f543d15 5487 if (asmspec_tree && asmspec_tree != error_mark_node)
5cc90635 5488 asmspec = TREE_STRING_POINTER (asmspec_tree);
8d08fdba 5489
6ba89f8e 5490 if (current_class_type
4f1c5b7d 5491 && CP_DECL_CONTEXT (decl) == current_class_type
6ba89f8e
MM
5492 && TYPE_BEING_DEFINED (current_class_type)
5493 && (DECL_INITIAL (decl) || init))
3febd123 5494 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6ba89f8e 5495
86a09a9e
JM
5496 auto_node = type_uses_auto (type);
5497 if (auto_node && !type_dependent_expression_p (init))
5498 {
5499 type = TREE_TYPE (decl) = do_auto_deduction (type, init, auto_node);
5500 if (type == error_mark_node)
5501 return;
5502 }
5503
5156628f 5504 if (processing_template_decl)
5566b478 5505 {
2b643eda
MM
5506 bool type_dependent_p;
5507
08ac397c 5508 /* Add this declaration to the statement-tree. */
170b020f 5509 if (at_function_scope_p ())
350fae66 5510 add_decl_expr (decl);
08ac397c 5511
2b643eda
MM
5512 type_dependent_p = dependent_type_p (type);
5513
7b3e2d46
DG
5514 if (check_for_bare_parameter_packs (init))
5515 {
5516 init = NULL_TREE;
5517 DECL_INITIAL (decl) = NULL_TREE;
5518 }
5519
3e03c959 5520 if (init && init_const_expr_p && TREE_CODE (decl) == VAR_DECL)
d174af6c 5521 {
2b643eda
MM
5522 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5523 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5524 TREE_CONSTANT (decl) = 1;
d174af6c
MM
5525 }
5526
32a11c08
MM
5527 /* Generally, initializers in templates are expanded when the
5528 template is instantiated. But, if DECL is an integral
5529 constant static data member, then it can be used in future
5530 integral constant expressions, and its value must be
5531 available. */
5532 if (!(init
5533 && DECL_CLASS_SCOPE_P (decl)
5534 && DECL_INTEGRAL_CONSTANT_VAR_P (decl)
5535 && !type_dependent_p
5536 && !value_dependent_init_p (init)))
2b643eda
MM
5537 {
5538 if (init)
5539 DECL_INITIAL (decl) = init;
5540 if (TREE_CODE (decl) == VAR_DECL
5541 && !DECL_PRETTY_FUNCTION_P (decl)
5542 && !type_dependent_p)
5543 maybe_deduce_size_from_array_init (decl, init);
5544 goto finish_end;
5545 }
c8094d83 5546
a125de0c
PC
5547 if (TREE_CODE (init) == TREE_LIST)
5548 {
5549 /* If the parenthesized-initializer form was used (e.g.,
5550 "int A<N>::i(X)"), then INIT will be a TREE_LIST of initializer
5551 arguments. (There is generally only one.) We convert them
5552 individually. */
5553 tree list = init;
5554 for (; list; list = TREE_CHAIN (list))
5555 {
5556 tree elt = TREE_VALUE (list);
5557 TREE_VALUE (list) = fold_non_dependent_expr (elt);
5558 }
5559 }
5560 else
5561 init = fold_non_dependent_expr (init);
2b643eda 5562 processing_template_decl = 0;
5566b478 5563 }
3e41d13b 5564
8d08fdba
MS
5565 /* Take care of TYPE_DECLs up front. */
5566 if (TREE_CODE (decl) == TYPE_DECL)
5567 {
a0a33927 5568 if (type != error_mark_node
9e1e64ec 5569 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
8d08fdba
MS
5570 {
5571 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
d4ee4d25 5572 warning (0, "shadowing previous type declaration of %q#D", decl);
4b0d3cbe 5573 set_identifier_type_value (DECL_NAME (decl), decl);
8d08fdba 5574 }
cffa8729
MS
5575
5576 /* If we have installed this as the canonical typedef for this
5577 type, and that type has not been defined yet, delay emitting
956d6950 5578 the debug information for it, as we will emit it later. */
d2e5ee5c 5579 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
d0f062fb 5580 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
cffa8729
MS
5581 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5582
0e6df31e
GK
5583 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5584 at_eof);
8d08fdba
MS
5585 goto finish_end;
5586 }
3e41d13b 5587
67935995 5588 /* A reference will be modified here, as it is initialized. */
c8094d83 5589 if (! DECL_EXTERNAL (decl)
67935995
MM
5590 && TREE_READONLY (decl)
5591 && TREE_CODE (type) == REFERENCE_TYPE)
8d08fdba 5592 {
8d08fdba 5593 was_readonly = 1;
67935995 5594 TREE_READONLY (decl) = 0;
8d08fdba
MS
5595 }
5596
437081d7 5597 if (TREE_CODE (decl) == VAR_DECL)
17bbb839
MM
5598 {
5599 /* Only PODs can have thread-local storage. Other types may require
5600 various kinds of non-trivial initialization. */
c2f7fa15 5601 if (DECL_THREAD_LOCAL_P (decl) && !pod_type_p (TREE_TYPE (decl)))
2d01edd7 5602 error ("%qD cannot be thread-local because it has non-POD type %qT",
17bbb839 5603 decl, TREE_TYPE (decl));
d23f3d60
MM
5604 /* If this is a local variable that will need a mangled name,
5605 register it now. We must do this before processing the
5606 initializer for the variable, since the initialization might
5607 require a guard variable, and since the mangled name of the
5608 guard variable will depend on the mangled name of this
5609 variable. */
b0eb6a8f 5610 if (DECL_FUNCTION_SCOPE_P (decl)
d23f3d60
MM
5611 && TREE_STATIC (decl)
5612 && !DECL_ARTIFICIAL (decl))
5613 push_local_name (decl);
17bbb839
MM
5614 /* Convert the initializer to the type of DECL, if we have not
5615 already initialized DECL. */
5616 if (!DECL_INITIALIZED_P (decl)
5617 /* If !DECL_EXTERNAL then DECL is being defined. In the
8e3df2de 5618 case of a static data member initialized inside the
17bbb839
MM
5619 class-specifier, there can be an initializer even if DECL
5620 is *not* defined. */
5621 && (!DECL_EXTERNAL (decl) || init))
5622 {
9e1e64ec 5623 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
360f866c
JJ
5624 {
5625 tree jclass
5626 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
5627 /* Allow libjava/prims.cc define primitive classes. */
5628 if (init != NULL_TREE
5629 || jclass == NULL_TREE
5630 || TREE_CODE (jclass) != TYPE_DECL
5631 || !POINTER_TYPE_P (TREE_TYPE (jclass))
5632 || !same_type_ignoring_top_level_qualifiers_p
5633 (type, TREE_TYPE (TREE_TYPE (jclass))))
5634 error ("Java object %qD not allocated with %<new%>", decl);
5635 init = NULL_TREE;
5636 }
6c06fbce 5637 if (init)
d174af6c
MM
5638 {
5639 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5640 if (init_const_expr_p)
5641 {
5642 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5643 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5644 TREE_CONSTANT (decl) = 1;
5645 }
5646 }
7e99327d 5647 init = check_initializer (decl, init, flags, &cleanup);
b4c20e52 5648 /* Thread-local storage cannot be dynamically initialized. */
c2f7fa15 5649 if (DECL_THREAD_LOCAL_P (decl) && init)
b4c20e52 5650 {
2d01edd7 5651 error ("%qD is thread-local and so cannot be dynamically "
b4c20e52
MM
5652 "initialized", decl);
5653 init = NULL_TREE;
5654 }
b794e321
MM
5655
5656 /* Check that the initializer for a static data member was a
1634705d 5657 constant. Although we check in the parser that the
b794e321
MM
5658 initializer is an integral constant expression, we do not
5659 simplify division-by-zero at the point at which it
5660 occurs. Therefore, in:
5661
5662 struct S { static const int i = 7 / 0; };
3db45ab5 5663
b794e321
MM
5664 we issue an error at this point. It would
5665 probably be better to forbid division by zero in
5666 integral constant expressions. */
8fe4d24b
NS
5667 if (DECL_EXTERNAL (decl) && init)
5668 {
8fe4d24b
NS
5669 error ("%qD cannot be initialized by a non-constant expression"
5670 " when being declared", decl);
5671 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5672 init = NULL_TREE;
5673 }
c8094d83 5674
17bbb839 5675 /* Handle:
caf93cb0 5676
17bbb839 5677 [dcl.init]
caf93cb0 5678
17bbb839
MM
5679 The memory occupied by any object of static storage
5680 duration is zero-initialized at program startup before
5681 any other initialization takes place.
caf93cb0 5682
17bbb839
MM
5683 We cannot create an appropriate initializer until after
5684 the type of DECL is finalized. If DECL_INITIAL is set,
5685 then the DECL is statically initialized, and any
5686 necessary zero-initialization has already been performed. */
5687 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5688 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
1cb8292f 5689 /*nelts=*/NULL_TREE,
17bbb839
MM
5690 /*static_storage_p=*/true);
5691 /* Remember that the initialization for this variable has
5692 taken place. */
5693 DECL_INITIALIZED_P (decl) = 1;
745d26d9
MM
5694 /* This declaration is the definition of this variable,
5695 unless we are initializing a static data member within
5696 the class specifier. */
5697 if (!DECL_EXTERNAL (decl))
5698 var_definition_p = true;
17bbb839 5699 }
d881ff25
MM
5700 /* If the variable has an array type, lay out the type, even if
5701 there is no initializer. It is valid to index through the
5702 array, and we must get TYPE_ALIGN set correctly on the array
5703 type. */
5704 else if (TREE_CODE (type) == ARRAY_TYPE)
5705 layout_type (type);
17bbb839 5706 }
360f866c 5707 else if (TREE_CODE (decl) == FIELD_DECL
9e1e64ec 5708 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
360f866c 5709 error ("non-static data member %qD has Java class type", decl);
3e41d13b 5710
57cf57fb 5711 /* Add this declaration to the statement-tree. This needs to happen
350fae66
RK
5712 after the call to check_initializer so that the DECL_EXPR for a
5713 reference temp is added before the DECL_EXPR for the reference itself. */
170b020f 5714 if (at_function_scope_p ())
350fae66 5715 add_decl_expr (decl);
08ac397c 5716
da71e18c
MM
5717 /* Let the middle end know about variables and functions -- but not
5718 static data members in uninstantiated class templates. */
5719 if (!saved_processing_template_decl
5720 && (TREE_CODE (decl) == VAR_DECL
5721 || TREE_CODE (decl) == FUNCTION_DECL))
8d08fdba 5722 {
27778b73 5723 if (TREE_CODE (decl) == VAR_DECL)
da71e18c
MM
5724 {
5725 layout_var_decl (decl);
5726 maybe_commonize_var (decl);
5727 }
8d08fdba 5728
4c5bae34
RS
5729 /* This needs to happen after the linkage is set. */
5730 determine_visibility (decl);
5731
b0eb6a8f
JJ
5732 if (var_definition_p && TREE_STATIC (decl))
5733 {
5734 /* If a TREE_READONLY variable needs initialization
5735 at runtime, it is no longer readonly and we need to
5736 avoid MEM_READONLY_P being set on RTL created for it. */
5737 if (init)
5738 {
5739 if (TREE_READONLY (decl))
5740 TREE_READONLY (decl) = 0;
5741 was_readonly = 0;
5742 }
5743 else if (was_readonly)
5744 TREE_READONLY (decl) = 1;
5745 }
5746
27778b73 5747 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8d08fdba 5748
7fb213d8
GB
5749 /* Check for abstractness of the type. Notice that there is no
5750 need to strip array types here since the check for those types
5751 is already done within create_array_type_for_decl. */
68642fb6 5752 if (TREE_CODE (type) == FUNCTION_TYPE
27778b73 5753 || TREE_CODE (type) == METHOD_TYPE)
7fb213d8 5754 abstract_virtuals_error (decl, TREE_TYPE (type));
68642fb6 5755 else
cfb91b67 5756 abstract_virtuals_error (decl, type);
8d08fdba 5757
b87d79e6 5758 if (TREE_TYPE (decl) == error_mark_node)
8e3df2de 5759 /* No initialization required. */
faae18ab 5760 ;
b87d79e6
JM
5761 else if (TREE_CODE (decl) == FUNCTION_DECL)
5762 {
5763 if (init)
5764 {
5765 if (init == ridpointers[(int)RID_DELETE])
5766 {
5767 /* fixme check this is 1st decl */
5768 DECL_DELETED_FN (decl) = 1;
5769 DECL_DECLARED_INLINE_P (decl) = 1;
5770 DECL_INITIAL (decl) = error_mark_node;
5771 }
5772 else if (init == ridpointers[(int)RID_DEFAULT])
5773 {
5774 if (!defaultable_fn_p (decl))
5775 error ("%qD cannot be defaulted", decl);
5776 else
5777 {
5778 /* An out-of-class default definition is defined at
5779 the point where it is explicitly defaulted. */
5780 DECL_DEFAULTED_FN (decl) = 1;
5781 if (DECL_INITIAL (decl) == error_mark_node)
5782 synthesize_method (decl);
5783 }
5784 }
5785 else
5786 error ("function %q#D is initialized like a variable", decl);
5787 }
5788 /* else no initialization required. */
5789 }
67d743fe
MS
5790 else if (DECL_EXTERNAL (decl)
5791 && ! (DECL_LANG_SPECIFIC (decl)
5792 && DECL_NOT_REALLY_EXTERN (decl)))
5566b478
MS
5793 {
5794 if (init)
5795 DECL_INITIAL (decl) = init;
5796 }
b0eb6a8f
JJ
5797 /* A variable definition. */
5798 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5799 /* Initialize the local variable. */
5800 initialize_local_var (decl, init);
5801
5802 /* If a variable is defined, and then a subsequent
5803 definition with external linkage is encountered, we will
5804 get here twice for the same variable. We want to avoid
5805 calling expand_static_init more than once. For variables
5806 that are not static data members, we can call
5807 expand_static_init only when we actually process the
5808 initializer. It is not legal to redeclare a static data
5809 member, so this issue does not arise in that case. */
5810 else if (var_definition_p && TREE_STATIC (decl))
5811 expand_static_init (decl, init);
8d08fdba
MS
5812 }
5813
7e99327d
MM
5814 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5815 reference, insert it in the statement-tree now. */
5816 if (cleanup)
325c3691 5817 push_cleanup (decl, cleanup, false);
7e99327d 5818
8d08fdba 5819 finish_end:
2b643eda 5820 processing_template_decl = saved_processing_template_decl;
8d08fdba 5821
8d08fdba
MS
5822 if (was_readonly)
5823 TREE_READONLY (decl) = 1;
d1bd0ded
GK
5824
5825 /* If this was marked 'used', be sure it will be output. */
5826 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
bb9a388d 5827 mark_decl_referenced (decl);
8d08fdba
MS
5828}
5829
f4f206f4 5830/* This is here for a midend callback from c-common.c. */
e92cc029 5831
82580166 5832void
11f6b451 5833finish_decl (tree decl, tree init, tree asmspec_tree)
82580166 5834{
d174af6c 5835 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, asmspec_tree, 0);
82580166
MS
5836}
5837
db4283a0
MM
5838/* Returns a declaration for a VAR_DECL as if:
5839
5840 extern "C" TYPE NAME;
5841
5842 had been seen. Used to create compiler-generated global
5843 variables. */
5844
993acaec 5845static tree
11f6b451 5846declare_global_var (tree name, tree type)
db4283a0
MM
5847{
5848 tree decl;
5849
5850 push_to_top_level ();
5851 decl = build_decl (VAR_DECL, name, type);
5852 TREE_PUBLIC (decl) = 1;
5853 DECL_EXTERNAL (decl) = 1;
5854 DECL_ARTIFICIAL (decl) = 1;
de3fe73c
MM
5855 /* If the user has explicitly declared this variable (perhaps
5856 because the code we are compiling is part of a low-level runtime
5857 library), then it is possible that our declaration will be merged
5858 with theirs by pushdecl. */
5859 decl = pushdecl (decl);
d174af6c 5860 finish_decl (decl, NULL_TREE, NULL_TREE);
db4283a0
MM
5861 pop_from_top_level ();
5862
5863 return decl;
5864}
5865
46a9e521
MM
5866/* Returns the type for the argument to "__cxa_atexit" (or "atexit",
5867 if "__cxa_atexit" is not being used) corresponding to the function
5868 to be called when the program exits. */
5869
5870static tree
5871get_atexit_fn_ptr_type (void)
5872{
5873 tree arg_types;
5874 tree fn_type;
5875
5876 if (!atexit_fn_ptr_type_node)
5877 {
5878 if (flag_use_cxa_atexit
5879 && !targetm.cxx.use_atexit_for_cxa_atexit ())
5880 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
5881 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5882 else
5883 /* The parameter to "atexit" is "void (*)(void)". */
5884 arg_types = void_list_node;
5885
5886 fn_type = build_function_type (void_type_node, arg_types);
5887 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
5888 }
5889
5890 return atexit_fn_ptr_type_node;
5891}
5892
db4283a0 5893/* Returns a pointer to the `atexit' function. Note that if
838dfd8a 5894 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
db4283a0
MM
5895 `__cxa_atexit' function specified in the IA64 C++ ABI. */
5896
5897static tree
11f6b451 5898get_atexit_node (void)
db4283a0
MM
5899{
5900 tree atexit_fndecl;
5901 tree arg_types;
5902 tree fn_type;
5903 tree fn_ptr_type;
5904 const char *name;
9f62c3e3 5905 bool use_aeabi_atexit;
db4283a0
MM
5906
5907 if (atexit_node)
5908 return atexit_node;
5909
97388150 5910 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
db4283a0
MM
5911 {
5912 /* The declaration for `__cxa_atexit' is:
5913
5914 int __cxa_atexit (void (*)(void *), void *, void *)
5915
5916 We build up the argument types and then then function type
5917 itself. */
68642fb6 5918
9f62c3e3 5919 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
db4283a0
MM
5920 /* First, build the pointer-to-function type for the first
5921 argument. */
46a9e521 5922 fn_ptr_type = get_atexit_fn_ptr_type ();
db4283a0
MM
5923 /* Then, build the rest of the argument types. */
5924 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
9f62c3e3
PB
5925 if (use_aeabi_atexit)
5926 {
5927 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5928 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5929 }
5930 else
5931 {
5932 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5933 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5934 }
db4283a0
MM
5935 /* And the final __cxa_atexit type. */
5936 fn_type = build_function_type (integer_type_node, arg_types);
5937 fn_ptr_type = build_pointer_type (fn_type);
9f62c3e3
PB
5938 if (use_aeabi_atexit)
5939 name = "__aeabi_atexit";
5940 else
5941 name = "__cxa_atexit";
db4283a0
MM
5942 }
5943 else
5944 {
5945 /* The declaration for `atexit' is:
68642fb6 5946
0cbd7506 5947 int atexit (void (*)());
db4283a0
MM
5948
5949 We build up the argument types and then then function type
5950 itself. */
46a9e521 5951 fn_ptr_type = get_atexit_fn_ptr_type ();
db4283a0
MM
5952 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5953 /* Build the final atexit type. */
5954 fn_type = build_function_type (integer_type_node, arg_types);
5955 name = "atexit";
5956 }
5957
5958 /* Now, build the function declaration. */
5959 push_lang_context (lang_name_c);
0c11ada6 5960 atexit_fndecl = build_library_fn_ptr (name, fn_type);
db4283a0
MM
5961 mark_used (atexit_fndecl);
5962 pop_lang_context ();
0a72704b 5963 atexit_node = decay_conversion (atexit_fndecl);
db4283a0
MM
5964
5965 return atexit_node;
5966}
5967
5968/* Returns the __dso_handle VAR_DECL. */
5969
5970static tree
11f6b451 5971get_dso_handle_node (void)
db4283a0
MM
5972{
5973 if (dso_handle_node)
5974 return dso_handle_node;
5975
5976 /* Declare the variable. */
5977 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5978 ptr_type_node);
5979
5980 return dso_handle_node;
5981}
5982
5983/* Begin a new function with internal linkage whose job will be simply
5984 to destroy some particular variable. */
5985
d192828a
GK
5986static GTY(()) int start_cleanup_cnt;
5987
db4283a0 5988static tree
11f6b451 5989start_cleanup_fn (void)
db4283a0 5990{
db4283a0 5991 char name[32];
db4283a0
MM
5992 tree fntype;
5993 tree fndecl;
97388150
DS
5994 bool use_cxa_atexit = flag_use_cxa_atexit
5995 && !targetm.cxx.use_atexit_for_cxa_atexit ();
db4283a0
MM
5996
5997 push_to_top_level ();
5998
5999 /* No need to mangle this. */
6000 push_lang_context (lang_name_c);
6001
db4283a0 6002 /* Build the name of the function. */
d192828a 6003 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
db4283a0 6004 /* Build the function declaration. */
46a9e521 6005 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
db4283a0
MM
6006 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6007 /* It's a function with internal linkage, generated by the
6008 compiler. */
6009 TREE_PUBLIC (fndecl) = 0;
6010 DECL_ARTIFICIAL (fndecl) = 1;
5a728aca
MM
6011 /* Make the function `inline' so that it is only emitted if it is
6012 actually needed. It is unlikely that it will be inlined, since
aba649ba 6013 it is only called via a function pointer, but we avoid unnecessary
5a728aca 6014 emissions this way. */
d4d1ebc1 6015 DECL_INTERFACE_KNOWN (fndecl) = 1;
db4283a0 6016 /* Build the parameter. */
97388150 6017 if (use_cxa_atexit)
db4283a0
MM
6018 {
6019 tree parmdecl;
6020
8e51619a 6021 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
db4283a0 6022 DECL_CONTEXT (parmdecl) = fndecl;
db4283a0
MM
6023 TREE_USED (parmdecl) = 1;
6024 DECL_ARGUMENTS (fndecl) = parmdecl;
6025 }
6026
09ed39ad 6027 pushdecl (fndecl);
058b15c1 6028 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
db4283a0 6029
db4283a0
MM
6030 pop_lang_context ();
6031
6032 return current_function_decl;
6033}
6034
6035/* Finish the cleanup function begun by start_cleanup_fn. */
6036
6037static void
11f6b451 6038end_cleanup_fn (void)
db4283a0 6039{
8cd2462c 6040 expand_or_defer_fn (finish_function (0));
db4283a0
MM
6041
6042 pop_from_top_level ();
6043}
6044
bf419747
MM
6045/* Generate code to handle the destruction of DECL, an object with
6046 static storage duration. */
f0105ed3 6047
40aac948 6048tree
11f6b451 6049register_dtor_fn (tree decl)
f0105ed3 6050{
db4283a0 6051 tree cleanup;
f0105ed3 6052 tree compound_stmt;
db4283a0
MM
6053 tree args;
6054 tree fcall;
46a9e521
MM
6055 tree type;
6056 bool use_dtor;
f0105ed3 6057
46a9e521
MM
6058 type = TREE_TYPE (decl);
6059 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
40aac948 6060 return void_zero_node;
bf419747 6061
46a9e521
MM
6062 /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6063 a class object, we can just pass the destructor to
6064 "__cxa_atexit"; we don't have to build a temporary function to do
6065 the cleanup. */
6066 use_dtor = (flag_use_cxa_atexit
6067 && !targetm.cxx.use_atexit_for_cxa_atexit ()
6068 && CLASS_TYPE_P (type));
6069 if (use_dtor)
6070 {
6071 int idx;
6072
6073 /* Find the destructor. */
6074 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6075 gcc_assert (idx >= 0);
6076 cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6077 /* Make sure it is accessible. */
6078 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6079 }
6080 else
6081 {
6082 /* Call build_cleanup before we enter the anonymous function so
6083 that any access checks will be done relative to the current
6084 scope, rather than the scope of the anonymous function. */
6085 build_cleanup (decl);
6086
6087 /* Now start the function. */
6088 cleanup = start_cleanup_fn ();
6089
6090 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
6091 to the original function, rather than the anonymous one. That
6092 will make the back end think that nested functions are in use,
6093 which causes confusion. */
6094 push_deferring_access_checks (dk_no_check);
6095 fcall = build_cleanup (decl);
6096 pop_deferring_access_checks ();
6097
6098 /* Create the body of the anonymous function. */
6099 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6100 finish_expr_stmt (fcall);
6101 finish_compound_stmt (compound_stmt);
6102 end_cleanup_fn ();
6103 }
f0105ed3
MM
6104
6105 /* Call atexit with the cleanup function. */
bb4f6e6b 6106 mark_used (cleanup);
46a9e521 6107 cleanup = build_address (cleanup);
97388150 6108 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
db4283a0 6109 {
46a9e521
MM
6110 tree addr;
6111
6112 if (use_dtor)
6113 {
6114 /* We must convert CLEANUP to the type that "__cxa_atexit"
6115 expects. */
6116 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6117 /* "__cxa_atexit" will pass the address of DECL to the
6118 cleanup function. */
6119 mark_used (decl);
6120 addr = build_address (decl);
6121 /* The declared type of the parameter to "__cxa_atexit" is
6122 "void *". For plain "T*", we could just let the
5ade1ed2 6123 machinery in cp_build_function_call convert it -- but if the
46a9e521
MM
6124 type is "cv-qualified T *", then we need to convert it
6125 before passing it in, to avoid spurious errors. */
6126 addr = build_nop (ptr_type_node, addr);
6127 }
6128 else
6129 /* Since the cleanup functions we build ignore the address
6130 they're given, there's no reason to pass the actual address
6131 in, and, in general, it's cheaper to pass NULL than any
6132 other value. */
6133 addr = null_pointer_node;
caf93cb0 6134 args = tree_cons (NULL_TREE,
5ade1ed2
DG
6135 cp_build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0,
6136 tf_warning_or_error),
0f268005 6137 NULL_TREE);
9f62c3e3
PB
6138 if (targetm.cxx.use_aeabi_atexit ())
6139 {
6140 args = tree_cons (NULL_TREE, cleanup, args);
46a9e521 6141 args = tree_cons (NULL_TREE, addr, args);
9f62c3e3
PB
6142 }
6143 else
6144 {
46a9e521 6145 args = tree_cons (NULL_TREE, addr, args);
9f62c3e3
PB
6146 args = tree_cons (NULL_TREE, cleanup, args);
6147 }
db4283a0
MM
6148 }
6149 else
6150 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5ade1ed2
DG
6151 return cp_build_function_call (get_atexit_node (), args,
6152 tf_warning_or_error);
f0105ed3
MM
6153}
6154
8e3df2de
MM
6155/* DECL is a VAR_DECL with static storage duration. INIT, if present,
6156 is its initializer. Generate code to handle the construction
6157 and destruction of DECL. */
6158
6159static void
11f6b451 6160expand_static_init (tree decl, tree init)
8d08fdba 6161{
50bc768d
NS
6162 gcc_assert (TREE_CODE (decl) == VAR_DECL);
6163 gcc_assert (TREE_STATIC (decl));
8e3df2de
MM
6164
6165 /* Some variables require no initialization. */
caf93cb0 6166 if (!init
8e3df2de
MM
6167 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
6168 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6169 return;
6170
eba6cfb6 6171 if (DECL_FUNCTION_SCOPE_P (decl))
8d08fdba
MS
6172 {
6173 /* Emit code to perform this initialization but once. */
445cf5eb
JM
6174 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6175 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
94a0dd7b 6176 tree guard, guard_addr;
40aac948
JM
6177 tree acquire_fn, release_fn, abort_fn;
6178 tree flag, begin;
8d08fdba 6179
2036a15c
MM
6180 /* Emit code to perform this initialization but once. This code
6181 looks like:
6182
0cbd7506
MS
6183 static <type> guard;
6184 if (!guard.first_byte) {
40aac948
JM
6185 if (__cxa_guard_acquire (&guard)) {
6186 bool flag = false;
6187 try {
0cbd7506
MS
6188 // Do initialization.
6189 flag = true; __cxa_guard_release (&guard);
6190 // Register variable for destruction at end of program.
40aac948 6191 } catch {
0cbd7506 6192 if (!flag) __cxa_guard_abort (&guard);
40aac948 6193 }
2036a15c
MM
6194 }
6195
40aac948 6196 Note that the `flag' variable is only set to 1 *after* the
2036a15c
MM
6197 initialization is complete. This ensures that an exception,
6198 thrown during the construction, will cause the variable to
6199 reinitialized when we pass through this code again, as per:
68642fb6 6200
2036a15c
MM
6201 [stmt.dcl]
6202
c8094d83 6203 If the initialization exits by throwing an exception, the
2036a15c
MM
6204 initialization is not complete, so it will be tried again
6205 the next time control enters the declaration.
6206
0cbd7506 6207 This process should be thread-safe, too; multiple threads
40aac948
JM
6208 should not be able to initialize the variable more than
6209 once. */
c395453c
MM
6210
6211 /* Create the guard variable. */
6212 guard = get_guard (decl);
2036a15c 6213
445cf5eb
JM
6214 /* This optimization isn't safe on targets with relaxed memory
6215 consistency. On such targets we force synchronization in
6216 __cxa_guard_acquire. */
6217 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6218 {
6219 /* Begin the conditional initialization. */
6220 if_stmt = begin_if_stmt ();
6221 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6222 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6223 }
40aac948
JM
6224
6225 if (flag_threadsafe_statics)
6226 {
6227 guard_addr = build_address (guard);
40aac948
JM
6228
6229 acquire_fn = get_identifier ("__cxa_guard_acquire");
6230 release_fn = get_identifier ("__cxa_guard_release");
6231 abort_fn = get_identifier ("__cxa_guard_abort");
6232 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
6233 {
6234 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
6235 void_list_node);
6236 tree vfntype = build_function_type (void_type_node, argtypes);
6237 acquire_fn = push_library_fn
448083e5
PC
6238 (acquire_fn, build_function_type (integer_type_node, argtypes),
6239 NULL_TREE);
6240 release_fn = push_library_fn (release_fn, vfntype, NULL_TREE);
6241 abort_fn = push_library_fn (abort_fn, vfntype, NULL_TREE);
40aac948
JM
6242 }
6243 else
6244 {
6245 release_fn = identifier_global_value (release_fn);
6246 abort_fn = identifier_global_value (abort_fn);
6247 }
6248
6249 inner_if_stmt = begin_if_stmt ();
94a0dd7b 6250 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
40aac948
JM
6251 inner_if_stmt);
6252
6253 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6254 begin = get_target_expr (boolean_false_node);
6255 flag = TARGET_EXPR_SLOT (begin);
6256
6257 TARGET_EXPR_CLEANUP (begin)
81eba3a8
KH
6258 = build3 (COND_EXPR, void_type_node, flag,
6259 void_zero_node,
94a0dd7b 6260 build_call_n (abort_fn, 1, guard_addr));
40aac948
JM
6261 CLEANUP_EH_ONLY (begin) = 1;
6262
6263 /* Do the initialization itself. */
6264 init = add_stmt_to_compound (begin, init);
6265 init = add_stmt_to_compound
81eba3a8 6266 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
40aac948 6267 init = add_stmt_to_compound
94a0dd7b 6268 (init, build_call_n (release_fn, 1, guard_addr));
40aac948 6269 }
f1dedc31 6270 else
40aac948 6271 init = add_stmt_to_compound (init, set_guard (guard));
72b7eeff 6272
2036a15c
MM
6273 /* Use atexit to register a function for destroying this static
6274 variable. */
40aac948
JM
6275 init = add_stmt_to_compound (init, register_dtor_fn (decl));
6276
6277 finish_expr_stmt (init);
6278
6279 if (flag_threadsafe_statics)
6280 {
6281 finish_compound_stmt (inner_then_clause);
6282 finish_then_clause (inner_if_stmt);
6283 finish_if_stmt (inner_if_stmt);
6284 }
72b7eeff 6285
445cf5eb
JM
6286 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6287 {
6288 finish_compound_stmt (then_clause);
6289 finish_then_clause (if_stmt);
6290 finish_if_stmt (if_stmt);
6291 }
8d08fdba
MS
6292 }
6293 else
bbd15aac 6294 static_aggregates = tree_cons (init, decl, static_aggregates);
8d08fdba 6295}
3c5c0849 6296
8d08fdba
MS
6297\f
6298/* Make TYPE a complete type based on INITIAL_VALUE.
6299 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
07900878
PC
6300 2 if there was no information (in which case assume 0 if DO_DEFAULT),
6301 3 if the initializer list is empty (in pedantic mode). */
8d08fdba
MS
6302
6303int
aab038d5 6304cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8d08fdba 6305{
aab038d5
RH
6306 int failure;
6307 tree type, elt_type;
68642fb6 6308
8d08fdba
MS
6309 if (initial_value)
6310 {
49b5e2f6
DG
6311 unsigned HOST_WIDE_INT i;
6312 tree value;
6313
7b019c19 6314 /* An array of character type can be initialized from a
4038c495
GB
6315 brace-enclosed string constant.
6316
6317 FIXME: this code is duplicated from reshape_init. Probably
6318 we should just call reshape_init here? */
aab038d5 6319 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7b019c19 6320 && TREE_CODE (initial_value) == CONSTRUCTOR
4038c495
GB
6321 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6322 {
6323 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6324 tree value = VEC_index (constructor_elt, v, 0)->value;
6325
6326 if (TREE_CODE (value) == STRING_CST
6327 && VEC_length (constructor_elt, v) == 1)
6328 initial_value = value;
6329 }
49b5e2f6
DG
6330
6331 /* If any of the elements are parameter packs, we can't actually
6332 complete this type now because the array size is dependent. */
6333 if (TREE_CODE (initial_value) == CONSTRUCTOR)
6334 {
6335 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
6336 i, value)
6337 {
6338 if (PACK_EXPANSION_P (value))
6339 return 0;
6340 }
6341 }
8d08fdba
MS
6342 }
6343
aab038d5 6344 failure = complete_array_type (ptype, initial_value, do_default);
8d08fdba 6345
aab038d5
RH
6346 /* We can create the array before the element type is complete, which
6347 means that we didn't have these two bits set in the original type
6348 either. In completing the type, we are expected to propagate these
6349 bits. See also complete_type which does the same thing for arrays
6350 of fixed size. */
6351 type = *ptype;
6352 if (TYPE_DOMAIN (type))
8d08fdba 6353 {
81b4398d 6354 elt_type = TREE_TYPE (type);
aab038d5 6355 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
81b4398d 6356 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
aab038d5 6357 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8d08fdba
MS
6358 }
6359
aab038d5 6360 return failure;
8d08fdba
MS
6361}
6362\f
6363/* Return zero if something is declared to be a member of type
6364 CTYPE when in the context of CUR_TYPE. STRING is the error
6365 message to print in that case. Otherwise, quietly return 1. */
e92cc029 6366
8d08fdba 6367static int
11f6b451 6368member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8d08fdba
MS
6369{
6370 if (ctype && ctype != cur_type)
6371 {
4dacf5bd 6372 if (flags == DTOR_FLAG)
2d01edd7 6373 error ("destructor for alien class %qT cannot be a member", ctype);
4dacf5bd 6374 else
2d01edd7 6375 error ("constructor for alien class %qT cannot be a member", ctype);
8d08fdba
MS
6376 return 0;
6377 }
6378 return 1;
6379}
6380\f
6381/* Subroutine of `grokdeclarator'. */
6382
6383/* Generate errors possibly applicable for a given set of specifiers.
6384 This is for ARM $7.1.2. */
e92cc029 6385
8d08fdba 6386static void
11f6b451 6387bad_specifiers (tree object,
0cbd7506
MS
6388 const char* type,
6389 int virtualp,
6390 int quals,
6391 int inlinep,
6392 int friendp,
6393 int raises)
8d08fdba
MS
6394{
6395 if (virtualp)
2d01edd7 6396 error ("%qD declared as a %<virtual%> %s", object, type);
8d08fdba 6397 if (inlinep)
2d01edd7 6398 error ("%qD declared as an %<inline%> %s", object, type);
8d08fdba 6399 if (quals)
2d01edd7 6400 error ("%<const%> and %<volatile%> function specifiers on "
0cbd7506
MS
6401 "%qD invalid in %s declaration",
6402 object, type);
8d08fdba 6403 if (friendp)
dee15844 6404 error ("%q+D declared as a friend", object);
e1be26f4
RS
6405 if (raises
6406 && (TREE_CODE (object) == TYPE_DECL
6407 || (!TYPE_PTRFN_P (TREE_TYPE (object))
742a37d5 6408 && !TYPE_REFFN_P (TREE_TYPE (object))
e1be26f4 6409 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
dee15844 6410 error ("%q+D declared with an exception specification", object);
8d08fdba
MS
6411}
6412
9c12301f
MM
6413/* DECL is a member function or static data member and is presently
6414 being defined. Check that the definition is taking place in a
6415 valid namespace. */
6416
6417static void
6418check_class_member_definition_namespace (tree decl)
6419{
6420 /* These checks only apply to member functions and static data
6421 members. */
6422 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6423 || TREE_CODE (decl) == VAR_DECL);
6424 /* We check for problems with specializations in pt.c in
6425 check_specialization_namespace, where we can issue better
6426 diagnostics. */
6427 if (processing_specialization)
6428 return;
6429 /* There are no restrictions on the placement of
6430 explicit instantiations. */
6431 if (processing_explicit_instantiation)
6432 return;
6433 /* [class.mfct]
6434
6435 A member function definition that appears outside of the
6436 class definition shall appear in a namespace scope enclosing
6437 the class definition.
6438
6439 [class.static.data]
6440
6441 The definition for a static data member shall appear in a
6442 namespace scope enclosing the member's class definition. */
6443 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
cbe5f3b3 6444 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
37ec60ed 6445 decl, DECL_CONTEXT (decl));
9c12301f
MM
6446}
6447
e2537f2c
MM
6448/* Build a PARM_DECL for the "this" parameter. TYPE is the
6449 METHOD_TYPE for a non-static member function; QUALS are the
6450 cv-qualifiers that apply to the function. */
3db45ab5 6451
e2537f2c
MM
6452tree
6453build_this_parm (tree type, cp_cv_quals quals)
6454{
6455 tree this_type;
6456 tree qual_type;
6457 tree parm;
6458 cp_cv_quals this_quals;
6459
6460 this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
6461 /* The `this' parameter is implicitly `const'; it cannot be
6462 assigned to. */
6463 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
6464 qual_type = cp_build_qualified_type (this_type, this_quals);
6465 parm = build_artificial_parm (this_identifier, qual_type);
6466 cp_apply_type_quals_to_decl (this_quals, parm);
6467 return parm;
3db45ab5 6468}
e2537f2c 6469
8d08fdba
MS
6470/* CTYPE is class type, or null if non-class.
6471 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
6472 or METHOD_TYPE.
6473 DECLARATOR is the function's name.
4546865e 6474 PARMS is a chain of PARM_DECLs for the function.
8d08fdba
MS
6475 VIRTUALP is truthvalue of whether the function is virtual or not.
6476 FLAGS are to be passed through to `grokclassfn'.
6477 QUALS are qualifiers indicating whether the function is `const'
6478 or `volatile'.
6479 RAISES is a list of exceptions that this function can raise.
6480 CHECK is 1 if we must find this method in CTYPE, 0 if we should
68642fb6 6481 not look, and -1 if we should not call `grokclassfn' at all.
3ddfb0e6 6482
27d6592c
MM
6483 SFK is the kind of special function (if any) for the new function.
6484
20496fa2 6485 Returns `NULL_TREE' if something goes wrong, after issuing
3ddfb0e6 6486 applicable error messages. */
e92cc029 6487
8d08fdba 6488static tree
caf93cb0 6489grokfndecl (tree ctype,
0cbd7506
MS
6490 tree type,
6491 tree declarator,
4546865e 6492 tree parms,
0cbd7506
MS
6493 tree orig_declarator,
6494 int virtualp,
6495 enum overload_flags flags,
3c01e5df 6496 cp_cv_quals quals,
0cbd7506
MS
6497 tree raises,
6498 int check,
6499 int friendp,
6500 int publicp,
6501 int inlinep,
27d6592c 6502 special_function_kind sfk,
357d956e 6503 bool funcdef_flag,
0cbd7506
MS
6504 int template_count,
6505 tree in_namespace,
037cc9c5 6506 tree* attrlist)
8d08fdba 6507{
1951a1b6 6508 tree decl;
8d08fdba 6509 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
42976354 6510 tree t;
8d08fdba 6511
8d08fdba 6512 if (raises)
271e6f02 6513 type = build_exception_variant (type, raises);
c11b6f21 6514
8d08fdba 6515 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
e2537f2c
MM
6516 if (TREE_CODE (type) == METHOD_TYPE)
6517 {
6518 tree parm;
6519 parm = build_this_parm (type, quals);
6520 TREE_CHAIN (parm) = parms;
6521 parms = parm;
6522 }
4546865e 6523 DECL_ARGUMENTS (decl) = parms;
a1c65f9f 6524 /* Propagate volatile out from type to decl. */
8d08fdba 6525 if (TYPE_VOLATILE (type))
893de33c 6526 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba 6527
71aea5f2
SM
6528 /* Setup decl according to sfk. */
6529 switch (sfk)
6530 {
6531 case sfk_constructor:
6532 case sfk_copy_constructor:
6533 DECL_CONSTRUCTOR_P (decl) = 1;
6534 break;
6535 case sfk_destructor:
6536 DECL_DESTRUCTOR_P (decl) = 1;
6537 break;
6538 default:
6539 break;
6540 }
6541
837edd5f
GK
6542 /* If pointers to member functions use the least significant bit to
6543 indicate whether a function is virtual, ensure a pointer
6544 to this function will have that bit clear. */
6545 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6546 && TREE_CODE (type) == METHOD_TYPE
6547 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
6548 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
6549
abc088aa
MM
6550 if (friendp
6551 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
6552 {
6553 if (funcdef_flag)
6554 error
6555 ("defining explicit specialization %qD in friend declaration",
6556 orig_declarator);
6557 else
6558 {
6559 tree fns = TREE_OPERAND (orig_declarator, 0);
6560 tree args = TREE_OPERAND (orig_declarator, 1);
6561
6562 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
6563 {
6564 /* Something like `template <class T> friend void f<T>()'. */
6565 error ("invalid use of template-id %qD in declaration "
6566 "of primary template",
6567 orig_declarator);
6568 return NULL_TREE;
6569 }
6570
6571
6572 /* A friend declaration of the form friend void f<>(). Record
6573 the information in the TEMPLATE_ID_EXPR. */
6574 SET_DECL_IMPLICIT_INSTANTIATION (decl);
6575
6576 if (TREE_CODE (fns) == COMPONENT_REF)
6577 {
6578 /* Due to bison parser ickiness, we will have already looked
6579 up an operator_name or PFUNCNAME within the current class
6580 (see template_id in parse.y). If the current class contains
6581 such a name, we'll get a COMPONENT_REF here. Undo that. */
6582
6583 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
6584 == current_class_type);
6585 fns = TREE_OPERAND (fns, 1);
6586 }
6587 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
6588 || TREE_CODE (fns) == OVERLOAD);
6589 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
6590
6591 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
6592 if (TREE_PURPOSE (t)
6593 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
6594 {
6595 error ("default arguments are not allowed in declaration "
6596 "of friend template specialization %qD",
6597 decl);
6598 return NULL_TREE;
6599 }
6600
6601 if (inlinep)
6602 {
6603 error ("%<inline%> is not allowed in declaration of friend "
6604 "template specialization %qD",
6605 decl);
6606 return NULL_TREE;
6607 }
6608 }
6609 }
6610
79c4d4b7 6611 /* If this decl has namespace scope, set that up. */
2c73f9f5 6612 if (in_namespace)
b262d64c 6613 set_decl_namespace (decl, in_namespace, friendp);
adae082f 6614 else if (!ctype)
79c4d4b7 6615 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 6616
0f8766b8
JM
6617 /* `main' and builtins have implicit 'C' linkage. */
6618 if ((MAIN_NAME_P (declarator)
6619 || (IDENTIFIER_LENGTH (declarator) > 10
6620 && IDENTIFIER_POINTER (declarator)[0] == '_'
6621 && IDENTIFIER_POINTER (declarator)[1] == '_'
6622 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
6623 && current_lang_name == lang_name_cplusplus
94706a5c 6624 && ctype == NULL_TREE
79c4d4b7
JM
6625 /* NULL_TREE means global namespace. */
6626 && DECL_CONTEXT (decl) == NULL_TREE)
5d2ed28c 6627 SET_DECL_LANGUAGE (decl, lang_c);
0f8766b8 6628
8d08fdba
MS
6629 /* Should probably propagate const out from type to decl I bet (mrs). */
6630 if (staticp)
6631 {
6632 DECL_STATIC_FUNCTION_P (decl) = 1;
6633 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
6634 }
6635
e76a2646 6636 if (ctype)
9c12301f
MM
6637 {
6638 DECL_CONTEXT (decl) = ctype;
6639 if (funcdef_flag)
6640 check_class_member_definition_namespace (decl);
6641 }
e76a2646 6642
0f8766b8 6643 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
faae18ab 6644 {
848b92e1 6645 if (processing_template_decl)
2d01edd7 6646 error ("cannot declare %<::main%> to be a template");
faae18ab 6647 if (inlinep)
2d01edd7 6648 error ("cannot declare %<::main%> to be inline");
f22967f3 6649 if (!publicp)
2d01edd7 6650 error ("cannot declare %<::main%> to be static");
faae18ab
MS
6651 inlinep = 0;
6652 publicp = 1;
6653 }
50a6dbd7 6654
59e76fc6 6655 /* Members of anonymous types and local classes have no linkage; make
9fc444cc 6656 them internal. If a typedef is made later, this will be changed. */
1951a1b6 6657 if (ctype && (TYPE_ANONYMOUS_P (ctype)
4f1c5b7d 6658 || decl_function_context (TYPE_MAIN_DECL (ctype))))
50a6dbd7
JM
6659 publicp = 0;
6660
6661 if (publicp)
6662 {
6663 /* [basic.link]: A name with no linkage (notably, the name of a class
6664 or enumeration declared in a local scope) shall not be used to
6665 declare an entity with linkage.
6666
50b97e0f 6667 Only check this for public decls for now. See core 319, 389. */
4684cd27
MM
6668 t = no_linkage_check (TREE_TYPE (decl),
6669 /*relaxed_p=*/false);
50a6dbd7
JM
6670 if (t)
6671 {
1951a1b6 6672 if (TYPE_ANONYMOUS_P (t))
7f7c930e 6673 {
eb68cb58 6674 if (DECL_EXTERN_C_P (decl))
7f7c930e
JM
6675 /* Allow this; it's pretty common in C. */;
6676 else
1951a1b6 6677 {
cbe5f3b3 6678 permerror (input_location, "non-local function %q#D uses anonymous type",
1951a1b6
JM
6679 decl);
6680 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
cbe5f3b3 6681 permerror (input_location, "%q+#D does not refer to the unqualified "
37ec60ed
JW
6682 "type, so it is not used for linkage",
6683 TYPE_NAME (t));
1951a1b6 6684 }
7f7c930e 6685 }
50a6dbd7 6686 else
cbe5f3b3 6687 permerror (input_location, "non-local function %q#D uses local type %qT", decl, t);
50a6dbd7
JM
6688 }
6689 }
6690
893de33c 6691 TREE_PUBLIC (decl) = publicp;
faae18ab 6692 if (! publicp)
893de33c
JM
6693 {
6694 DECL_INTERFACE_KNOWN (decl) = 1;
6695 DECL_NOT_REALLY_EXTERN (decl) = 1;
6696 }
faae18ab 6697
acc72c37 6698 /* If the declaration was declared inline, mark it as such. */
faae18ab 6699 if (inlinep)
acc72c37 6700 DECL_DECLARED_INLINE_P (decl) = 1;
8d08fdba
MS
6701
6702 DECL_EXTERNAL (decl) = 1;
3c01e5df 6703 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba 6704 {
e7c41c99
DM
6705 error (ctype
6706 ? G_("static member function %qD cannot have cv-qualifier")
32b1d579 6707 : G_("non-member function %qD cannot have cv-qualifier"),
e7c41c99 6708 decl);
3c01e5df 6709 quals = TYPE_UNQUALIFIED;
8d08fdba
MS
6710 }
6711
398cd199
VR
6712 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
6713 && !grok_op_properties (decl, /*complain=*/true))
6714 return NULL_TREE;
8d08fdba 6715
4f1c5b7d 6716 if (ctype && decl_function_context (decl))
893de33c 6717 DECL_NO_STATIC_CHAIN (decl) = 1;
e76a2646 6718
1eb0072d
JM
6719 if (funcdef_flag)
6720 /* Make the init_value nonzero so pushdecl knows this is not
6721 tentative. error_mark_node is replaced later with the BLOCK. */
6722 DECL_INITIAL (decl) = error_mark_node;
6723
93ca4ba7 6724 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
1660cb3a
JM
6725 TREE_NOTHROW (decl) = 1;
6726
75650646 6727 /* Caller will do the rest of this. */
8d08fdba
MS
6728 if (check < 0)
6729 return decl;
6730
74b846e0 6731 if (ctype != NULL_TREE)
71aea5f2 6732 grokclassfn (ctype, decl, flags);
74b846e0
MM
6733
6734 decl = check_explicit_specialization (orig_declarator, decl,
6735 template_count,
357d956e 6736 2 * funcdef_flag +
74b846e0
MM
6737 4 * (friendp != 0));
6738 if (decl == error_mark_node)
6739 return NULL_TREE;
98c1c668 6740
037cc9c5
FJ
6741 if (attrlist)
6742 {
6743 cplus_decl_attributes (&decl, *attrlist, 0);
6744 *attrlist = NULL_TREE;
6745 }
6746
da337784
JJ
6747 /* Check main's type after attributes have been applied. */
6748 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6749 {
6750 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
6751 integer_type_node))
6752 {
6753 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
6754 tree newtype;
6755 error ("%<::main%> must return %<int%>");
6756 newtype = build_function_type (integer_type_node, oldtypeargs);
6757 TREE_TYPE (decl) = newtype;
6758 }
4003301d
MLI
6759 if (warn_main)
6760 check_main_parameter_types (decl);
da337784
JJ
6761 }
6762
74b846e0
MM
6763 if (ctype != NULL_TREE
6764 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6765 && check)
8d08fdba 6766 {
f8c3b097
PC
6767 tree old_decl = check_classfn (ctype, decl,
6768 (processing_template_decl
6769 > template_class_depth (ctype))
6770 ? current_template_parms
6771 : NULL_TREE);
6772
6773 if (old_decl == error_mark_node)
6774 return NULL_TREE;
8d08fdba 6775
74b846e0 6776 if (old_decl)
8d08fdba 6777 {
79ae853c 6778 tree ok;
4514aa8c 6779 tree pushed_scope;
316a2456 6780
357d956e
MM
6781 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6782 /* Because grokfndecl is always supposed to return a
6783 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6784 here. We depend on our callers to figure out that its
6785 really a template that's being returned. */
6786 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6787
6788 if (DECL_STATIC_FUNCTION_P (old_decl)
6789 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6790 /* Remove the `this' parm added by grokclassfn.
6791 XXX Isn't this done in start_function, too? */
6792 revert_static_member_fn (decl);
6793 if (DECL_ARTIFICIAL (old_decl))
db160137
AP
6794 {
6795 error ("definition of implicitly-declared %qD", old_decl);
6796 return NULL_TREE;
6797 }
357d956e 6798
74b846e0
MM
6799 /* Since we've smashed OLD_DECL to its
6800 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
6801 if (TREE_CODE (decl) == TEMPLATE_DECL)
6802 decl = DECL_TEMPLATE_RESULT (decl);
6803
6804 /* Attempt to merge the declarations. This can fail, in
0e339752 6805 the case of some invalid specialization declarations. */
4514aa8c 6806 pushed_scope = push_scope (ctype);
d63d5d0c 6807 ok = duplicate_decls (decl, old_decl, friendp);
4514aa8c
NS
6808 if (pushed_scope)
6809 pop_scope (pushed_scope);
316a2456
MM
6810 if (!ok)
6811 {
2d01edd7 6812 error ("no %q#D member function declared in class %qT",
316a2456
MM
6813 decl, ctype);
6814 return NULL_TREE;
6815 }
74b846e0 6816 return old_decl;
8d08fdba
MS
6817 }
6818 }
74b846e0
MM
6819
6820 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6821 return NULL_TREE;
6822
6823 if (ctype == NULL_TREE || check)
6824 return decl;
6825
6826 if (virtualp)
cbb40945 6827 DECL_VIRTUAL_P (decl) = 1;
74b846e0 6828
8d08fdba
MS
6829 return decl;
6830}
6831
4684cd27
MM
6832/* DECL is a VAR_DECL for a static data member. Set flags to reflect
6833 the linkage that DECL will receive in the object file. */
6834
6835static void
6836set_linkage_for_static_data_member (tree decl)
6837{
6838 /* A static data member always has static storage duration and
6839 external linkage. Note that static data members are forbidden in
6840 local classes -- the only situation in which a class has
6841 non-external linkage. */
6842 TREE_PUBLIC (decl) = 1;
6843 TREE_STATIC (decl) = 1;
6844 /* For non-template classes, static data members are always put
6845 out in exactly those files where they are defined, just as
77880ae4 6846 with ordinary namespace-scope variables. */
4684cd27
MM
6847 if (!processing_template_decl)
6848 DECL_INTERFACE_KNOWN (decl) = 1;
6849}
6850
caf93cb0 6851/* Create a VAR_DECL named NAME with the indicated TYPE.
9e259dd1
MM
6852
6853 If SCOPE is non-NULL, it is the class type or namespace containing
6854 the variable. If SCOPE is NULL, the variable should is created in
6855 the innermost enclosings scope. */
6856
8d08fdba 6857static tree
11f6b451 6858grokvardecl (tree type,
0cbd7506 6859 tree name,
1ff3c076 6860 const cp_decl_specifier_seq *declspecs,
0cbd7506
MS
6861 int initialized,
6862 int constp,
6863 tree scope)
8d08fdba
MS
6864{
6865 tree decl;
5ae9ba3e 6866 tree explicit_scope;
f7da6097 6867
50bc768d 6868 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
9e259dd1 6869
5ae9ba3e
MM
6870 /* Compute the scope in which to place the variable, but remember
6871 whether or not that scope was explicitly specified by the user. */
6872 explicit_scope = scope;
9e259dd1 6873 if (!scope)
8d08fdba 6874 {
9e259dd1
MM
6875 /* An explicit "extern" specifier indicates a namespace-scope
6876 variable. */
62d1db17 6877 if (declspecs->storage_class == sc_extern)
9e259dd1
MM
6878 scope = current_namespace;
6879 else if (!at_function_scope_p ())
a5201a91 6880 scope = current_scope ();
9e259dd1
MM
6881 }
6882
6883 if (scope
6884 && (/* If the variable is a namespace-scope variable declared in a
6885 template, we need DECL_LANG_SPECIFIC. */
6886 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6887 /* Similarly for namespace-scope variables with language linkage
6888 other than C++. */
caf93cb0 6889 || (TREE_CODE (scope) == NAMESPACE_DECL
9e259dd1
MM
6890 && current_lang_name != lang_name_cplusplus)
6891 /* Similarly for static data members. */
6892 || TYPE_P (scope)))
6893 decl = build_lang_decl (VAR_DECL, name, type);
8d08fdba 6894 else
9e259dd1 6895 decl = build_decl (VAR_DECL, name, type);
79c4d4b7 6896
5ae9ba3e
MM
6897 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6898 set_decl_namespace (decl, explicit_scope, 0);
9e259dd1 6899 else
74b0d490 6900 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
6060a796 6901
62d1db17 6902 if (declspecs->storage_class == sc_extern)
8d08fdba
MS
6903 {
6904 DECL_THIS_EXTERN (decl) = 1;
6905 DECL_EXTERNAL (decl) = !initialized;
6906 }
6907
2b9dc906 6908 if (DECL_CLASS_SCOPE_P (decl))
8d08fdba 6909 {
4684cd27
MM
6910 set_linkage_for_static_data_member (decl);
6911 /* This function is only called with out-of-class definitions. */
5b605f68 6912 DECL_EXTERNAL (decl) = 0;
9c12301f 6913 check_class_member_definition_namespace (decl);
8d08fdba
MS
6914 }
6915 /* At top level, either `static' or no s.c. makes a definition
6916 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 6917 else if (toplevel_bindings_p ())
8d08fdba 6918 {
62d1db17 6919 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9fffd093 6920 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
6921 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
6922 }
6923 /* Not at top level, only `static' makes a static definition. */
6924 else
6925 {
62d1db17 6926 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
8d08fdba
MS
6927 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
6928 }
50a6dbd7 6929
62d1db17 6930 if (declspecs->specs[(int)ds_thread])
8893239d 6931 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7a1f3f5f 6932
50a6dbd7
JM
6933 if (TREE_PUBLIC (decl))
6934 {
6935 /* [basic.link]: A name with no linkage (notably, the name of a class
6936 or enumeration declared in a local scope) shall not be used to
6937 declare an entity with linkage.
6938
03fd3f84 6939 Only check this for public decls for now. */
6b211746 6940 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
50a6dbd7
JM
6941 if (t)
6942 {
1951a1b6 6943 if (TYPE_ANONYMOUS_P (t))
9fc444cc
GK
6944 {
6945 if (DECL_EXTERN_C_P (decl))
6bdb98d1
MA
6946 /* Allow this; it's pretty common in C. */
6947 ;
9fc444cc
GK
6948 else
6949 {
6b211746
AO
6950 /* DRs 132, 319 and 389 seem to indicate types with
6951 no linkage can only be used to declare extern "C"
6952 entities. Since it's not always an error in the
6953 ISO C++ 90 Standard, we only issue a warning. */
d4ee4d25 6954 warning (0, "non-local variable %q#D uses anonymous type",
9fc444cc
GK
6955 decl);
6956 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
dee15844
JM
6957 warning (0, "%q+#D does not refer to the unqualified "
6958 "type, so it is not used for linkage",
6959 TYPE_NAME (t));
9fc444cc
GK
6960 }
6961 }
50a6dbd7 6962 else
d4ee4d25 6963 warning (0, "non-local variable %q#D uses local type %qT", decl, t);
50a6dbd7
JM
6964 }
6965 }
1ceb02be
MM
6966 else
6967 DECL_INTERFACE_KNOWN (decl) = 1;
50a6dbd7 6968
8d08fdba
MS
6969 return decl;
6970}
6971
d8f8dca1
MM
6972/* Create and return a canonical pointer to member function type, for
6973 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8d08fdba
MS
6974
6975tree
11f6b451 6976build_ptrmemfunc_type (tree type)
8d08fdba 6977{
4977bab6 6978 tree field, fields;
8d08fdba 6979 tree t;
46cbda4a 6980 tree unqualified_variant = NULL_TREE;
8d08fdba 6981
d48ebde1
NS
6982 if (type == error_mark_node)
6983 return type;
d363e7bf 6984
8d08fdba
MS
6985 /* If a canonical type already exists for this type, use it. We use
6986 this method instead of type_hash_canon, because it only does a
6987 simple equality check on the list of field members. */
6988
6989 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
6990 return t;
6991
46cbda4a
MM
6992 /* Make sure that we always have the unqualified pointer-to-member
6993 type first. */
89d684bb 6994 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
68642fb6 6995 unqualified_variant
46cbda4a
MM
6996 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
6997
9e1e64ec 6998 t = make_class_type (RECORD_TYPE);
cad7e87b 6999 xref_basetypes (t, NULL_TREE);
caf93cb0 7000
3b426391 7001 /* Let the front end know this is a pointer to member function... */
db5ae43f 7002 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9e1e64ec
PC
7003 /* ... and not really a class type. */
7004 SET_CLASS_TYPE_P (t, 0);
8d08fdba 7005
4977bab6
ZW
7006 field = build_decl (FIELD_DECL, pfn_identifier, type);
7007 fields = field;
caf93cb0 7008
4977bab6
ZW
7009 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
7010 TREE_CHAIN (field) = fields;
7011 fields = field;
caf93cb0 7012
4977bab6 7013 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8d08fdba 7014
3b426391 7015 /* Zap out the name so that the back end will give us the debugging
8d08fdba
MS
7016 information for this anonymous RECORD_TYPE. */
7017 TYPE_NAME (t) = NULL_TREE;
7018
46cbda4a
MM
7019 /* If this is not the unqualified form of this pointer-to-member
7020 type, set the TYPE_MAIN_VARIANT for this type to be the
7021 unqualified type. Since they are actually RECORD_TYPEs that are
7022 not variants of each other, we must do this manually. */
89d684bb 7023 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
46cbda4a 7024 {
89d684bb 7025 t = build_qualified_type (t, cp_type_quals (type));
46cbda4a
MM
7026 TYPE_MAIN_VARIANT (t) = unqualified_variant;
7027 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7028 TYPE_NEXT_VARIANT (unqualified_variant) = t;
0f67bdf1 7029 TREE_TYPE (TYPE_BINFO (t)) = t;
46cbda4a
MM
7030 }
7031
7032 /* Cache this pointer-to-member type so that we can find it again
7033 later. */
8d08fdba
MS
7034 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7035
0f67bdf1
JM
7036 if (TYPE_STRUCTURAL_EQUALITY_P (type))
7037 SET_TYPE_STRUCTURAL_EQUALITY (t);
7038 else if (TYPE_CANONICAL (type) != type)
7039 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
06d40de8 7040
8d08fdba
MS
7041 return t;
7042}
7043
9e259dd1
MM
7044/* Create and return a pointer to data member type. */
7045
7046tree
7047build_ptrmem_type (tree class_type, tree member_type)
7048{
a5ac359a
MM
7049 if (TREE_CODE (member_type) == METHOD_TYPE)
7050 {
7051 tree arg_types;
7052
7053 arg_types = TYPE_ARG_TYPES (member_type);
caf93cb0 7054 class_type = (cp_build_qualified_type
a5ac359a
MM
7055 (class_type,
7056 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
caf93cb0
EC
7057 member_type
7058 = build_method_type_directly (class_type,
43dc123f
MM
7059 TREE_TYPE (member_type),
7060 TREE_CHAIN (arg_types));
a5ac359a
MM
7061 return build_ptrmemfunc_type (build_pointer_type (member_type));
7062 }
7063 else
7064 {
50bc768d 7065 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
a5ac359a
MM
7066 return build_offset_type (class_type, member_type);
7067 }
9e259dd1
MM
7068}
7069
b17e2870
JM
7070/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7071 Check to see that the definition is valid. Issue appropriate error
7072 messages. Return 1 if the definition is particularly bad, or 0
7073 otherwise. */
7074
7075int
11f6b451 7076check_static_variable_definition (tree decl, tree type)
b17e2870
JM
7077{
7078 /* Motion 10 at San Diego: If a static const integral data member is
7079 initialized with an integral constant expression, the initializer
7080 may appear either in the declaration (within the class), or in
7081 the definition, but not both. If it appears in the class, the
7082 member is a member constant. The file-scope definition is always
7083 required. */
dcba9b0f 7084 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
b17e2870 7085 {
2d01edd7 7086 error ("invalid in-class initialization of static data member "
0cbd7506 7087 "of non-integral type %qT",
dcba9b0f 7088 type);
b17e2870 7089 /* If we just return the declaration, crashes will sometimes
852dcbdd 7090 occur. We therefore return void_type_node, as if this were a
b17e2870
JM
7091 friend declaration, to cause callers to completely ignore
7092 this declaration. */
7093 return 1;
7094 }
7095 else if (!CP_TYPE_CONST_P (type))
2d01edd7 7096 error ("ISO C++ forbids in-class initialization of non-const "
0cbd7506
MS
7097 "static member %qD",
7098 decl);
fcf73884 7099 else if (!INTEGRAL_TYPE_P (type))
509c9d60 7100 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
0cbd7506 7101 "%qD of non-integral type %qT", decl, type);
b17e2870
JM
7102
7103 return 0;
7104}
7105
2848ad0f
MM
7106/* Given the SIZE (i.e., number of elements) in an array, compute an
7107 appropriate index type for the array. If non-NULL, NAME is the
7108 name of the thing being declared. */
7109
c95cd22e 7110tree
11f6b451 7111compute_array_index_type (tree name, tree size)
2848ad0f 7112{
d174af6c 7113 tree type;
2848ad0f 7114 tree itype;
06d40de8 7115 tree abi_1_itype = NULL_TREE;
2848ad0f 7116
d174af6c
MM
7117 if (error_operand_p (size))
7118 return error_mark_node;
7119
7120 type = TREE_TYPE (size);
d63b5e9f
NS
7121 /* The array bound must be an integer type. */
7122 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
2848ad0f 7123 {
d63b5e9f 7124 if (name)
2d01edd7 7125 error ("size of array %qD has non-integral type %qT", name, type);
d63b5e9f 7126 else
2d01edd7 7127 error ("size of array has non-integral type %qT", type);
d63b5e9f
NS
7128 size = integer_one_node;
7129 type = TREE_TYPE (size);
2848ad0f
MM
7130 }
7131
06d40de8
DG
7132 if (value_dependent_expression_p (size))
7133 {
7134 /* We cannot do any checking for a value-dependent SIZE. Just
7135 build the index type and mark that it requires structural
7136 equality checks. */
7137 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7138 size, integer_one_node));
7139 SET_TYPE_STRUCTURAL_EQUALITY (itype);
7140 return itype;
7141 }
7142
7143 if (!abi_version_at_least (2) && processing_template_decl)
7144 /* For abi-1, we handled all instances in templates the same way,
39a13be5 7145 even when they were non-dependent. This affects the manglings
06d40de8
DG
7146 produced. So, we do the normal checking for non-dependent
7147 sizes, but at the end we'll return the same type that abi-1
7148 would have, but with TYPE_CANONICAL set to the "right"
7149 value that the current ABI would provide. */
7150 abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7151 size, integer_one_node));
d63b5e9f 7152
a1c65f9f 7153 /* The size might be the result of a cast. */
80f5bb34
MM
7154 STRIP_TYPE_NOPS (size);
7155
7156 /* It might be a const variable or enumeration constant. */
8a784e4a 7157 size = integral_constant_value (size);
80f5bb34 7158
2848ad0f 7159 /* Normally, the array-bound will be a constant. */
2bb5d995 7160 if (TREE_CODE (size) == INTEGER_CST)
2848ad0f
MM
7161 {
7162 /* Check to see if the array bound overflowed. Make that an
7163 error, no matter how generous we're being. */
393eda6a 7164 constant_expression_error (size);
2848ad0f
MM
7165
7166 /* An array must have a positive number of elements. */
7167 if (INT_CST_LT (size, integer_zero_node))
7168 {
d67cdbc3 7169 if (name)
2d01edd7 7170 error ("size of array %qD is negative", name);
d67cdbc3 7171 else
33bd39a2 7172 error ("size of array is negative");
2848ad0f
MM
7173 size = integer_one_node;
7174 }
a8e6c82a
MM
7175 /* As an extension we allow zero-sized arrays. We always allow
7176 them in system headers because glibc uses them. */
fcf73884 7177 else if (integer_zerop (size) && !in_system_header)
d67cdbc3
JM
7178 {
7179 if (name)
509c9d60 7180 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
d67cdbc3 7181 else
509c9d60 7182 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
d67cdbc3 7183 }
2848ad0f 7184 }
2bb5d995
JM
7185 else if (TREE_CONSTANT (size))
7186 {
7187 /* `(int) &fn' is not a valid array bound. */
7188 if (name)
2d01edd7 7189 error ("size of array %qD is not an integral constant-expression",
0cbd7506 7190 name);
2bb5d995 7191 else
33bd39a2 7192 error ("size of array is not an integral constant-expression");
3aa2ddb8 7193 size = integer_one_node;
2bb5d995 7194 }
50d50fc7 7195 else if (pedantic && warn_vla != 0)
d63b5e9f
NS
7196 {
7197 if (name)
509c9d60 7198 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
d63b5e9f 7199 else
509c9d60 7200 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
50d50fc7
SP
7201 }
7202 else if (warn_vla > 0)
7203 {
7204 if (name)
7205 warning (OPT_Wvla,
7206 "variable length array %qD is used", name);
7207 else
7208 warning (OPT_Wvla,
7209 "variable length array is used");
d63b5e9f 7210 }
2848ad0f 7211
d63b5e9f
NS
7212 if (processing_template_decl && !TREE_CONSTANT (size))
7213 /* A variable sized array. */
7214 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7215 else
2848ad0f 7216 {
455f19cb
MM
7217 HOST_WIDE_INT saved_processing_template_decl;
7218
d63b5e9f 7219 /* Compute the index of the largest element in the array. It is
0cbd7506
MS
7220 one less than the number of elements in the array. We save
7221 and restore PROCESSING_TEMPLATE_DECL so that computations in
7222 cp_build_binary_op will be appropriately folded. */
455f19cb
MM
7223 saved_processing_template_decl = processing_template_decl;
7224 processing_template_decl = 0;
7225 itype = cp_build_binary_op (MINUS_EXPR,
7226 cp_convert (ssizetype, size),
5ade1ed2
DG
7227 cp_convert (ssizetype, integer_one_node),
7228 tf_warning_or_error);
455f19cb
MM
7229 itype = fold (itype);
7230 processing_template_decl = saved_processing_template_decl;
7231
d63b5e9f 7232 if (!TREE_CONSTANT (itype))
f4f206f4 7233 /* A variable sized array. */
d63b5e9f
NS
7234 itype = variable_size (itype);
7235 /* Make sure that there was no overflow when creating to a signed
0cbd7506
MS
7236 index type. (For example, on a 32-bit machine, an array with
7237 size 2^32 - 1 is too big.) */
9116d529
RS
7238 else if (TREE_CODE (itype) == INTEGER_CST
7239 && TREE_OVERFLOW (itype))
2848ad0f 7240 {
d63b5e9f
NS
7241 error ("overflow in array dimension");
7242 TREE_OVERFLOW (itype) = 0;
2848ad0f 7243 }
2848ad0f 7244 }
68642fb6 7245
2848ad0f 7246 /* Create and return the appropriate index type. */
06d40de8
DG
7247 if (abi_1_itype)
7248 {
7249 tree t = build_index_type (itype);
7250 TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
7251 return abi_1_itype;
7252 }
7253 else
7254 return build_index_type (itype);
2848ad0f
MM
7255}
7256
a723baf1
MM
7257/* Returns the scope (if any) in which the entity declared by
7258 DECLARATOR will be located. If the entity was declared with an
7259 unqualified name, NULL_TREE is returned. */
7260
7261tree
058b15c1 7262get_scope_of_declarator (const cp_declarator *declarator)
a723baf1 7263{
058b15c1
MM
7264 while (declarator && declarator->kind != cdk_id)
7265 declarator = declarator->declarator;
7266
7267 /* If the declarator-id is a SCOPE_REF, the scope in which the
7268 declaration occurs is the first operand. */
7269 if (declarator
1d786913
MM
7270 && declarator->u.id.qualifying_scope)
7271 return declarator->u.id.qualifying_scope;
058b15c1 7272
77880ae4 7273 /* Otherwise, the declarator is not a qualified name; the entity will
058b15c1
MM
7274 be declared in the current scope. */
7275 return NULL_TREE;
a723baf1
MM
7276}
7277
2848ad0f
MM
7278/* Returns an ARRAY_TYPE for an array with SIZE elements of the
7279 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
7280 with this type. */
7281
7282static tree
11f6b451 7283create_array_type_for_decl (tree name, tree type, tree size)
2848ad0f
MM
7284{
7285 tree itype = NULL_TREE;
7286 const char* error_msg;
7287
7288 /* If things have already gone awry, bail now. */
7289 if (type == error_mark_node || size == error_mark_node)
7290 return error_mark_node;
7291
7292 /* Assume that everything will go OK. */
7293 error_msg = NULL;
7294
7295 /* There are some types which cannot be array elements. */
7296 switch (TREE_CODE (type))
7297 {
7298 case VOID_TYPE:
7299 error_msg = "array of void";
7300 break;
7301
7302 case FUNCTION_TYPE:
7303 error_msg = "array of functions";
7304 break;
7305
7306 case REFERENCE_TYPE:
7307 error_msg = "array of references";
7308 break;
7309
2848ad0f
MM
7310 case METHOD_TYPE:
7311 error_msg = "array of function members";
7312 break;
7313
7314 default:
7315 break;
7316 }
7317
7318 /* If something went wrong, issue an error-message and return. */
7319 if (error_msg)
7320 {
7321 if (name)
2d01edd7 7322 error ("declaration of %qD as %s", name, error_msg);
2848ad0f 7323 else
33bd39a2 7324 error ("creating %s", error_msg);
2848ad0f
MM
7325
7326 return error_mark_node;
7327 }
7328
7329 /* [dcl.array]
68642fb6 7330
2848ad0f
MM
7331 The constant expressions that specify the bounds of the arrays
7332 can be omitted only for the first member of the sequence. */
7333 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
7334 {
b3faacfd 7335 if (name)
2d01edd7 7336 error ("declaration of %qD as multidimensional array must "
0cbd7506
MS
7337 "have bounds for all dimensions except the first",
7338 name);
b3faacfd 7339 else
2d01edd7 7340 error ("multidimensional array must have bounds for all "
0cbd7506 7341 "dimensions except the first");
2848ad0f
MM
7342
7343 return error_mark_node;
7344 }
7345
7346 /* Figure out the index type for the array. */
7347 if (size)
7348 itype = compute_array_index_type (name, size);
7349
7fb213d8
GB
7350 /* [dcl.array]
7351 T is called the array element type; this type shall not be [...] an
7352 abstract class type. */
7353 abstract_virtuals_error (name, type);
7354
2848ad0f
MM
7355 return build_cplus_array_type (type, itype);
7356}
7357
3dbc07b6
MM
7358/* Check that it's OK to declare a function with the indicated TYPE.
7359 SFK indicates the kind of special function (if any) that this
1f84ec23 7360 function is. OPTYPE is the type given in a conversion operator
44d10c10
PB
7361 declaration, or the class type for a constructor/destructor.
7362 Returns the actual return type of the function; that
3dbc07b6
MM
7363 may be different than TYPE if an error occurs, or for certain
7364 special functions. */
7365
7366static tree
11f6b451 7367check_special_function_return_type (special_function_kind sfk,
0cbd7506
MS
7368 tree type,
7369 tree optype)
3dbc07b6
MM
7370{
7371 switch (sfk)
7372 {
7373 case sfk_constructor:
7374 if (type)
33bd39a2 7375 error ("return type specification for constructor invalid");
5362b086 7376
44d10c10
PB
7377 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7378 type = build_pointer_type (optype);
7379 else
7380 type = void_type_node;
3dbc07b6
MM
7381 break;
7382
7383 case sfk_destructor:
7384 if (type)
33bd39a2 7385 error ("return type specification for destructor invalid");
44d10c10 7386 /* We can't use the proper return type here because we run into
77880ae4 7387 problems with ambiguous bases and covariant returns.
44d10c10
PB
7388 Java classes are left unchanged because (void *) isn't a valid
7389 Java type, and we don't want to change the Java ABI. */
7390 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7391 type = build_pointer_type (void_type_node);
7392 else
7393 type = void_type_node;
3dbc07b6
MM
7394 break;
7395
7396 case sfk_conversion:
caba2081
PC
7397 if (type)
7398 error ("return type specified for %<operator %T%>", optype);
3dbc07b6
MM
7399 type = optype;
7400 break;
7401
7402 default:
8dc2b103 7403 gcc_unreachable ();
3dbc07b6
MM
7404 }
7405
7406 return type;
7407}
7408
62e19030
MM
7409/* A variable or data member (whose unqualified name is IDENTIFIER)
7410 has been declared with the indicated TYPE. If the TYPE is not
7411 acceptable, issue an error message and return a type to use for
03fd3f84 7412 error-recovery purposes. */
62e19030
MM
7413
7414tree
7415check_var_type (tree identifier, tree type)
7416{
7417 if (VOID_TYPE_P (type))
7418 {
7419 if (!identifier)
7420 error ("unnamed variable or field declared void");
7421 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
7422 {
7423 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
7424 error ("variable or field %qE declared void", identifier);
7425 }
7426 else
7427 error ("variable or field declared void");
650fcd07 7428 type = error_mark_node;
62e19030 7429 }
c8094d83 7430
62e19030
MM
7431 return type;
7432}
7433
a723baf1
MM
7434/* Given declspecs and a declarator (abstract or otherwise), determine
7435 the name and type of the object declared and construct a DECL node
7436 for it.
8d08fdba 7437
5e32a5cf
GDR
7438 DECLSPECS points to the representation of declaration-specifier
7439 sequence that precedes declarator.
8d08fdba
MS
7440
7441 DECL_CONTEXT says which syntactic context this declaration is in:
7442 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7443 FUNCDEF for a function definition. Like NORMAL but a few different
7444 error messages in each case. Return value may be zero meaning
7445 this definition is too screwy to try to parse.
7446 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
7447 handle member functions (which have FIELD context).
7448 Return value may be zero meaning this definition is too screwy to
7449 try to parse.
7450 PARM for a parameter declaration (either within a function prototype
7451 or before a function body). Make a PARM_DECL, or return void_type_node.
db5ae43f 7452 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
7453 TYPENAME if for a typename (in a cast or sizeof).
7454 Don't make a DECL node; just return the ..._TYPE node.
7455 FIELD for a struct or union field; make a FIELD_DECL.
7456 BITFIELD for a field with specified width.
b87d79e6 7457 INITIALIZED is as for start_decl.
8d08fdba 7458
91d231cb
JM
7459 ATTRLIST is a pointer to the list of attributes, which may be NULL
7460 if there are none; *ATTRLIST may be modified if attributes from inside
7461 the declarator should be applied to the declaration.
b17e2870 7462
a723baf1
MM
7463 When this function is called, scoping variables (such as
7464 CURRENT_CLASS_TYPE) should reflect the scope in which the
7465 declaration occurs, not the scope in which the new declaration will
7466 be placed. For example, on:
8d08fdba 7467
a723baf1 7468 void S::f() { ... }
8d08fdba 7469
a723baf1 7470 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
344f237b
LM
7471 should not be `S'.
7472
7473 Returns a DECL (if a declarator is present), a TYPE (if there is no
7474 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
7475 error occurs. */
8d08fdba 7476
8d08fdba 7477tree
058b15c1 7478grokdeclarator (const cp_declarator *declarator,
1ff3c076 7479 const cp_decl_specifier_seq *declspecs,
0cbd7506
MS
7480 enum decl_context decl_context,
7481 int initialized,
7482 tree* attrlist)
8d08fdba 7483{
8d08fdba
MS
7484 tree type = NULL_TREE;
7485 int longlong = 0;
db5ae43f 7486 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
7487 int explicit_int = 0;
7488 int explicit_char = 0;
37c46b43 7489 int defaulted_int = 0;
d1c78882 7490 tree dependent_name = NULL_TREE;
caf93cb0 7491
8d08fdba 7492 tree typedef_decl = NULL_TREE;
058b15c1 7493 const char *name = NULL;
8d08fdba 7494 tree typedef_type = NULL_TREE;
357d956e
MM
7495 /* True if this declarator is a function definition. */
7496 bool funcdef_flag = false;
058b15c1 7497 cp_declarator_kind innermost_code = cdk_error;
8d08fdba 7498 int bitfield = 0;
6125f3be
DE
7499#if 0
7500 /* See the code below that used this. */
91d231cb 7501 tree decl_attr = NULL_TREE;
6125f3be 7502#endif
8d08fdba
MS
7503
7504 /* Keep track of what sort of function is being processed
7505 so that we can warn about default return values, or explicit
7506 return values which do not match prescribed defaults. */
3dbc07b6 7507 special_function_kind sfk = sfk_none;
8d08fdba
MS
7508
7509 tree dname = NULL_TREE;
8d08fdba
MS
7510 tree ctor_return_type = NULL_TREE;
7511 enum overload_flags flags = NO_SPECIAL;
e2537f2c
MM
7512 /* cv-qualifiers that apply to the declarator, for a declaration of
7513 a member function. */
7514 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
7515 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
7516 int type_quals;
c11b6f21 7517 tree raises = NULL_TREE;
386b8a85 7518 int template_count = 0;
91d231cb 7519 tree returned_attrs = NULL_TREE;
4546865e 7520 tree parms = NULL_TREE;
058b15c1
MM
7521 const cp_declarator *id_declarator;
7522 /* The unqualified name of the declarator; either an
7523 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
7524 tree unqualified_id;
7525 /* The class type, if any, in which this entity is located,
7526 or NULL_TREE if none. Note that this value may be different from
7527 the current class type; for example if an attempt is made to declare
7528 "A::f" inside "B", this value will be "A". */
7529 tree ctype = current_class_type;
7530 /* The NAMESPACE_DECL for the namespace in which this entity is
7531 located. If an unqualified name is used to declare the entity,
7532 this value will be NULL_TREE, even if the entity is located at
caf93cb0 7533 namespace scope. */
058b15c1 7534 tree in_namespace = NULL_TREE;
1ff3c076
MM
7535 cp_storage_class storage_class;
7536 bool unsigned_p, signed_p, short_p, long_p, thread_p;
2cfe82fe 7537 bool type_was_error_mark_node = false;
5d80a306 7538 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
1891dec4 7539 bool set_no_warning = false;
1ff3c076
MM
7540
7541 signed_p = declspecs->specs[(int)ds_signed];
7542 unsigned_p = declspecs->specs[(int)ds_unsigned];
7543 short_p = declspecs->specs[(int)ds_short];
7544 long_p = declspecs->specs[(int)ds_long];
28c84d63 7545 longlong = declspecs->specs[(int)ds_long] >= 2;
1ff3c076 7546 thread_p = declspecs->specs[(int)ds_thread];
8d08fdba 7547
8d08fdba 7548 if (decl_context == FUNCDEF)
357d956e 7549 funcdef_flag = true, decl_context = NORMAL;
8d08fdba 7550 else if (decl_context == MEMFUNCDEF)
357d956e 7551 funcdef_flag = true, decl_context = FIELD;
8d08fdba
MS
7552 else if (decl_context == BITFIELD)
7553 bitfield = 1, decl_context = FIELD;
7554
b87d79e6
JM
7555 if (initialized > 1)
7556 funcdef_flag = true;
7557
8d08fdba
MS
7558 /* Look inside a declarator for the name being declared
7559 and get it as a string, for an error message. */
caf93cb0
EC
7560 for (id_declarator = declarator;
7561 id_declarator;
058b15c1
MM
7562 id_declarator = id_declarator->declarator)
7563 {
7564 if (id_declarator->kind != cdk_id)
7565 innermost_code = id_declarator->kind;
8d08fdba 7566
058b15c1
MM
7567 switch (id_declarator->kind)
7568 {
7569 case cdk_function:
7570 if (id_declarator->declarator
7571 && id_declarator->declarator->kind == cdk_id)
8d08fdba 7572 {
058b15c1
MM
7573 sfk = id_declarator->declarator->u.id.sfk;
7574 if (sfk == sfk_destructor)
7575 flags = DTOR_FLAG;
51c184be 7576 }
058b15c1 7577 break;
be99da77 7578
058b15c1
MM
7579 case cdk_id:
7580 {
1d786913
MM
7581 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
7582 tree decl = id_declarator->u.id.unqualified_name;
058b15c1
MM
7583 if (!decl)
7584 break;
1d786913 7585 if (qualifying_scope)
8d08fdba 7586 {
2884e22c
MM
7587 if (at_function_scope_p ())
7588 {
7589 /* [dcl.meaning]
7590
7591 A declarator-id shall not be qualified except
7592 for ...
7593
7594 None of the cases are permitted in block
7595 scope. */
7596 if (qualifying_scope == global_namespace)
7597 error ("invalid use of qualified-name %<::%D%>",
7598 decl);
7599 else if (TYPE_P (qualifying_scope))
7600 error ("invalid use of qualified-name %<%T::%D%>",
7601 qualifying_scope, decl);
7602 else
7603 error ("invalid use of qualified-name %<%D::%D%>",
7604 qualifying_scope, decl);
7605 return error_mark_node;
7606 }
7607 else if (TYPE_P (qualifying_scope))
058b15c1 7608 {
1d786913 7609 ctype = qualifying_scope;
058b15c1
MM
7610 if (innermost_code != cdk_function
7611 && current_class_type
caf93cb0 7612 && !UNIQUELY_DERIVED_FROM_P (ctype,
058b15c1
MM
7613 current_class_type))
7614 {
2d01edd7 7615 error ("type %qT is not derived from type %qT",
058b15c1 7616 ctype, current_class_type);
1d786913 7617 return error_mark_node;
058b15c1 7618 }
058b15c1
MM
7619 }
7620 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
7621 in_namespace = qualifying_scope;
058b15c1 7622 }
058b15c1
MM
7623 switch (TREE_CODE (decl))
7624 {
7625 case BIT_NOT_EXPR:
be99da77 7626 {
88e95ee3
MM
7627 tree type;
7628
7629 if (innermost_code != cdk_function)
7630 {
7631 error ("declaration of %qD as non-function", decl);
7632 return error_mark_node;
7633 }
c8094d83 7634 else if (!qualifying_scope
88e95ee3
MM
7635 && !(current_class_type && at_class_scope_p ()))
7636 {
7637 error ("declaration of %qD as non-member", decl);
7638 return error_mark_node;
7639 }
c8094d83 7640
88e95ee3
MM
7641 type = TREE_OPERAND (decl, 0);
7642 name = IDENTIFIER_POINTER (constructor_name (type));
af02935e 7643 dname = decl;
058b15c1
MM
7644 }
7645 break;
633221db 7646
058b15c1
MM
7647 case TEMPLATE_ID_EXPR:
7648 {
7649 tree fns = TREE_OPERAND (decl, 0);
633221db 7650
058b15c1 7651 dname = fns;
058b15c1 7652 if (TREE_CODE (dname) != IDENTIFIER_NODE)
be99da77 7653 {
50bc768d 7654 gcc_assert (is_overloaded_fn (dname));
058b15c1 7655 dname = DECL_NAME (get_first_fn (dname));
be99da77
MS
7656 }
7657 }
058b15c1 7658 /* Fall through. */
be99da77 7659
058b15c1
MM
7660 case IDENTIFIER_NODE:
7661 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7662 dname = decl;
be99da77 7663
058b15c1
MM
7664 if (C_IS_RESERVED_WORD (dname))
7665 {
2d01edd7 7666 error ("declarator-id missing; using reserved word %qD",
058b15c1
MM
7667 dname);
7668 name = IDENTIFIER_POINTER (dname);
7669 }
7670 else if (!IDENTIFIER_TYPENAME_P (dname))
7671 name = IDENTIFIER_POINTER (dname);
7672 else
7673 {
50bc768d 7674 gcc_assert (flags == NO_SPECIAL);
058b15c1
MM
7675 flags = TYPENAME_FLAG;
7676 ctor_return_type = TREE_TYPE (dname);
7677 sfk = sfk_conversion;
7678 if (is_typename_at_global_scope (dname))
7679 name = IDENTIFIER_POINTER (dname);
7680 else
7681 name = "<invalid operator>";
7682 }
7683 break;
7684
058b15c1 7685 default:
8dc2b103 7686 gcc_unreachable ();
058b15c1 7687 }
45537677 7688 break;
b08f991d 7689 }
45537677 7690
b08f991d
SB
7691 case cdk_array:
7692 case cdk_pointer:
7693 case cdk_reference:
7694 case cdk_ptrmem:
7695 break;
2ee366b5 7696
b08f991d
SB
7697 case cdk_error:
7698 return error_mark_node;
058b15c1 7699
b08f991d
SB
7700 default:
7701 gcc_unreachable ();
058b15c1
MM
7702 }
7703 if (id_declarator->kind == cdk_id)
7704 break;
7705 }
8d08fdba 7706
fa6098f8 7707 /* [dcl.fct.edf]
3db45ab5 7708
fa6098f8
MM
7709 The declarator in a function-definition shall have the form
7710 D1 ( parameter-declaration-clause) ... */
058b15c1 7711 if (funcdef_flag && innermost_code != cdk_function)
fa6098f8
MM
7712 {
7713 error ("function definition does not declare parameters");
7714 return error_mark_node;
7715 }
8d08fdba 7716
e1cd6e56 7717 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
058b15c1 7718 && innermost_code != cdk_function
62d1db17 7719 && ! (ctype && !declspecs->any_specifiers_p))
e1cd6e56 7720 {
2d01edd7 7721 error ("declaration of %qD as non-function", dname);
943e3ede 7722 return error_mark_node;
e1cd6e56
MS
7723 }
7724
8d08fdba
MS
7725 /* Anything declared one level down from the top level
7726 must be one of the parameters of a function
7727 (because the body is at least two levels down). */
7728
7729 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7730 by not allowing C++ class definitions to specify their parameters
7731 with xdecls (must be spec.d in the parmlist).
7732
7733 Since we now wait to push a class scope until we are sure that
7734 we are in a legitimate method context, we must set oldcname
a9aedbc2
MS
7735 explicitly (since current_class_name is not yet alive).
7736
7737 We also want to avoid calling this a PARM if it is in a namespace. */
8d08fdba 7738
9188c363 7739 if (decl_context == NORMAL && !toplevel_bindings_p ())
a9aedbc2 7740 {
e2500fed 7741 struct cp_binding_level *b = current_binding_level;
ff955512 7742 current_binding_level = b->level_chain;
a9aedbc2
MS
7743 if (current_binding_level != 0 && toplevel_bindings_p ())
7744 decl_context = PARM;
ff955512 7745 current_binding_level = b;
a9aedbc2 7746 }
8d08fdba 7747
34fc957d
NS
7748 if (name == NULL)
7749 name = decl_context == PARM ? "parameter" : "type name";
68642fb6 7750
62d1db17
MM
7751 /* If there were multiple types specified in the decl-specifier-seq,
7752 issue an error message. */
7753 if (declspecs->multiple_types_p)
32273f9f
LM
7754 {
7755 error ("two or more data types in declaration of %qs", name);
7756 return error_mark_node;
7757 }
7758
9b70c6b0
PC
7759 if (declspecs->conflicting_specifiers_p)
7760 {
7761 error ("conflicting specifiers in declaration of %qs", name);
7762 return error_mark_node;
7763 }
7764
62d1db17
MM
7765 /* Extract the basic type from the decl-specifier-seq. */
7766 type = declspecs->type;
7767 if (type == error_mark_node)
2cfe82fe
ZW
7768 {
7769 type = NULL_TREE;
7770 type_was_error_mark_node = true;
7771 }
62d1db17
MM
7772 /* If the entire declaration is itself tagged as deprecated then
7773 suppress reports of deprecated items. */
7774 if (type && TREE_DEPRECATED (type)
7775 && deprecated_state != DEPRECATED_SUPPRESS)
7776 warn_deprecated_use (type);
7777 if (type && TREE_CODE (type) == TYPE_DECL)
8d08fdba 7778 {
62d1db17
MM
7779 typedef_decl = type;
7780 type = TREE_TYPE (typedef_decl);
823dd937
JM
7781 if (TREE_DEPRECATED (type)
7782 && DECL_ARTIFICIAL (typedef_decl)
7783 && deprecated_state != DEPRECATED_SUPPRESS)
7784 warn_deprecated_use (type);
62d1db17
MM
7785 }
7786 /* No type at all: default to `int', and set DEFAULTED_INT
7787 because it was not a user-defined typedef. */
1ff3c076 7788 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
62d1db17
MM
7789 {
7790 /* These imply 'int'. */
7791 type = integer_type_node;
7792 defaulted_int = 1;
7793 }
7794 /* Gather flags. */
7795 explicit_int = declspecs->explicit_int_p;
7796 explicit_char = declspecs->explicit_char_p;
7a1f3f5f 7797
8d6e459d
NS
7798#if 0
7799 /* See the code below that used this. */
7800 if (typedef_decl)
7801 decl_attr = DECL_ATTRIBUTES (typedef_decl);
7802#endif
8d08fdba
MS
7803 typedef_type = type;
7804
a3203465 7805
44d10c10
PB
7806 if (sfk != sfk_conversion)
7807 ctor_return_type = ctype;
7808
3dbc07b6
MM
7809 if (sfk != sfk_none)
7810 type = check_special_function_return_type (sfk, type,
3dbc07b6
MM
7811 ctor_return_type);
7812 else if (type == NULL_TREE)
8d08fdba 7813 {
3dbc07b6
MM
7814 int is_main;
7815
8d08fdba 7816 explicit_int = -1;
3dbc07b6 7817
0fd0b7ee
JM
7818 /* We handle `main' specially here, because 'main () { }' is so
7819 common. With no options, it is allowed. With -Wreturn-type,
7820 it is a warning. It is only an error with -pedantic-errors. */
3dbc07b6 7821 is_main = (funcdef_flag
7437519c 7822 && dname && MAIN_NAME_P (dname)
3dbc07b6
MM
7823 && ctype == NULL_TREE
7824 && in_namespace == NULL_TREE
7825 && current_namespace == global_namespace);
7826
2cfe82fe
ZW
7827 if (type_was_error_mark_node)
7828 /* We've already issued an error, don't complain more. */;
7829 else if (in_system_header || flag_ms_extensions)
3dbc07b6 7830 /* Allow it, sigh. */;
37ec60ed 7831 else if (! is_main)
cbe5f3b3 7832 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
37ec60ed 7833 else if (pedantic)
509c9d60 7834 pedwarn (input_location, OPT_pedantic,
fcf73884 7835 "ISO C++ forbids declaration of %qs with no type", name);
b10fc6f5
GDR
7836 else
7837 warning (OPT_Wreturn_type,
7838 "ISO C++ forbids declaration of %qs with no type", name);
41eff652 7839
3dbc07b6 7840 type = integer_type_node;
51c184be 7841 }
caf93cb0 7842
8d08fdba
MS
7843 ctype = NULL_TREE;
7844
7845 /* Now process the modifiers that were specified
7846 and check for invalid combinations. */
7847
7848 /* Long double is a special combination. */
3cc189f5 7849 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8d08fdba 7850 {
1ff3c076 7851 long_p = false;
68642fb6 7852 type = build_qualified_type (long_double_type_node,
89d684bb 7853 cp_type_quals (type));
8d08fdba
MS
7854 }
7855
7856 /* Check all other uses of type modifiers. */
7857
1ff3c076 7858 if (unsigned_p || signed_p || long_p || short_p)
8d08fdba
MS
7859 {
7860 int ok = 0;
7861
3cc189f5
VR
7862 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
7863 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
1ff3c076 7864 else if (signed_p && unsigned_p)
3cc189f5
VR
7865 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
7866 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
7867 error ("%<long long%> invalid for %qs", name);
7868 else if (long_p && TREE_CODE (type) == REAL_TYPE)
7869 error ("%<long%> invalid for %qs", name);
7870 else if (short_p && TREE_CODE (type) == REAL_TYPE)
7871 error ("%<short%> invalid for %qs", name);
5d48268f
VR
7872 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
7873 error ("%<long%> or %<short%> invalid for %qs", name);
3cc189f5
VR
7874 else if ((long_p || short_p) && explicit_char)
7875 error ("%<long%> or %<short%> specified with char for %qs", name);
7876 else if (long_p && short_p)
7877 error ("%<long%> and %<short%> specified together for %qs", name);
b6baa67d
KVH
7878 else if (type == char16_type_node || type == char32_type_node)
7879 {
7880 if (signed_p || unsigned_p)
7881 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7882 else if (short_p || long_p)
7883 error ("%<short%> or %<long%> invalid for %qs", name);
7884 }
8d08fdba
MS
7885 else
7886 {
7887 ok = 1;
37c46b43 7888 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8d08fdba 7889 {
509c9d60 7890 pedwarn (input_location, OPT_pedantic,
fcf73884 7891 "long, short, signed or unsigned used invalidly for %qs",
8d08fdba
MS
7892 name);
7893 if (flag_pedantic_errors)
7894 ok = 0;
7895 }
7896 }
7897
7898 /* Discard the type modifiers if they are invalid. */
7899 if (! ok)
7900 {
1ff3c076
MM
7901 unsigned_p = false;
7902 signed_p = false;
7903 long_p = false;
7904 short_p = false;
8d08fdba
MS
7905 longlong = 0;
7906 }
7907 }
7908
7909 /* Decide whether an integer type is signed or not.
7910 Optionally treat bitfields as signed by default. */
1ff3c076 7911 if (unsigned_p
b89c5a7b
MM
7912 /* [class.bit]
7913
7914 It is implementation-defined whether a plain (neither
7915 explicitly signed or unsigned) char, short, int, or long
7916 bit-field is signed or unsigned.
68642fb6 7917
b89c5a7b
MM
7918 Naturally, we extend this to long long as well. Note that
7919 this does not include wchar_t. */
7920 || (bitfield && !flag_signed_bitfields
1ff3c076 7921 && !signed_p
b89c5a7b
MM
7922 /* A typedef for plain `int' without `signed' can be
7923 controlled just like plain `int', but a typedef for
7924 `signed int' cannot be so controlled. */
68642fb6 7925 && !(typedef_decl
29bbeb1c 7926 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
b38a05d0 7927 && TREE_CODE (type) == INTEGER_TYPE
29bbeb1c 7928 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8d08fdba
MS
7929 {
7930 if (longlong)
7931 type = long_long_unsigned_type_node;
1ff3c076 7932 else if (long_p)
8d08fdba 7933 type = long_unsigned_type_node;
1ff3c076 7934 else if (short_p)
8d08fdba
MS
7935 type = short_unsigned_type_node;
7936 else if (type == char_type_node)
7937 type = unsigned_char_type_node;
7938 else if (typedef_decl)
ca5ba2a3 7939 type = unsigned_type_for (type);
8d08fdba
MS
7940 else
7941 type = unsigned_type_node;
7942 }
1ff3c076 7943 else if (signed_p && type == char_type_node)
8d08fdba
MS
7944 type = signed_char_type_node;
7945 else if (longlong)
7946 type = long_long_integer_type_node;
1ff3c076 7947 else if (long_p)
8d08fdba 7948 type = long_integer_type_node;
1ff3c076 7949 else if (short_p)
8d08fdba
MS
7950 type = short_integer_type_node;
7951
62d1db17 7952 if (declspecs->specs[(int)ds_complex])
37c46b43 7953 {
1ff3c076 7954 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
2d01edd7 7955 error ("complex invalid for %qs", name);
37c46b43
MS
7956 /* If we just have "complex", it is equivalent to
7957 "complex double", but if any modifiers at all are specified it is
7958 the complex form of TYPE. E.g, "complex short" is
7959 "complex short int". */
7960
1ff3c076
MM
7961 else if (defaulted_int && ! longlong
7962 && ! (long_p || short_p || signed_p || unsigned_p))
37c46b43
MS
7963 type = complex_double_type_node;
7964 else if (type == integer_type_node)
7965 type = complex_integer_type_node;
7966 else if (type == float_type_node)
7967 type = complex_float_type_node;
7968 else if (type == double_type_node)
7969 type = complex_double_type_node;
7970 else if (type == long_double_type_node)
7971 type = complex_long_double_type_node;
7972 else
7973 type = build_complex_type (type);
7974 }
7975
4f2b0fb2 7976 type_quals = TYPE_UNQUALIFIED;
62d1db17 7977 if (declspecs->specs[(int)ds_const])
4f2b0fb2 7978 type_quals |= TYPE_QUAL_CONST;
62d1db17 7979 if (declspecs->specs[(int)ds_volatile])
4f2b0fb2 7980 type_quals |= TYPE_QUAL_VOLATILE;
62d1db17 7981 if (declspecs->specs[(int)ds_restrict])
4f2b0fb2
NS
7982 type_quals |= TYPE_QUAL_RESTRICT;
7983 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
2d01edd7 7984 error ("qualifiers are not allowed on declaration of %<operator %T%>",
0cbd7506 7985 ctor_return_type);
3ac3d9ea 7986
c8094d83 7987 if (TREE_CODE (type) == FUNCTION_TYPE
9804209d
DG
7988 && type_quals != TYPE_UNQUALIFIED)
7989 {
7990 /* This was an error in C++98 (cv-qualifiers cannot be added to
0cbd7506
MS
7991 a function type), but DR 295 makes the code well-formed by
7992 dropping the extra qualifiers. */
9804209d 7993 if (pedantic)
0cbd7506
MS
7994 {
7995 tree bad_type = build_qualified_type (type, type_quals);
509c9d60 7996 pedwarn (input_location, OPT_pedantic,
fcf73884 7997 "ignoring %qV qualifiers added to function type %qT",
0cbd7506
MS
7998 bad_type, type);
7999 }
9804209d
DG
8000 type_quals = TYPE_UNQUALIFIED;
8001 }
4f2b0fb2
NS
8002 type_quals |= cp_type_quals (type);
8003 type = cp_build_qualified_type_real
8004 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
23fca1f5 8005 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
4f2b0fb2
NS
8006 /* We might have ignored or rejected some of the qualifiers. */
8007 type_quals = cp_type_quals (type);
caf93cb0 8008
8d08fdba 8009 staticp = 0;
62d1db17
MM
8010 inlinep = !! declspecs->specs[(int)ds_inline];
8011 virtualp = !! declspecs->specs[(int)ds_virtual];
8012 explicitp = !! declspecs->specs[(int)ds_explicit];
8d08fdba 8013
1ff3c076
MM
8014 storage_class = declspecs->storage_class;
8015 if (storage_class == sc_static)
8d08fdba
MS
8016 staticp = 1 + (decl_context == FIELD);
8017
8018 if (virtualp && staticp == 2)
8019 {
2d01edd7 8020 error ("member %qD cannot be declared both virtual and static", dname);
7e1e0765 8021 storage_class = sc_none;
8d08fdba
MS
8022 staticp = 0;
8023 }
62d1db17 8024 friendp = !! declspecs->specs[(int)ds_friend];
8d08fdba 8025
d1c78882 8026 if (dependent_name && !friendp)
d5614afb 8027 {
d1c78882 8028 error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
13dbe691 8029 return error_mark_node;
d5614afb 8030 }
8d08fdba 8031
62d1db17
MM
8032 /* Issue errors about use of storage classes for parameters. */
8033 if (decl_context == PARM)
8d08fdba 8034 {
62d1db17 8035 if (declspecs->specs[(int)ds_typedef])
709f9dcf
VR
8036 {
8037 error ("typedef declaration invalid in parameter declaration");
8038 return error_mark_node;
8039 }
1ff3c076
MM
8040 else if (storage_class == sc_static
8041 || storage_class == sc_extern
8042 || thread_p)
8251199e 8043 error ("storage class specifiers invalid in parameter declarations");
8d08fdba
MS
8044 }
8045
8046 /* Give error if `virtual' is used outside of class declaration. */
b7484fbe
MS
8047 if (virtualp
8048 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba 8049 {
bcac2b89 8050 error ("%<virtual%> outside class declaration");
8d08fdba
MS
8051 virtualp = 0;
8052 }
8d08fdba
MS
8053
8054 /* Static anonymous unions are dealt with here. */
8055 if (staticp && decl_context == TYPENAME
62d1db17
MM
8056 && declspecs->type
8057 && ANON_AGGR_TYPE_P (declspecs->type))
8d08fdba
MS
8058 decl_context = FIELD;
8059
8d08fdba
MS
8060 /* Warn about storage classes that are invalid for certain
8061 kinds of declarations (parameters, typenames, etc.). */
3e66d096
JJ
8062 if (thread_p
8063 && ((storage_class
8064 && storage_class != sc_extern
8065 && storage_class != sc_static)
8066 || declspecs->specs[(int)ds_typedef]))
8067 {
8068 error ("multiple storage classes in declaration of %qs", name);
8069 thread_p = false;
8070 }
9b70c6b0
PC
8071 if (decl_context != NORMAL
8072 && ((storage_class != sc_none
8073 && storage_class != sc_mutable)
8074 || thread_p))
8d08fdba 8075 {
db5ae43f 8076 if ((decl_context == PARM || decl_context == CATCHPARM)
1ff3c076
MM
8077 && (storage_class == sc_register
8078 || storage_class == sc_auto))
8d08fdba 8079 ;
62d1db17 8080 else if (declspecs->specs[(int)ds_typedef])
fc378698 8081 ;
8d08fdba 8082 else if (decl_context == FIELD
f4f206f4 8083 /* C++ allows static class elements. */
1ff3c076 8084 && storage_class == sc_static)
d363e7bf
AJ
8085 /* C++ also allows inlines and signed and unsigned elements,
8086 but in those cases we don't come in here. */
8d08fdba
MS
8087 ;
8088 else
8089 {
8090 if (decl_context == FIELD)
389c6c8b 8091 error ("storage class specified for %qs", name);
8d08fdba 8092 else
b9d12519
KG
8093 {
8094 if (decl_context == PARM || decl_context == CATCHPARM)
2d01edd7 8095 error ("storage class specified for parameter %qs", name);
b9d12519
KG
8096 else
8097 error ("storage class specified for typename");
8098 }
1ff3c076
MM
8099 if (storage_class == sc_register
8100 || storage_class == sc_auto
8101 || storage_class == sc_extern
8102 || thread_p)
8103 storage_class = sc_none;
8d08fdba
MS
8104 }
8105 }
1ff3c076 8106 else if (storage_class == sc_extern && funcdef_flag
a9aedbc2 8107 && ! toplevel_bindings_p ())
2d01edd7 8108 error ("nested function %qs declared %<extern%>", name);
a9aedbc2 8109 else if (toplevel_bindings_p ())
8d08fdba 8110 {
1ff3c076 8111 if (storage_class == sc_auto)
2d01edd7 8112 error ("top-level declaration of %qs specifies %<auto%>", name);
8d08fdba 8113 }
1ff3c076
MM
8114 else if (thread_p
8115 && storage_class != sc_extern
8116 && storage_class != sc_static)
7a1f3f5f 8117 {
2d01edd7 8118 error ("function-scope %qs implicitly auto and declared %<__thread%>",
7a1f3f5f 8119 name);
1ff3c076 8120 thread_p = false;
7a1f3f5f 8121 }
8d08fdba 8122
1ff3c076 8123 if (storage_class && friendp)
ff7437d0
SM
8124 {
8125 error ("storage class specifiers invalid in friend function declarations");
8126 storage_class = sc_none;
8127 staticp = 0;
8128 }
909e536a 8129
058b15c1
MM
8130 if (!id_declarator)
8131 unqualified_id = NULL_TREE;
8132 else
8d08fdba 8133 {
1d786913 8134 unqualified_id = id_declarator->u.id.unqualified_name;
058b15c1 8135 switch (TREE_CODE (unqualified_id))
8d08fdba 8136 {
058b15c1 8137 case BIT_NOT_EXPR:
caf93cb0 8138 unqualified_id
058b15c1
MM
8139 = constructor_name (TREE_OPERAND (unqualified_id, 0));
8140 break;
caf93cb0 8141
058b15c1
MM
8142 case IDENTIFIER_NODE:
8143 case TEMPLATE_ID_EXPR:
52fbc847 8144 break;
caf93cb0 8145
058b15c1 8146 default:
8dc2b103 8147 gcc_unreachable ();
058b15c1
MM
8148 }
8149 }
52fbc847 8150
058b15c1
MM
8151 /* Determine the type of the entity declared by recurring on the
8152 declarator. */
f4f18103 8153 for (; declarator; declarator = declarator->declarator)
058b15c1
MM
8154 {
8155 const cp_declarator *inner_declarator;
8156 tree attrs;
8d08fdba 8157
058b15c1
MM
8158 if (type == error_mark_node)
8159 return error_mark_node;
c1b177ec 8160
058b15c1
MM
8161 attrs = declarator->attributes;
8162 if (attrs)
8163 {
8164 int attr_flags;
caf93cb0 8165
058b15c1
MM
8166 attr_flags = 0;
8167 if (declarator == NULL || declarator->kind == cdk_id)
8168 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8169 if (declarator->kind == cdk_function)
8170 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8171 if (declarator->kind == cdk_array)
8172 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8173 returned_attrs = decl_attributes (&type,
8174 chainon (returned_attrs, attrs),
8175 attr_flags);
8176 }
8177
f4f18103
MM
8178 if (declarator->kind == cdk_id)
8179 break;
8180
8181 inner_declarator = declarator->declarator;
8182
058b15c1
MM
8183 switch (declarator->kind)
8184 {
8185 case cdk_array:
caf93cb0 8186 type = create_array_type_for_decl (dname, type,
058b15c1 8187 declarator->u.array.bounds);
8d08fdba
MS
8188 break;
8189
058b15c1 8190 case cdk_function:
8d08fdba
MS
8191 {
8192 tree arg_types;
f376e137 8193 int funcdecl_p;
8d08fdba
MS
8194
8195 /* Declaring a function type.
8196 Make sure we have a valid type for the function to return. */
8d08fdba 8197
1891dec4
DM
8198 if (type_quals != TYPE_UNQUALIFIED)
8199 {
8200 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
5db2e9ca 8201 warning (OPT_Wignored_qualifiers,
1891dec4
DM
8202 "type qualifiers ignored on function return type");
8203 /* We now know that the TYPE_QUALS don't apply to the
8204 decl, but to its return type. */
8205 type_quals = TYPE_UNQUALIFIED;
8206 set_no_warning = true;
8207 }
8d08fdba 8208
e3276457 8209 /* Error about some types functions can't return. */
8d08fdba
MS
8210
8211 if (TREE_CODE (type) == FUNCTION_TYPE)
8212 {
2d01edd7 8213 error ("%qs declared as function returning a function", name);
e3276457 8214 return error_mark_node;
8d08fdba
MS
8215 }
8216 if (TREE_CODE (type) == ARRAY_TYPE)
8217 {
2d01edd7 8218 error ("%qs declared as function returning an array", name);
e3276457 8219 return error_mark_node;
8d08fdba
MS
8220 }
8221
b7484fbe 8222 /* Pick up type qualifiers which should be applied to `this'. */
e2537f2c 8223 memfn_quals = declarator->u.function.qualifiers;
b7484fbe 8224
c11b6f21 8225 /* Pick up the exception specifications. */
058b15c1 8226 raises = declarator->u.function.exception_specification;
c11b6f21 8227
f57ca1ea
JM
8228 /* Handle a late-specified return type. */
8229 type = splice_late_return_type
8230 (type, declarator->u.function.late_return_type);
8231 if (type == error_mark_node)
8232 return error_mark_node;
8233
f376e137
MS
8234 /* Say it's a definition only for the CALL_EXPR
8235 closest to the identifier. */
058b15c1 8236 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
68642fb6 8237
8d08fdba
MS
8238 if (ctype == NULL_TREE
8239 && decl_context == FIELD
f376e137 8240 && funcdecl_p
8d08fdba
MS
8241 && (friendp == 0 || dname == current_class_name))
8242 ctype = current_class_type;
8243
058b15c1
MM
8244 if (ctype && (sfk == sfk_constructor
8245 || sfk == sfk_destructor))
8d08fdba
MS
8246 {
8247 /* We are within a class's scope. If our declarator name
8248 is the same as the class name, and we are defining
8249 a function, then it is a constructor/destructor, and
8250 therefore returns a void type. */
3db45ab5 8251
e2537f2c
MM
8252 /* ISO C++ 12.4/2. A destructor may not be declared
8253 const or volatile. A destructor may not be
8254 static.
3db45ab5 8255
e2537f2c
MM
8256 ISO C++ 12.1. A constructor may not be declared
8257 const or volatile. A constructor may not be
8258 virtual. A constructor may not be static. */
3db45ab5 8259 if (staticp == 2)
e2537f2c
MM
8260 error ((flags == DTOR_FLAG)
8261 ? "destructor cannot be static member function"
8262 : "constructor cannot be static member function");
8263 if (memfn_quals)
8d08fdba 8264 {
e2537f2c
MM
8265 error ((flags == DTOR_FLAG)
8266 ? "destructors may not be cv-qualified"
8267 : "constructors may not be cv-qualified");
8268 memfn_quals = TYPE_UNQUALIFIED;
8d08fdba 8269 }
e2537f2c
MM
8270
8271 if (decl_context == FIELD
8272 && !member_function_or_else (ctype,
8273 current_class_type,
8274 flags))
13dbe691 8275 return error_mark_node;
e2537f2c
MM
8276
8277 if (flags != DTOR_FLAG)
8d08fdba 8278 {
e2537f2c 8279 /* It's a constructor. */
db5ae43f
MS
8280 if (explicitp == 1)
8281 explicitp = 2;
8d08fdba
MS
8282 if (virtualp)
8283 {
cbe5f3b3 8284 permerror (input_location, "constructors cannot be declared virtual");
8d08fdba
MS
8285 virtualp = 0;
8286 }
7137605e
MM
8287 if (decl_context == FIELD
8288 && sfk != sfk_constructor)
13dbe691 8289 return error_mark_node;
8d08fdba
MS
8290 }
8291 if (decl_context == FIELD)
8292 staticp = 0;
8293 }
b7484fbe 8294 else if (friendp)
8d08fdba 8295 {
b7484fbe 8296 if (initialized)
2d01edd7 8297 error ("can't initialize friend function %qs", name);
b7484fbe
MS
8298 if (virtualp)
8299 {
8300 /* Cannot be both friend and virtual. */
8251199e 8301 error ("virtual functions cannot be friends");
b7484fbe
MS
8302 friendp = 0;
8303 }
28cbf42c 8304 if (decl_context == NORMAL)
8251199e 8305 error ("friend declaration not in class definition");
28cbf42c 8306 if (current_function_decl && funcdef_flag)
2d01edd7 8307 error ("can't define friend function %qs in a local "
0cbd7506
MS
8308 "class definition",
8309 name);
8d08fdba
MS
8310 }
8311
caf93cb0 8312 arg_types = grokparms (declarator->u.function.parameters,
058b15c1 8313 &parms);
8d08fdba 8314
058b15c1
MM
8315 if (inner_declarator
8316 && inner_declarator->kind == cdk_id
8317 && inner_declarator->u.id.sfk == sfk_destructor
8318 && arg_types != void_list_node)
8d08fdba 8319 {
058b15c1
MM
8320 error ("destructors may not have parameters");
8321 arg_types = void_list_node;
8322 parms = NULL_TREE;
8d08fdba 8323 }
caf93cb0 8324
d22c8596 8325 type = build_function_type (type, arg_types);
8d08fdba
MS
8326 }
8327 break;
8328
058b15c1
MM
8329 case cdk_pointer:
8330 case cdk_reference:
8331 case cdk_ptrmem:
8d08fdba
MS
8332 /* Filter out pointers-to-references and references-to-references.
8333 We can get these if a TYPE_DECL is used. */
8334
8335 if (TREE_CODE (type) == REFERENCE_TYPE)
8336 {
8af2fec4
RY
8337 if (declarator->kind != cdk_reference)
8338 {
8339 error ("cannot declare pointer to %q#T", type);
8340 type = TREE_TYPE (type);
8341 }
8342
8343 /* In C++0x, we allow reference to reference declarations
8344 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
8345 and template type arguments [14.3.1/4 temp.arg.type]. The
8346 check for direct reference to reference declarations, which
8347 are still forbidden, occurs below. Reasoning behind the change
8348 can be found in DR106, DR540, and the rvalue reference
8349 proposals. */
c1ae8be5 8350 else if (cxx_dialect == cxx98)
8af2fec4
RY
8351 {
8352 error ("cannot declare reference to %q#T", type);
8353 type = TREE_TYPE (type);
8354 }
a5894242 8355 }
058b15c1
MM
8356 else if (VOID_TYPE_P (type))
8357 {
8358 if (declarator->kind == cdk_reference)
2d01edd7 8359 error ("cannot declare reference to %q#T", type);
058b15c1 8360 else if (declarator->kind == cdk_ptrmem)
2d01edd7 8361 error ("cannot declare pointer to %q#T member", type);
058b15c1 8362 }
61a127b3 8363
91063b51
MM
8364 /* We now know that the TYPE_QUALS don't apply to the decl,
8365 but to the target of the pointer. */
8366 type_quals = TYPE_UNQUALIFIED;
8d08fdba 8367
058b15c1 8368 if (declarator->kind == cdk_ptrmem
1b021ff4
JJ
8369 && (TREE_CODE (type) == FUNCTION_TYPE
8370 || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
058b15c1 8371 {
e2537f2c 8372 memfn_quals |= cp_type_quals (type);
3db45ab5 8373 type = build_memfn_type (type,
e2537f2c
MM
8374 declarator->u.pointer.class_type,
8375 memfn_quals);
8376 memfn_quals = TYPE_UNQUALIFIED;
058b15c1
MM
8377 }
8378
8379 if (declarator->kind == cdk_reference)
8d08fdba 8380 {
8af2fec4
RY
8381 /* In C++0x, the type we are creating a reference to might be
8382 a typedef which is itself a reference type. In that case,
8383 we follow the reference collapsing rules in
8384 [7.1.3/8 dcl.typedef] to create the final reference type:
8385
8386 "If a typedef TD names a type that is a reference to a type
8387 T, an attempt to create the type 'lvalue reference to cv TD'
8388 creates the type 'lvalue reference to T,' while an attempt
8389 to create the type "rvalue reference to cv TD' creates the
8390 type TD."
8391 */
dd29188b 8392 if (!VOID_TYPE_P (type))
8af2fec4
RY
8393 type = cp_build_reference_type
8394 ((TREE_CODE (type) == REFERENCE_TYPE
8395 ? TREE_TYPE (type) : type),
8396 (declarator->u.reference.rvalue_ref
8397 && (TREE_CODE(type) != REFERENCE_TYPE
8398 || TYPE_REF_IS_RVALUE (type))));
8399
8400 /* In C++0x, we need this check for direct reference to
8401 reference declarations, which are forbidden by
8402 [8.3.2/5 dcl.ref]. Reference to reference declarations
8403 are only allowed indirectly through typedefs and template
8404 type arguments. Example:
8405
8406 void foo(int & &); // invalid ref-to-ref decl
8407
8408 typedef int & int_ref;
8409 void foo(int_ref &); // valid ref-to-ref decl
8410 */
8411 if (inner_declarator && inner_declarator->kind == cdk_reference)
8412 error ("cannot declare reference to %q#T, which is not "
8413 "a typedef or a template type argument", type);
8d08fdba
MS
8414 }
8415 else if (TREE_CODE (type) == METHOD_TYPE)
d8f8dca1 8416 type = build_ptrmemfunc_type (build_pointer_type (type));
058b15c1 8417 else if (declarator->kind == cdk_ptrmem)
f4ed7d21 8418 {
63c9a190
MM
8419 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
8420 != NAMESPACE_DECL);
8421 if (declarator->u.pointer.class_type == error_mark_node)
4230cec2
NS
8422 /* We will already have complained. */
8423 type = error_mark_node;
f4ed7d21
NS
8424 else
8425 type = build_ptrmem_type (declarator->u.pointer.class_type,
8426 type);
8427 }
8d08fdba
MS
8428 else
8429 type = build_pointer_type (type);
8430
8431 /* Process a list of type modifier keywords (such as
8432 const or volatile) that were given inside the `*' or `&'. */
8433
058b15c1 8434 if (declarator->u.pointer.qualifiers)
8d08fdba 8435 {
caf93cb0
EC
8436 type
8437 = cp_build_qualified_type (type,
3c01e5df 8438 declarator->u.pointer.qualifiers);
4f2b0fb2 8439 type_quals = cp_type_quals (type);
8d08fdba 8440 }
8d08fdba
MS
8441 ctype = NULL_TREE;
8442 break;
8443
058b15c1
MM
8444 case cdk_error:
8445 break;
8d08fdba 8446
058b15c1 8447 default:
8dc2b103 8448 gcc_unreachable ();
058b15c1
MM
8449 }
8450 }
caf93cb0 8451
058b15c1
MM
8452 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
8453 && TREE_CODE (type) != FUNCTION_TYPE
8454 && TREE_CODE (type) != METHOD_TYPE)
8455 {
2d01edd7 8456 error ("template-id %qD used as a declarator",
058b15c1
MM
8457 unqualified_id);
8458 unqualified_id = dname;
8459 }
386b8a85 8460
9c12301f
MM
8461 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
8462 qualified with a class-name, turn it into a METHOD_TYPE, unless
8463 we know that the function is static. We take advantage of this
8464 opportunity to do other processing that pertains to entities
8465 explicitly declared to be class members. Note that if DECLARATOR
8466 is non-NULL, we know it is a cdk_id declarator; otherwise, we
8467 would not have exited the loop above. */
caf93cb0 8468 if (declarator
1d786913
MM
8469 && declarator->u.id.qualifying_scope
8470 && TYPE_P (declarator->u.id.qualifying_scope))
058b15c1
MM
8471 {
8472 tree t;
8d08fdba 8473
1d786913
MM
8474 ctype = declarator->u.id.qualifying_scope;
8475 ctype = TYPE_MAIN_VARIANT (ctype);
058b15c1
MM
8476 t = ctype;
8477 while (t != NULL_TREE && CLASS_TYPE_P (t))
8478 {
8479 /* You're supposed to have one `template <...>' for every
8480 template class, but you don't need one for a full
8481 specialization. For example:
8d08fdba 8482
058b15c1
MM
8483 template <class T> struct S{};
8484 template <> struct S<int> { void f(); };
8485 void S<int>::f () {}
28cbf42c 8486
058b15c1
MM
8487 is correct; there shouldn't be a `template <>' for the
8488 definition of `S<int>::f'. */
f0d60e22
MM
8489 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
8490 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
8491 /* T is an explicit (not partial) specialization. All
8492 containing classes must therefore also be explicitly
8493 specialized. */
8494 break;
8495 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
058b15c1
MM
8496 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
8497 template_count += 1;
28cbf42c 8498
058b15c1
MM
8499 t = TYPE_MAIN_DECL (t);
8500 t = DECL_CONTEXT (t);
8501 }
8d08fdba 8502
058b15c1 8503 if (ctype == current_class_type)
59e7c84c
VR
8504 {
8505 if (friendp)
b46ce77f 8506 {
cbe5f3b3 8507 permerror (input_location, "member functions are implicitly friends of their class");
b46ce77f
SM
8508 friendp = 0;
8509 }
59e7c84c 8510 else
cbe5f3b3 8511 permerror (declarator->id_loc,
7e99f74b
MLI
8512 "extra qualification %<%T::%> on member %qs",
8513 ctype, name);
59e7c84c 8514 }
fa6098f8
MM
8515 else if (/* If the qualifying type is already complete, then we
8516 can skip the following checks. */
8517 !COMPLETE_TYPE_P (ctype)
cc328145
MM
8518 && (/* If the function is being defined, then
8519 qualifying type must certainly be complete. */
3db45ab5 8520 funcdef_flag
cc328145
MM
8521 /* A friend declaration of "T::f" is OK, even if
8522 "T" is a template parameter. But, if this
8523 function is not a friend, the qualifying type
8524 must be a class. */
8525 || (!friendp && !CLASS_TYPE_P (ctype))
8526 /* For a declaration, the type need not be
8527 complete, if either it is dependent (since there
8528 is no meaningful definition of complete in that
8529 case) or the qualifying class is currently being
8530 defined. */
fa6098f8
MM
8531 || !(dependent_type_p (ctype)
8532 || currently_open_class (ctype)))
9f9a713e 8533 /* Check that the qualifying type is complete. */
fa6098f8
MM
8534 && !complete_type_or_else (ctype, NULL_TREE))
8535 return error_mark_node;
058b15c1
MM
8536 else if (TREE_CODE (type) == FUNCTION_TYPE)
8537 {
1d786913 8538 tree sname = declarator->u.id.unqualified_name;
50ad9642 8539
357d956e
MM
8540 if (current_class_type
8541 && (!friendp || funcdef_flag))
8542 {
8543 error (funcdef_flag
8544 ? "cannot define member function %<%T::%s%> within %<%T%>"
8545 : "cannot declare member function %<%T::%s%> within %<%T%>",
8546 ctype, name, current_class_type);
8547 return error_mark_node;
8548 }
8549
058b15c1
MM
8550 if (TREE_CODE (sname) == IDENTIFIER_NODE
8551 && NEW_DELETE_OPNAME_P (sname))
8552 /* Overloaded operator new and operator delete
8553 are always static functions. */
8554 ;
058b15c1 8555 else
e2537f2c 8556 type = build_memfn_type (type, ctype, memfn_quals);
058b15c1 8557 }
62d1db17 8558 else if (declspecs->specs[(int)ds_typedef]
fa6098f8 8559 && current_class_type)
058b15c1 8560 {
fa6098f8
MM
8561 error ("cannot declare member %<%T::%s%> within %qT",
8562 ctype, name, current_class_type);
058b15c1 8563 return error_mark_node;
8d08fdba
MS
8564 }
8565 }
8566
9c12301f
MM
8567 /* Now TYPE has the actual type. */
8568
91d231cb 8569 if (returned_attrs)
1eab9b56 8570 {
91d231cb
JM
8571 if (attrlist)
8572 *attrlist = chainon (returned_attrs, *attrlist);
1eab9b56 8573 else
91d231cb 8574 attrlist = &returned_attrs;
1eab9b56
JM
8575 }
8576
5d80a306
DG
8577 /* Handle parameter packs. */
8578 if (parameter_pack_p)
8579 {
8580 if (decl_context == PARM)
8581 /* Turn the type into a pack expansion.*/
8582 type = make_pack_expansion (type);
8583 else
8584 error ("non-parameter %qs cannot be a parameter pack", name);
8585 }
8586
55b3d665
JM
8587 /* Did array size calculations overflow? */
8588
8589 if (TREE_CODE (type) == ARRAY_TYPE
8590 && COMPLETE_TYPE_P (type)
96ce2ac9
JW
8591 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8592 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
55b3d665 8593 {
2d01edd7 8594 error ("size of array %qs is too large", name);
aba649ba 8595 /* If we proceed with the array type as it is, we'll eventually
55b3d665
JM
8596 crash in tree_low_cst(). */
8597 type = error_mark_node;
8598 }
8599
2fff6d71 8600 if ((decl_context == FIELD || decl_context == PARM)
caf93cb0 8601 && !processing_template_decl
5377d5ba 8602 && variably_modified_type_p (type, NULL_TREE))
dac45b5c 8603 {
2fff6d71 8604 if (decl_context == FIELD)
2d01edd7 8605 error ("data member may not have variably modified type %qT", type);
2fff6d71 8606 else
2d01edd7 8607 error ("parameter may not have variably modified type %qT", type);
dac45b5c
MM
8608 type = error_mark_node;
8609 }
8610
34fc957d 8611 if (explicitp == 1 || (explicitp && friendp))
db5ae43f 8612 {
34fc957d 8613 /* [dcl.fct.spec] The explicit specifier shall only be used in
0cbd7506 8614 declarations of constructors within a class definition. */
2d01edd7 8615 error ("only declarations of constructors can be %<explicit%>");
db5ae43f
MS
8616 explicitp = 0;
8617 }
8618
1ff3c076 8619 if (storage_class == sc_mutable)
f30432d7 8620 {
4223f82f 8621 if (decl_context != FIELD || friendp)
0cbd7506 8622 {
2d01edd7 8623 error ("non-member %qs cannot be declared %<mutable%>", name);
1ff3c076 8624 storage_class = sc_none;
0cbd7506 8625 }
62d1db17 8626 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
f30432d7 8627 {
2d01edd7 8628 error ("non-object member %qs cannot be declared %<mutable%>", name);
1ff3c076 8629 storage_class = sc_none;
f30432d7 8630 }
34fc957d 8631 else if (TREE_CODE (type) == FUNCTION_TYPE
0cbd7506
MS
8632 || TREE_CODE (type) == METHOD_TYPE)
8633 {
2d01edd7 8634 error ("function %qs cannot be declared %<mutable%>", name);
1ff3c076 8635 storage_class = sc_none;
0cbd7506 8636 }
f30432d7
MS
8637 else if (staticp)
8638 {
2d01edd7 8639 error ("static %qs cannot be declared %<mutable%>", name);
1ff3c076 8640 storage_class = sc_none;
f30432d7 8641 }
34fc957d
NS
8642 else if (type_quals & TYPE_QUAL_CONST)
8643 {
2d01edd7 8644 error ("const %qs cannot be declared %<mutable%>", name);
1ff3c076 8645 storage_class = sc_none;
34fc957d 8646 }
f30432d7
MS
8647 }
8648
419c6212 8649 /* If this is declaring a typedef name, return a TYPE_DECL. */
62d1db17 8650 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
8d08fdba
MS
8651 {
8652 tree decl;
8653
8654 /* Note that the grammar rejects storage classes
8655 in typenames, fields or parameters. */
eff71ab0
PB
8656 if (current_lang_name == lang_name_java)
8657 TYPE_FOR_JAVA (type) = 1;
3db45ab5 8658
e2537f2c
MM
8659 /* This declaration:
8660
3db45ab5 8661 typedef void f(int) const;
e2537f2c 8662
3db45ab5 8663 declares a function type which is not a member of any
e2537f2c 8664 particular class, but which is cv-qualified; for
3db45ab5 8665 example "f S::*" declares a pointer to a const-qualified
e2537f2c
MM
8666 member function of S. We record the cv-qualification in the
8667 function type. */
8668 if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
771026dd
DG
8669 {
8670 type = cp_build_qualified_type (type, memfn_quals);
8671
8672 /* We have now dealt with these qualifiers. */
8673 memfn_quals = TYPE_UNQUALIFIED;
8674 }
8d08fdba 8675
d2e5ee5c 8676 if (decl_context == FIELD)
e3016344 8677 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
d2e5ee5c 8678 else
e3016344
MM
8679 decl = build_decl (TYPE_DECL, unqualified_id, type);
8680 if (id_declarator && declarator->u.id.qualifying_scope)
8681 error ("%Jtypedef name may not be a nested-name-specifier", decl);
8682
8683 if (decl_context != FIELD)
6bda7a5e 8684 {
6bda7a5e
NS
8685 if (!current_function_decl)
8686 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
1dc82a99 8687 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
c8094d83 8688 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
1dc82a99
MM
8689 (current_function_decl)))
8690 /* The TYPE_DECL is "abstract" because there will be
8691 clones of this constructor/destructor, and there will
8692 be copies of this TYPE_DECL generated in those
8693 clones. */
8694 DECL_ABSTRACT (decl) = 1;
6bda7a5e 8695 }
e3016344 8696 else if (constructor_name_p (unqualified_id, current_class_type))
cbe5f3b3 8697 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
37ec60ed
JW
8698 "as enclosing class",
8699 unqualified_id);
caf93cb0 8700
9188c363
MM
8701 /* If the user declares "typedef struct {...} foo" then the
8702 struct will have an anonymous name. Fill that name in now.
8703 Nothing can refer to it, so nothing needs know about the name
8704 change. */
8d08fdba 8705 if (type != error_mark_node
058b15c1 8706 && unqualified_id
8d08fdba
MS
8707 && TYPE_NAME (type)
8708 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1951a1b6 8709 && TYPE_ANONYMOUS_P (type)
89d684bb 8710 && cp_type_quals (type) == TYPE_UNQUALIFIED)
8d08fdba 8711 {
dcd08efc
JM
8712 tree oldname = TYPE_NAME (type);
8713 tree t;
8714
2c73f9f5 8715 /* Replace the anonymous name with the real name everywhere. */
dcd08efc
JM
8716 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
8717 if (TYPE_NAME (t) == oldname)
8718 TYPE_NAME (t) = decl;
8d08fdba
MS
8719
8720 if (TYPE_LANG_SPECIFIC (type))
8721 TYPE_WAS_ANONYMOUS (type) = 1;
8722
33964bf4
MM
8723 /* If this is a typedef within a template class, the nested
8724 type is a (non-primary) template. The name for the
8725 template needs updating as well. */
8726 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
68642fb6 8727 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
33964bf4
MM
8728 = TYPE_IDENTIFIER (type);
8729
50a6dbd7
JM
8730 /* FIXME remangle member functions; member functions of a
8731 type with external linkage have external linkage. */
fc378698 8732 }
fc378698 8733
1ff3c076 8734 if (signed_p
8d08fdba
MS
8735 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8736 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
8737
3db45ab5 8738 bad_specifiers (decl, "type", virtualp,
e2537f2c 8739 memfn_quals != TYPE_UNQUALIFIED,
c91a56d2
MS
8740 inlinep, friendp, raises != NULL_TREE);
8741
8d08fdba
MS
8742 return decl;
8743 }
8744
8745 /* Detect the case of an array type of unspecified size
8746 which came, as such, direct from a typedef name.
8d6e459d
NS
8747 We must copy the type, so that the array's domain can be
8748 individually set by the object's initializer. */
8d08fdba 8749
8d6e459d
NS
8750 if (type && typedef_type
8751 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
55b3d665 8752 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8d6e459d 8753 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
8d08fdba 8754
969fd501 8755 /* Detect where we're using a typedef of function type to declare a
4546865e 8756 function. PARMS will not be set, so we must create it now. */
caf93cb0 8757
969fd501
NS
8758 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
8759 {
8760 tree decls = NULL_TREE;
8761 tree args;
8762
8763 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
8764 {
8e51619a 8765 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
969fd501
NS
8766
8767 TREE_CHAIN (decl) = decls;
8768 decls = decl;
8769 }
caf93cb0 8770
4546865e 8771 parms = nreverse (decls);
9804209d
DG
8772
8773 if (decl_context != TYPENAME)
0cbd7506
MS
8774 {
8775 /* A cv-qualifier-seq shall only be part of the function type
8776 for a non-static member function. [8.3.5/4 dcl.fct] */
8777 if (cp_type_quals (type) != TYPE_UNQUALIFIED
8778 && (current_class_type == NULL_TREE || staticp) )
8779 {
ebbc3ce1 8780 error (staticp
f88d05c0
DM
8781 ? G_("qualified function types cannot be used to "
8782 "declare static member functions")
8783 : G_("qualified function types cannot be used to "
8784 "declare free functions"));
0cbd7506
MS
8785 type = TYPE_MAIN_VARIANT (type);
8786 }
8787
8788 /* The qualifiers on the function type become the qualifiers on
8789 the non-static member function. */
e2537f2c 8790 memfn_quals |= cp_type_quals (type);
0cbd7506 8791 }
969fd501
NS
8792 }
8793
8d08fdba
MS
8794 /* If this is a type name (such as, in a cast or sizeof),
8795 compute the type and return it now. */
8796
8797 if (decl_context == TYPENAME)
8798 {
8799 /* Note that the grammar rejects storage classes
8800 in typenames, fields or parameters. */
91063b51 8801 if (type_quals != TYPE_UNQUALIFIED)
6eabb241 8802 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
8803
8804 /* Special case: "friend class foo" looks like a TYPENAME context. */
8805 if (friendp)
8806 {
91063b51 8807 if (type_quals != TYPE_UNQUALIFIED)
b7484fbe 8808 {
33bd39a2 8809 error ("type qualifiers specified for friend class declaration");
91063b51 8810 type_quals = TYPE_UNQUALIFIED;
b7484fbe
MS
8811 }
8812 if (inlinep)
8813 {
2d01edd7 8814 error ("%<inline%> specified for friend class declaration");
b7484fbe
MS
8815 inlinep = 0;
8816 }
f2ae0c45 8817
218e0eb6 8818 if (!current_aggr)
4b054b80 8819 {
218e0eb6 8820 /* Don't allow friend declaration without a class-key. */
4b054b80 8821 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
cbe5f3b3 8822 permerror (input_location, "template parameters cannot be friends");
f2ae0c45 8823 else if (TREE_CODE (type) == TYPENAME_TYPE)
cbe5f3b3 8824 permerror (input_location, "friend declaration requires class-key, "
37ec60ed
JW
8825 "i.e. %<friend class %T::%D%>",
8826 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
4b054b80 8827 else
cbe5f3b3 8828 permerror (input_location, "friend declaration requires class-key, "
37ec60ed
JW
8829 "i.e. %<friend %#T%>",
8830 type);
4b054b80 8831 }
b7484fbe
MS
8832
8833 /* Only try to do this stuff if we didn't already give up. */
8834 if (type != integer_type_node)
8835 {
8836 /* A friendly class? */
8837 if (current_class_type)
19db77ce
KL
8838 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8839 /*complain=*/true);
b7484fbe 8840 else
2d01edd7 8841 error ("trying to make class %qT a friend of global scope",
0cbd7506 8842 type);
d363e7bf 8843
b7484fbe
MS
8844 type = void_type_node;
8845 }
8d08fdba 8846 }
e2537f2c 8847 else if (memfn_quals)
8d08fdba 8848 {
8d08fdba
MS
8849 if (ctype == NULL_TREE)
8850 {
41cbc04c 8851 if (TREE_CODE (type) != METHOD_TYPE)
0cbd7506 8852 error ("invalid qualifiers on non-member function type");
41cbc04c 8853 else
0cbd7506 8854 ctype = TYPE_METHOD_BASETYPE (type);
41cbc04c
NS
8855 }
8856 if (ctype)
e2537f2c 8857 type = build_memfn_type (type, ctype, memfn_quals);
8d08fdba
MS
8858 }
8859
8860 return type;
8861 }
058b15c1 8862 else if (unqualified_id == NULL_TREE && decl_context != PARM
db5ae43f 8863 && decl_context != CATCHPARM
8d08fdba
MS
8864 && TREE_CODE (type) != UNION_TYPE
8865 && ! bitfield)
8866 {
2d01edd7 8867 error ("abstract declarator %qT used as declaration", type);
22ab714d 8868 return error_mark_node;
8d08fdba
MS
8869 }
8870
62e19030
MM
8871 /* Only functions may be declared using an operator-function-id. */
8872 if (unqualified_id
8873 && IDENTIFIER_OPNAME_P (unqualified_id)
8874 && TREE_CODE (type) != FUNCTION_TYPE
8875 && TREE_CODE (type) != METHOD_TYPE)
8d08fdba 8876 {
62e19030
MM
8877 error ("declaration of %qD as non-function", unqualified_id);
8878 return error_mark_node;
8d08fdba
MS
8879 }
8880
62e19030
MM
8881 /* We don't check parameter types here because we can emit a better
8882 error message later. */
8883 if (decl_context != PARM)
650fcd07
LM
8884 {
8885 type = check_var_type (unqualified_id, type);
8886 if (type == error_mark_node)
8887 return error_mark_node;
8888 }
62e19030 8889
8d08fdba
MS
8890 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
8891 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
8892
14ae7e7d
JM
8893 if (decl_context == PARM || decl_context == CATCHPARM)
8894 {
8895 if (ctype || in_namespace)
2d01edd7 8896 error ("cannot use %<::%> in parameter declaration");
14ae7e7d
JM
8897
8898 /* A parameter declared as an array of T is really a pointer to T.
8899 One declared as a function is really a pointer to a function.
8900 One declared as a member is really a pointer to member. */
8901
8902 if (TREE_CODE (type) == ARRAY_TYPE)
8903 {
8904 /* Transfer const-ness of array into that of type pointed to. */
8905 type = build_pointer_type (TREE_TYPE (type));
91063b51 8906 type_quals = TYPE_UNQUALIFIED;
14ae7e7d
JM
8907 }
8908 else if (TREE_CODE (type) == FUNCTION_TYPE)
8909 type = build_pointer_type (type);
14ae7e7d 8910 }
68642fb6 8911
8d08fdba 8912 {
926ce8bd 8913 tree decl;
8d08fdba
MS
8914
8915 if (decl_context == PARM)
8916 {
058b15c1 8917 decl = cp_build_parm_decl (unqualified_id, type);
8d08fdba 8918
3db45ab5 8919 bad_specifiers (decl, "parameter", virtualp,
e2537f2c 8920 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba 8921 inlinep, friendp, raises != NULL_TREE);
8d08fdba
MS
8922 }
8923 else if (decl_context == FIELD)
8924 {
01bf0f3e
JM
8925 /* The C99 flexible array extension. */
8926 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8927 && TYPE_DOMAIN (type) == NULL_TREE)
8928 {
8929 tree itype = compute_array_index_type (dname, integer_zero_node);
8930 type = build_cplus_array_type (TREE_TYPE (type), itype);
8931 }
8932
8d08fdba
MS
8933 if (type == error_mark_node)
8934 {
8935 /* Happens when declaring arrays of sizes which
8936 are error_mark_node, for example. */
8937 decl = NULL_TREE;
8938 }
997a088c 8939 else if (in_namespace && !friendp)
05008fb9
MM
8940 {
8941 /* Something like struct S { int N::j; }; */
2d01edd7 8942 error ("invalid use of %<::%>");
9a171ca4 8943 return error_mark_node;
05008fb9 8944 }
8d08fdba
MS
8945 else if (TREE_CODE (type) == FUNCTION_TYPE)
8946 {
8947 int publicp = 0;
e1467ff2 8948 tree function_context;
8d08fdba
MS
8949
8950 if (friendp == 0)
8951 {
8952 if (ctype == NULL_TREE)
8953 ctype = current_class_type;
8954
8955 if (ctype == NULL_TREE)
8956 {
2d01edd7 8957 error ("can't make %qD into a method -- not in a class",
058b15c1 8958 unqualified_id);
13dbe691 8959 return error_mark_node;
8d08fdba
MS
8960 }
8961
8962 /* ``A union may [ ... ] not [ have ] virtual functions.''
8963 ARM 9.5 */
8964 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
8965 {
2d01edd7 8966 error ("function %qD declared virtual inside a union",
058b15c1 8967 unqualified_id);
13dbe691 8968 return error_mark_node;
8d08fdba
MS
8969 }
8970
058b15c1 8971 if (NEW_DELETE_OPNAME_P (unqualified_id))
8d08fdba
MS
8972 {
8973 if (virtualp)
8974 {
2d01edd7 8975 error ("%qD cannot be declared virtual, since it "
0cbd7506 8976 "is always static",
058b15c1 8977 unqualified_id);
8d08fdba
MS
8978 virtualp = 0;
8979 }
8980 }
8981 else if (staticp < 2)
e2537f2c 8982 type = build_memfn_type (type, ctype, memfn_quals);
8d08fdba
MS
8983 }
8984
88e95ee3 8985 /* Check that the name used for a destructor makes sense. */
6d2989e1 8986 if (sfk == sfk_destructor)
88e95ee3 8987 {
6d2989e1
VR
8988 if (!ctype)
8989 {
8990 gcc_assert (friendp);
8991 error ("expected qualified name in friend declaration "
8992 "for destructor %qD",
8993 id_declarator->u.id.unqualified_name);
8994 return error_mark_node;
8995 }
8996
8997 if (!same_type_p (TREE_OPERAND
8998 (id_declarator->u.id.unqualified_name, 0),
8999 ctype))
9000 {
9001 error ("declaration of %qD as member of %qT",
9002 id_declarator->u.id.unqualified_name, ctype);
9003 return error_mark_node;
9004 }
88e95ee3 9005 }
ac3b1156
JJ
9006 else if (sfk == sfk_constructor && friendp)
9007 {
9008 error ("expected qualified name in friend declaration "
9009 "for constructor %qD",
9010 id_declarator->u.id.unqualified_name);
9011 return error_mark_node;
9012 }
88e95ee3 9013
8d08fdba 9014 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
68642fb6 9015 function_context = (ctype != NULL_TREE) ?
4f1c5b7d 9016 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
e1467ff2
MM
9017 publicp = (! friendp || ! staticp)
9018 && function_context == NULL_TREE;
68642fb6 9019 decl = grokfndecl (ctype, type,
058b15c1
MM
9020 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9021 ? unqualified_id : dname,
4546865e 9022 parms,
058b15c1 9023 unqualified_id,
e2537f2c 9024 virtualp, flags, memfn_quals, raises,
386b8a85 9025 friendp ? -1 : 0, friendp, publicp, inlinep,
27d6592c 9026 sfk,
037cc9c5 9027 funcdef_flag, template_count, in_namespace, attrlist);
20496fa2 9028 if (decl == NULL_TREE)
ba5719d9 9029 return error_mark_node;
6125f3be
DE
9030#if 0
9031 /* This clobbers the attrs stored in `decl' from `attrlist'. */
91d231cb
JM
9032 /* The decl and setting of decl_attr is also turned off. */
9033 decl = build_decl_attribute_variant (decl, decl_attr);
6125f3be 9034#endif
f0e01782 9035
cc804e51
MM
9036 /* [class.conv.ctor]
9037
9038 A constructor declared without the function-specifier
9039 explicit that can be called with a single parameter
9040 specifies a conversion from the type of its first
9041 parameter to the type of its class. Such a constructor
9042 is called a converting constructor. */
db5ae43f
MS
9043 if (explicitp == 2)
9044 DECL_NONCONVERTING_P (decl) = 1;
cc804e51
MM
9045 else if (DECL_CONSTRUCTOR_P (decl))
9046 {
09357846 9047 /* A constructor with no parms is not a conversion.
e0fff4b3
JM
9048 Ignore any compiler-added parms. */
9049 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
cc804e51 9050
09357846 9051 if (arg_types == void_list_node)
cc804e51
MM
9052 DECL_NONCONVERTING_P (decl) = 1;
9053 }
8d08fdba
MS
9054 }
9055 else if (TREE_CODE (type) == METHOD_TYPE)
9056 {
faae18ab
MS
9057 /* We only get here for friend declarations of
9058 members of other classes. */
8d08fdba
MS
9059 /* All method decls are public, so tell grokfndecl to set
9060 TREE_PUBLIC, also. */
866eb556 9061 decl = grokfndecl (ctype, type,
058b15c1
MM
9062 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9063 ? unqualified_id : dname,
4546865e 9064 parms,
058b15c1 9065 unqualified_id,
e2537f2c 9066 virtualp, flags, memfn_quals, raises,
27d6592c 9067 friendp ? -1 : 0, friendp, 1, 0, sfk,
c8094d83
MS
9068 funcdef_flag, template_count, in_namespace,
9069 attrlist);
f0e01782 9070 if (decl == NULL_TREE)
13dbe691 9071 return error_mark_node;
8d08fdba 9072 }
a9f46cbb 9073 else if (!staticp && !dependent_type_p (type)
d0f062fb 9074 && !COMPLETE_TYPE_P (complete_type (type))
8d08fdba
MS
9075 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9076 {
058b15c1 9077 if (unqualified_id)
2d01edd7 9078 error ("field %qD has incomplete type", unqualified_id);
b7484fbe 9079 else
2d01edd7 9080 error ("name %qT has incomplete type", type);
8d08fdba
MS
9081
9082 /* If we're instantiating a template, tell them which
9083 instantiation made the field's type be incomplete. */
9084 if (current_class_type
9085 && TYPE_NAME (current_class_type)
d2e5ee5c 9086 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
62d1db17
MM
9087 && declspecs->type
9088 && declspecs->type == type)
2d01edd7 9089 error (" in instantiation of template %qT",
0cbd7506 9090 current_class_type);
db5ae43f 9091
623c65f1 9092 return error_mark_node;
8d08fdba
MS
9093 }
9094 else
9095 {
9096 if (friendp)
9097 {
2d01edd7 9098 error ("%qE is neither function nor member function; "
0cbd7506 9099 "cannot be declared friend", unqualified_id);
8d08fdba
MS
9100 friendp = 0;
9101 }
9102 decl = NULL_TREE;
9103 }
9104
9105 if (friendp)
9106 {
9107 /* Friends are treated specially. */
9108 if (ctype == current_class_type)
37ec60ed 9109 ; /* We already issued a permerror. */
0cbd7506 9110 else if (decl && DECL_NAME (decl))
8db1028e
NS
9111 {
9112 if (template_class_depth (current_class_type) == 0)
9113 {
9114 decl = check_explicit_specialization
058b15c1 9115 (unqualified_id, decl, template_count,
357d956e 9116 2 * funcdef_flag + 4);
8db1028e
NS
9117 if (decl == error_mark_node)
9118 return error_mark_node;
9119 }
caf93cb0 9120
058b15c1 9121 decl = do_friend (ctype, unqualified_id, decl,
3db45ab5 9122 *attrlist, flags,
e2537f2c 9123 funcdef_flag);
8db1028e
NS
9124 return decl;
9125 }
9126 else
13dbe691 9127 return error_mark_node;
8d08fdba
MS
9128 }
9129
f4f206f4 9130 /* Structure field. It may not be a function, except for C++. */
8d08fdba
MS
9131
9132 if (decl == NULL_TREE)
9133 {
8d08fdba
MS
9134 if (initialized)
9135 {
3ac3d9ea
MM
9136 if (!staticp)
9137 {
9138 /* An attempt is being made to initialize a non-static
9139 member. But, from [class.mem]:
68642fb6 9140
3ac3d9ea
MM
9141 4 A member-declarator can contain a
9142 constant-initializer only if it declares a static
9143 member (_class.static_) of integral or enumeration
68642fb6 9144 type, see _class.static.data_.
3ac3d9ea
MM
9145
9146 This used to be relatively common practice, but
9147 the rest of the compiler does not correctly
9148 handle the initialization unless the member is
9149 static so we make it static below. */
cbe5f3b3 9150 permerror (input_location, "ISO C++ forbids initialization of member %qD",
37ec60ed 9151 unqualified_id);
cbe5f3b3 9152 permerror (input_location, "making %qD static", unqualified_id);
3ac3d9ea
MM
9153 staticp = 1;
9154 }
9155
6ba89f8e
MM
9156 if (uses_template_parms (type))
9157 /* We'll check at instantiation time. */
9158 ;
058b15c1 9159 else if (check_static_variable_definition (unqualified_id,
6ba89f8e
MM
9160 type))
9161 /* If we just return the declaration, crashes
9162 will sometimes occur. We therefore return
72a93143
JM
9163 void_type_node, as if this was a friend
9164 declaration, to cause callers to completely
9165 ignore this declaration. */
13dbe691 9166 return error_mark_node;
8d08fdba
MS
9167 }
9168
3ac3d9ea 9169 if (staticp)
8d08fdba 9170 {
f18a14bc
MM
9171 /* C++ allows static class members. All other work
9172 for this is done by grokfield. */
058b15c1 9173 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
4684cd27
MM
9174 set_linkage_for_static_data_member (decl);
9175 /* Even if there is an in-class initialization, DECL
9176 is considered undefined until an out-of-class
9177 definition is provided. */
9178 DECL_EXTERNAL (decl) = 1;
31a79236
JJ
9179
9180 if (thread_p)
8893239d 9181 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8d08fdba
MS
9182 }
9183 else
9184 {
058b15c1 9185 decl = build_decl (FIELD_DECL, unqualified_id, type);
2bf105ab 9186 DECL_NONADDRESSABLE_P (decl) = bitfield;
ab53bae2
AO
9187 if (bitfield && !unqualified_id)
9188 TREE_NO_WARNING (decl) = 1;
9189
1ff3c076 9190 if (storage_class == sc_mutable)
8d08fdba
MS
9191 {
9192 DECL_MUTABLE_P (decl) = 1;
1ff3c076 9193 storage_class = sc_none;
8d08fdba
MS
9194 }
9195 }
9196
3db45ab5 9197 bad_specifiers (decl, "field", virtualp,
e2537f2c 9198 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba
MS
9199 inlinep, friendp, raises != NULL_TREE);
9200 }
9201 }
fd9aef9d
NS
9202 else if (TREE_CODE (type) == FUNCTION_TYPE
9203 || TREE_CODE (type) == METHOD_TYPE)
8d08fdba 9204 {
386b8a85 9205 tree original_name;
8d08fdba
MS
9206 int publicp = 0;
9207
058b15c1 9208 if (!unqualified_id)
13dbe691 9209 return error_mark_node;
8d08fdba 9210
058b15c1 9211 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
386b8a85
JM
9212 original_name = dname;
9213 else
058b15c1 9214 original_name = unqualified_id;
386b8a85 9215
1ff3c076 9216 if (storage_class == sc_auto)
2d01edd7 9217 error ("storage class %<auto%> invalid for function %qs", name);
1ff3c076 9218 else if (storage_class == sc_register)
2d01edd7 9219 error ("storage class %<register%> invalid for function %qs", name);
1ff3c076 9220 else if (thread_p)
2d01edd7 9221 error ("storage class %<__thread%> invalid for function %qs", name);
8d08fdba
MS
9222
9223 /* Function declaration not at top level.
9224 Storage classes other than `extern' are not allowed
9225 and `extern' makes no difference. */
a9aedbc2 9226 if (! toplevel_bindings_p ()
1ff3c076 9227 && (storage_class == sc_static
62d1db17 9228 || declspecs->specs[(int)ds_inline])
8d08fdba 9229 && pedantic)
8926095f 9230 {
1ff3c076 9231 if (storage_class == sc_static)
509c9d60 9232 pedwarn (input_location, OPT_pedantic,
fcf73884 9233 "%<static%> specified invalid for function %qs "
0cbd7506 9234 "declared out of global scope", name);
8926095f 9235 else
509c9d60 9236 pedwarn (input_location, OPT_pedantic,
fcf73884 9237 "%<inline%> specifier invalid for function %qs "
0cbd7506 9238 "declared out of global scope", name);
8926095f 9239 }
68642fb6 9240
8d08fdba
MS
9241 if (ctype == NULL_TREE)
9242 {
9243 if (virtualp)
9244 {
2d01edd7 9245 error ("virtual non-class function %qs", name);
8d08fdba
MS
9246 virtualp = 0;
9247 }
8d08fdba 9248 }
4546865e
MM
9249 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9250 && !NEW_DELETE_OPNAME_P (original_name))
caf93cb0 9251 type = build_method_type_directly (ctype,
43dc123f
MM
9252 TREE_TYPE (type),
9253 TYPE_ARG_TYPES (type));
8d08fdba 9254
eb66be0e 9255 /* Record presence of `static'. */
faae18ab 9256 publicp = (ctype != NULL_TREE
1ff3c076
MM
9257 || storage_class == sc_extern
9258 || storage_class != sc_static);
8d08fdba 9259
058b15c1 9260 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
e2537f2c 9261 virtualp, flags, memfn_quals, raises,
75650646 9262 1, friendp,
27d6592c 9263 publicp, inlinep, sfk, funcdef_flag,
037cc9c5 9264 template_count, in_namespace, attrlist);
f0e01782 9265 if (decl == NULL_TREE)
13dbe691 9266 return error_mark_node;
8d08fdba 9267
8d08fdba
MS
9268 if (staticp == 1)
9269 {
0e339752 9270 int invalid_static = 0;
8d08fdba
MS
9271
9272 /* Don't allow a static member function in a class, and forbid
9273 declaring main to be static. */
9274 if (TREE_CODE (type) == METHOD_TYPE)
9275 {
cbe5f3b3 9276 permerror (input_location, "cannot declare member function %qD to have "
37ec60ed 9277 "static linkage", decl);
0e339752 9278 invalid_static = 1;
8d08fdba 9279 }
8d08fdba
MS
9280 else if (current_function_decl)
9281 {
9282 /* FIXME need arm citation */
8251199e 9283 error ("cannot declare static function inside another function");
0e339752 9284 invalid_static = 1;
8d08fdba
MS
9285 }
9286
0e339752 9287 if (invalid_static)
8d08fdba
MS
9288 {
9289 staticp = 0;
1ff3c076 9290 storage_class = sc_none;
8d08fdba
MS
9291 }
9292 }
8d08fdba
MS
9293 }
9294 else
9295 {
9296 /* It's a variable. */
9297
9298 /* An uninitialized decl with `extern' is a reference. */
caf93cb0 9299 decl = grokvardecl (type, unqualified_id,
62d1db17 9300 declspecs,
68642fb6
UD
9301 initialized,
9302 (type_quals & TYPE_QUAL_CONST) != 0,
9e259dd1 9303 ctype ? ctype : in_namespace);
3db45ab5 9304 bad_specifiers (decl, "variable", virtualp,
e2537f2c 9305 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba
MS
9306 inlinep, friendp, raises != NULL_TREE);
9307
9308 if (ctype)
9309 {
f0e01782 9310 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
9311 if (staticp == 1)
9312 {
cbe5f3b3 9313 permerror (input_location, "%<static%> may not be used when defining "
37ec60ed 9314 "(as opposed to declaring) a static data member");
0cbd7506 9315 staticp = 0;
1ff3c076 9316 storage_class = sc_none;
8d08fdba 9317 }
1ff3c076 9318 if (storage_class == sc_register && TREE_STATIC (decl))
b7484fbe 9319 {
2d01edd7 9320 error ("static member %qD declared %<register%>", decl);
1ff3c076 9321 storage_class = sc_none;
b7484fbe 9322 }
1ff3c076 9323 if (storage_class == sc_extern && pedantic)
8d08fdba 9324 {
509c9d60 9325 pedwarn (input_location, OPT_pedantic,
fcf73884
MLI
9326 "cannot explicitly declare member %q#D to have "
9327 "extern linkage", decl);
1ff3c076 9328 storage_class = sc_none;
8d08fdba
MS
9329 }
9330 }
9331 }
9332
94eeabbe
DS
9333 if (storage_class == sc_extern && initialized && !funcdef_flag)
9334 {
9335 if (toplevel_bindings_p ())
9336 {
9337 /* It's common practice (and completely valid) to have a const
9338 be initialized and declared extern. */
9339 if (!(type_quals & TYPE_QUAL_CONST))
9340 warning (0, "%qs initialized and declared %<extern%>", name);
9341 }
9342 else
0450a966
PC
9343 {
9344 error ("%qs has both %<extern%> and initializer", name);
9345 return error_mark_node;
9346 }
94eeabbe
DS
9347 }
9348
8d08fdba
MS
9349 /* Record `register' declaration for warnings on &
9350 and in case doing stupid register allocation. */
9351
1ff3c076 9352 if (storage_class == sc_register)
8d08fdba 9353 DECL_REGISTER (decl) = 1;
1ff3c076 9354 else if (storage_class == sc_extern)
8926095f 9355 DECL_THIS_EXTERN (decl) = 1;
1ff3c076 9356 else if (storage_class == sc_static)
faae18ab
MS
9357 DECL_THIS_STATIC (decl) = 1;
9358
15896502
MM
9359 /* Record constancy and volatility on the DECL itself . There's
9360 no need to do this when processing a template; we'll do this
9361 for the instantiated declaration based on the type of DECL. */
adecb3f4 9362 if (!processing_template_decl)
9804209d 9363 cp_apply_type_quals_to_decl (type_quals, decl);
8d08fdba 9364
1891dec4
DM
9365 if (set_no_warning)
9366 TREE_NO_WARNING (decl) = 1;
9367
8d08fdba
MS
9368 return decl;
9369 }
9370}
9371\f
f181d4ae
MM
9372/* Subroutine of start_function. Ensure that each of the parameter
9373 types (as listed in PARMS) is complete, as is required for a
9374 function definition. */
e92cc029 9375
8d08fdba 9376static void
11f6b451 9377require_complete_types_for_parms (tree parms)
8d08fdba 9378{
07c88314 9379 for (; parms; parms = TREE_CHAIN (parms))
8d08fdba 9380 {
c9387915
GB
9381 if (dependent_type_p (TREE_TYPE (parms)))
9382 continue;
dff1b563
VR
9383 if (!VOID_TYPE_P (TREE_TYPE (parms))
9384 && complete_type_or_else (TREE_TYPE (parms), parms))
753225c1 9385 {
7523dc31 9386 relayout_decl (parms);
753225c1
JM
9387 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9388 }
dff1b563
VR
9389 else
9390 /* grokparms or complete_type_or_else will have already issued
9391 an error. */
9392 TREE_TYPE (parms) = error_mark_node;
8d08fdba
MS
9393 }
9394}
9395
838dfd8a 9396/* Returns nonzero if T is a local variable. */
297e73d8 9397
46e8c075 9398int
ac7d7749 9399local_variable_p (const_tree t)
297e73d8 9400{
68642fb6 9401 if ((TREE_CODE (t) == VAR_DECL
297e73d8
MM
9402 /* A VAR_DECL with a context that is a _TYPE is a static data
9403 member. */
9404 && !TYPE_P (CP_DECL_CONTEXT (t))
9405 /* Any other non-local variable must be at namespace scope. */
46e8c075 9406 && !DECL_NAMESPACE_SCOPE_P (t))
297e73d8 9407 || (TREE_CODE (t) == PARM_DECL))
46e8c075 9408 return 1;
297e73d8 9409
46e8c075
MM
9410 return 0;
9411}
9412
46e8c075
MM
9413/* Like local_variable_p, but suitable for use as a tree-walking
9414 function. */
9415
9416static tree
44de5aeb
RK
9417local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9418 void *data ATTRIBUTE_UNUSED)
46e8c075 9419{
44de5aeb
RK
9420 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
9421 return *tp;
9422 else if (TYPE_P (*tp))
9423 *walk_subtrees = 0;
9424
9425 return NULL_TREE;
297e73d8
MM
9426}
9427
44de5aeb 9428
297e73d8 9429/* Check that ARG, which is a default-argument expression for a
0e339752 9430 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
297e73d8
MM
9431 something goes wrong. DECL may also be a _TYPE node, rather than a
9432 DECL, if there is no DECL available. */
9433
9434tree
11f6b451 9435check_default_argument (tree decl, tree arg)
297e73d8
MM
9436{
9437 tree var;
9438 tree decl_type;
9439
9440 if (TREE_CODE (arg) == DEFAULT_ARG)
9441 /* We get a DEFAULT_ARG when looking at an in-class declaration
9442 with a default argument. Ignore the argument for now; we'll
9443 deal with it after the class is complete. */
9444 return arg;
9445
297e73d8
MM
9446 if (TYPE_P (decl))
9447 {
9448 decl_type = decl;
9449 decl = NULL_TREE;
9450 }
9451 else
9452 decl_type = TREE_TYPE (decl);
9453
68642fb6 9454 if (arg == error_mark_node
297e73d8
MM
9455 || decl == error_mark_node
9456 || TREE_TYPE (arg) == error_mark_node
9457 || decl_type == error_mark_node)
9458 /* Something already went wrong. There's no need to check
9459 further. */
9460 return error_mark_node;
9461
9462 /* [dcl.fct.default]
68642fb6 9463
297e73d8
MM
9464 A default argument expression is implicitly converted to the
9465 parameter type. */
9466 if (!TREE_TYPE (arg)
30f86ec3 9467 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
297e73d8
MM
9468 {
9469 if (decl)
2d01edd7 9470 error ("default argument for %q#D has type %qT",
0cbd7506 9471 decl, TREE_TYPE (arg));
297e73d8 9472 else
2d01edd7 9473 error ("default argument for parameter of type %qT has type %qT",
0cbd7506 9474 decl_type, TREE_TYPE (arg));
297e73d8
MM
9475
9476 return error_mark_node;
9477 }
9478
9479 /* [dcl.fct.default]
9480
9481 Local variables shall not be used in default argument
68642fb6 9482 expressions.
297e73d8
MM
9483
9484 The keyword `this' shall not be used in a default argument of a
9485 member function. */
14588106 9486 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
297e73d8
MM
9487 if (var)
9488 {
2d01edd7 9489 error ("default argument %qE uses local variable %qD", arg, var);
297e73d8
MM
9490 return error_mark_node;
9491 }
9492
9493 /* All is well. */
9494 return arg;
9495}
9496
8d08fdba
MS
9497/* Decode the list of parameter types for a function type.
9498 Given the list of things declared inside the parens,
9499 return a list of types.
9500
058b15c1
MM
9501 If this parameter does not end with an ellipsis, we append
9502 void_list_node.
5cce22b6 9503
4546865e 9504 *PARMS is set to the chain of PARM_DECLs created. */
8d08fdba
MS
9505
9506static tree
62d1db17 9507grokparms (cp_parameter_declarator *first_parm, tree *parms)
8d08fdba
MS
9508{
9509 tree result = NULL_TREE;
9510 tree decls = NULL_TREE;
058b15c1 9511 int ellipsis = !first_parm || first_parm->ellipsis_p;
62d1db17 9512 cp_parameter_declarator *parm;
5cce22b6 9513 int any_error = 0;
0d83bf5a 9514 struct pointer_set_t *unique_decls = pointer_set_create ();
8d08fdba 9515
058b15c1 9516 for (parm = first_parm; parm != NULL; parm = parm->next)
8d08fdba 9517 {
0657c69c 9518 tree type = NULL_TREE;
058b15c1 9519 tree init = parm->default_argument;
62d1db17 9520 tree attrs;
058b15c1 9521 tree decl;
8d08fdba 9522
058b15c1 9523 if (parm == no_parameters)
0cbd7506 9524 break;
8d08fdba 9525
62d1db17
MM
9526 attrs = parm->decl_specifiers.attributes;
9527 parm->decl_specifiers.attributes = NULL_TREE;
9528 decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
98884b26 9529 PARM, init != NULL_TREE, &attrs);
5cce22b6 9530 if (! decl || TREE_TYPE (decl) == error_mark_node)
0cbd7506 9531 continue;
d363e7bf 9532
98884b26
JM
9533 if (attrs)
9534 cplus_decl_attributes (&decl, attrs, 0);
9535
5cce22b6
NS
9536 type = TREE_TYPE (decl);
9537 if (VOID_TYPE_P (type))
0cbd7506
MS
9538 {
9539 if (same_type_p (type, void_type_node)
e7e53192 9540 && DECL_SELF_REFERENCE_P (type)
0cbd7506
MS
9541 && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
9542 /* this is a parmlist of `(void)', which is ok. */
9543 break;
9544 cxx_incomplete_type_error (decl, type);
0657c69c
MM
9545 /* It's not a good idea to actually create parameters of
9546 type `void'; other parts of the compiler assume that a
9547 void type terminates the parameter list. */
04f3dc2b 9548 type = error_mark_node;
0657c69c 9549 TREE_TYPE (decl) = error_mark_node;
0cbd7506 9550 }
8d08fdba 9551
360f866c
JJ
9552 if (type != error_mark_node
9553 && TYPE_FOR_JAVA (type)
9e1e64ec 9554 && MAYBE_CLASS_TYPE_P (type))
360f866c
JJ
9555 {
9556 error ("parameter %qD has Java class type", decl);
9557 type = error_mark_node;
9558 TREE_TYPE (decl) = error_mark_node;
9559 init = NULL_TREE;
9560 }
9561
d363e7bf 9562 if (type != error_mark_node)
04f3dc2b
MM
9563 {
9564 /* Top-level qualifiers on the parameters are
9565 ignored for function types. */
79a1a736 9566 type = cp_build_qualified_type (type, 0);
04f3dc2b
MM
9567 if (TREE_CODE (type) == METHOD_TYPE)
9568 {
2d01edd7 9569 error ("parameter %qD invalidly declared method type", decl);
04f3dc2b
MM
9570 type = build_pointer_type (type);
9571 TREE_TYPE (decl) = type;
9572 }
04f3dc2b 9573 else if (abstract_virtuals_error (decl, type))
a1c65f9f 9574 any_error = 1; /* Seems like a good idea. */
04f3dc2b
MM
9575 else if (POINTER_TYPE_P (type))
9576 {
9577 /* [dcl.fct]/6, parameter types cannot contain pointers
9578 (references) to arrays of unknown bound. */
98979fe0
NS
9579 tree t = TREE_TYPE (type);
9580 int ptr = TYPE_PTR_P (type);
9581
0cbd7506
MS
9582 while (1)
9583 {
9584 if (TYPE_PTR_P (t))
9585 ptr = 1;
9586 else if (TREE_CODE (t) != ARRAY_TYPE)
9587 break;
9588 else if (!TYPE_DOMAIN (t))
9589 break;
9590 t = TREE_TYPE (t);
9591 }
04f3dc2b 9592 if (TREE_CODE (t) == ARRAY_TYPE)
2d01edd7 9593 error ("parameter %qD includes %s to array of unknown "
0cbd7506
MS
9594 "bound %qT",
9595 decl, ptr ? "pointer" : "reference", t);
04f3dc2b
MM
9596 }
9597
c3ee4651 9598 if (any_error)
04f3dc2b 9599 init = NULL_TREE;
c3ee4651
NS
9600 else if (init && !processing_template_decl)
9601 init = check_default_argument (decl, init);
04f3dc2b 9602 }
8d08fdba 9603
5d80a306
DG
9604 if (TREE_CODE (decl) == PARM_DECL
9605 && FUNCTION_PARAMETER_PACK_P (decl)
9606 && parm->next)
9607 error ("parameter packs must be at the end of the parameter list");
9608
0d83bf5a
SB
9609 if (DECL_NAME (decl))
9610 {
9611 if (pointer_set_contains (unique_decls, DECL_NAME (decl)))
631ee856 9612 error ("multiple parameters named %qE", DECL_NAME (decl));
0d83bf5a
SB
9613 else
9614 pointer_set_insert (unique_decls, DECL_NAME (decl));
9615 }
9616
5cce22b6
NS
9617 TREE_CHAIN (decl) = decls;
9618 decls = decl;
0657c69c 9619 result = tree_cons (init, type, result);
8d08fdba 9620 }
5cce22b6
NS
9621 decls = nreverse (decls);
9622 result = nreverse (result);
9623 if (!ellipsis)
9624 result = chainon (result, void_list_node);
4546865e 9625 *parms = decls;
8d08fdba 9626
0d83bf5a 9627 pointer_set_destroy (unique_decls);
8d08fdba
MS
9628 return result;
9629}
42976354 9630
8d08fdba 9631\f
271e6f02
NS
9632/* D is a constructor or overloaded `operator='.
9633
9634 Let T be the class in which D is declared. Then, this function
9635 returns:
9636
9637 -1 if D's is an ill-formed constructor or copy assignment operator
9638 whose first parameter is of type `T'.
9639 0 if D is not a copy constructor or copy assignment
9640 operator.
9641 1 if D is a copy constructor or copy assignment operator whose
9642 first parameter is a reference to const qualified T.
9643 2 if D is a copy constructor or copy assignment operator whose
9644 first parameter is a reference to non-const qualified T.
9645
9646 This function can be used as a predicate. Positive values indicate
838dfd8a 9647 a copy constructor and nonzero values indicate a copy assignment
4f1c5b7d
MM
9648 operator. */
9649
c11b6f21 9650int
58f9752a 9651copy_fn_p (const_tree d)
c11b6f21 9652{
271e6f02
NS
9653 tree args;
9654 tree arg_type;
9655 int result = 1;
caf93cb0 9656
398cd199 9657 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
4f1c5b7d 9658
7137605e
MM
9659 if (TREE_CODE (d) == TEMPLATE_DECL
9660 || (DECL_TEMPLATE_INFO (d)
9661 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
271e6f02
NS
9662 /* Instantiations of template member functions are never copy
9663 functions. Note that member functions of templated classes are
9664 represented as template functions internally, and we must
9665 accept those as copy functions. */
9666 return 0;
caf93cb0 9667
271e6f02
NS
9668 args = FUNCTION_FIRST_USER_PARMTYPE (d);
9669 if (!args)
4f1c5b7d
MM
9670 return 0;
9671
271e6f02 9672 arg_type = TREE_VALUE (args);
139a78c7
VR
9673 if (arg_type == error_mark_node)
9674 return 0;
271e6f02
NS
9675
9676 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
9677 {
9678 /* Pass by value copy assignment operator. */
9679 result = -1;
9680 }
9681 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8af2fec4 9682 && !TYPE_REF_IS_RVALUE (arg_type)
271e6f02
NS
9683 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
9684 {
9685 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
9686 result = 2;
9687 }
9688 else
9689 return 0;
caf93cb0 9690
271e6f02
NS
9691 args = TREE_CHAIN (args);
9692
9693 if (args && args != void_list_node && !TREE_PURPOSE (args))
9694 /* There are more non-optional args. */
9695 return 0;
9696
9697 return result;
9698}
9699
8af2fec4
RY
9700/* D is a constructor or overloaded `operator='.
9701
9702 Let T be the class in which D is declared. Then, this function
9703 returns true when D is a move constructor or move assignment
9704 operator, false otherwise. */
9705
9706bool
58f9752a 9707move_fn_p (const_tree d)
8af2fec4
RY
9708{
9709 tree args;
9710 tree arg_type;
9711 bool result = false;
9712
9713 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9714
c1ae8be5
SM
9715 if (cxx_dialect == cxx98)
9716 /* There are no move constructors if we are in C++98 mode. */
8af2fec4
RY
9717 return false;
9718
9719 if (TREE_CODE (d) == TEMPLATE_DECL
9720 || (DECL_TEMPLATE_INFO (d)
9721 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9722 /* Instantiations of template member functions are never copy
9723 functions. Note that member functions of templated classes are
9724 represented as template functions internally, and we must
9725 accept those as copy functions. */
9726 return 0;
9727
9728 args = FUNCTION_FIRST_USER_PARMTYPE (d);
9729 if (!args)
9730 return 0;
9731
9732 arg_type = TREE_VALUE (args);
9733 if (arg_type == error_mark_node)
9734 return 0;
9735
9736 if (TREE_CODE (arg_type) == REFERENCE_TYPE
9737 && TYPE_REF_IS_RVALUE (arg_type)
9738 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
9739 DECL_CONTEXT (d)))
9740 result = true;
9741
9742 args = TREE_CHAIN (args);
9743
9744 if (args && args != void_list_node && !TREE_PURPOSE (args))
9745 /* There are more non-optional args. */
9746 return false;
9747
9748 return result;
9749}
9750
271e6f02
NS
9751/* Remember any special properties of member function DECL. */
9752
0fcedd9c
JM
9753void
9754grok_special_member_properties (tree decl)
271e6f02 9755{
7137605e
MM
9756 tree class_type;
9757
6d69fe27 9758 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
7137605e
MM
9759 return;
9760
9761 class_type = DECL_CONTEXT (decl);
9762 if (DECL_CONSTRUCTOR_P (decl))
271e6f02
NS
9763 {
9764 int ctor = copy_fn_p (decl);
caf93cb0 9765
0fcedd9c
JM
9766 if (!DECL_ARTIFICIAL (decl))
9767 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
7137605e 9768
271e6f02
NS
9769 if (ctor > 0)
9770 {
9771 /* [class.copy]
caf93cb0 9772
0cbd7506
MS
9773 A non-template constructor for class X is a copy
9774 constructor if its first parameter is of type X&, const
9775 X&, volatile X& or const volatile X&, and either there
9776 are no other parameters or else all other parameters have
9777 default arguments. */
7137605e 9778 TYPE_HAS_INIT_REF (class_type) = 1;
b87d79e6
JM
9779 if (!DECL_DEFAULTED_FN (decl))
9780 TYPE_HAS_COMPLEX_INIT_REF (class_type) = 1;
271e6f02 9781 if (ctor > 1)
7137605e 9782 TYPE_HAS_CONST_INIT_REF (class_type) = 1;
271e6f02
NS
9783 }
9784 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
7137605e 9785 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
09357846
JM
9786 else if (is_list_ctor (decl))
9787 TYPE_HAS_LIST_CTOR (class_type) = 1;
271e6f02
NS
9788 }
9789 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
9790 {
9791 /* [class.copy]
caf93cb0 9792
0cbd7506
MS
9793 A non-template assignment operator for class X is a copy
9794 assignment operator if its parameter is of type X, X&, const
9795 X&, volatile X& or const volatile X&. */
caf93cb0 9796
271e6f02 9797 int assop = copy_fn_p (decl);
caf93cb0 9798
271e6f02
NS
9799 if (assop)
9800 {
7137605e 9801 TYPE_HAS_ASSIGN_REF (class_type) = 1;
b87d79e6
JM
9802 if (!DECL_DEFAULTED_FN (decl))
9803 TYPE_HAS_COMPLEX_ASSIGN_REF (class_type) = 1;
271e6f02 9804 if (assop != 1)
7137605e 9805 TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
271e6f02
NS
9806 }
9807 }
c11b6f21
MS
9808}
9809
271e6f02
NS
9810/* Check a constructor DECL has the correct form. Complains
9811 if the class has a constructor of the form X(X). */
e92cc029 9812
a0a33927 9813int
58f9752a 9814grok_ctor_properties (const_tree ctype, const_tree decl)
8d08fdba 9815{
271e6f02
NS
9816 int ctor_parm = copy_fn_p (decl);
9817
9818 if (ctor_parm < 0)
9819 {
9820 /* [class.copy]
caf93cb0 9821
0cbd7506
MS
9822 A declaration of a constructor for a class X is ill-formed if
9823 its first parameter is of type (optionally cv-qualified) X
9824 and either there are no other parameters or else all other
9825 parameters have default arguments.
9826
9827 We *don't* complain about member template instantiations that
9828 have this form, though; they can occur as we try to decide
9829 what constructor to use during overload resolution. Since
9830 overload resolution will never prefer such a constructor to
9831 the non-template copy constructor (which is either explicitly
9832 or implicitly defined), there's no need to worry about their
9833 existence. Theoretically, they should never even be
9834 instantiated, but that's hard to forestall. */
2d01edd7 9835 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
0b41abe6 9836 ctype, ctype);
0b41abe6 9837 return 0;
8d08fdba 9838 }
caf93cb0 9839
a0a33927 9840 return 1;
8d08fdba
MS
9841}
9842
596ea4e5 9843/* An operator with this code is unary, but can also be binary. */
e92cc029 9844
a28e3c7f 9845static int
11f6b451 9846ambi_op_p (enum tree_code code)
8d08fdba 9847{
596ea4e5
AS
9848 return (code == INDIRECT_REF
9849 || code == ADDR_EXPR
392e3d51 9850 || code == UNARY_PLUS_EXPR
596ea4e5
AS
9851 || code == NEGATE_EXPR
9852 || code == PREINCREMENT_EXPR
9853 || code == PREDECREMENT_EXPR);
8d08fdba
MS
9854}
9855
9856/* An operator with this name can only be unary. */
e92cc029 9857
a28e3c7f 9858static int
11f6b451 9859unary_op_p (enum tree_code code)
8d08fdba 9860{
596ea4e5
AS
9861 return (code == TRUTH_NOT_EXPR
9862 || code == BIT_NOT_EXPR
9863 || code == COMPONENT_REF
9864 || code == TYPE_EXPR);
8d08fdba
MS
9865}
9866
f2a79152 9867/* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
4b0d3cbe 9868 errors are issued for invalid declarations. */
e92cc029 9869
398cd199 9870bool
7e45bd18 9871grok_op_properties (tree decl, bool complain)
8d08fdba
MS
9872{
9873 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
596ea4e5 9874 tree argtype;
8d08fdba
MS
9875 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
9876 tree name = DECL_NAME (decl);
596ea4e5
AS
9877 enum tree_code operator_code;
9878 int arity;
64844139 9879 bool ellipsis_p;
7e45bd18 9880 tree class_type;
596ea4e5 9881
64844139 9882 /* Count the number of arguments and check for ellipsis. */
596ea4e5
AS
9883 for (argtype = argtypes, arity = 0;
9884 argtype && argtype != void_list_node;
9885 argtype = TREE_CHAIN (argtype))
9886 ++arity;
64844139 9887 ellipsis_p = !argtype;
8d08fdba 9888
7e45bd18
MM
9889 class_type = DECL_CONTEXT (decl);
9890 if (class_type && !CLASS_TYPE_P (class_type))
9891 class_type = NULL_TREE;
8d08fdba 9892
596ea4e5
AS
9893 if (DECL_CONV_FN_P (decl))
9894 operator_code = TYPE_EXPR;
9895 else
9896 do
9897 {
0c918ce5
MM
9898#define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
9899 if (ansi_opname (CODE) == name) \
9900 { \
75ac8dec 9901 operator_code = (CODE); \
0c918ce5
MM
9902 break; \
9903 } \
9904 else if (ansi_assopname (CODE) == name) \
9905 { \
75ac8dec 9906 operator_code = (CODE); \
0c918ce5
MM
9907 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
9908 break; \
596ea4e5
AS
9909 }
9910
9911#include "operators.def"
9912#undef DEF_OPERATOR
9913
8dc2b103 9914 gcc_unreachable ();
596ea4e5
AS
9915 }
9916 while (0);
c0ed0531 9917 gcc_assert (operator_code != MAX_TREE_CODES);
596ea4e5
AS
9918 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9919
7e45bd18
MM
9920 if (class_type)
9921 switch (operator_code)
9922 {
9923 case NEW_EXPR:
9924 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
9925 break;
5362b086 9926
7e45bd18
MM
9927 case DELETE_EXPR:
9928 TYPE_GETS_DELETE (class_type) |= 1;
9929 break;
5362b086 9930
7e45bd18
MM
9931 case VEC_NEW_EXPR:
9932 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
9933 break;
5362b086 9934
7e45bd18
MM
9935 case VEC_DELETE_EXPR:
9936 TYPE_GETS_DELETE (class_type) |= 2;
9937 break;
596ea4e5 9938
7e45bd18
MM
9939 default:
9940 break;
9941 }
596ea4e5 9942
3143d517
GB
9943 /* [basic.std.dynamic.allocation]/1:
9944
9945 A program is ill-formed if an allocation function is declared
9946 in a namespace scope other than global scope or declared static
9947 in global scope.
9948
9949 The same also holds true for deallocation functions. */
9950 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
9951 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9952 {
9953 if (DECL_NAMESPACE_SCOPE_P (decl))
9954 {
9955 if (CP_DECL_CONTEXT (decl) != global_namespace)
398cd199
VR
9956 {
9957 error ("%qD may not be declared within a namespace", decl);
9958 return false;
9959 }
3143d517 9960 else if (!TREE_PUBLIC (decl))
398cd199
VR
9961 {
9962 error ("%qD may not be declared as static", decl);
9963 return false;
9964 }
3143d517
GB
9965 }
9966 }
9967
596ea4e5 9968 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
1ea193c2
ILT
9969 {
9970 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
9971 DECL_IS_OPERATOR_NEW (decl) = 1;
9972 }
596ea4e5 9973 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
4546865e 9974 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8d08fdba
MS
9975 else
9976 {
9977 /* An operator function must either be a non-static member function
9978 or have at least one parameter of a class, a reference to a class,
9979 an enumeration, or a reference to an enumeration. 13.4.0.6 */
700f8a87 9980 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba 9981 {
596ea4e5
AS
9982 if (operator_code == TYPE_EXPR
9983 || operator_code == CALL_EXPR
9984 || operator_code == COMPONENT_REF
9985 || operator_code == ARRAY_REF
9986 || operator_code == NOP_EXPR)
f2a79152
PC
9987 {
9988 error ("%qD must be a nonstatic member function", decl);
398cd199 9989 return false;
f2a79152 9990 }
8d08fdba
MS
9991 else
9992 {
4b0d3cbe 9993 tree p;
8d08fdba 9994
700f8a87 9995 if (DECL_STATIC_FUNCTION_P (decl))
f2a79152
PC
9996 {
9997 error ("%qD must be either a non-static member "
9998 "function or a non-member function", decl);
398cd199 9999 return false;
f2a79152 10000 }
700f8a87 10001
4b0d3cbe
MM
10002 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
10003 {
10004 tree arg = non_reference (TREE_VALUE (p));
85990800 10005 if (arg == error_mark_node)
398cd199 10006 return false;
85990800 10007
9e1e64ec 10008 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
4b0d3cbe
MM
10009 because these checks are performed even on
10010 template functions. */
9e1e64ec
PC
10011 if (MAYBE_CLASS_TYPE_P (arg)
10012 || TREE_CODE (arg) == ENUMERAL_TYPE)
4b0d3cbe
MM
10013 break;
10014 }
10015
10016 if (!p || p == void_list_node)
10017 {
398cd199
VR
10018 if (complain)
10019 error ("%qD must have an argument of class or "
10020 "enumerated type", decl);
10021 return false;
4b0d3cbe 10022 }
8d08fdba
MS
10023 }
10024 }
68642fb6 10025
4b0d3cbe
MM
10026 /* There are no restrictions on the arguments to an overloaded
10027 "operator ()". */
596ea4e5 10028 if (operator_code == CALL_EXPR)
398cd199 10029 return true;
8d08fdba 10030
7e45bd18 10031 /* Warn about conversion operators that will never be used. */
c8094d83 10032 if (IDENTIFIER_TYPENAME_P (name)
7e45bd18
MM
10033 && ! DECL_TEMPLATE_INFO (decl)
10034 && warn_conversion
10035 /* Warn only declaring the function; there is no need to
10036 warn again about out-of-class definitions. */
10037 && class_type == current_class_type)
a0a33927
MS
10038 {
10039 tree t = TREE_TYPE (name);
7e45bd18
MM
10040 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
10041 const char *what = 0;
5362b086 10042
7e45bd18
MM
10043 if (ref)
10044 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
a0a33927 10045
7e45bd18
MM
10046 if (TREE_CODE (t) == VOID_TYPE)
10047 what = "void";
10048 else if (class_type)
10049 {
10050 if (t == class_type)
a0a33927 10051 what = "the same type";
9a3b49ac 10052 /* Don't force t to be complete here. */
9e1e64ec 10053 else if (MAYBE_CLASS_TYPE_P (t)
d0f062fb 10054 && COMPLETE_TYPE_P (t)
7e45bd18 10055 && DERIVED_FROM_P (t, class_type))
a0a33927 10056 what = "a base class";
a0a33927 10057 }
7e45bd18
MM
10058
10059 if (what)
b323323f 10060 warning (OPT_Wconversion, "conversion to %s%s will never use a type "
7e45bd18
MM
10061 "conversion operator",
10062 ref ? "a reference to " : "", what);
a0a33927 10063 }
64844139 10064
271e6f02 10065 if (operator_code == COND_EXPR)
8d08fdba
MS
10066 {
10067 /* 13.4.0.3 */
33bd39a2 10068 error ("ISO C++ prohibits overloading operator ?:");
398cd199 10069 return false;
68642fb6 10070 }
64844139 10071 else if (ellipsis_p)
398cd199
VR
10072 {
10073 error ("%qD must not have variable number of arguments", decl);
10074 return false;
10075 }
596ea4e5 10076 else if (ambi_op_p (operator_code))
8d08fdba 10077 {
596ea4e5
AS
10078 if (arity == 1)
10079 /* We pick the one-argument operator codes by default, so
10080 we don't have to change anything. */
10081 ;
10082 else if (arity == 2)
8d08fdba 10083 {
596ea4e5
AS
10084 /* If we thought this was a unary operator, we now know
10085 it to be a binary operator. */
10086 switch (operator_code)
10087 {
10088 case INDIRECT_REF:
10089 operator_code = MULT_EXPR;
10090 break;
10091
10092 case ADDR_EXPR:
10093 operator_code = BIT_AND_EXPR;
10094 break;
10095
392e3d51 10096 case UNARY_PLUS_EXPR:
596ea4e5
AS
10097 operator_code = PLUS_EXPR;
10098 break;
10099
10100 case NEGATE_EXPR:
10101 operator_code = MINUS_EXPR;
10102 break;
10103
10104 case PREINCREMENT_EXPR:
10105 operator_code = POSTINCREMENT_EXPR;
10106 break;
10107
10108 case PREDECREMENT_EXPR:
655dc6ee 10109 operator_code = POSTDECREMENT_EXPR;
596ea4e5
AS
10110 break;
10111
10112 default:
8dc2b103 10113 gcc_unreachable ();
596ea4e5
AS
10114 }
10115
10116 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10117
10118 if ((operator_code == POSTINCREMENT_EXPR
10119 || operator_code == POSTDECREMENT_EXPR)
5156628f 10120 && ! processing_template_decl
007e5fea 10121 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8d08fdba
MS
10122 {
10123 if (methodp)
2d01edd7 10124 error ("postfix %qD must take %<int%> as its argument",
398cd199 10125 decl);
8d08fdba 10126 else
398cd199
VR
10127 error ("postfix %qD must take %<int%> as its second "
10128 "argument", decl);
10129 return false;
8d08fdba
MS
10130 }
10131 }
10132 else
10133 {
10134 if (methodp)
2d01edd7 10135 error ("%qD must take either zero or one argument", decl);
8d08fdba 10136 else
2d01edd7 10137 error ("%qD must take either one or two arguments", decl);
398cd199 10138 return false;
8d08fdba 10139 }
824b9a4c
MS
10140
10141 /* More Effective C++ rule 6. */
eb448459 10142 if (warn_ecpp
596ea4e5
AS
10143 && (operator_code == POSTINCREMENT_EXPR
10144 || operator_code == POSTDECREMENT_EXPR
10145 || operator_code == PREINCREMENT_EXPR
10146 || operator_code == PREDECREMENT_EXPR))
824b9a4c
MS
10147 {
10148 tree arg = TREE_VALUE (argtypes);
10149 tree ret = TREE_TYPE (TREE_TYPE (decl));
10150 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10151 arg = TREE_TYPE (arg);
10152 arg = TYPE_MAIN_VARIANT (arg);
596ea4e5
AS
10153 if (operator_code == PREINCREMENT_EXPR
10154 || operator_code == PREDECREMENT_EXPR)
824b9a4c
MS
10155 {
10156 if (TREE_CODE (ret) != REFERENCE_TYPE
3bfdc719
MM
10157 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10158 arg))
b323323f 10159 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
0cbd7506 10160 build_reference_type (arg));
824b9a4c
MS
10161 }
10162 else
10163 {
3bfdc719 10164 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
b323323f 10165 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
824b9a4c
MS
10166 }
10167 }
8d08fdba 10168 }
596ea4e5 10169 else if (unary_op_p (operator_code))
8d08fdba 10170 {
596ea4e5 10171 if (arity != 1)
8d08fdba
MS
10172 {
10173 if (methodp)
2d01edd7 10174 error ("%qD must take %<void%>", decl);
8d08fdba 10175 else
2d01edd7 10176 error ("%qD must take exactly one argument", decl);
398cd199 10177 return false;
8d08fdba
MS
10178 }
10179 }
596ea4e5 10180 else /* if (binary_op_p (operator_code)) */
8d08fdba 10181 {
596ea4e5 10182 if (arity != 2)
8d08fdba
MS
10183 {
10184 if (methodp)
2d01edd7 10185 error ("%qD must take exactly one argument", decl);
8d08fdba 10186 else
2d01edd7 10187 error ("%qD must take exactly two arguments", decl);
398cd199 10188 return false;
8d08fdba 10189 }
824b9a4c
MS
10190
10191 /* More Effective C++ rule 7. */
eb448459 10192 if (warn_ecpp
596ea4e5
AS
10193 && (operator_code == TRUTH_ANDIF_EXPR
10194 || operator_code == TRUTH_ORIF_EXPR
10195 || operator_code == COMPOUND_EXPR))
b323323f 10196 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
0cbd7506 10197 decl);
824b9a4c
MS
10198 }
10199
10200 /* Effective C++ rule 23. */
eb448459 10201 if (warn_ecpp
596ea4e5 10202 && arity == 2
4bd7c270 10203 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
596ea4e5
AS
10204 && (operator_code == PLUS_EXPR
10205 || operator_code == MINUS_EXPR
10206 || operator_code == TRUNC_DIV_EXPR
4bd7c270
NS
10207 || operator_code == MULT_EXPR
10208 || operator_code == TRUNC_MOD_EXPR)
824b9a4c 10209 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
b323323f 10210 warning (OPT_Weffc__, "%qD should return by value", decl);
8d08fdba 10211
271e6f02 10212 /* [over.oper]/8 */
34332678 10213 for (; argtypes && argtypes != void_list_node;
0cbd7506
MS
10214 argtypes = TREE_CHAIN (argtypes))
10215 if (TREE_PURPOSE (argtypes))
10216 {
10217 TREE_PURPOSE (argtypes) = NULL_TREE;
10218 if (operator_code == POSTINCREMENT_EXPR
596ea4e5 10219 || operator_code == POSTDECREMENT_EXPR)
0cbd7506 10220 {
509c9d60 10221 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments",
fcf73884 10222 decl);
0cbd7506
MS
10223 }
10224 else
398cd199
VR
10225 {
10226 error ("%qD cannot have default arguments", decl);
10227 return false;
10228 }
0cbd7506 10229 }
8d08fdba 10230 }
398cd199 10231 return true;
8d08fdba
MS
10232}
10233\f
0c88d886
MM
10234/* Return a string giving the keyword associate with CODE. */
10235
d8e178a0 10236static const char *
11f6b451 10237tag_name (enum tag_types code)
094fe153
JM
10238{
10239 switch (code)
10240 {
10241 case record_type:
10242 return "struct";
10243 case class_type:
10244 return "class";
10245 case union_type:
0c88d886 10246 return "union";
094fe153
JM
10247 case enum_type:
10248 return "enum";
0c88d886
MM
10249 case typename_type:
10250 return "typename";
094fe153 10251 default:
8dc2b103 10252 gcc_unreachable ();
094fe153
JM
10253 }
10254}
10255
befcd99b 10256/* Name lookup in an elaborated-type-specifier (after the keyword
4b0d3cbe 10257 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
befcd99b 10258 elaborated-type-specifier is invalid, issue a diagnostic and return
4b0d3cbe 10259 error_mark_node; otherwise, return the *_TYPE to which it referred.
cbd63935 10260 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
befcd99b 10261
560ad596 10262tree
befcd99b 10263check_elaborated_type_specifier (enum tag_types tag_code,
4b0d3cbe 10264 tree decl,
cbd63935 10265 bool allow_template_p)
befcd99b 10266{
4b0d3cbe 10267 tree type;
befcd99b 10268
4b0d3cbe
MM
10269 /* In the case of:
10270
10271 struct S { struct S *p; };
10272
10273 name lookup will find the TYPE_DECL for the implicit "S::S"
10274 typedef. Adjust for that here. */
10275 if (DECL_SELF_REFERENCE_P (decl))
10276 decl = TYPE_NAME (TREE_TYPE (decl));
10277
10278 type = TREE_TYPE (decl);
10279
461c6fce
KL
10280 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10281 is false for this case as well. */
10282 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10283 {
10284 error ("using template type parameter %qT after %qs",
10285 type, tag_name (tag_code));
10286 return error_mark_node;
10287 }
caf93cb0 10288 /* [dcl.type.elab]
4b0d3cbe
MM
10289
10290 If the identifier resolves to a typedef-name or a template
10291 type-parameter, the elaborated-type-specifier is ill-formed.
10292
10293 In other words, the only legitimate declaration to use in the
10294 elaborated type specifier is the implicit typedef created when
10295 the type is declared. */
0c88d886
MM
10296 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
10297 && tag_code != typename_type)
befcd99b 10298 {
2d01edd7 10299 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
dee15844 10300 error ("%q+D has a previous declaration here", decl);
4b0d3cbe 10301 return error_mark_node;
befcd99b 10302 }
cbd63935
KL
10303 else if (TREE_CODE (type) != RECORD_TYPE
10304 && TREE_CODE (type) != UNION_TYPE
0c88d886
MM
10305 && tag_code != enum_type
10306 && tag_code != typename_type)
cbd63935 10307 {
2d01edd7 10308 error ("%qT referred to as %qs", type, tag_name (tag_code));
dee15844 10309 error ("%q+T has a previous declaration here", type);
4b0d3cbe 10310 return error_mark_node;
cbd63935
KL
10311 }
10312 else if (TREE_CODE (type) != ENUMERAL_TYPE
4fe8db68 10313 && tag_code == enum_type)
cbd63935 10314 {
2d01edd7 10315 error ("%qT referred to as enum", type);
dee15844 10316 error ("%q+T has a previous declaration here", type);
4b0d3cbe 10317 return error_mark_node;
cbd63935
KL
10318 }
10319 else if (!allow_template_p
10320 && TREE_CODE (type) == RECORD_TYPE
10321 && CLASSTYPE_IS_TEMPLATE (type))
10322 {
10323 /* If a class template appears as elaborated type specifier
10324 without a template header such as:
10325
10326 template <class T> class C {};
10327 void f(class C); // No template header here
10328
10329 then the required template argument is missing. */
2d01edd7 10330 error ("template argument required for %<%s %T%>",
cbd63935
KL
10331 tag_name (tag_code),
10332 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
4b0d3cbe 10333 return error_mark_node;
cbd63935 10334 }
befcd99b 10335
4b0d3cbe 10336 return type;
befcd99b
MM
10337}
10338
461c6fce 10339/* Lookup NAME in elaborate type specifier in scope according to
29ef83de 10340 SCOPE and issue diagnostics if necessary.
461c6fce
KL
10341 Return *_TYPE node upon success, NULL_TREE when the NAME is not
10342 found, and ERROR_MARK_NODE for type error. */
10343
10344static tree
10345lookup_and_check_tag (enum tag_types tag_code, tree name,
29ef83de 10346 tag_scope scope, bool template_header_p)
461c6fce
KL
10347{
10348 tree t;
10349 tree decl;
29ef83de 10350 if (scope == ts_global)
bd3d082e
KL
10351 {
10352 /* First try ordinary name lookup, ignoring hidden class name
10353 injected via friend declaration. */
10e6657a 10354 decl = lookup_name_prefer_type (name, 2);
bd3d082e
KL
10355 /* If that fails, the name will be placed in the smallest
10356 non-class, non-function-prototype scope according to 3.3.1/5.
10357 We may already have a hidden name declared as friend in this
105d72c5 10358 scope. So lookup again but not ignoring hidden names.
bd3d082e
KL
10359 If we find one, that name will be made visible rather than
10360 creating a new tag. */
10361 if (!decl)
10362 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10363 }
461c6fce 10364 else
29ef83de 10365 decl = lookup_type_scope (name, scope);
461c6fce
KL
10366
10367 if (decl && DECL_CLASS_TEMPLATE_P (decl))
10368 decl = DECL_TEMPLATE_RESULT (decl);
10369
10370 if (decl && TREE_CODE (decl) == TYPE_DECL)
10371 {
4104f0f4
KL
10372 /* Look for invalid nested type:
10373 class C {
10374 class C {};
10375 }; */
10376 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
10377 {
10378 error ("%qD has the same name as the class in which it is "
10379 "declared",
10380 decl);
10381 return error_mark_node;
10382 }
10383
461c6fce
KL
10384 /* Two cases we need to consider when deciding if a class
10385 template is allowed as an elaborated type specifier:
10386 1. It is a self reference to its own class.
10387 2. It comes with a template header.
10388
10389 For example:
10390
10391 template <class T> class C {
10392 class C *c1; // DECL_SELF_REFERENCE_P is true
10393 class D;
10394 };
10395 template <class U> class C; // template_header_p is true
10396 template <class T> class C<T>::D {
10397 class C *c2; // DECL_SELF_REFERENCE_P is true
10398 }; */
10399
10400 t = check_elaborated_type_specifier (tag_code,
10401 decl,
10402 template_header_p
10403 | DECL_SELF_REFERENCE_P (decl));
10404 return t;
10405 }
af92ab36
OW
10406 else if (decl && TREE_CODE (decl) == TREE_LIST)
10407 {
10408 error ("reference to %qD is ambiguous", name);
10409 print_candidates (decl);
10410 return error_mark_node;
10411 }
461c6fce
KL
10412 else
10413 return NULL_TREE;
10414}
10415
cbd63935 10416/* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
8d08fdba
MS
10417 Define the tag as a forward-reference if it is not defined.
10418
cbd63935 10419 If a declaration is given, process it here, and report an error if
38b305d0 10420 multiple declarations are not identical.
8d08fdba 10421
29ef83de 10422 SCOPE is TS_CURRENT when this is also a definition. Only look in
8d08fdba 10423 the current frame for the name (since C++ allows new names in any
29ef83de
KL
10424 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
10425 declaration. Only look beginning from the current scope outward up
10426 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
cbd63935
KL
10427
10428 TEMPLATE_HEADER_P is true when this declaration is preceded by
10429 a set of template parameters. */
8d08fdba 10430
8d08fdba 10431tree
38b305d0 10432xref_tag (enum tag_types tag_code, tree name,
29ef83de 10433 tag_scope scope, bool template_header_p)
8d08fdba 10434{
8d08fdba 10435 enum tree_code code;
926ce8bd 10436 tree t;
25aab5d0 10437 tree context = NULL_TREE;
dc8263bc 10438
22ffcc6f 10439 timevar_push (TV_NAME_LOOKUP);
cbd63935 10440
50bc768d 10441 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
cbd63935 10442
8d08fdba
MS
10443 switch (tag_code)
10444 {
10445 case record_type:
10446 case class_type:
8d08fdba 10447 code = RECORD_TYPE;
8d08fdba
MS
10448 break;
10449 case union_type:
10450 code = UNION_TYPE;
8d08fdba
MS
10451 break;
10452 case enum_type:
10453 code = ENUMERAL_TYPE;
10454 break;
10455 default:
8dc2b103 10456 gcc_unreachable ();
8d08fdba
MS
10457 }
10458
461c6fce
KL
10459 /* In case of anonymous name, xref_tag is only called to
10460 make type node and push name. Name lookup is not required. */
10461 if (ANON_AGGRNAME_P (name))
10462 t = NULL_TREE;
8d08fdba 10463 else
461c6fce 10464 t = lookup_and_check_tag (tag_code, name,
29ef83de 10465 scope, template_header_p);
cbd63935 10466
461c6fce
KL
10467 if (t == error_mark_node)
10468 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
68642fb6 10469
29ef83de 10470 if (scope != ts_current && t && current_class_type
461c6fce
KL
10471 && template_class_depth (current_class_type)
10472 && template_header_p)
10473 {
29ef83de 10474 /* Since SCOPE is not TS_CURRENT, we are not looking at a
461c6fce
KL
10475 definition of this tag. Since, in addition, we are currently
10476 processing a (member) template declaration of a template
10477 class, we must be very careful; consider:
25aab5d0 10478
461c6fce
KL
10479 template <class X>
10480 struct S1
25aab5d0 10481
461c6fce
KL
10482 template <class U>
10483 struct S2
10484 { template <class V>
10485 friend struct S1; };
25aab5d0 10486
461c6fce
KL
10487 Here, the S2::S1 declaration should not be confused with the
10488 outer declaration. In particular, the inner version should
10489 have a template parameter of level 2, not level 1. This
10490 would be particularly important if the member declaration
10491 were instead:
25aab5d0 10492
461c6fce 10493 template <class V = U> friend struct S1;
25aab5d0 10494
461c6fce
KL
10495 say, when we should tsubst into `U' when instantiating
10496 S2. On the other hand, when presented with:
25aab5d0 10497
461c6fce
KL
10498 template <class T>
10499 struct S1 {
10500 template <class U>
10501 struct S2 {};
10502 template <class U>
10503 friend struct S2;
10504 };
25aab5d0 10505
461c6fce
KL
10506 we must find the inner binding eventually. We
10507 accomplish this by making sure that the new type we
10508 create to represent this declaration has the right
10509 TYPE_CONTEXT. */
10510 context = TYPE_CONTEXT (t);
10511 t = NULL_TREE;
8d08fdba
MS
10512 }
10513
cbd63935 10514 if (! t)
8d08fdba
MS
10515 {
10516 /* If no such tag is yet defined, create a forward-reference node
10517 and record it as the "definition".
10518 When a real declaration of this type is found,
10519 the forward-reference will be altered into a real type. */
8d08fdba
MS
10520 if (code == ENUMERAL_TYPE)
10521 {
2d01edd7 10522 error ("use of enum %q#D without previous declaration", name);
30fc3df7 10523 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
8d08fdba 10524 }
8d08fdba
MS
10525 else
10526 {
9e1e64ec 10527 t = make_class_type (code);
cbd63935 10528 TYPE_CONTEXT (t) = context;
bd3d082e 10529 t = pushtag (name, t, scope);
8d08fdba
MS
10530 }
10531 }
10532 else
10533 {
9e1e64ec 10534 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
60feef2c
LM
10535 {
10536 if (!redeclare_class_template (t, current_template_parms))
10537 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10538 }
caf93cb0 10539 else if (!processing_template_decl
9ce1594a
MM
10540 && CLASS_TYPE_P (t)
10541 && CLASSTYPE_IS_TEMPLATE (t))
10542 {
2d01edd7 10543 error ("redeclaration of %qT as a non-template", t);
b646edb8
VR
10544 error ("previous declaration %q+D", t);
10545 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9ce1594a 10546 }
bd3d082e
KL
10547
10548 /* Make injected friend class visible. */
10549 if (scope != ts_within_enclosing_non_class
10550 && hidden_name_p (TYPE_NAME (t)))
10551 {
10552 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
10553 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
10554
10555 if (TYPE_TEMPLATE_INFO (t))
10556 {
10557 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
10558 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
10559 }
0cbd7506 10560 }
8d08fdba
MS
10561 }
10562
cbd63935 10563 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
8d08fdba 10564}
8ccc31eb 10565
fc378698 10566tree
29ef83de 10567xref_tag_from_type (tree old, tree id, tag_scope scope)
fc378698 10568{
88e5899c 10569 enum tag_types tag_kind;
fc378698
MS
10570
10571 if (TREE_CODE (old) == RECORD_TYPE)
88e5899c 10572 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
fc378698 10573 else
88e5899c 10574 tag_kind = union_type;
fc378698
MS
10575
10576 if (id == NULL_TREE)
10577 id = TYPE_IDENTIFIER (old);
10578
29ef83de 10579 return xref_tag (tag_kind, id, scope, false);
fc378698
MS
10580}
10581
48b45647
NS
10582/* Create the binfo hierarchy for REF with (possibly NULL) base list
10583 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
10584 access_* node, and the TREE_VALUE is the type of the base-class.
72f8fc59
LM
10585 Non-NULL TREE_TYPE indicates virtual inheritance.
10586
bd6f7848 10587 Returns true if the binfo hierarchy was successfully created,
72f8fc59 10588 false if an error was detected. */
3fd71a52 10589
72f8fc59 10590bool
dbbf88d1 10591xref_basetypes (tree ref, tree base_list)
8ccc31eb 10592{
8fbc5ae7 10593 tree *basep;
fa743e8c 10594 tree binfo, base_binfo;
03fd3f84 10595 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
77880ae4 10596 unsigned max_bases = 0; /* Maximum direct bases. */
8fbc5ae7 10597 int i;
48b45647
NS
10598 tree default_access;
10599 tree igo_prev; /* Track Inheritance Graph Order. */
a5d7c4a3 10600
bef89e9e 10601 if (ref == error_mark_node)
72f8fc59 10602 return false;
bef89e9e 10603
48b45647
NS
10604 /* The base of a derived class is private by default, all others are
10605 public. */
10606 default_access = (TREE_CODE (ref) == RECORD_TYPE
10607 && CLASSTYPE_DECLARED_CLASS (ref)
10608 ? access_private_node : access_public_node);
da15dae6 10609
d6479fe7
MM
10610 /* First, make sure that any templates in base-classes are
10611 instantiated. This ensures that if we call ourselves recursively
10612 we do not get confused about which classes are marked and which
10613 are not. */
caf93cb0
EC
10614 basep = &base_list;
10615 while (*basep)
8fbc5ae7
MM
10616 {
10617 tree basetype = TREE_VALUE (*basep);
caf93cb0 10618
8fbc5ae7
MM
10619 if (!(processing_template_decl && uses_template_parms (basetype))
10620 && !complete_type_or_else (basetype, NULL))
dbbf88d1 10621 /* An incomplete type. Remove it from the list. */
8fbc5ae7
MM
10622 *basep = TREE_CHAIN (*basep);
10623 else
48b45647
NS
10624 {
10625 max_bases++;
10626 if (TREE_TYPE (*basep))
10627 max_vbases++;
10628 if (CLASS_TYPE_P (basetype))
10629 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
10630 basep = &TREE_CHAIN (*basep);
10631 }
8fbc5ae7 10632 }
d6479fe7 10633
3543e114 10634 TYPE_MARKED_P (ref) = 1;
48b45647 10635
cad7e87b
NS
10636 /* The binfo slot should be empty, unless this is an (ill-formed)
10637 redefinition. */
50bc768d
NS
10638 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
10639 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
caf93cb0 10640
fa743e8c 10641 binfo = make_tree_binfo (max_bases);
caf93cb0 10642
48b45647
NS
10643 TYPE_BINFO (ref) = binfo;
10644 BINFO_OFFSET (binfo) = size_zero_node;
10645 BINFO_TYPE (binfo) = ref;
caf93cb0 10646
48b45647
NS
10647 if (max_bases)
10648 {
d4e6fecb 10649 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
48b45647
NS
10650 /* An aggregate cannot have baseclasses. */
10651 CLASSTYPE_NON_AGGREGATE (ref) = 1;
caf93cb0 10652
48b45647 10653 if (TREE_CODE (ref) == UNION_TYPE)
72f8fc59
LM
10654 {
10655 error ("derived union %qT invalid", ref);
10656 return false;
10657 }
48b45647 10658 }
caf93cb0 10659
48b45647 10660 if (max_bases > 1)
dbbf88d1 10661 {
48b45647 10662 if (TYPE_FOR_JAVA (ref))
72f8fc59
LM
10663 {
10664 error ("Java class %qT cannot have multiple bases", ref);
10665 return false;
10666 }
48b45647 10667 }
caf93cb0 10668
48b45647
NS
10669 if (max_vbases)
10670 {
d4e6fecb 10671 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
caf93cb0 10672
48b45647 10673 if (TYPE_FOR_JAVA (ref))
72f8fc59
LM
10674 {
10675 error ("Java class %qT cannot have virtual bases", ref);
10676 return false;
10677 }
48b45647 10678 }
cad7e87b 10679
48b45647
NS
10680 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
10681 {
10682 tree access = TREE_PURPOSE (base_list);
10683 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
10684 tree basetype = TREE_VALUE (base_list);
caf93cb0 10685
48b45647
NS
10686 if (access == access_default_node)
10687 access = default_access;
caf93cb0 10688
5d80a306
DG
10689 if (PACK_EXPANSION_P (basetype))
10690 basetype = PACK_EXPANSION_PATTERN (basetype);
48b45647
NS
10691 if (TREE_CODE (basetype) == TYPE_DECL)
10692 basetype = TREE_TYPE (basetype);
76871f0f 10693 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
48b45647 10694 {
2d01edd7 10695 error ("base type %qT fails to be a struct or class type",
48b45647 10696 basetype);
72f8fc59 10697 return false;
8ccc31eb 10698 }
caf93cb0 10699
48b45647
NS
10700 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
10701 TYPE_FOR_JAVA (ref) = 1;
10702
fa743e8c 10703 base_binfo = NULL_TREE;
48b45647 10704 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
dbbf88d1 10705 {
48b45647 10706 base_binfo = TYPE_BINFO (basetype);
77880ae4 10707 /* The original basetype could have been a typedef'd type. */
48b45647 10708 basetype = BINFO_TYPE (base_binfo);
caf93cb0 10709
48b45647
NS
10710 /* Inherit flags from the base. */
10711 TYPE_HAS_NEW_OPERATOR (ref)
10712 |= TYPE_HAS_NEW_OPERATOR (basetype);
10713 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
10714 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
10715 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
48b45647 10716 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
3543e114
NS
10717 CLASSTYPE_DIAMOND_SHAPED_P (ref)
10718 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
10719 CLASSTYPE_REPEATED_BASE_P (ref)
10720 |= CLASSTYPE_REPEATED_BASE_P (basetype);
8fbc5ae7 10721 }
c8094d83 10722
98d6e9af
NS
10723 /* We must do this test after we've seen through a typedef
10724 type. */
10725 if (TYPE_MARKED_P (basetype))
10726 {
10727 if (basetype == ref)
2d01edd7 10728 error ("recursive type %qT undefined", basetype);
98d6e9af 10729 else
2d01edd7 10730 error ("duplicate base type %qT invalid", basetype);
72f8fc59 10731 return false;
98d6e9af 10732 }
5d80a306
DG
10733
10734 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
10735 /* Regenerate the pack expansion for the bases. */
10736 basetype = make_pack_expansion (basetype);
10737
98d6e9af 10738 TYPE_MARKED_P (basetype) = 1;
caf93cb0 10739
48b45647
NS
10740 base_binfo = copy_binfo (base_binfo, basetype, ref,
10741 &igo_prev, via_virtual);
10742 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
10743 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
f5c28a15 10744
fa743e8c 10745 BINFO_BASE_APPEND (binfo, base_binfo);
63d1c7b3 10746 BINFO_BASE_ACCESS_APPEND (binfo, access);
cad7e87b
NS
10747 }
10748
3543e114
NS
10749 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
10750 /* If we have space in the vbase vector, we must have shared at
10751 least one of them, and are therefore diamond shaped. */
10752 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
10753
dbbf88d1 10754 /* Unmark all the types. */
fa743e8c 10755 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
3543e114
NS
10756 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10757 TYPE_MARKED_P (ref) = 0;
10758
10759 /* Now see if we have a repeated base type. */
10760 if (!CLASSTYPE_REPEATED_BASE_P (ref))
10761 {
10762 for (base_binfo = binfo; base_binfo;
10763 base_binfo = TREE_CHAIN (base_binfo))
10764 {
10765 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10766 {
10767 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
10768 break;
10769 }
10770 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
10771 }
10772 for (base_binfo = binfo; base_binfo;
10773 base_binfo = TREE_CHAIN (base_binfo))
10774 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10775 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10776 else
10777 break;
10778 }
72f8fc59
LM
10779
10780 return true;
8ccc31eb 10781}
68642fb6 10782
8d08fdba 10783\f
8d08fdba 10784/* Begin compiling the definition of an enumeration type.
adf2edec
DG
10785 NAME is its name,
10786
10787 UNDERLYING_TYPE is the type that will be used as the storage for
10788 the enumeration type. This should be NULL_TREE if no storage type
10789 was specified.
10790
10791 SCOPED_ENUM_P is true if this is a scoped enumeration type.
10792
8d08fdba
MS
10793 Returns the type object, as yet incomplete.
10794 Also records info about it so that build_enumerator
10795 may be used to declare the individual values as they are read. */
10796
10797tree
adf2edec 10798start_enum (tree name, tree underlying_type, bool scoped_enum_p)
8d08fdba 10799{
29ef83de
KL
10800 tree enumtype;
10801
10802 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
8d08fdba
MS
10803
10804 /* If this is the real definition for a previous forward reference,
10805 fill in the contents in the same object that used to be the
10806 forward reference. */
10807
29ef83de
KL
10808 enumtype = lookup_and_check_tag (enum_type, name,
10809 /*tag_scope=*/ts_current,
10810 /*template_header_p=*/false);
8d08fdba
MS
10811
10812 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
30ff8252 10813 {
2d01edd7 10814 error ("multiple definition of %q#T", enumtype);
ddd2d57e 10815 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
58595203
MM
10816 /* Clear out TYPE_VALUES, and start again. */
10817 TYPE_VALUES (enumtype) = NULL_TREE;
30ff8252 10818 }
8d08fdba
MS
10819 else
10820 {
29ef83de
KL
10821 /* In case of error, make a dummy enum to allow parsing to
10822 continue. */
10823 if (enumtype == error_mark_node)
10824 name = make_anon_name ();
10825
8d08fdba 10826 enumtype = make_node (ENUMERAL_TYPE);
bd3d082e 10827 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
8d08fdba
MS
10828 }
10829
adf2edec
DG
10830 if (scoped_enum_p)
10831 {
10832 SET_SCOPED_ENUM_P (enumtype, 1);
10833 begin_scope (sk_scoped_enum, enumtype);
10834
10835 /* [C++0x dcl.enum]p5:
10836
10837 If not explicitly specified, the underlying type of a scoped
10838 enumeration type is int. */
10839 if (!underlying_type)
10840 underlying_type = integer_type_node;
10841 }
10842
10843 if (underlying_type)
10844 {
10845 if (CP_INTEGRAL_TYPE_P (underlying_type))
10846 {
10847 TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (underlying_type);
10848 TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (underlying_type);
10849 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
10850 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
10851 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
10852 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
10853 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
10854 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
10855 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
10856 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
10857 }
10858 else
10859 error ("underlying type %<%T%> of %<%T%> must be an integral type",
10860 underlying_type, enumtype);
10861 }
10862
8d08fdba
MS
10863 return enumtype;
10864}
10865
10866/* After processing and defining all the values of an enumeration type,
10867 install their decls in the enumeration type and finish it off.
968b956a 10868 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
8d08fdba 10869
968b956a 10870void
11f6b451 10871finish_enum (tree enumtype)
8d08fdba 10872{
7b6d72fc
MM
10873 tree values;
10874 tree decl;
968b956a
MM
10875 tree minnode;
10876 tree maxnode;
adf2edec 10877 tree value;
968b956a
MM
10878 tree t;
10879 bool unsignedp;
f6af9a15 10880 bool use_short_enum;
968b956a 10881 int lowprec;
caf93cb0 10882 int highprec;
968b956a 10883 int precision;
7b6d72fc 10884 integer_type_kind itk;
ad96995b 10885 tree underlying_type = NULL_TREE;
adf2edec
DG
10886 bool fixed_underlying_type_p
10887 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
968b956a
MM
10888
10889 /* We built up the VALUES in reverse order. */
10890 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
10891
f5d70cc0
JM
10892 /* For an enum defined in a template, just set the type of the values;
10893 all further processing is postponed until the template is
10894 instantiated. We need to set the type so that tsubst of a CONST_DECL
10895 works. */
968b956a
MM
10896 if (processing_template_decl)
10897 {
caf93cb0
EC
10898 for (values = TYPE_VALUES (enumtype);
10899 values;
7b6d72fc
MM
10900 values = TREE_CHAIN (values))
10901 TREE_TYPE (TREE_VALUE (values)) = enumtype;
5f261ba9 10902 if (at_function_scope_p ())
968b956a 10903 add_stmt (build_min (TAG_DEFN, enumtype));
968b956a
MM
10904 return;
10905 }
10906
7b6d72fc 10907 /* Determine the minimum and maximum values of the enumerators. */
968b956a 10908 if (TYPE_VALUES (enumtype))
8d08fdba 10909 {
968b956a 10910 minnode = maxnode = NULL_TREE;
5566b478 10911
caf93cb0 10912 for (values = TYPE_VALUES (enumtype);
adf2edec
DG
10913 values;
10914 values = TREE_CHAIN (values))
10915 {
10916 decl = TREE_VALUE (values);
10917
10918 /* [dcl.enum]: Following the closing brace of an enum-specifier,
10919 each enumerator has the type of its enumeration. Prior to the
10920 closing brace, the type of each enumerator is the type of its
10921 initializing value. */
10922 TREE_TYPE (decl) = enumtype;
10923
10924 /* Update the minimum and maximum values, if appropriate. */
10925 value = DECL_INITIAL (decl);
10926 if (value == error_mark_node)
10927 value = integer_zero_node;
10928 /* Figure out what the minimum and maximum values of the
10929 enumerators are. */
10930 if (!minnode)
10931 minnode = maxnode = value;
10932 else if (tree_int_cst_lt (maxnode, value))
10933 maxnode = value;
10934 else if (tree_int_cst_lt (value, minnode))
10935 minnode = value;
10936 }
8d08fdba 10937 }
f376e137 10938 else
7b6d72fc 10939 /* [dcl.enum]
adf2edec 10940
7b6d72fc
MM
10941 If the enumerator-list is empty, the underlying type is as if
10942 the enumeration had a single enumerator with value 0. */
968b956a
MM
10943 minnode = maxnode = integer_zero_node;
10944
10945 /* Compute the number of bits require to represent all values of the
10946 enumeration. We must do this before the type of MINNODE and
10947 MAXNODE are transformed, since min_precision relies on the
10948 TREE_TYPE of the value it is passed. */
10949 unsignedp = tree_int_cst_sgn (minnode) >= 0;
10950 lowprec = min_precision (minnode, unsignedp);
10951 highprec = min_precision (maxnode, unsignedp);
10952 precision = MAX (lowprec, highprec);
10953
adf2edec
DG
10954 if (!fixed_underlying_type_p)
10955 {
10956 /* Determine the underlying type of the enumeration.
7b6d72fc 10957
adf2edec 10958 [dcl.enum]
7b6d72fc 10959
adf2edec
DG
10960 The underlying type of an enumeration is an integral type that
10961 can represent all the enumerator values defined in the
10962 enumeration. It is implementation-defined which integral type is
10963 used as the underlying type for an enumeration except that the
10964 underlying type shall not be larger than int unless the value of
10965 an enumerator cannot fit in an int or unsigned int.
7b6d72fc 10966
adf2edec
DG
10967 We use "int" or an "unsigned int" as the underlying type, even if
10968 a smaller integral type would work, unless the user has
10969 explicitly requested that we use the smallest possible type. The
10970 user can request that for all enumerations with a command line
10971 flag, or for just one enumeration with an attribute. */
f6af9a15 10972
adf2edec
DG
10973 use_short_enum = flag_short_enums
10974 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
f6af9a15 10975
adf2edec
DG
10976 for (itk = (use_short_enum ? itk_char : itk_int);
10977 itk != itk_none;
10978 itk++)
10979 {
10980 underlying_type = integer_types[itk];
10981 if (TYPE_PRECISION (underlying_type) >= precision
10982 && TYPE_UNSIGNED (underlying_type) == unsignedp)
10983 break;
10984 }
10985 if (itk == itk_none)
10986 {
10987 /* DR 377
10988
10989 IF no integral type can represent all the enumerator values, the
10990 enumeration is ill-formed. */
10991 error ("no integral type can represent all of the enumerator values "
10992 "for %qT", enumtype);
10993 precision = TYPE_PRECISION (long_long_integer_type_node);
10994 underlying_type = integer_types[itk_unsigned_long_long];
10995 }
7b6d72fc 10996
adf2edec
DG
10997 /* [dcl.enum]
10998
10999 The value of sizeof() applied to an enumeration type, an object
11000 of an enumeration type, or an enumerator, is the value of sizeof()
11001 applied to the underlying type. */
11002 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11003 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11004 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
11005 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11006 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11007 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11008
11009 /* Set the underlying type of the enumeration type to the
11010 computed enumeration type, restricted to the enumerator
11011 values. */
11012 ENUM_UNDERLYING_TYPE (enumtype) = copy_node (underlying_type);
11013 set_min_and_max_values_for_integral_type
11014 (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
e455bc27 11015 }
adf2edec
DG
11016 else
11017 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
e455bc27 11018
39a13be5 11019 /* Compute the minimum and maximum values for the type.
8d08fdba 11020
7b6d72fc
MM
11021 [dcl.enum]
11022
11023 For an enumeration where emin is the smallest enumerator and emax
11024 is the largest, the values of the enumeration are the values of the
11025 underlying type in the range bmin to bmax, where bmin and bmax are,
11026 respectively, the smallest and largest values of the smallest bit-
11027 field that can store emin and emax. */
adf2edec 11028
d0c5c9b1
RS
11029 /* The middle-end currently assumes that types with TYPE_PRECISION
11030 narrower than their underlying type are suitably zero or sign
11031 extended to fill their mode. g++ doesn't make these guarantees.
11032 Until the middle-end can represent such paradoxical types, we
77880ae4 11033 set the TYPE_PRECISION to the width of the underlying type. */
d0c5c9b1 11034 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
adf2edec 11035
7b6d72fc 11036 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
adf2edec 11037
7b6d72fc
MM
11038 /* Convert each of the enumerators to the type of the underlying
11039 type of the enumeration. */
11040 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
11041 {
3c955a04
MM
11042 location_t saved_location;
11043
7b6d72fc 11044 decl = TREE_VALUE (values);
3c955a04
MM
11045 saved_location = input_location;
11046 input_location = DECL_SOURCE_LOCATION (decl);
adf2edec
DG
11047 if (fixed_underlying_type_p)
11048 /* If the enumeration type has a fixed underlying type, we
11049 already checked all of the enumerator values. */
11050 value = DECL_INITIAL (decl);
11051 else
11052 value = perform_implicit_conversion (underlying_type,
11053 DECL_INITIAL (decl),
11054 tf_warning_or_error);
3c955a04 11055 input_location = saved_location;
89b0433e
NS
11056
11057 /* Do not clobber shared ints. */
11058 value = copy_node (value);
c8094d83 11059
7b6d72fc
MM
11060 TREE_TYPE (value) = enumtype;
11061 DECL_INITIAL (decl) = value;
e455bc27 11062 }
8d08fdba 11063
968b956a
MM
11064 /* Fix up all variant types of this enum type. */
11065 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
11066 {
11067 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
11068 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
11069 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
11070 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
11071 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
11072 TYPE_MODE (t) = TYPE_MODE (enumtype);
11073 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
11074 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
11075 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
8df83eae 11076 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
adf2edec 11077 ENUM_UNDERLYING_TYPE (t) = ENUM_UNDERLYING_TYPE (enumtype);
cbf882af
MM
11078 }
11079
adf2edec
DG
11080 /* Finish up the scope of a scoped enumeration. */
11081 if (SCOPED_ENUM_P (enumtype))
11082 finish_scope ();
11083
968b956a
MM
11084 /* Finish debugging output for this type. */
11085 rest_of_type_compilation (enumtype, namespace_bindings_p ());
8d08fdba
MS
11086}
11087
079e1098 11088/* Build and install a CONST_DECL for an enumeration constant of the
58595203 11089 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
8d08fdba
MS
11090 Assignment of sequential values by default is handled here. */
11091
58595203 11092void
11f6b451 11093build_enumerator (tree name, tree value, tree enumtype)
8d08fdba 11094{
58595203 11095 tree decl;
e8bd800e 11096 tree context;
58595203 11097 tree type;
8d08fdba 11098
93678513
MM
11099 /* If the VALUE was erroneous, pretend it wasn't there; that will
11100 result in the enum being assigned the next value in sequence. */
11101 if (value == error_mark_node)
11102 value = NULL_TREE;
11103
8d08fdba
MS
11104 /* Remove no-op casts from the value. */
11105 if (value)
11106 STRIP_TYPE_NOPS (value);
11107
58595203
MM
11108 if (! processing_template_decl)
11109 {
11110 /* Validate and default VALUE. */
11111 if (value != NULL_TREE)
11112 {
8a784e4a 11113 value = integral_constant_value (value);
58595203
MM
11114
11115 if (TREE_CODE (value) == INTEGER_CST)
11116 {
0a72704b 11117 value = perform_integral_promotions (value);
58595203
MM
11118 constant_expression_warning (value);
11119 }
11120 else
11121 {
253e0d15 11122 error ("enumerator value for %qD is not an integer constant", name);
58595203
MM
11123 value = NULL_TREE;
11124 }
11125 }
11126
11127 /* Default based on previous value. */
6a540f3c 11128 if (value == NULL_TREE)
58595203 11129 {
58595203
MM
11130 if (TYPE_VALUES (enumtype))
11131 {
ff4eb0b5
ZW
11132 HOST_WIDE_INT hi;
11133 unsigned HOST_WIDE_INT lo;
11134 tree prev_value;
11135 bool overflowed;
11136
11137 /* The next value is the previous value plus one. We can
0cbd7506 11138 safely assume that the previous value is an INTEGER_CST.
ff4eb0b5
ZW
11139 add_double doesn't know the type of the target expression,
11140 so we must check with int_fits_type_p as well. */
58595203 11141 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
ff4eb0b5
ZW
11142 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
11143 TREE_INT_CST_HIGH (prev_value),
11144 1, 0, &lo, &hi);
11145 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
11146 overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
68642fb6 11147
ff4eb0b5 11148 if (overflowed)
3c955a04
MM
11149 {
11150 error ("overflow in enumeration values at %qD", name);
11151 value = error_mark_node;
11152 }
58595203
MM
11153 }
11154 else
11155 value = integer_zero_node;
11156 }
11157
11158 /* Remove no-op casts from the value. */
f5d70cc0 11159 STRIP_TYPE_NOPS (value);
adf2edec
DG
11160
11161 /* If the underlying type of the enum is fixed, check whether
11162 the enumerator values fits in the underlying type. If it
11163 does not fit, the program is ill-formed [C++0x dcl.enum]. */
11164 if (ENUM_UNDERLYING_TYPE (enumtype)
11165 && value
11166 && TREE_CODE (value) == INTEGER_CST
11167 && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
11168 {
11169 error ("enumerator value %E is too large for underlying type %<%T%>",
11170 value, ENUM_UNDERLYING_TYPE (enumtype));
11171
11172 /* Silently convert the value so that we can continue. */
11173 value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
11174 value, tf_none);
11175 if (value == error_mark_node)
11176 value = NULL_TREE;
11177 }
58595203 11178 }
8d08fdba 11179
8d08fdba 11180 /* C++ associates enums with global, function, or class declarations. */
58595203
MM
11181 context = current_scope ();
11182
11183 /* Build the actual enumeration constant. Note that the enumeration
adf2edec
DG
11184 constants have the underlying type of the enum (if it is fixed)
11185 or the type of their initializer (if the underlying type of the
11186 enum is not fixed):
11187
11188 [ C++0x dcl.enum ]
11189
11190 If the underlying type is fixed, the type of each enumerator
11191 prior to the closing brace is the underlying type; if the
11192 initializing value of an enumerator cannot be represented by
11193 the underlying type, the program is ill-formed. If the
11194 underlying type is not fixed, the type of each enumerator is
11195 the type of its initializing value.
11196
11197 If the underlying type is not fixed, it will be computed by
11198 finish_enum and we will reset the type of this enumerator. Of
11199 course, if we're processing a template, there may be no value. */
58595203
MM
11200 type = value ? TREE_TYPE (value) : NULL_TREE;
11201
11202 if (context && context == current_class_type)
11203 /* This enum declaration is local to the class. We need the full
8f17b5c5 11204 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
58595203
MM
11205 decl = build_lang_decl (CONST_DECL, name, type);
11206 else
11207 /* It's a global enum, or it's local to a function. (Note local to
e8bd800e 11208 a function could mean local to a class method. */
58595203 11209 decl = build_decl (CONST_DECL, name, type);
e8bd800e 11210
58595203 11211 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
6de9cd9a 11212 TREE_CONSTANT (decl) = 1;
6de9cd9a 11213 TREE_READONLY (decl) = 1;
58595203 11214 DECL_INITIAL (decl) = value;
e8bd800e 11215
58595203
MM
11216 if (context && context == current_class_type)
11217 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
7b6d72fc
MM
11218 on the TYPE_FIELDS list for `S'. (That's so that you can say
11219 things like `S::i' later.) */
58595203
MM
11220 finish_member_declaration (decl);
11221 else
9780c24f 11222 pushdecl (decl);
58595203
MM
11223
11224 /* Add this enumeration constant to the list for this type. */
11225 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
8d08fdba
MS
11226}
11227
adf2edec
DG
11228/* Look for an enumerator with the given NAME within the enumeration
11229 type ENUMTYPE. This routine is used primarily for qualified name
11230 lookup into an enumerator in C++0x, e.g.,
11231
11232 enum class Color { Red, Green, Blue };
11233
11234 Color color = Color::Red;
11235
11236 Returns the value corresponding to the enumerator, or
11237 NULL_TREE if no such enumerator was found. */
11238tree
11239lookup_enumerator (tree enumtype, tree name)
11240{
11241 tree e;
11242 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
11243
11244 e = purpose_member (name, TYPE_VALUES (enumtype));
11245 return e? TREE_VALUE (e) : NULL_TREE;
11246}
11247
8d08fdba 11248\f
a8f73d4b
MM
11249/* We're defining DECL. Make sure that it's type is OK. */
11250
11251static void
11f6b451 11252check_function_type (tree decl, tree current_function_parms)
a8f73d4b
MM
11253{
11254 tree fntype = TREE_TYPE (decl);
d0f062fb 11255 tree return_type = complete_type (TREE_TYPE (fntype));
a8f73d4b
MM
11256
11257 /* In a function definition, arg types must be complete. */
11258 require_complete_types_for_parms (current_function_parms);
11259
c9387915
GB
11260 if (dependent_type_p (return_type))
11261 return;
360f866c 11262 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
9e1e64ec 11263 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
a8f73d4b 11264 {
51b15ede 11265 tree args = TYPE_ARG_TYPES (fntype);
3db45ab5 11266
360f866c
JJ
11267 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
11268 error ("return type %q#T is incomplete", return_type);
11269 else
11270 error ("return type has Java class type %q#T", return_type);
a8f73d4b 11271
51b15ede 11272 /* Make it return void instead. */
a8f73d4b 11273 if (TREE_CODE (fntype) == METHOD_TYPE)
51b15ede
NS
11274 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
11275 void_type_node,
11276 TREE_CHAIN (args));
a8f73d4b 11277 else
51b15ede 11278 fntype = build_function_type (void_type_node, args);
68642fb6 11279 TREE_TYPE (decl)
a8f73d4b 11280 = build_exception_variant (fntype,
51b15ede 11281 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
a8f73d4b
MM
11282 }
11283 else
11284 abstract_virtuals_error (decl, TREE_TYPE (fntype));
11285}
11286
8d08fdba
MS
11287/* Create the FUNCTION_DECL for a function definition.
11288 DECLSPECS and DECLARATOR are the parts of the declaration;
11289 they describe the function's name and the type it returns,
11290 but twisted together in a fashion that parallels the syntax of C.
11291
a8f73d4b
MM
11292 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
11293 DECLARATOR is really the DECL for the function we are about to
11294 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
f444e36b 11295 indicating that the function is an inline defined in-class.
68642fb6 11296
8d08fdba
MS
11297 This function creates a binding context for the function body
11298 as well as setting up the FUNCTION_DECL in current_function_decl.
11299
8d08fdba
MS
11300 For C++, we must first check whether that datum makes any sense.
11301 For example, "class A local_a(1,2);" means that variable local_a
11302 is an aggregate of type A, which should have a constructor
72c4a4ca
GK
11303 applied to it with the argument list [1, 2].
11304
11305 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
11306 or may be a BLOCK if the function has been defined previously
11307 in this translation unit. On exit, DECL_INITIAL (decl1) will be
11308 error_mark_node if the function has never been defined, or
11309 a BLOCK if the function has been defined somewhere. */
8d08fdba 11310
058b15c1
MM
11311void
11312start_preparsed_function (tree decl1, tree attrs, int flags)
8d08fdba 11313{
8d08fdba
MS
11314 tree ctype = NULL_TREE;
11315 tree fntype;
11316 tree restype;
8d08fdba 11317 int doing_friend = 0;
e2500fed 11318 struct cp_binding_level *bl;
f444e36b 11319 tree current_function_parms;
3e3935a9 11320 struct c_fileinfo *finfo
c533e34d 11321 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
1ef0df47 11322 bool honor_interface;
8d08fdba 11323
8d08fdba 11324 /* Sanity check. */
50bc768d
NS
11325 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
11326 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
8d08fdba 11327
058b15c1
MM
11328 fntype = TREE_TYPE (decl1);
11329 if (TREE_CODE (fntype) == METHOD_TYPE)
11330 ctype = TYPE_METHOD_BASETYPE (fntype);
caf93cb0 11331
058b15c1
MM
11332 /* ISO C++ 11.4/5. A friend function defined in a class is in
11333 the (lexical) scope of the class in which it is defined. */
11334 if (!ctype && DECL_FRIEND_P (decl1))
8d08fdba 11335 {
058b15c1 11336 ctype = DECL_FRIEND_CONTEXT (decl1);
caf93cb0 11337
058b15c1
MM
11338 /* CTYPE could be null here if we're dealing with a template;
11339 for example, `inline friend float foo()' inside a template
11340 will have no CTYPE set. */
11341 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11342 ctype = NULL_TREE;
11343 else
11344 doing_friend = 1;
8d08fdba 11345 }
68642fb6 11346
97055d5c
AO
11347 if (DECL_DECLARED_INLINE_P (decl1)
11348 && lookup_attribute ("noinline", attrs))
dee15844 11349 warning (0, "inline function %q+D given attribute noinline", decl1);
97055d5c 11350
3a47c4e4
AO
11351 /* Handle gnu_inline attribute. */
11352 if (GNU_INLINE_P (decl1))
11353 {
11354 DECL_EXTERNAL (decl1) = 1;
11355 DECL_NOT_REALLY_EXTERN (decl1) = 0;
11356 DECL_INTERFACE_KNOWN (decl1) = 1;
12cdc4fa 11357 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
3a47c4e4
AO
11358 }
11359
5f6eeeb3
NS
11360 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
11361 /* This is a constructor, we must ensure that any default args
11362 introduced by this definition are propagated to the clones
11363 now. The clones are used directly in overload resolution. */
11364 adjust_clone_args (decl1);
11365
b35d4555
MM
11366 /* Sometimes we don't notice that a function is a static member, and
11367 build a METHOD_TYPE for it. Fix that up now. */
11368 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
11369 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
11370 {
3afb32a4 11371 revert_static_member_fn (decl1);
b35d4555
MM
11372 ctype = NULL_TREE;
11373 }
8d08fdba 11374
f181d4ae
MM
11375 /* Set up current_class_type, and enter the scope of the class, if
11376 appropriate. */
11377 if (ctype)
14d22dd6 11378 push_nested_class (ctype);
f181d4ae 11379 else if (DECL_STATIC_FUNCTION_P (decl1))
14d22dd6 11380 push_nested_class (DECL_CONTEXT (decl1));
f181d4ae
MM
11381
11382 /* Now that we have entered the scope of the class, we must restore
11383 the bindings for any template parameters surrounding DECL1, if it
11384 is an inline member template. (Order is important; consider the
11385 case where a template parameter has the same name as a field of
11386 the class.) It is not until after this point that
11387 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
a8f73d4b 11388 if (flags & SF_INCLASS_INLINE)
f181d4ae
MM
11389 maybe_begin_member_template_processing (decl1);
11390
56cb9733 11391 /* Effective C++ rule 15. */
9188c363 11392 if (warn_ecpp
596ea4e5 11393 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9188c363 11394 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
b323323f 11395 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
9188c363
MM
11396
11397 /* Make the init_value nonzero so pushdecl knows this is not tentative.
11398 error_mark_node is replaced below (in poplevel) with the BLOCK. */
b35d4555
MM
11399 if (!DECL_INITIAL (decl1))
11400 DECL_INITIAL (decl1) = error_mark_node;
9188c363 11401
9188c363
MM
11402 /* This function exists in static storage.
11403 (This does not mean `static' in the C sense!) */
11404 TREE_STATIC (decl1) = 1;
11405
11406 /* We must call push_template_decl after current_class_type is set
11407 up. (If we are processing inline definitions after exiting a
11408 class scope, current_class_type will be NULL_TREE until set above
11409 by push_nested_class.) */
11410 if (processing_template_decl)
11e97737
VR
11411 {
11412 /* FIXME: Handle error_mark_node more gracefully. */
11413 tree newdecl1 = push_template_decl (decl1);
11414 if (newdecl1 != error_mark_node)
0cbd7506 11415 decl1 = newdecl1;
11e97737 11416 }
9188c363 11417
f181d4ae 11418 /* We are now in the scope of the function being defined. */
8d08fdba 11419 current_function_decl = decl1;
f181d4ae 11420
5566b478
MS
11421 /* Save the parm names or decls from this function's declarator
11422 where store_parm_decls will find them. */
4546865e 11423 current_function_parms = DECL_ARGUMENTS (decl1);
8d08fdba 11424
a8f73d4b
MM
11425 /* Make sure the parameter and return types are reasonable. When
11426 you declare a function, these types can be incomplete, but they
11427 must be complete when you define the function. */
c9387915 11428 check_function_type (decl1, current_function_parms);
f181d4ae 11429
a8f73d4b
MM
11430 /* Build the return declaration for the function. */
11431 restype = TREE_TYPE (fntype);
e89a6075 11432 if (DECL_RESULT (decl1) == NULL_TREE)
a8f73d4b 11433 {
b785f485
RH
11434 tree resdecl;
11435
11436 resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
11437 DECL_ARTIFICIAL (resdecl) = 1;
11438 DECL_IGNORED_P (resdecl) = 1;
11439 DECL_RESULT (decl1) = resdecl;
11440
9804209d 11441 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
5566b478 11442 }
a8f73d4b 11443
a8f73d4b 11444 /* Let the user know we're compiling this function. */
ea11ca7e 11445 announce_function (decl1);
b7484fbe 11446
878cd289
MS
11447 /* Record the decl so that the function name is defined.
11448 If we already have a decl for this name, and it is a FUNCTION_DECL,
11449 use the old decl. */
a8f73d4b 11450 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
878cd289 11451 {
75650646 11452 /* A specialization is not used to guide overload resolution. */
18f5be99 11453 if (!DECL_FUNCTION_MEMBER_P (decl1)
caf93cb0 11454 && !(DECL_USE_TEMPLATE (decl1) &&
18f5be99 11455 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
b1a19c7c
MM
11456 {
11457 tree olddecl = pushdecl (decl1);
11458
11459 if (olddecl == error_mark_node)
11460 /* If something went wrong when registering the declaration,
11461 use DECL1; we have to have a FUNCTION_DECL to use when
11462 parsing the body of the function. */
11463 ;
11464 else
dfdec7a7
ILT
11465 {
11466 /* Otherwise, OLDDECL is either a previous declaration
11467 of the same function or DECL1 itself. */
11468
11469 if (warn_missing_declarations
11470 && olddecl == decl1
11471 && !DECL_MAIN_P (decl1)
11472 && TREE_PUBLIC (decl1)
11473 && !DECL_DECLARED_INLINE_P (decl1))
11474 {
11475 tree context;
11476
11477 /* Check whether DECL1 is in an anonymous
11478 namespace. */
11479 for (context = DECL_CONTEXT (decl1);
11480 context;
11481 context = DECL_CONTEXT (context))
11482 {
11483 if (TREE_CODE (context) == NAMESPACE_DECL
11484 && DECL_NAME (context) == NULL_TREE)
11485 break;
11486 }
11487
11488 if (context == NULL)
11489 warning (OPT_Wmissing_declarations,
11490 "no previous declaration for %q+D", decl1);
11491 }
11492
11493 decl1 = olddecl;
11494 }
b1a19c7c 11495 }
2c73f9f5 11496 else
b7698cf0 11497 {
a1c65f9f 11498 /* We need to set the DECL_CONTEXT. */
b7698cf0
JM
11499 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
11500 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
b7698cf0 11501 }
878cd289 11502 fntype = TREE_TYPE (decl1);
2ef06beb
MM
11503
11504 /* If #pragma weak applies, mark the decl appropriately now.
11505 The pragma only applies to global functions. Because
11506 determining whether or not the #pragma applies involves
11507 computing the mangled name for the declaration, we cannot
11508 apply the pragma until after we have merged this declaration
11509 with any previous declarations; if the original declaration
11510 has a linkage specification, that specification applies to
11511 the definition as well, and may affect the mangled name. */
11512 if (!DECL_CONTEXT (decl1))
11513 maybe_apply_pragma_weak (decl1);
878cd289 11514 }
5566b478 11515
72c4a4ca 11516 /* Reset this in case the call to pushdecl changed it. */
5566b478 11517 current_function_decl = decl1;
72c4a4ca
GK
11518
11519 gcc_assert (DECL_INITIAL (decl1));
11520
11521 /* This function may already have been parsed, in which case just
11522 return; our caller will skip over the body without parsing. */
11523 if (DECL_INITIAL (decl1) != error_mark_node)
11524 return;
11525
11526 /* Initialize RTL machinery. We cannot do this until
11527 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
11528 even when processing a template; this is how we get
11529 CFUN set up, and our per-function variables initialized.
11530 FIXME factor out the non-RTL stuff. */
11531 bl = current_binding_level;
182e0d71 11532 allocate_struct_function (decl1, processing_template_decl);
e8924938
PB
11533
11534 /* Initialize the language data structures. Whenever we start
11535 a new function, we destroy temporaries in the usual way. */
11536 cfun->language = GGC_CNEW (struct language_function);
11537 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
72c4a4ca
GK
11538 current_binding_level = bl;
11539
11540 /* Even though we're inside a function body, we still don't want to
11541 call expand_expr to calculate the size of a variable-sized array.
11542 We haven't necessarily assigned RTL to all variables yet, so it's
11543 not safe to try to expand expressions involving them. */
e3b5732b 11544 cfun->dont_save_pending_sizes_p = 1;
72c4a4ca
GK
11545
11546 /* Start the statement-tree, start the tree now. */
11547 DECL_SAVED_TREE (decl1) = push_stmt_list ();
878cd289 11548
78c120b5
MM
11549 /* If we are (erroneously) defining a function that we have already
11550 defined before, wipe out what we knew before. */
e2500fed
GK
11551 if (!DECL_PENDING_INLINE_P (decl1))
11552 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
b35d4555 11553
f444e36b 11554 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
b35d4555
MM
11555 {
11556 /* We know that this was set up by `grokclassfn'. We do not
11557 wait until `store_parm_decls', since evil parse errors may
11558 never get us to that point. Here we keep the consistency
11559 between `current_class_type' and `current_class_ptr'. */
11560 tree t = DECL_ARGUMENTS (decl1);
68642fb6 11561
50bc768d
NS
11562 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
11563 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
68642fb6
UD
11564
11565 cp_function_chain->x_current_class_ref
5ade1ed2 11566 = cp_build_indirect_ref (t, NULL, tf_warning_or_error);
b35d4555
MM
11567 cp_function_chain->x_current_class_ptr = t;
11568
018fc244
MM
11569 /* Constructors and destructors need to know whether they're "in
11570 charge" of initializing virtual base classes. */
e0fff4b3 11571 t = TREE_CHAIN (t);
454fa7a7 11572 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
e0fff4b3
JM
11573 {
11574 current_in_charge_parm = t;
11575 t = TREE_CHAIN (t);
11576 }
11577 if (DECL_HAS_VTT_PARM_P (decl1))
11578 {
8dc2b103 11579 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
e0fff4b3
JM
11580 current_vtt_parm = t;
11581 }
b35d4555
MM
11582 }
11583
1ef0df47
MM
11584 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
11585 /* Implicitly-defined methods (like the
11586 destructor for a class in which no destructor
11587 is explicitly declared) must not be defined
11588 until their definition is needed. So, we
11589 ignore interface specifications for
11590 compiler-generated functions. */
11591 && !DECL_ARTIFICIAL (decl1));
3db45ab5 11592
db5ae43f 11593 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 11594 {
4f1c5b7d 11595 tree ctx = decl_function_context (decl1);
86052cc3 11596
faae18ab
MS
11597 if (DECL_NOT_REALLY_EXTERN (decl1))
11598 DECL_EXTERNAL (decl1) = 0;
86052cc3 11599
79065db2 11600 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
86052cc3
JM
11601 && TREE_PUBLIC (ctx))
11602 /* This is a function in a local class in an extern inline
11603 function. */
11604 comdat_linkage (decl1);
faae18ab 11605 }
8d08fdba
MS
11606 /* If this function belongs to an interface, it is public.
11607 If it belongs to someone else's interface, it is also external.
1f901793 11608 This only affects inlines and template instantiations. */
1ef0df47 11609 else if (!finfo->interface_unknown && honor_interface)
8d08fdba 11610 {
caf93cb0 11611 if (DECL_DECLARED_INLINE_P (decl1)
79065db2 11612 || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 11613 || processing_template_decl)
1f901793
JM
11614 {
11615 DECL_EXTERNAL (decl1)
5d709b00 11616 = (finfo->interface_only
caf93cb0 11617 || (DECL_DECLARED_INLINE_P (decl1)
79065db2 11618 && ! flag_implement_inlines
9c73ec84 11619 && !DECL_VINDEX (decl1)));
1f901793
JM
11620
11621 /* For WIN32 we also want to put these in linkonce sections. */
11622 maybe_make_one_only (decl1);
11623 }
db5ae43f 11624 else
893de33c 11625 DECL_EXTERNAL (decl1) = 0;
db5ae43f 11626 DECL_INTERFACE_KNOWN (decl1) = 1;
4684cd27 11627 /* If this function is in an interface implemented in this file,
3b426391 11628 make sure that the back end knows to emit this function
4684cd27
MM
11629 here. */
11630 if (!DECL_EXTERNAL (decl1))
11631 mark_needed (decl1);
8d08fdba 11632 }
5d709b00 11633 else if (finfo->interface_unknown && finfo->interface_only
1ef0df47 11634 && honor_interface)
c16c47fb
JM
11635 {
11636 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
5d709b00
ZW
11637 interface, we will have both finfo->interface_unknown and
11638 finfo->interface_only set. In that case, we don't want to
11639 use the normal heuristics because someone will supply a
11640 #pragma implementation elsewhere, and deducing it here would
11641 produce a conflict. */
c16c47fb
JM
11642 comdat_linkage (decl1);
11643 DECL_EXTERNAL (decl1) = 0;
11644 DECL_INTERFACE_KNOWN (decl1) = 1;
11645 DECL_DEFER_OUTPUT (decl1) = 1;
11646 }
8d08fdba 11647 else
a0a33927
MS
11648 {
11649 /* This is a definition, not a reference.
3a47c4e4
AO
11650 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
11651 if (!GNU_INLINE_P (decl1))
11652 DECL_EXTERNAL (decl1) = 0;
faae18ab 11653
caf93cb0 11654 if ((DECL_DECLARED_INLINE_P (decl1)
79065db2 11655 || DECL_TEMPLATE_INSTANTIATION (decl1))
5566b478
MS
11656 && ! DECL_INTERFACE_KNOWN (decl1)
11657 /* Don't try to defer nested functions for now. */
4f1c5b7d 11658 && ! decl_function_context (decl1))
878cd289
MS
11659 DECL_DEFER_OUTPUT (decl1) = 1;
11660 else
893de33c 11661 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 11662 }
a9aedbc2 11663
0ed5edac
JM
11664 /* Determine the ELF visibility attribute for the function. We must not
11665 do this before calling "pushdecl", as we must allow "duplicate_decls"
11666 to merge any attributes appropriately. We also need to wait until
11667 linkage is set. */
11668 if (!DECL_CLONED_FUNCTION_P (decl1))
11669 determine_visibility (decl1);
11670
ac20c67a 11671 begin_scope (sk_function_parms, decl1);
8d08fdba 11672
5566b478
MS
11673 ++function_depth;
11674
44d10c10
PB
11675 if (DECL_DESTRUCTOR_P (decl1)
11676 || (DECL_CONSTRUCTOR_P (decl1)
11677 && targetm.cxx.cdtor_returns_this ()))
46e8c075 11678 {
44d10c10
PB
11679 cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
11680 DECL_CONTEXT (cdtor_label) = current_function_decl;
46e8c075 11681 }
8d08fdba 11682
0ba8a114 11683 start_fname_decls ();
caf93cb0 11684
f444e36b 11685 store_parm_decls (current_function_parms);
058b15c1
MM
11686}
11687
11688
11689/* Like start_preparsed_function, except that instead of a
11690 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
11691
11692 Returns 1 on success. If the DECLARATOR is not suitable for a function
11693 (it defines a datum instead), we return 0, which tells
11694 yyparse to report a parse error. */
11695
11696int
caf93cb0 11697start_function (cp_decl_specifier_seq *declspecs,
62d1db17 11698 const cp_declarator *declarator,
058b15c1
MM
11699 tree attrs)
11700{
11701 tree decl1;
11702
058b15c1
MM
11703 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
11704 /* If the declarator is not suitable for a function definition,
11705 cause a syntax error. */
11706 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
11707 return 0;
caf93cb0 11708
058b15c1 11709 if (DECL_MAIN_P (decl1))
2cfe82fe
ZW
11710 /* main must return int. grokfndecl should have corrected it
11711 (and issued a diagnostic) if the user got it wrong. */
11712 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
11713 integer_type_node));
058b15c1
MM
11714
11715 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
f444e36b 11716
8d08fdba
MS
11717 return 1;
11718}
11719\f
68d04c67
MM
11720/* Returns true iff an EH_SPEC_BLOCK should be created in the body of
11721 FN. */
11722
11723static bool
11724use_eh_spec_block (tree fn)
11725{
11726 return (flag_exceptions && flag_enforce_eh_specs
11727 && !processing_template_decl
11728 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
11729 /* We insert the EH_SPEC_BLOCK only in the original
11730 function; then, it is copied automatically to the
11731 clones. */
11732 && !DECL_CLONED_FUNCTION_P (fn)
11733 /* Implicitly-generated constructors and destructors have
11734 exception specifications. However, those specifications
11735 are the union of the possible exceptions specified by the
11736 constructors/destructors for bases and members, so no
11737 unallowed exception will ever reach this function. By
11738 not creating the EH_SPEC_BLOCK we save a little memory,
11739 and we avoid spurious warnings about unreachable
11740 code. */
11741 && !DECL_ARTIFICIAL (fn));
11742}
11743
8d08fdba
MS
11744/* Store the parameter declarations into the current function declaration.
11745 This is called after parsing the parameter declarations, before
11746 digesting the body of the function.
11747
11748 Also install to binding contour return value identifier, if any. */
11749
f444e36b 11750static void
11f6b451 11751store_parm_decls (tree current_function_parms)
8d08fdba 11752{
926ce8bd
KH
11753 tree fndecl = current_function_decl;
11754 tree parm;
8d08fdba 11755
8d08fdba
MS
11756 /* This is a chain of any other decls that came in among the parm
11757 declarations. If a parm is declared with enum {foo, bar} x;
11758 then CONST_DECLs for foo and bar are put here. */
11759 tree nonparms = NULL_TREE;
11760
b35d4555 11761 if (current_function_parms)
8d08fdba
MS
11762 {
11763 /* This case is when the function was defined with an ANSI prototype.
11764 The parms already have decls, so we need not do anything here
11765 except record them as in effect
11766 and complain if any redundant old-style parm decls were written. */
11767
b35d4555
MM
11768 tree specparms = current_function_parms;
11769 tree next;
11770
f444e36b 11771 /* Must clear this because it might contain TYPE_DECLs declared
b35d4555 11772 at class level. */
00e8de68 11773 current_binding_level->names = NULL;
8d08fdba 11774
f444e36b 11775 /* If we're doing semantic analysis, then we'll call pushdecl
b35d4555
MM
11776 for each of these. We must do them in reverse order so that
11777 they end in the correct forward order. */
f444e36b 11778 specparms = nreverse (specparms);
5566b478 11779
b35d4555 11780 for (parm = specparms; parm; parm = next)
8d08fdba
MS
11781 {
11782 next = TREE_CHAIN (parm);
11783 if (TREE_CODE (parm) == PARM_DECL)
11784 {
f444e36b
MM
11785 if (DECL_NAME (parm) == NULL_TREE
11786 || TREE_CODE (parm) != VOID_TYPE)
11787 pushdecl (parm);
11788 else
2d01edd7 11789 error ("parameter %qD declared void", parm);
8d08fdba
MS
11790 }
11791 else
11792 {
11793 /* If we find an enum constant or a type tag,
11794 put it aside for the moment. */
11795 TREE_CHAIN (parm) = NULL_TREE;
11796 nonparms = chainon (nonparms, parm);
11797 }
11798 }
11799
f444e36b
MM
11800 /* Get the decls in their original chain order and record in the
11801 function. This is all and only the PARM_DECLs that were
11802 pushed into scope by the loop above. */
11803 DECL_ARGUMENTS (fndecl) = getdecls ();
8d08fdba
MS
11804 }
11805 else
11806 DECL_ARGUMENTS (fndecl) = NULL_TREE;
11807
11808 /* Now store the final chain of decls for the arguments
11809 as the decl-chain of the current lexical scope.
11810 Put the enumerators in as well, at the front so that
11811 DECL_ARGUMENTS is not modified. */
00e8de68 11812 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
eb448459 11813
68d04c67
MM
11814 if (use_eh_spec_block (current_function_decl))
11815 current_eh_spec_block = begin_eh_spec_block ();
8d08fdba
MS
11816}
11817
8d08fdba 11818\f
59026e79
MM
11819/* We have finished doing semantic analysis on DECL, but have not yet
11820 generated RTL for its body. Save away our current state, so that
11821 when we want to generate RTL later we know what to do. */
11822
11823static void
11f6b451 11824save_function_data (tree decl)
59026e79 11825{
e2500fed 11826 struct language_function *f;
59026e79
MM
11827
11828 /* Save the language-specific per-function data so that we can
11829 get it back when we really expand this function. */
50bc768d 11830 gcc_assert (!DECL_PENDING_INLINE_P (decl));
68642fb6 11831
59026e79 11832 /* Make a copy. */
99dd239f 11833 f = GGC_NEW (struct language_function);
e2500fed 11834 memcpy (f, cp_function_chain, sizeof (struct language_function));
59026e79
MM
11835 DECL_SAVED_FUNCTION_DATA (decl) = f;
11836
11837 /* Clear out the bits we don't need. */
325c3691 11838 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
59026e79 11839 f->bindings = NULL;
8e4ce833 11840 f->x_local_names = NULL;
59026e79
MM
11841}
11842
cdd2559c 11843
44d10c10 11844/* Set the return value of the constructor (if present). */
efee38a9
MM
11845
11846static void
11f6b451 11847finish_constructor_body (void)
efee38a9 11848{
44d10c10
PB
11849 tree val;
11850 tree exprstmt;
11851
298b7d2b
AH
11852 if (targetm.cxx.cdtor_returns_this ()
11853 && (! TYPE_FOR_JAVA (current_class_type)))
44d10c10
PB
11854 {
11855 /* Any return from a constructor will end up here. */
11856 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
11857
11858 val = DECL_ARGUMENTS (current_function_decl);
f293ce4b
RS
11859 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
11860 DECL_RESULT (current_function_decl), val);
44d10c10
PB
11861 /* Return the address of the object. */
11862 exprstmt = build_stmt (RETURN_EXPR, val);
11863 add_stmt (exprstmt);
11864 }
efee38a9
MM
11865}
11866
cdd2559c
JM
11867/* Do all the processing for the beginning of a destructor; set up the
11868 vtable pointers and cleanups for bases and members. */
11869
11870static void
11f6b451 11871begin_destructor_body (void)
cdd2559c 11872{
cdd2559c
JM
11873 tree compound_stmt;
11874
0e686aa6
MM
11875 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
11876 issued an error message. We still want to try to process the
11877 body of the function, but initialize_vtbl_ptrs will crash if
11878 TYPE_BINFO is NULL. */
11879 if (COMPLETE_TYPE_P (current_class_type))
11880 {
11881 compound_stmt = begin_compound_stmt (0);
11882 /* Make all virtual function table pointers in non-virtual base
11883 classes point to CURRENT_CLASS_TYPE's virtual function
11884 tables. */
11885 initialize_vtbl_ptrs (current_class_ptr);
11886 finish_compound_stmt (compound_stmt);
3db45ab5 11887
0e686aa6
MM
11888 /* And insert cleanups for our bases and members so that they
11889 will be properly destroyed if we throw. */
11890 push_base_cleanups ();
11891 }
cdd2559c
JM
11892}
11893
ade3dc07
JM
11894/* At the end of every destructor we generate code to delete the object if
11895 necessary. Do that now. */
9bfadf57
MM
11896
11897static void
11f6b451 11898finish_destructor_body (void)
9bfadf57 11899{
9bfadf57
MM
11900 tree exprstmt;
11901
5633b37c
MM
11902 /* Any return from a destructor will end up here; that way all base
11903 and member cleanups will be run when the function returns. */
44d10c10 11904 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
5633b37c 11905
52682a1b
MM
11906 /* In a virtual destructor, we must call delete. */
11907 if (DECL_VIRTUAL_P (current_function_decl))
11908 {
11909 tree if_stmt;
fa72b064 11910 tree virtual_size = cxx_sizeof (current_class_type);
68642fb6 11911
52682a1b 11912 /* [class.dtor]
68642fb6 11913
ade3dc07
JM
11914 At the point of definition of a virtual destructor (including
11915 an implicit definition), non-placement operator delete shall
11916 be looked up in the scope of the destructor's class and if
11917 found shall be accessible and unambiguous. */
3db45ab5 11918 exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
63c9a190 11919 virtual_size,
3db45ab5
MS
11920 /*global_p=*/false,
11921 /*placement=*/NULL_TREE,
63c9a190 11922 /*alloc_fn=*/NULL_TREE);
298d6f60 11923
52682a1b 11924 if_stmt = begin_if_stmt ();
f293ce4b
RS
11925 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
11926 current_in_charge_parm,
11927 integer_one_node),
52682a1b
MM
11928 if_stmt);
11929 finish_expr_stmt (exprstmt);
11930 finish_then_clause (if_stmt);
325c3691 11931 finish_if_stmt (if_stmt);
52682a1b 11932 }
44d10c10
PB
11933
11934 if (targetm.cxx.cdtor_returns_this ())
11935 {
11936 tree val;
11937
11938 val = DECL_ARGUMENTS (current_function_decl);
f293ce4b
RS
11939 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
11940 DECL_RESULT (current_function_decl), val);
44d10c10
PB
11941 /* Return the address of the object. */
11942 exprstmt = build_stmt (RETURN_EXPR, val);
11943 add_stmt (exprstmt);
11944 }
ade3dc07 11945}
9bfadf57 11946
ade3dc07
JM
11947/* Do the necessary processing for the beginning of a function body, which
11948 in this case includes member-initializers, but not the catch clauses of
11949 a function-try-block. Currently, this means opening a binding level
86ad3aa9 11950 for the member-initializers (in a ctor) and member cleanups (in a dtor). */
ade3dc07
JM
11951
11952tree
11f6b451 11953begin_function_body (void)
ade3dc07 11954{
cdd2559c
JM
11955 tree stmt;
11956
86ad3aa9
JM
11957 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
11958 return NULL_TREE;
11959
b5856475
JM
11960 if (processing_template_decl)
11961 /* Do nothing now. */;
11962 else
11963 /* Always keep the BLOCK node associated with the outermost pair of
11964 curly braces of a function. These are needed for correct
11965 operation of dwarfout.c. */
ac20c67a 11966 keep_next_level (true);
b5856475 11967
325c3691 11968 stmt = begin_compound_stmt (BCS_FN_BODY);
cdd2559c
JM
11969
11970 if (processing_template_decl)
11971 /* Do nothing now. */;
cdd2559c
JM
11972 else if (DECL_DESTRUCTOR_P (current_function_decl))
11973 begin_destructor_body ();
11974
ade3dc07 11975 return stmt;
9bfadf57
MM
11976}
11977
ade3dc07
JM
11978/* Do the processing for the end of a function body. Currently, this means
11979 closing out the cleanups for fully-constructed bases and members, and in
11980 the case of the destructor, deleting the object if desired. Again, this
11981 is only meaningful for [cd]tors, since they are the only functions where
11982 there is a significant distinction between the main body and any
11983 function catch clauses. Handling, say, main() return semantics here
11984 would be wrong, as flowing off the end of a function catch clause for
11985 main() would also need to return 0. */
11986
11987void
11f6b451 11988finish_function_body (tree compstmt)
ade3dc07 11989{
86ad3aa9
JM
11990 if (compstmt == NULL_TREE)
11991 return;
3db45ab5 11992
5633b37c 11993 /* Close the block. */
7a3397c7 11994 finish_compound_stmt (compstmt);
ade3dc07
JM
11995
11996 if (processing_template_decl)
11997 /* Do nothing now. */;
11998 else if (DECL_CONSTRUCTOR_P (current_function_decl))
11999 finish_constructor_body ();
12000 else if (DECL_DESTRUCTOR_P (current_function_decl))
12001 finish_destructor_body ();
caf93cb0 12002}
ade3dc07 12003
86ad3aa9
JM
12004/* Given a function, returns the BLOCK corresponding to the outermost level
12005 of curly braces, skipping the artificial block created for constructor
12006 initializers. */
12007
a68ab351 12008tree
86ad3aa9
JM
12009outer_curly_brace_block (tree fndecl)
12010{
12011 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
12012 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12013 /* Skip the artificial function body block. */
12014 block = BLOCK_SUBBLOCKS (block);
12015 return block;
12016}
12017
8d08fdba
MS
12018/* Finish up a function declaration and compile that function
12019 all the way to assembler language output. The free the storage
12020 for the function definition.
12021
68642fb6 12022 FLAGS is a bitwise or of the following values:
f181d4ae
MM
12023 2 - INCLASS_INLINE
12024 We just finished processing the body of an in-class inline
12025 function definition. (This processing will have taken place
87e3dbc9 12026 after the class definition is complete.) */
8d08fdba 12027
4d6abc1c 12028tree
11f6b451 12029finish_function (int flags)
8d08fdba 12030{
926ce8bd 12031 tree fndecl = current_function_decl;
8d08fdba 12032 tree fntype, ctype = NULL_TREE;
f181d4ae 12033 int inclass_inline = (flags & 2) != 0;
87e3dbc9 12034 int nested;
8d08fdba
MS
12035
12036 /* When we get some parse errors, we can end up without a
12037 current_function_decl, so cope. */
12038 if (fndecl == NULL_TREE)
4d6abc1c 12039 return error_mark_node;
8d08fdba 12040
3368cdd3
JJ
12041 gcc_assert (!defer_mark_used_calls);
12042 defer_mark_used_calls = true;
12043
9aad8f83
MA
12044 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
12045 && DECL_VIRTUAL_P (fndecl)
12046 && !processing_template_decl)
12047 {
12048 tree fnclass = DECL_CONTEXT (fndecl);
12049 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
12050 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
12051 }
12052
87e3dbc9 12053 nested = function_depth > 1;
8d08fdba
MS
12054 fntype = TREE_TYPE (fndecl);
12055
9bfadf57
MM
12056 /* TREE_READONLY (fndecl) = 1;
12057 This caused &foo to be of type ptr-to-const-function
12058 which then got a warning when stored in a ptr-to-function variable. */
8d08fdba 12059
50bc768d 12060 gcc_assert (building_stmt_tree ());
72c4a4ca
GK
12061 /* The current function is being defined, so its DECL_INITIAL should
12062 be set, and unless there's a multiple definition, it should be
12063 error_mark_node. */
12064 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
caf93cb0 12065
db9b2174
MM
12066 /* For a cloned function, we've already got all the code we need;
12067 there's no need to add any extra bits. */
f444e36b 12068 if (!DECL_CLONED_FUNCTION_P (fndecl))
8d08fdba 12069 {
ade3dc07 12070 if (DECL_MAIN_P (current_function_decl))
efee38a9 12071 {
43e05e45
SB
12072 tree stmt;
12073
12074 /* Make it so that `main' always returns 0 by default (or
12075 1 for VMS). */
08c7ae5a 12076#if VMS_TARGET
43e05e45 12077 stmt = finish_return_stmt (integer_one_node);
efee38a9 12078#else
43e05e45 12079 stmt = finish_return_stmt (integer_zero_node);
efee38a9 12080#endif
43e05e45
SB
12081 /* Hack. We don't want the middle-end to warn that this
12082 return is unreachable, so put the statement on the
12083 special line 0. */
5ffeb913
TT
12084 {
12085 location_t linezero = linemap_line_start (line_table, 0, 1);
12086 SET_EXPR_LOCATION (stmt, linezero);
12087 }
efee38a9 12088 }
87e3dbc9 12089
68d04c67 12090 if (use_eh_spec_block (current_function_decl))
52a11cbf
RH
12091 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
12092 (TREE_TYPE (current_function_decl)),
12093 current_eh_spec_block);
5566b478 12094 }
68642fb6 12095
558475f0 12096 /* If we're saving up tree structure, tie off the function now. */
325c3691
RH
12097 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
12098
12099 finish_fname_decls ();
8d2733ca 12100
b2dd096b
MM
12101 /* If this function can't throw any exceptions, remember that. */
12102 if (!processing_template_decl
12103 && !cp_function_chain->can_throw
be0436d7 12104 && !flag_non_call_exceptions
56fd65c7 12105 && !DECL_REPLACEABLE_P (fndecl))
b2dd096b
MM
12106 TREE_NOTHROW (fndecl) = 1;
12107
8d08fdba
MS
12108 /* This must come after expand_function_end because cleanups might
12109 have declarations (from inline functions) that need to go into
12110 this function's blocks. */
caf93cb0 12111
7437519c
ZW
12112 /* If the current binding level isn't the outermost binding level
12113 for this function, either there is a bug, or we have experienced
12114 syntax errors and the statement tree is malformed. */
a7e8c268 12115 if (current_binding_level->kind != sk_function_parms)
7437519c
ZW
12116 {
12117 /* Make sure we have already experienced errors. */
8dc2b103 12118 gcc_assert (errorcount);
7437519c
ZW
12119
12120 /* Throw away the broken statement tree and extra binding
0cbd7506 12121 levels. */
5882f0f3 12122 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
7437519c 12123
a7e8c268 12124 while (current_binding_level->kind != sk_function_parms)
7437519c 12125 {
a7e8c268 12126 if (current_binding_level->kind == sk_class)
7437519c
ZW
12127 pop_nested_class ();
12128 else
12129 poplevel (0, 0, 0);
12130 }
12131 }
f444e36b 12132 poplevel (1, 0, 1);
8d08fdba 12133
4985cde3
RH
12134 /* Statements should always be full-expressions at the outermost set
12135 of curly braces for a function. */
50bc768d 12136 gcc_assert (stmts_are_full_exprs_p ());
4985cde3 12137
6de9cd9a 12138 /* Set up the named return value optimization, if we can. Candidate
59fe9274 12139 variables are selected in check_return_expr. */
07b2f2fd
JM
12140 if (current_function_return_value)
12141 {
12142 tree r = current_function_return_value;
35e939ae
JM
12143 tree outer;
12144
07b2f2fd 12145 if (r != error_mark_node
35e939ae
JM
12146 /* This is only worth doing for fns that return in memory--and
12147 simpler, since we don't have to worry about promoted modes. */
61f71b34 12148 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
35e939ae
JM
12149 /* Only allow this for variables declared in the outer scope of
12150 the function so we know that their lifetime always ends with a
12151 return; see g++.dg/opt/nrv6.C. We could be more flexible if
12152 we were to do this optimization in tree-ssa. */
86ad3aa9 12153 && (outer = outer_curly_brace_block (fndecl))
325c3691 12154 && chain_member (r, BLOCK_VARS (outer)))
6de9cd9a
DN
12155 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
12156
12157 current_function_return_value = NULL_TREE;
07b2f2fd
JM
12158 }
12159
a8f73d4b 12160 /* Remember that we were in class scope. */
db5ae43f 12161 if (current_class_name)
a8f73d4b 12162 ctype = current_class_type;
db5ae43f 12163
1caa11d3
MM
12164 /* Must mark the RESULT_DECL as being in this function. */
12165 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12166
12167 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12168 to the FUNCTION_DECL node itself. */
12169 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12170
59026e79 12171 /* Save away current state, if appropriate. */
f444e36b 12172 if (!processing_template_decl)
59026e79
MM
12173 save_function_data (fndecl);
12174
efe49da0 12175 /* Complain if there's just no return statement. */
46cfb101 12176 if (warn_return_type
efe49da0 12177 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
c1b83cc9 12178 && !dependent_type_p (TREE_TYPE (fntype))
57d5032b 12179 && !current_function_returns_value && !current_function_returns_null
efe49da0
JM
12180 /* Don't complain if we abort or throw. */
12181 && !current_function_returns_abnormally
55e99d52 12182 && !DECL_NAME (DECL_RESULT (fndecl))
4847609e 12183 && !TREE_NO_WARNING (fndecl)
44d10c10
PB
12184 /* Structor return values (if any) are set by the compiler. */
12185 && !DECL_CONSTRUCTOR_P (fndecl)
12186 && !DECL_DESTRUCTOR_P (fndecl))
4847609e
JH
12187 {
12188 warning (OPT_Wreturn_type,
12189 "no return statement in function returning non-void");
12190 TREE_NO_WARNING (fndecl) = 1;
12191 }
4985cde3 12192
6de9cd9a
DN
12193 /* Store the end of the function, so that we get good line number
12194 info for the epilogue. */
12195 cfun->function_end_locus = input_location;
12196
12197 /* Genericize before inlining. */
12198 if (!processing_template_decl)
12199 {
37e6d6fe 12200 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
5a508662 12201 cp_genericize (fndecl);
37e6d6fe
JH
12202 /* Clear out the bits we don't need. */
12203 f->x_current_class_ptr = NULL;
12204 f->x_current_class_ref = NULL;
12205 f->x_eh_spec_block = NULL;
12206 f->x_in_charge_parm = NULL;
12207 f->x_vtt_parm = NULL;
12208 f->x_return_value = NULL;
12209 f->bindings = NULL;
10827cd8 12210 f->extern_decl_map = NULL;
6de9cd9a
DN
12211
12212 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
726a989a 12213 c_warn_unused_result (gimple_body (fndecl));
6de9cd9a 12214 }
37e6d6fe
JH
12215 /* Clear out the bits we don't need. */
12216 local_names = NULL;
6de9cd9a
DN
12217
12218 /* We're leaving the context of this function, so zap cfun. It's still in
12219 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
db2960f4 12220 set_cfun (NULL);
c1f927e8 12221 current_function_decl = NULL;
a8f73d4b 12222
27631dae 12223 /* If this is an in-class inline definition, we may have to pop the
a8f73d4b
MM
12224 bindings for the template parameters that we added in
12225 maybe_begin_member_template_processing when start_function was
12226 called. */
12227 if (inclass_inline)
12228 maybe_end_member_template_processing ();
12229
12230 /* Leave the scope of the class. */
12231 if (ctype)
12232 pop_nested_class ();
5566b478
MS
12233
12234 --function_depth;
8d08fdba 12235
4d6abc1c 12236 /* Clean up. */
28cbf42c 12237 if (! nested)
1f8f4a0b
MM
12238 /* Let the error reporting routines know that we're outside a
12239 function. For a nested function, this value is used in
b03e38e1 12240 cxx_pop_function_context and then reset via pop_function_context. */
1f8f4a0b 12241 current_function_decl = NULL_TREE;
4d6abc1c 12242
3368cdd3
JJ
12243 defer_mark_used_calls = false;
12244 if (deferred_mark_used_calls)
12245 {
12246 unsigned int i;
12247 tree decl;
12248
12249 for (i = 0; VEC_iterate (tree, deferred_mark_used_calls, i, decl); i++)
12250 mark_used (decl);
12251 VEC_free (tree, gc, deferred_mark_used_calls);
12252 }
12253
4d6abc1c 12254 return fndecl;
8d08fdba
MS
12255}
12256\f
12257/* Create the FUNCTION_DECL for a function definition.
8d08fdba
MS
12258 DECLSPECS and DECLARATOR are the parts of the declaration;
12259 they describe the return type and the name of the function,
12260 but twisted together in a fashion that parallels the syntax of C.
12261
12262 This function creates a binding context for the function body
12263 as well as setting up the FUNCTION_DECL in current_function_decl.
12264
12265 Returns a FUNCTION_DECL on success.
12266
12267 If the DECLARATOR is not suitable for a function (it defines a datum
12268 instead), we return 0, which tells yyparse to report a parse error.
12269
12270 May return void_type_node indicating that this method is actually
12271 a friend. See grokfield for more details.
12272
12273 Came here with a `.pushlevel' .
12274
12275 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
12276 CHANGES TO CODE IN `grokfield'. */
e92cc029 12277
8d08fdba 12278tree
caf93cb0 12279start_method (cp_decl_specifier_seq *declspecs,
0cbd7506 12280 const cp_declarator *declarator, tree attrlist)
8d08fdba 12281{
c11b6f21 12282 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
91d231cb 12283 &attrlist);
8d08fdba 12284
a723baf1
MM
12285 if (fndecl == error_mark_node)
12286 return error_mark_node;
12287
12288 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
12289 {
12290 error ("invalid member function declaration");
12291 return error_mark_node;
12292 }
8d08fdba 12293
195a5def
IR
12294 if (attrlist)
12295 cplus_decl_attributes (&fndecl, attrlist, 0);
12296
8d08fdba 12297 /* Pass friends other than inline friend functions back. */
a1774733 12298 if (fndecl == void_type_node)
8d08fdba
MS
12299 return fndecl;
12300
8d08fdba
MS
12301 if (DECL_IN_AGGR_P (fndecl))
12302 {
58ec3cc5 12303 if (DECL_CONTEXT (fndecl)
6d69fe27 12304 && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
2d01edd7 12305 error ("%qD is already defined in class %qT", fndecl,
58ec3cc5 12306 DECL_CONTEXT (fndecl));
8ca4bf25 12307 return error_mark_node;
8d08fdba
MS
12308 }
12309
f3400fe2
JM
12310 check_template_shadow (fndecl);
12311
79065db2 12312 DECL_DECLARED_INLINE_P (fndecl) = 1;
8d08fdba 12313
36a117a5
MM
12314 /* We process method specializations in finish_struct_1. */
12315 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
4b0d3cbe
MM
12316 {
12317 fndecl = push_template_decl (fndecl);
12318 if (fndecl == error_mark_node)
12319 return fndecl;
12320 }
a0a33927 12321
8d08fdba
MS
12322 if (! DECL_FRIEND_P (fndecl))
12323 {
8d08fdba
MS
12324 if (TREE_CHAIN (fndecl))
12325 {
12326 fndecl = copy_node (fndecl);
12327 TREE_CHAIN (fndecl) = NULL_TREE;
12328 }
8d08fdba
MS
12329 }
12330
d174af6c 12331 finish_decl (fndecl, NULL_TREE, NULL_TREE);
8d08fdba 12332
f4f206f4 12333 /* Make a place for the parms. */
ac20c67a 12334 begin_scope (sk_function_parms, fndecl);
68642fb6 12335
8d08fdba
MS
12336 DECL_IN_AGGR_P (fndecl) = 1;
12337 return fndecl;
12338}
12339
12340/* Go through the motions of finishing a function definition.
12341 We don't compile this method until after the whole class has
12342 been processed.
12343
12344 FINISH_METHOD must return something that looks as though it
12345 came from GROKFIELD (since we are defining a method, after all).
12346
12347 This is called after parsing the body of the function definition.
12348 STMTS is the chain of statements that makes up the function body.
12349
12350 DECL is the ..._DECL that `start_method' provided. */
12351
12352tree
11f6b451 12353finish_method (tree decl)
8d08fdba 12354{
926ce8bd 12355 tree fndecl = decl;
8d08fdba 12356 tree old_initial;
8d08fdba 12357
926ce8bd 12358 tree link;
8d08fdba 12359
a1774733 12360 if (decl == void_type_node)
8d08fdba
MS
12361 return decl;
12362
12363 old_initial = DECL_INITIAL (fndecl);
12364
12365 /* Undo the level for the parms (from start_method).
12366 This is like poplevel, but it causes nothing to be
12367 saved. Saving information here confuses symbol-table
12368 output routines. Besides, this information will
12369 be correctly output when this method is actually
12370 compiled. */
12371
12372 /* Clear out the meanings of the local variables of this level;
12373 also record in each decl which block it belongs to. */
12374
12375 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
12376 {
12377 if (DECL_NAME (link) != NULL_TREE)
d8f8dca1 12378 pop_binding (DECL_NAME (link), link);
50bc768d 12379 gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
8d08fdba
MS
12380 DECL_CONTEXT (link) = NULL_TREE;
12381 }
12382
8d08fdba
MS
12383 poplevel (0, 0, 0);
12384
12385 DECL_INITIAL (fndecl) = old_initial;
12386
12387 /* We used to check if the context of FNDECL was different from
12388 current_class_type as another way to get inside here. This didn't work
12389 for String.cc in libg++. */
12390 if (DECL_FRIEND_P (fndecl))
12391 {
d4e6fecb 12392 VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
585b44d3 12393 fndecl);
8d08fdba
MS
12394 decl = void_type_node;
12395 }
12396
12397 return decl;
12398}
12399\f
0154eaa8
MM
12400
12401/* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
12402 we can lay it out later, when and if its type becomes complete. */
8d08fdba
MS
12403
12404void
11f6b451 12405maybe_register_incomplete_var (tree var)
8d08fdba 12406{
50bc768d 12407 gcc_assert (TREE_CODE (var) == VAR_DECL);
8d08fdba 12408
0154eaa8 12409 /* Keep track of variables with incomplete types. */
caf93cb0 12410 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
0154eaa8 12411 && DECL_EXTERNAL (var))
70adf8a9 12412 {
0154eaa8 12413 tree inner_type = TREE_TYPE (var);
caf93cb0 12414
0154eaa8
MM
12415 while (TREE_CODE (inner_type) == ARRAY_TYPE)
12416 inner_type = TREE_TYPE (inner_type);
12417 inner_type = TYPE_MAIN_VARIANT (inner_type);
caf93cb0 12418
0154eaa8
MM
12419 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
12420 /* RTTI TD entries are created while defining the type_info. */
12421 || (TYPE_LANG_SPECIFIC (inner_type)
12422 && TYPE_BEING_DEFINED (inner_type)))
12423 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
70adf8a9 12424 }
0154eaa8 12425}
70adf8a9 12426
0154eaa8 12427/* Called when a class type (given by TYPE) is defined. If there are
39a13be5 12428 any existing VAR_DECLs whose type has been completed by this
0154eaa8 12429 declaration, update them now. */
70adf8a9 12430
0154eaa8 12431void
11f6b451 12432complete_vars (tree type)
0154eaa8
MM
12433{
12434 tree *list = &incomplete_vars;
12435
50bc768d 12436 gcc_assert (CLASS_TYPE_P (type));
caf93cb0 12437 while (*list)
0154eaa8
MM
12438 {
12439 if (same_type_p (type, TREE_PURPOSE (*list)))
70adf8a9 12440 {
0154eaa8 12441 tree var = TREE_VALUE (*list);
67935995 12442 tree type = TREE_TYPE (var);
c740732f
MM
12443 /* Complete the type of the variable. The VAR_DECL itself
12444 will be laid out in expand_expr. */
67935995
MM
12445 complete_type (type);
12446 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
0154eaa8
MM
12447 /* Remove this entry from the list. */
12448 *list = TREE_CHAIN (*list);
f30432d7
MS
12449 }
12450 else
0154eaa8 12451 list = &TREE_CHAIN (*list);
f30432d7 12452 }
7fb213d8
GB
12453
12454 /* Check for pending declarations which may have abstract type. */
12455 complete_type_check_abstract (type);
8d08fdba
MS
12456}
12457
5c113154
MM
12458/* If DECL is of a type which needs a cleanup, build and return an
12459 expression to perform that cleanup here. Return NULL_TREE if no
12460 cleanup need be done. */
e92cc029 12461
86f45d2c 12462tree
11f6b451 12463cxx_maybe_build_cleanup (tree decl)
8d08fdba 12464{
5c113154
MM
12465 tree type;
12466 tree attr;
12467 tree cleanup;
12468
12469 /* Assume no cleanup is required. */
12470 cleanup = NULL_TREE;
86f45d2c 12471
5c113154
MM
12472 if (error_operand_p (decl))
12473 return cleanup;
12474
12475 /* Handle "__attribute__((cleanup))". We run the cleanup function
12476 before the destructor since the destructor is what actually
12477 terminates the lifetime of the object. */
12478 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
12479 if (attr)
12480 {
12481 tree id;
12482 tree fn;
12483 tree arg;
12484
12485 /* Get the name specified by the user for the cleanup function. */
12486 id = TREE_VALUE (TREE_VALUE (attr));
12487 /* Look up the name to find the cleanup function to call. It is
12488 important to use lookup_name here because that is what is
12489 used in c-common.c:handle_cleanup_attribute when performing
12490 initial checks on the attribute. Note that those checks
12491 include ensuring that the function found is not an overloaded
12492 function, or an object with an overloaded call operator,
39a13be5 12493 etc.; we can rely on the fact that the function found is an
5c113154
MM
12494 ordinary FUNCTION_DECL. */
12495 fn = lookup_name (id);
12496 arg = build_address (decl);
12497 mark_used (decl);
5ade1ed2
DG
12498 cleanup = cp_build_function_call (fn, build_tree_list (NULL_TREE,
12499 arg),
12500 tf_warning_or_error);
5c113154
MM
12501 }
12502 /* Handle ordinary C++ destructors. */
12503 type = TREE_TYPE (decl);
12504 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8d08fdba 12505 {
80048418 12506 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
5775a06a
NS
12507 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
12508 && CLASSTYPE_VBASECLASSES (type));
5c113154
MM
12509 tree addr;
12510 tree call;
8d08fdba 12511
8d08fdba 12512 if (TREE_CODE (type) == ARRAY_TYPE)
5c113154 12513 addr = decl;
8d08fdba 12514 else
5818c8e4 12515 addr = build_address (decl);
8d08fdba
MS
12516
12517 /* Optimize for space over speed here. */
5775a06a 12518 if (!has_vbases || flag_expensive_optimizations)
8d08fdba
MS
12519 flags |= LOOKUP_NONVIRTUAL;
12520
5c113154 12521 call = build_delete (TREE_TYPE (addr), addr,
86f45d2c 12522 sfk_complete_destructor, flags, 0);
5c113154 12523 if (cleanup)
525521b6 12524 cleanup = build_compound_expr (cleanup, call);
5c113154
MM
12525 else
12526 cleanup = call;
8d08fdba 12527 }
5c113154
MM
12528
12529 return cleanup;
8d08fdba
MS
12530}
12531\f
558475f0 12532/* When a stmt has been parsed, this function is called. */
8d08fdba
MS
12533
12534void
11f6b451 12535finish_stmt (void)
8d08fdba 12536{
8d08fdba
MS
12537}
12538
3afb32a4
MM
12539/* DECL was originally constructed as a non-static member function,
12540 but turned out to be static. Update it accordingly. */
700f8a87 12541
8857f91e 12542void
11f6b451 12543revert_static_member_fn (tree decl)
8d08fdba 12544{
700f8a87 12545 tree tmp;
3afb32a4
MM
12546 tree function = TREE_TYPE (decl);
12547 tree args = TYPE_ARG_TYPES (function);
8d08fdba 12548
89d684bb 12549 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
91063b51 12550 != TYPE_UNQUALIFIED)
c4f73174 12551 error ("static member function %q#D declared with type qualifiers", decl);
f30432d7 12552
700f8a87
MS
12553 args = TREE_CHAIN (args);
12554 tmp = build_function_type (TREE_TYPE (function), args);
89d684bb 12555 tmp = build_qualified_type (tmp, cp_type_quals (function));
f30432d7 12556 tmp = build_exception_variant (tmp,
8d08fdba 12557 TYPE_RAISES_EXCEPTIONS (function));
3afb32a4
MM
12558 TREE_TYPE (decl) = tmp;
12559 if (DECL_ARGUMENTS (decl))
12560 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
12561 DECL_STATIC_FUNCTION_P (decl) = 1;
8d08fdba 12562}
a4443a08 12563
e2500fed
GK
12564/* Return which tree structure is used by T, or TS_CP_GENERIC if T is
12565 one of the language-independent trees. */
4519c0a8 12566
e2500fed 12567enum cp_tree_node_structure_enum
11f6b451 12568cp_tree_node_structure (union lang_tree_node * t)
4519c0a8 12569{
e2500fed 12570 switch (TREE_CODE (&t->generic))
4519c0a8 12571 {
a723baf1 12572 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
e2500fed 12573 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
e2500fed
GK
12574 case OVERLOAD: return TS_CP_OVERLOAD;
12575 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
12576 case PTRMEM_CST: return TS_CP_PTRMEM;
0cbd7506 12577 case BASELINK: return TS_CP_BASELINK;
54e67af0 12578 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
5d80a306 12579 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
cb68ec50 12580 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
e2500fed 12581 default: return TS_CP_GENERIC;
4519c0a8
MM
12582 }
12583}
5fd8e536 12584
eaa7c03f
JM
12585/* Build the void_list_node (void_type_node having been created). */
12586tree
11f6b451 12587build_void_list_node (void)
eaa7c03f
JM
12588{
12589 tree t = build_tree_list (NULL_TREE, void_type_node);
eaa7c03f
JM
12590 return t;
12591}
12592
6de9cd9a 12593bool
11f6b451 12594cp_missing_noreturn_ok_p (tree decl)
d363e7bf
AJ
12595{
12596 /* A missing noreturn is ok for the `main' function. */
92643fea 12597 return DECL_MAIN_P (decl);
d363e7bf 12598}
e2500fed 12599
c18a5b6c
MM
12600/* Return the COMDAT group into which DECL should be placed. */
12601
12602const char *
12603cxx_comdat_group (tree decl)
12604{
12605 tree name;
12606
12607 /* Virtual tables, construction virtual tables, and virtual table
12608 tables all go in a single COMDAT group, named after the primary
12609 virtual table. */
12610 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
12611 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
12612 /* For all other DECLs, the COMDAT group is the mangled name of the
12613 declaration itself. */
12614 else
5591e5f9
JJ
12615 {
12616 while (DECL_THUNK_P (decl))
12617 {
12618 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
12619 into the same section as the target function. In that case
12620 we must return target's name. */
12621 tree target = THUNK_TARGET (decl);
12622 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
12623 && DECL_SECTION_NAME (target) != NULL
12624 && DECL_ONE_ONLY (target))
12625 decl = target;
12626 else
12627 break;
12628 }
12629 name = DECL_ASSEMBLER_NAME (decl);
12630 }
c18a5b6c
MM
12631
12632 return IDENTIFIER_POINTER (name);
12633}
12634
e2500fed 12635#include "gt-cp-decl.h"
This page took 7.74148 seconds and 5 git commands to generate.