]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/decl.c
decl.c (cp_finish_decl): Use resolve_nondeduced_context for auto.
[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,
6ad86a5b 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
1ea193c2 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 35#include "tree.h"
8d08fdba
MS
36#include "flags.h"
37#include "cp-tree.h"
f4ce02c5 38#include "tree-iterator.h"
25af8512 39#include "tree-inline.h"
8d08fdba 40#include "decl.h"
4cd5a50a 41#include "intl.h"
49c249e1 42#include "output.h"
54f92bfb 43#include "toplev.h"
e2500fed 44#include "hashtab.h"
0e9295cf 45#include "tm_p.h"
672a6f42 46#include "target.h"
39dabefd
SB
47#include "c-family/c-common.h"
48#include "c-family/c-pragma.h"
7437519c 49#include "diagnostic.h"
e7c41c99 50#include "intl.h"
e2500fed 51#include "debug.h"
22ffcc6f 52#include "timevar.h"
0d83bf5a 53#include "pointer-set.h"
245763e3 54#include "splay-tree.h"
68a607d8 55#include "plugin.h"
8d08fdba 56
2f5b91f5
SZ
57/* Possible cases of bad specifiers type used by bad_specifiers. */
58enum bad_spec_place {
59 BSP_VAR, /* variable */
60 BSP_PARM, /* parameter */
61 BSP_TYPE, /* type */
62 BSP_FIELD /* field */
63};
64
b344d949 65static tree grokparms (tree parmlist, tree *);
11f6b451
NN
66static const char *redeclaration_error_message (tree, tree);
67
11f6b451 68static int decl_jump_unsafe (tree);
11f6b451
NN
69static void require_complete_types_for_parms (tree);
70static int ambi_op_p (enum tree_code);
71static int unary_op_p (enum tree_code);
11f6b451 72static void push_local_name (tree);
7e99327d 73static tree grok_reference_init (tree, tree, tree, tree *);
caf93cb0 74static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
1ff3c076 75 int, int, tree);
11f6b451 76static void record_unknown_type (tree, const char *);
5779e713 77static tree builtin_function_1 (tree, tree, bool);
11f6b451
NN
78static tree build_library_fn_1 (tree, enum tree_code, tree);
79static int member_function_or_else (tree, tree, enum overload_flags);
2f5b91f5 80static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
11f6b451 81 int);
11f6b451
NN
82static void check_for_uninitialized_const_var (tree);
83static hashval_t typename_hash (const void *);
84static int typename_compare (const void *, const void *);
11f6b451 85static tree local_variable_p_walkfn (tree *, int *, void *);
11f6b451 86static tree record_builtin_java_type (const char *, int);
461c6fce 87static const char *tag_name (enum tag_types);
29ef83de 88static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
11f6b451 89static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
11f6b451
NN
90static void maybe_deduce_size_from_array_init (tree, tree);
91static void layout_var_decl (tree);
7e99327d 92static tree check_initializer (tree, tree, int, tree *);
11f6b451
NN
93static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
94static void save_function_data (tree);
90ecaf87 95static void copy_type_enum (tree , tree);
11f6b451 96static void check_function_type (tree, tree);
11f6b451
NN
97static void finish_constructor_body (void);
98static void begin_destructor_body (void);
99static void finish_destructor_body (void);
3bb1ed66 100static void record_key_method_defined (tree);
11f6b451
NN
101static tree create_array_type_for_decl (tree, tree, tree);
102static tree get_atexit_node (void);
103static tree get_dso_handle_node (void);
104static tree start_cleanup_fn (void);
105static void end_cleanup_fn (void);
c2255bc4 106static tree cp_make_fname_decl (location_t, tree, int);
11f6b451 107static void initialize_predefined_identifiers (void);
caf93cb0 108static tree check_special_function_return_type
11f6b451
NN
109 (special_function_kind, tree, tree);
110static tree push_cp_library_fn (enum tree_code, tree);
111static tree build_cp_library_fn (tree, enum tree_code, tree);
112static void store_parm_decls (tree);
8e3df2de
MM
113static void initialize_local_var (tree, tree);
114static void expand_static_init (tree, tree);
8d08fdba 115
7f4edbcb 116/* The following symbols are subsumed in the cp_global_trees array, and
68642fb6 117 listed here individually for documentation purposes.
8d08fdba 118
7f4edbcb
BS
119 C++ extensions
120 tree wchar_decl_node;
37c46b43 121
7f4edbcb
BS
122 tree vtable_entry_type;
123 tree delta_type_node;
7f4edbcb 124 tree __t_desc_type_node;
8d08fdba 125
9e62871e 126 tree class_type_node;
7f4edbcb 127 tree unknown_type_node;
8d08fdba 128
7f4edbcb 129 Array type `vtable_entry_type[]'
8d08fdba 130
7f4edbcb
BS
131 tree vtbl_type_node;
132 tree vtbl_ptr_type_node;
8d08fdba 133
2854d3c6 134 Namespaces,
8d08fdba 135
7f4edbcb 136 tree std_node;
2854d3c6 137 tree abi_node;
8d08fdba 138
7f4edbcb
BS
139 A FUNCTION_DECL which can call `abort'. Not necessarily the
140 one that the user will declare, but sufficient to be called
141 by routines that want to abort the program.
8d08fdba 142
7f4edbcb 143 tree abort_fndecl;
8d08fdba 144
7f4edbcb 145 The FUNCTION_DECL for the default `::operator delete'.
2986ae00 146
7f4edbcb 147 tree global_delete_fndecl;
8d08fdba 148
7f4edbcb 149 Used by RTTI
669ec2b4 150 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
3db45ab5 151 tree tinfo_var_id; */
8d08fdba 152
7f4edbcb 153tree cp_global_trees[CPTI_MAX];
8d08fdba 154
2c73f9f5 155/* Indicates that there is a type value in some namespace, although
7f4edbcb 156 that is not necessarily in scope at the moment. */
2c73f9f5 157
00e8de68 158tree global_type_node;
2c73f9f5 159
82a2669e 160/* The node that holds the "name" of the global scope. */
00e8de68 161tree global_scope_name;
82a2669e 162
8e4ce833
JJ
163#define local_names cp_function_chain->x_local_names
164
8d08fdba
MS
165/* A list of objects which have constructors or destructors
166 which reside in the global scope. The decl is stored in
167 the TREE_VALUE slot and the initializer is stored
168 in the TREE_PURPOSE slot. */
169tree static_aggregates;
170
8d08fdba
MS
171/* -- end of C++ */
172
9a9d280e 173/* A node for the integer constant 2. */
d11ad92e 174
9a9d280e 175tree integer_two_node;
8d08fdba 176
1799e5d5
RH
177/* Used only for jumps to as-yet undefined labels, since jumps to
178 defined labels can have their validity checked immediately. */
179
d1b38208 180struct GTY(()) named_label_use_entry {
1799e5d5
RH
181 struct named_label_use_entry *next;
182 /* The binding level to which this entry is *currently* attached.
183 This is initially the binding level in which the goto appeared,
184 but is modified as scopes are closed. */
185 struct cp_binding_level *binding_level;
186 /* The head of the names list that was current when the goto appeared,
187 or the inner scope popped. These are the decls that will *not* be
188 skipped when jumping to the label. */
189 tree names_in_scope;
190 /* The location of the goto, for error reporting. */
191 location_t o_goto_locus;
192 /* True if an OpenMP structured block scope has been closed since
193 the goto appeared. This means that the branch from the label will
194 illegally exit an OpenMP scope. */
195 bool in_omp_scope;
196};
197
6625cdb5
JM
198/* A list of all LABEL_DECLs in the function that have names. Here so
199 we can clear out their names' definitions at the end of the
200 function, and so we can check the validity of jumps to these labels. */
201
d1b38208 202struct GTY(()) named_label_entry {
1799e5d5
RH
203 /* The decl itself. */
204 tree label_decl;
205
206 /* The binding level to which the label is *currently* attached.
207 This is initially set to the binding level in which the label
208 is defined, but is modified as scopes are closed. */
e2500fed 209 struct cp_binding_level *binding_level;
3db45ab5 210 /* The head of the names list that was current when the label was
1799e5d5
RH
211 defined, or the inner scope popped. These are the decls that will
212 be skipped when jumping to the label. */
6625cdb5 213 tree names_in_scope;
c4ec9887 214 /* A vector of all decls from all binding levels that would be
1799e5d5 215 crossed by a backward branch to the label. */
c4ec9887 216 VEC(tree,gc) *bad_decls;
1799e5d5
RH
217
218 /* A list of uses of the label, before the label is defined. */
219 struct named_label_use_entry *uses;
220
221 /* The following bits are set after the label is defined, and are
222 updated as scopes are popped. They indicate that a backward jump
ddd0b831 223 to the label will illegally enter a scope of the given flavor. */
1799e5d5
RH
224 bool in_try_scope;
225 bool in_catch_scope;
226 bool in_omp_scope;
6625cdb5 227};
8d08fdba 228
4519c0a8 229#define named_labels cp_function_chain->x_named_labels
8d08fdba 230\f
b2244c65
MM
231/* The number of function bodies which we are currently processing.
232 (Zero if we are at namespace scope, one inside the body of a
233 function, two inside the body of a function in a local class, etc.) */
234int function_depth;
e23bd218 235
3368cdd3
JJ
236/* To avoid unwanted recursion, finish_function defers all mark_used calls
237 encountered during its execution until it finishes. */
238bool defer_mark_used_calls;
239VEC(tree, gc) *deferred_mark_used_calls;
240
e23bd218
IR
241/* States indicating how grokdeclarator() should handle declspecs marked
242 with __attribute__((deprecated)). An object declared as
243 __attribute__((deprecated)) suppresses warnings of uses of other
244 deprecated items. */
b344d949 245enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
e23bd218 246
8d08fdba 247\f
0622223a
NF
248/* A list of VAR_DECLs whose type was incomplete at the time the
249 variable was declared. */
0154eaa8 250
0622223a
NF
251typedef struct GTY(()) incomplete_var_d {
252 tree decl;
253 tree incomplete_type;
254} incomplete_var;
255
256DEF_VEC_O(incomplete_var);
257DEF_VEC_ALLOC_O(incomplete_var,gc);
258
259static GTY(()) VEC(incomplete_var,gc) *incomplete_vars;
8d08fdba 260\f
74b846e0
MM
261/* Returns the kind of template specialization we are currently
262 processing, given that it's declaration contained N_CLASS_SCOPES
263 explicit scope qualifications. */
264
265tmpl_spec_kind
11f6b451 266current_tmpl_spec_kind (int n_class_scopes)
74b846e0
MM
267{
268 int n_template_parm_scopes = 0;
269 int seen_specialization_p = 0;
270 int innermost_specialization_p = 0;
e2500fed 271 struct cp_binding_level *b;
74b846e0
MM
272
273 /* Scan through the template parameter scopes. */
caf93cb0
EC
274 for (b = current_binding_level;
275 b->kind == sk_template_parms;
a7e8c268 276 b = b->level_chain)
74b846e0
MM
277 {
278 /* If we see a specialization scope inside a parameter scope,
279 then something is wrong. That corresponds to a declaration
280 like:
281
282 template <class T> template <> ...
283
0e339752 284 which is always invalid since [temp.expl.spec] forbids the
74b846e0
MM
285 specialization of a class member template if the enclosing
286 class templates are not explicitly specialized as well. */
a7e8c268 287 if (b->explicit_spec_p)
74b846e0
MM
288 {
289 if (n_template_parm_scopes == 0)
290 innermost_specialization_p = 1;
291 else
292 seen_specialization_p = 1;
293 }
294 else if (seen_specialization_p == 1)
295 return tsk_invalid_member_spec;
296
297 ++n_template_parm_scopes;
298 }
299
300 /* Handle explicit instantiations. */
301 if (processing_explicit_instantiation)
302 {
303 if (n_template_parm_scopes != 0)
304 /* We've seen a template parameter list during an explicit
305 instantiation. For example:
306
307 template <class T> template void f(int);
308
309 This is erroneous. */
310 return tsk_invalid_expl_inst;
311 else
312 return tsk_expl_inst;
313 }
314
315 if (n_template_parm_scopes < n_class_scopes)
316 /* We've not seen enough template headers to match all the
317 specialized classes present. For example:
318
0cbd7506 319 template <class T> void R<T>::S<T>::f(int);
74b846e0 320
0e339752 321 This is invalid; there needs to be one set of template
74b846e0
MM
322 parameters for each class. */
323 return tsk_insufficient_parms;
324 else if (n_template_parm_scopes == n_class_scopes)
325 /* We're processing a non-template declaration (even though it may
326 be a member of a template class.) For example:
327
0cbd7506 328 template <class T> void S<T>::f(int);
74b846e0 329
39a13be5 330 The `class T' matches the `S<T>', leaving no template headers
74b846e0
MM
331 corresponding to the `f'. */
332 return tsk_none;
333 else if (n_template_parm_scopes > n_class_scopes + 1)
334 /* We've got too many template headers. For example:
335
0cbd7506 336 template <> template <class T> void f (T);
74b846e0
MM
337
338 There need to be more enclosing classes. */
339 return tsk_excessive_parms;
340 else
341 /* This must be a template. It's of the form:
342
0cbd7506 343 template <class T> template <class U> void S<T>::f(U);
74b846e0
MM
344
345 This is a specialization if the innermost level was a
346 specialization; otherwise it's just a definition of the
347 template. */
348 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
8d08fdba
MS
349}
350
74b846e0
MM
351/* Exit the current scope. */
352
353void
11f6b451 354finish_scope (void)
74b846e0
MM
355{
356 poplevel (0, 0, 0);
357}
358
acef433b
MM
359/* When a label goes out of scope, check to see if that label was used
360 in a valid manner, and issue any appropriate warnings or errors. */
361
362static void
11f6b451 363pop_label (tree label, tree old_value)
acef433b 364{
a7e8c268 365 if (!processing_template_decl)
acef433b 366 {
88848bde
MM
367 if (DECL_INITIAL (label) == NULL_TREE)
368 {
5b030314
NS
369 location_t location;
370
dee15844 371 error ("label %q+D used but not defined", label);
93409b8c 372 location = input_location; /* FIXME want (input_filename, (line)0) */
88848bde 373 /* Avoid crashing later. */
5b030314 374 define_label (location, DECL_NAME (label));
88848bde 375 }
c616e51b
MLI
376 else
377 warn_for_unused_label (label);
acef433b 378 }
acef433b 379
6625cdb5 380 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
acef433b
MM
381}
382
0811ea8f 383/* At the end of a function, all labels declared within the function
68642fb6 384 go out of scope. BLOCK is the top-level block for the
acef433b
MM
385 function. */
386
1799e5d5
RH
387static int
388pop_labels_1 (void **slot, void *data)
389{
390 struct named_label_entry *ent = (struct named_label_entry *) *slot;
391 tree block = (tree) data;
392
393 pop_label (ent->label_decl, NULL_TREE);
394
395 /* Put the labels into the "variables" of the top-level block,
396 so debugger can see them. */
910ad8de 397 DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
1799e5d5
RH
398 BLOCK_VARS (block) = ent->label_decl;
399
400 htab_clear_slot (named_labels, slot);
401
402 return 1;
403}
404
acef433b 405static void
11f6b451 406pop_labels (tree block)
acef433b 407{
1799e5d5 408 if (named_labels)
acef433b 409 {
1799e5d5
RH
410 htab_traverse (named_labels, pop_labels_1, block);
411 named_labels = NULL;
acef433b 412 }
1799e5d5
RH
413}
414
415/* At the end of a block with local labels, restore the outer definition. */
acef433b 416
1799e5d5
RH
417static void
418pop_local_label (tree label, tree old_value)
419{
420 struct named_label_entry dummy;
421 void **slot;
422
423 pop_label (label, old_value);
424
425 dummy.label_decl = label;
426 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
427 htab_clear_slot (named_labels, slot);
acef433b
MM
428}
429
80aa8340
ZL
430/* The following two routines are used to interface to Objective-C++.
431 The binding level is purposely treated as an opaque type. */
432
433void *
434objc_get_current_scope (void)
435{
436 return current_binding_level;
437}
438
439/* The following routine is used by the NeXT-style SJLJ exceptions;
440 variables get marked 'volatile' so as to not be clobbered by
f749f3c2
ZL
441 _setjmp()/_longjmp() calls. All variables in the current scope,
442 as well as parent scopes up to (but not including) ENCLOSING_BLK
443 shall be thusly marked. */
80aa8340
ZL
444
445void
446objc_mark_locals_volatile (void *enclosing_blk)
447{
448 struct cp_binding_level *scope;
449
450 for (scope = current_binding_level;
e58a9aa1 451 scope && scope != enclosing_blk;
80aa8340
ZL
452 scope = scope->level_chain)
453 {
454 tree decl;
455
456 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
660845bf 457 objc_volatilize_decl (decl);
e58a9aa1
ZL
458
459 /* Do not climb up past the current function. */
460 if (scope->kind == sk_function_parms)
461 break;
80aa8340
ZL
462 }
463}
464
1799e5d5
RH
465/* Update data for defined and undefined labels when leaving a scope. */
466
467static int
468poplevel_named_label_1 (void **slot, void *data)
469{
470 struct named_label_entry *ent = (struct named_label_entry *) *slot;
471 struct cp_binding_level *bl = (struct cp_binding_level *) data;
472 struct cp_binding_level *obl = bl->level_chain;
473
474 if (ent->binding_level == bl)
475 {
476 tree decl;
477
75acdae9
NF
478 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
479 TREE_LISTs representing OVERLOADs, so be careful. */
480 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
481 ? DECL_CHAIN (decl)
482 : TREE_CHAIN (decl)))
1799e5d5 483 if (decl_jump_unsafe (decl))
c4ec9887 484 VEC_safe_push (tree, gc, ent->bad_decls, decl);
1799e5d5
RH
485
486 ent->binding_level = obl;
487 ent->names_in_scope = obl->names;
488 switch (bl->kind)
489 {
490 case sk_try:
491 ent->in_try_scope = true;
492 break;
493 case sk_catch:
494 ent->in_catch_scope = true;
495 break;
496 case sk_omp:
497 ent->in_omp_scope = true;
498 break;
499 default:
500 break;
501 }
502 }
503 else if (ent->uses)
504 {
505 struct named_label_use_entry *use;
506
507 for (use = ent->uses; use ; use = use->next)
508 if (use->binding_level == bl)
509 {
510 use->binding_level = obl;
511 use->names_in_scope = obl->names;
512 if (bl->kind == sk_omp)
513 use->in_omp_scope = true;
514 }
515 }
516
517 return 1;
518}
519
03a904b5
JJ
520/* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
521 when errors were reported, except for -Werror-unused-but-set-*. */
522static int unused_but_set_errorcount;
523
8d08fdba
MS
524/* Exit a binding level.
525 Pop the level off, and restore the state of the identifier-decl mappings
526 that were in effect when this level was entered.
527
528 If KEEP == 1, this level had explicit declarations, so
529 and create a "block" (a BLOCK node) for the level
530 to record its declarations and subblocks for symbol table output.
531
8d08fdba
MS
532 If FUNCTIONBODY is nonzero, this level is the body of a function,
533 so create a block as if KEEP were set and also clear out all
534 label names.
535
536 If REVERSE is nonzero, reverse the order of decls before putting
537 them into the BLOCK. */
538
539tree
11f6b451 540poplevel (int keep, int reverse, int functionbody)
8d08fdba 541{
926ce8bd 542 tree link;
8d08fdba
MS
543 /* The chain of decls was accumulated in reverse order.
544 Put it into forward order, just for cleanliness. */
545 tree decls;
b35d4555 546 tree subblocks;
325c3691 547 tree block;
8d08fdba 548 tree decl;
f181d4ae 549 int leaving_for_scope;
ac20c67a 550 scope_kind kind;
4d2fb769
NF
551 unsigned ix;
552 cp_label_binding *label_bind;
f181d4ae 553
22ffcc6f 554 timevar_push (TV_NAME_LOOKUP);
325c3691
RH
555 restart:
556
557 block = NULL_TREE;
b35d4555 558
50bc768d 559 gcc_assert (current_binding_level->kind != sk_class);
b74a0560 560
db80e34e
JJ
561 if (current_binding_level->kind == sk_cleanup)
562 functionbody = 0;
b35d4555
MM
563 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
564
50bc768d
NS
565 gcc_assert (!VEC_length(cp_class_binding,
566 current_binding_level->class_shadowed));
8d08fdba 567
536333d4
MM
568 /* We used to use KEEP == 2 to indicate that the new block should go
569 at the beginning of the list of blocks at this binding level,
570 rather than the end. This hack is no longer used. */
50bc768d 571 gcc_assert (keep == 0 || keep == 1);
536333d4 572
ac20c67a 573 if (current_binding_level->keep)
8d08fdba
MS
574 keep = 1;
575
6625cdb5
JM
576 /* Any uses of undefined labels, and any defined labels, now operate
577 under constraints of next binding contour. */
1799e5d5
RH
578 if (cfun && !functionbody && named_labels)
579 htab_traverse (named_labels, poplevel_named_label_1,
580 current_binding_level);
6625cdb5 581
8d08fdba
MS
582 /* Get the decls in the order they were written.
583 Usually current_binding_level->names is in reverse order.
584 But parameter decls were previously put in forward order. */
585
586 if (reverse)
587 current_binding_level->names
588 = decls = nreverse (current_binding_level->names);
589 else
590 decls = current_binding_level->names;
591
8d08fdba
MS
592 /* If there were any declarations or structure tags in that level,
593 or if this level is a function body,
594 create a BLOCK to record them for the life of this function. */
8d08fdba 595 block = NULL_TREE;
f444e36b 596 if (keep == 1 || functionbody)
8d08fdba
MS
597 block = make_node (BLOCK);
598 if (block != NULL_TREE)
599 {
f444e36b
MM
600 BLOCK_VARS (block) = decls;
601 BLOCK_SUBBLOCKS (block) = subblocks;
8d08fdba
MS
602 }
603
604 /* In each subblock, record that this is its superior. */
8d08fdba 605 if (keep >= 0)
87caf699 606 for (link = subblocks; link; link = BLOCK_CHAIN (link))
8d08fdba
MS
607 BLOCK_SUPERCONTEXT (link) = block;
608
f181d4ae
MM
609 /* We still support the old for-scope rules, whereby the variables
610 in a for-init statement were in scope after the for-statement
92bc1323 611 ended. We only use the new rules if flag_new_for_scope is
f181d4ae 612 nonzero. */
68642fb6 613 leaving_for_scope
a7e8c268 614 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
f181d4ae 615
caf93cb0 616 /* Before we remove the declarations first check for unused variables. */
03a904b5 617 if ((warn_unused_variable || warn_unused_but_set_variable)
caf93cb0
EC
618 && !processing_template_decl)
619 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
620 if (TREE_CODE (decl) == VAR_DECL
03a904b5 621 && (! TREE_USED (decl) || !DECL_READ_P (decl))
caf93cb0
EC
622 && ! DECL_IN_SYSTEM_HEADER (decl)
623 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
03a904b5
JJ
624 {
625 if (! TREE_USED (decl))
626 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
627 else if (DECL_CONTEXT (decl) == current_function_decl
628 && TREE_TYPE (decl) != error_mark_node
629 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
630 && errorcount == unused_but_set_errorcount
631 && (!CLASS_TYPE_P (TREE_TYPE (decl))
632 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
633 {
634 warning (OPT_Wunused_but_set_variable,
635 "variable %q+D set but not used", decl);
636 unused_but_set_errorcount = errorcount;
637 }
638 }
caf93cb0 639
f181d4ae
MM
640 /* Remove declarations for all the DECLs in this level. */
641 for (link = decls; link; link = TREE_CHAIN (link))
642 {
c3783399 643 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
0cbd7506 644 && DECL_NAME (link))
f181d4ae 645 {
90ea9897
MM
646 tree name = DECL_NAME (link);
647 cxx_binding *ob;
f181d4ae
MM
648 tree ns_binding;
649
90ea9897
MM
650 ob = outer_binding (name,
651 IDENTIFIER_BINDING (name),
652 /*class_p=*/true);
653 if (!ob)
654 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
c7dda1e3
MM
655 else
656 ns_binding = NULL_TREE;
657
90ea9897 658 if (ob && ob->scope == current_binding_level->level_chain)
f181d4ae 659 /* We have something like:
68642fb6 660
0cbd7506
MS
661 int i;
662 for (int i; ;);
68642fb6 663
f181d4ae
MM
664 and we are leaving the `for' scope. There's no reason to
665 keep the binding of the inner `i' in this case. */
90ea9897
MM
666 pop_binding (name, link);
667 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
147135cc 668 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
f181d4ae
MM
669 /* Here, we have something like:
670
671 typedef int I;
672
673 void f () {
674 for (int I; ;);
675 }
676
677 We must pop the for-scope binding so we know what's a
678 type and what isn't. */
90ea9897 679 pop_binding (name, link);
e76a2646 680 else
e76a2646 681 {
f181d4ae
MM
682 /* Mark this VAR_DECL as dead so that we can tell we left it
683 there only for backward compatibility. */
684 DECL_DEAD_FOR_LOCAL (link) = 1;
68642fb6 685
517f3315 686 /* Keep track of what should have happened when we
f181d4ae 687 popped the binding. */
90ea9897 688 if (ob && ob->value)
820cc88f
DB
689 {
690 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
691 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
692 }
f181d4ae
MM
693
694 /* Add it to the list of dead variables in the next
695 outermost binding to that we can remove these when we
696 leave that binding. */
4d2fb769
NF
697 VEC_safe_push (tree, gc,
698 current_binding_level->level_chain->dead_vars_from_for,
699 link);
f181d4ae 700
af6fd53f 701 /* Although we don't pop the cxx_binding, we do clear
147135cc 702 its SCOPE since the scope is going away now. */
caf93cb0 703 IDENTIFIER_BINDING (name)->scope
90ea9897 704 = current_binding_level->level_chain;
e76a2646 705 }
2ee887f2 706 }
68642fb6 707 else
8d6e462b 708 {
8dc2b103 709 tree name;
c8094d83 710
f181d4ae 711 /* Remove the binding. */
0034cf72 712 decl = link;
caf93cb0 713
0034cf72
JM
714 if (TREE_CODE (decl) == TREE_LIST)
715 decl = TREE_VALUE (decl);
8dc2b103 716 name = decl;
c8094d83 717
8dc2b103
NS
718 if (TREE_CODE (name) == OVERLOAD)
719 name = OVL_FUNCTION (name);
caf93cb0 720
8dc2b103
NS
721 gcc_assert (DECL_P (name));
722 pop_binding (DECL_NAME (name), decl);
8d08fdba 723 }
f181d4ae 724 }
8d08fdba 725
f181d4ae
MM
726 /* Remove declarations for any `for' variables from inner scopes
727 that we kept around. */
ac47786e
NF
728 FOR_EACH_VEC_ELT_REVERSE (tree, current_binding_level->dead_vars_from_for,
729 ix, decl)
4d2fb769 730 pop_binding (DECL_NAME (decl), decl);
2ee887f2 731
f181d4ae
MM
732 /* Restore the IDENTIFIER_TYPE_VALUEs. */
733 for (link = current_binding_level->type_shadowed;
734 link; link = TREE_CHAIN (link))
735 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
acef433b
MM
736
737 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
ac47786e
NF
738 FOR_EACH_VEC_ELT_REVERSE (cp_label_binding,
739 current_binding_level->shadowed_labels,
740 ix, label_bind)
4d2fb769 741 pop_local_label (label_bind->label, label_bind->prev_value);
acef433b 742
f181d4ae
MM
743 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
744 list if a `using' declaration put them there. The debugging
3b426391 745 back ends won't understand OVERLOAD, so we remove them here.
f181d4ae
MM
746 Because the BLOCK_VARS are (temporarily) shared with
747 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
748 popped all the bindings. */
749 if (block)
750 {
751 tree* d;
8d6e462b 752
a06d48ef
JM
753 for (d = &BLOCK_VARS (block); *d; )
754 {
755 if (TREE_CODE (*d) == TREE_LIST)
756 *d = TREE_CHAIN (*d);
757 else
910ad8de 758 d = &DECL_CHAIN (*d);
a06d48ef 759 }
8d6e462b 760 }
8d08fdba
MS
761
762 /* If the level being exited is the top level of a function,
763 check over all the labels. */
8d08fdba
MS
764 if (functionbody)
765 {
acef433b
MM
766 /* Since this is the top level block of a function, the vars are
767 the function's parameters. Don't leave them in the BLOCK
768 because they are found in the FUNCTION_DECL instead. */
8d08fdba 769 BLOCK_VARS (block) = 0;
acef433b 770 pop_labels (block);
8d08fdba
MS
771 }
772
ac20c67a 773 kind = current_binding_level->kind;
325c3691
RH
774 if (kind == sk_cleanup)
775 {
776 tree stmt;
777
778 /* If this is a temporary binding created for a cleanup, then we'll
779 have pushed a statement list level. Pop that, create a new
780 BIND_EXPR for the block, and insert it into the stream. */
781 stmt = pop_stmt_list (current_binding_level->statement_list);
c2255bc4 782 stmt = c_build_bind_expr (input_location, block, stmt);
325c3691
RH
783 add_stmt (stmt);
784 }
8d08fdba 785
1a6daf15 786 leave_scope ();
8d08fdba 787 if (functionbody)
72c4a4ca
GK
788 {
789 /* The current function is being defined, so its DECL_INITIAL
790 should be error_mark_node. */
791 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
792 DECL_INITIAL (current_function_decl) = block;
793 }
8d08fdba 794 else if (block)
f444e36b
MM
795 current_binding_level->blocks
796 = chainon (current_binding_level->blocks, block);
797
8d08fdba
MS
798 /* If we did not make a block for the level just exited,
799 any blocks made for inner levels
800 (since they cannot be recorded as subblocks in that level)
801 must be carried forward so they will later become subblocks
802 of something else. */
803 else if (subblocks)
536333d4
MM
804 current_binding_level->blocks
805 = chainon (current_binding_level->blocks, subblocks);
8d08fdba 806
d9b2d9da
MM
807 /* Each and every BLOCK node created here in `poplevel' is important
808 (e.g. for proper debugging information) so if we created one
809 earlier, mark it as "used". */
810 if (block)
811 TREE_USED (block) = 1;
812
325c3691 813 /* All temporary bindings created for cleanups are popped silently. */
ac20c67a 814 if (kind == sk_cleanup)
325c3691 815 goto restart;
8d08fdba 816
22ffcc6f 817 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
8d08fdba
MS
818}
819
0aafb128
MM
820/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
821 itself, calling F for each. The DATA is passed to F as well. */
822
00e8de68 823static int
be93747e 824walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
00e8de68
GDR
825{
826 int result = 0;
be93747e 827 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
8d08fdba 828
be93747e 829 result |= (*f) (name_space, data);
8d08fdba 830
910ad8de 831 for (; current; current = DECL_CHAIN (current))
00e8de68 832 result |= walk_namespaces_r (current, f, data);
fc0e7bf5 833
00e8de68 834 return result;
5566b478
MS
835}
836
00e8de68
GDR
837/* Walk all the namespaces, calling F for each. The DATA is passed to
838 F as well. */
839
840int
841walk_namespaces (walk_namespaces_fn f, void* data)
5566b478 842{
00e8de68 843 return walk_namespaces_r (global_namespace, f, data);
8d08fdba
MS
844}
845
00e8de68
GDR
846/* Call wrapup_globals_declarations for the globals in NAMESPACE. If
847 DATA is non-NULL, this is the last time we will call
848 wrapup_global_declarations for this NAMESPACE. */
39c01e4c 849
00e8de68 850int
be93747e 851wrapup_globals_for_namespace (tree name_space, void* data)
39c01e4c 852{
be93747e 853 struct cp_binding_level *level = NAMESPACE_LEVEL (name_space);
9857866d
KH
854 VEC(tree,gc) *statics = level->static_decls;
855 tree *vec = VEC_address (tree, statics);
856 int len = VEC_length (tree, statics);
00e8de68 857 int last_time = (data != 0);
68642fb6 858
00e8de68 859 if (last_time)
39c01e4c 860 {
00e8de68 861 check_global_declarations (vec, len);
db5f8b93 862 emit_debug_global_declarations (vec, len);
00e8de68 863 return 0;
39c01e4c
MM
864 }
865
00e8de68
GDR
866 /* Write out any globals that need to be output. */
867 return wrapup_global_declarations (vec, len);
39c01e4c
MM
868}
869
00e8de68 870\f
9188c363
MM
871/* In C++, you don't have to write `struct S' to refer to `S'; you
872 can just use `S'. We accomplish this by creating a TYPE_DECL as
873 if the user had written `typedef struct S S'. Create and return
874 the TYPE_DECL for TYPE. */
875
876tree
11f6b451 877create_implicit_typedef (tree name, tree type)
9188c363
MM
878{
879 tree decl;
880
c2255bc4 881 decl = build_decl (input_location, TYPE_DECL, name, type);
c727aa5e 882 DECL_ARTIFICIAL (decl) = 1;
9188c363
MM
883 /* There are other implicit type declarations, like the one *within*
884 a class that allows you to write `S::S'. We must distinguish
885 amongst these. */
886 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
887 TYPE_NAME (type) = decl;
9dd90d8e 888 TYPE_STUB_DECL (type) = decl;
9188c363
MM
889
890 return decl;
891}
892
8e4ce833
JJ
893/* Remember a local name for name-mangling purposes. */
894
895static void
11f6b451 896push_local_name (tree decl)
8e4ce833
JJ
897{
898 size_t i, nelts;
899 tree t, name;
900
22ffcc6f 901 timevar_push (TV_NAME_LOOKUP);
8e4ce833
JJ
902
903 name = DECL_NAME (decl);
904
9acaf84a 905 nelts = VEC_length (tree, local_names);
8e4ce833
JJ
906 for (i = 0; i < nelts; i++)
907 {
9acaf84a 908 t = VEC_index (tree, local_names, i);
8e4ce833
JJ
909 if (DECL_NAME (t) == name)
910 {
911 if (!DECL_LANG_SPECIFIC (decl))
912 retrofit_lang_decl (decl);
b97e8a14 913 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
8e4ce833
JJ
914 if (DECL_LANG_SPECIFIC (t))
915 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
916 else
917 DECL_DISCRIMINATOR (decl) = 1;
918
9acaf84a 919 VEC_replace (tree, local_names, i, decl);
de94b46c
KG
920 timevar_pop (TV_NAME_LOOKUP);
921 return;
8e4ce833
JJ
922 }
923 }
924
9acaf84a 925 VEC_safe_push (tree, gc, local_names, decl);
22ffcc6f 926 timevar_pop (TV_NAME_LOOKUP);
8e4ce833 927}
8d08fdba
MS
928\f
929/* Subroutine of duplicate_decls: return truthvalue of whether
930 or not types of these decls match.
931
932 For C++, we must compare the parameter list so that `int' can match
933 `int&' in a parameter position, but `int&' is not confused with
934 `const int&'. */
e92cc029 935
6060a796 936int
11f6b451 937decls_match (tree newdecl, tree olddecl)
8d08fdba
MS
938{
939 int types_match;
940
347d73d7
ML
941 if (newdecl == olddecl)
942 return 1;
943
6b4b3deb
MM
944 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
945 /* If the two DECLs are not even the same kind of thing, we're not
946 interested in their types. */
947 return 0;
948
949 if (TREE_CODE (newdecl) == FUNCTION_DECL)
8d08fdba
MS
950 {
951 tree f1 = TREE_TYPE (newdecl);
952 tree f2 = TREE_TYPE (olddecl);
953 tree p1 = TYPE_ARG_TYPES (f1);
954 tree p2 = TYPE_ARG_TYPES (f2);
955
c4bcc71f
JM
956 /* Specializations of different templates are different functions
957 even if they have the same type. */
958 tree t1 = (DECL_USE_TEMPLATE (newdecl)
959 ? DECL_TI_TEMPLATE (newdecl)
960 : NULL_TREE);
961 tree t2 = (DECL_USE_TEMPLATE (olddecl)
962 ? DECL_TI_TEMPLATE (olddecl)
963 : NULL_TREE);
964 if (t1 != t2)
965 return 0;
966
4f1c5b7d 967 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
eb68cb58
MM
968 && ! (DECL_EXTERN_C_P (newdecl)
969 && DECL_EXTERN_C_P (olddecl)))
c5a6fc45
JM
970 return 0;
971
8353dd9a
JM
972#ifdef NO_IMPLICIT_EXTERN_C
973 /* A new declaration doesn't match a built-in one unless it
974 is also extern "C". */
a0ff8620 975 if (DECL_IS_BUILTIN (olddecl)
8353dd9a
JM
976 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
977 return 0;
978#endif
979
8d08fdba 980 if (TREE_CODE (f1) != TREE_CODE (f2))
0cbd7506 981 return 0;
8d08fdba 982
3bfdc719 983 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8926095f 984 {
8b27e9ef
NS
985 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
986 && (DECL_BUILT_IN (olddecl)
987#ifndef NO_IMPLICIT_EXTERN_C
0cbd7506
MS
988 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
989 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
8b27e9ef
NS
990#endif
991 ))
a28e3c7f
MS
992 {
993 types_match = self_promoting_args_p (p1);
994 if (p1 == void_list_node)
995 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
996 }
8b27e9ef
NS
997#ifndef NO_IMPLICIT_EXTERN_C
998 else if (p1 == NULL_TREE
999 && (DECL_EXTERN_C_P (olddecl)
0cbd7506
MS
1000 && DECL_IN_SYSTEM_HEADER (olddecl)
1001 && !DECL_CLASS_SCOPE_P (olddecl))
8b27e9ef 1002 && (DECL_EXTERN_C_P (newdecl)
0cbd7506
MS
1003 && DECL_IN_SYSTEM_HEADER (newdecl)
1004 && !DECL_CLASS_SCOPE_P (newdecl)))
a28e3c7f
MS
1005 {
1006 types_match = self_promoting_args_p (p2);
1007 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1008 }
8b27e9ef 1009#endif
8926095f 1010 else
91063b51 1011 types_match = compparms (p1, p2);
8926095f 1012 }
8d08fdba
MS
1013 else
1014 types_match = 0;
1015 }
6b4b3deb 1016 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
51c184be 1017 {
2bb5d995
JM
1018 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1019 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1020 return 0;
1021
ee935db4
MM
1022 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1023 DECL_TEMPLATE_PARMS (olddecl)))
1024 return 0;
1025
f84b4be9 1026 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
ee935db4
MM
1027 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1028 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
f84b4be9
JM
1029 else
1030 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1031 DECL_TEMPLATE_RESULT (newdecl));
51c184be 1032 }
8d08fdba
MS
1033 else
1034 {
91a5bc9f
KL
1035 /* Need to check scope for variable declaration (VAR_DECL).
1036 For typedef (TYPE_DECL), scope is ignored. */
1037 if (TREE_CODE (newdecl) == VAR_DECL
ace4831d
MM
1038 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1039 /* [dcl.link]
1040 Two declarations for an object with C language linkage
1041 with the same name (ignoring the namespace that qualify
1042 it) that appear in different namespace scopes refer to
1043 the same object. */
1044 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
91a5bc9f
KL
1045 return 0;
1046
8d08fdba
MS
1047 if (TREE_TYPE (newdecl) == error_mark_node)
1048 types_match = TREE_TYPE (olddecl) == error_mark_node;
1049 else if (TREE_TYPE (olddecl) == NULL_TREE)
1050 types_match = TREE_TYPE (newdecl) == NULL_TREE;
a0a33927
MS
1051 else if (TREE_TYPE (newdecl) == NULL_TREE)
1052 types_match = 0;
8d08fdba 1053 else
96d84882
PB
1054 types_match = comptypes (TREE_TYPE (newdecl),
1055 TREE_TYPE (olddecl),
1056 COMPARE_REDECLARATION);
8d08fdba
MS
1057 }
1058
1059 return types_match;
1060}
1061
1062/* If NEWDECL is `static' and an `extern' was seen previously,
24f30ed4 1063 warn about it. OLDDECL is the previous declaration.
8d08fdba
MS
1064
1065 Note that this does not apply to the C++ case of declaring
1066 a variable `extern const' and then later `const'.
1067
8d08fdba
MS
1068 Don't complain about built-in functions, since they are beyond
1069 the user's control. */
1070
a5e6b29b 1071void
11f6b451 1072warn_extern_redeclared_static (tree newdecl, tree olddecl)
8d08fdba 1073{
68642fb6 1074 if (TREE_CODE (newdecl) == TYPE_DECL
655dc6ee 1075 || TREE_CODE (newdecl) == TEMPLATE_DECL
a2a9e21c
GDR
1076 || TREE_CODE (newdecl) == CONST_DECL
1077 || TREE_CODE (newdecl) == NAMESPACE_DECL)
8d08fdba 1078 return;
68642fb6 1079
963d5758
MM
1080 /* Don't get confused by static member functions; that's a different
1081 use of `static'. */
1082 if (TREE_CODE (newdecl) == FUNCTION_DECL
1083 && DECL_STATIC_FUNCTION_P (newdecl))
1084 return;
8d08fdba 1085
24f30ed4
MM
1086 /* If the old declaration was `static', or the new one isn't, then
1087 then everything is OK. */
1088 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1089 return;
1090
1091 /* It's OK to declare a builtin function as `static'. */
1092 if (TREE_CODE (olddecl) == FUNCTION_DECL
1093 && DECL_ARTIFICIAL (olddecl))
1094 return;
1095
cbe5f3b3
MLI
1096 permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1097 permerror (input_location, "previous declaration of %q+D", olddecl);
8d08fdba
MS
1098}
1099
e1f0e7a6
MM
1100/* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1101 function templates. If their exception specifications do not
b9704fc5 1102 match, issue a diagnostic. */
e1f0e7a6
MM
1103
1104static void
1105check_redeclaration_exception_specification (tree new_decl,
1106 tree old_decl)
1107{
1108 tree new_type;
1109 tree old_type;
1110 tree new_exceptions;
1111 tree old_exceptions;
1112
1113 new_type = TREE_TYPE (new_decl);
1114 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1115 old_type = TREE_TYPE (old_decl);
1116 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1117
1118 /* [except.spec]
1119
1120 If any declaration of a function has an exception-specification,
1121 all declarations, including the definition and an explicit
1122 specialization, of that function shall have an
1123 exception-specification with the same set of type-ids. */
1124 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1125 && ! DECL_IS_BUILTIN (old_decl)
1126 && flag_exceptions
3a55fb4c 1127 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
e1f0e7a6 1128 {
3a55fb4c
JM
1129 error ("declaration of %qF has a different exception specifier",
1130 new_decl);
e1f0e7a6
MM
1131 error ("from previous declaration %q+F", old_decl);
1132 }
1133}
1134
91ea6df3
GDR
1135/* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1136 Otherwise issue diagnostics. */
1137
1138static bool
1139validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1140{
1141 old_decl = STRIP_TEMPLATE (old_decl);
1142 new_decl = STRIP_TEMPLATE (new_decl);
1143 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1144 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1145 return true;
1146 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1147 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1148 return true;
1149 if (TREE_CODE (old_decl) == FUNCTION_DECL && DECL_BUILT_IN (old_decl))
1150 {
1151 /* Hide a built-in declaration. */
1152 DECL_DECLARED_CONSTEXPR_P (old_decl)
1153 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1154 return true;
1155 }
1156 error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1157 error ("from previous declaration %q+D", old_decl);
1158 return false;
1159}
1160
3a47c4e4
AO
1161#define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1162 && lookup_attribute ("gnu_inline", \
1163 DECL_ATTRIBUTES (fn)))
1164
b1a19c7c
MM
1165/* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1166 If the redeclaration is invalid, a diagnostic is issued, and the
1167 error_mark_node is returned. Otherwise, OLDDECL is returned.
8d08fdba 1168
b1a19c7c 1169 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
d63d5d0c
ILT
1170 returned.
1171
1172 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
8d08fdba 1173
b1a19c7c 1174tree
d63d5d0c 1175duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
8d08fdba 1176{
8d08fdba 1177 unsigned olddecl_uid = DECL_UID (olddecl);
d63d5d0c 1178 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
0b60dfe3 1179 int new_defines_function = 0;
2b110bfc 1180 tree new_template_info;
5566b478
MS
1181
1182 if (newdecl == olddecl)
b1a19c7c 1183 return olddecl;
8d08fdba 1184
8926095f 1185 types_match = decls_match (newdecl, olddecl);
8d08fdba 1186
8d08fdba
MS
1187 /* If either the type of the new decl or the type of the old decl is an
1188 error_mark_node, then that implies that we have already issued an
1189 error (earlier) for some bogus type specification, and in that case,
1190 it is rather pointless to harass the user with yet more error message
0b60dfe3 1191 about the same declaration, so just pretend the types match here. */
bd6dd845
MS
1192 if (TREE_TYPE (newdecl) == error_mark_node
1193 || TREE_TYPE (olddecl) == error_mark_node)
dc5395cc 1194 return error_mark_node;
68642fb6 1195
97055d5c
AO
1196 if (DECL_P (olddecl)
1197 && TREE_CODE (newdecl) == FUNCTION_DECL
1198 && TREE_CODE (olddecl) == FUNCTION_DECL
1199 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1200 {
1201 if (DECL_DECLARED_INLINE_P (newdecl)
1202 && DECL_UNINLINABLE (newdecl)
1203 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1204 /* Already warned elsewhere. */;
1205 else if (DECL_DECLARED_INLINE_P (olddecl)
1206 && DECL_UNINLINABLE (olddecl)
1207 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1208 /* Already warned. */;
1209 else if (DECL_DECLARED_INLINE_P (newdecl)
1210 && DECL_UNINLINABLE (olddecl)
1211 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1212 {
dee15844
JM
1213 warning (OPT_Wattributes, "function %q+D redeclared as inline",
1214 newdecl);
1215 warning (OPT_Wattributes, "previous declaration of %q+D "
1216 "with attribute noinline", olddecl);
97055d5c
AO
1217 }
1218 else if (DECL_DECLARED_INLINE_P (olddecl)
1219 && DECL_UNINLINABLE (newdecl)
1220 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1221 {
dee15844
JM
1222 warning (OPT_Wattributes, "function %q+D redeclared with "
1223 "attribute noinline", newdecl);
1224 warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1225 olddecl);
97055d5c
AO
1226 }
1227 }
1228
a1c65f9f 1229 /* Check for redeclaration and other discrepancies. */
d22c8596 1230 if (TREE_CODE (olddecl) == FUNCTION_DECL
9f33663b
JM
1231 && DECL_ARTIFICIAL (olddecl))
1232 {
d63d5d0c 1233 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
9f33663b
JM
1234 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1235 {
d63d5d0c
ILT
1236 /* Avoid warnings redeclaring built-ins which have not been
1237 explicitly declared. */
0cbd7506
MS
1238 if (DECL_ANTICIPATED (olddecl))
1239 return NULL_TREE;
d52e4867 1240
9f33663b
JM
1241 /* If you declare a built-in or predefined function name as static,
1242 the old definition is overridden, but optionally warn this was a
1243 bad choice of name. */
1244 if (! TREE_PUBLIC (newdecl))
1245 {
24ea727a
SZ
1246 warning (OPT_Wshadow,
1247 DECL_BUILT_IN (olddecl)
1248 ? G_("shadowing built-in function %q#D")
1249 : G_("shadowing library function %q#D"), olddecl);
9f33663b 1250 /* Discard the old built-in function. */
b1a19c7c 1251 return NULL_TREE;
9f33663b
JM
1252 }
1253 /* If the built-in is not ansi, then programs can override
1254 it even globally without an error. */
1255 else if (! DECL_BUILT_IN (olddecl))
d4ee4d25 1256 warning (0, "library function %q#D redeclared as non-function %q#D",
0cbd7506 1257 olddecl, newdecl);
9f33663b
JM
1258 else
1259 {
2d01edd7
GDR
1260 error ("declaration of %q#D", newdecl);
1261 error ("conflicts with built-in declaration %q#D",
0cbd7506 1262 olddecl);
9f33663b 1263 }
b1a19c7c 1264 return NULL_TREE;
a4443a08 1265 }
9f33663b 1266 else if (!types_match)
8d08fdba 1267 {
d63d5d0c
ILT
1268 /* Avoid warnings redeclaring built-ins which have not been
1269 explicitly declared. */
0cbd7506 1270 if (DECL_ANTICIPATED (olddecl))
498c0f27
JJ
1271 {
1272 /* Deal with fileptr_type_node. FILE type is not known
1273 at the time we create the builtins. */
1274 tree t1, t2;
1275
1276 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1277 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1278 t1 || t2;
1279 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1280 if (!t1 || !t2)
1281 break;
1282 else if (TREE_VALUE (t2) == fileptr_type_node)
1283 {
1284 tree t = TREE_VALUE (t1);
1285
1286 if (TREE_CODE (t) == POINTER_TYPE
1287 && TYPE_NAME (TREE_TYPE (t))
1288 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1289 == get_identifier ("FILE")
1290 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1291 {
1292 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1293
1294 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1295 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1296 types_match = decls_match (newdecl, olddecl);
1297 if (types_match)
d63d5d0c
ILT
1298 return duplicate_decls (newdecl, olddecl,
1299 newdecl_is_friend);
498c0f27
JJ
1300 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1301 }
1302 }
1303 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1304 break;
1305 }
d52e4867 1306 else if ((DECL_EXTERN_C_P (newdecl)
7e99327d
MM
1307 && DECL_EXTERN_C_P (olddecl))
1308 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1309 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
a4443a08 1310 {
9f33663b
JM
1311 /* A near match; override the builtin. */
1312
1313 if (TREE_PUBLIC (newdecl))
a4443a08 1314 {
d4ee4d25
DD
1315 warning (0, "new declaration %q#D", newdecl);
1316 warning (0, "ambiguates built-in declaration %q#D",
0cbd7506 1317 olddecl);
a4443a08 1318 }
b323323f 1319 else
24ea727a
SZ
1320 warning (OPT_Wshadow,
1321 DECL_BUILT_IN (olddecl)
1322 ? G_("shadowing built-in function %q#D")
1323 : G_("shadowing library function %q#D"), olddecl);
a4443a08 1324 }
9f33663b
JM
1325 else
1326 /* Discard the old built-in function. */
b1a19c7c 1327 return NULL_TREE;
04a9d080
RS
1328
1329 /* Replace the old RTL to avoid problems with inlining. */
84b8b0e0 1330 COPY_DECL_RTL (newdecl, olddecl);
8d08fdba 1331 }
d63d5d0c
ILT
1332 /* Even if the types match, prefer the new declarations type for
1333 built-ins which have not been explicitly declared, for
1334 exception lists, etc... */
0ba8746d 1335 else if (DECL_IS_BUILTIN (olddecl))
7072018e 1336 {
74869a85
NS
1337 tree type = TREE_TYPE (newdecl);
1338 tree attribs = (*targetm.merge_type_attributes)
1339 (TREE_TYPE (olddecl), type);
1340
e9525111 1341 type = cp_build_type_attribute_variant (type, attribs);
74869a85 1342 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
7072018e 1343 }
68642fb6 1344
62bedd31
JJ
1345 /* If a function is explicitly declared "throw ()", propagate that to
1346 the corresponding builtin. */
1347 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1348 && DECL_ANTICIPATED (olddecl)
1349 && TREE_NOTHROW (newdecl)
1350 && !TREE_NOTHROW (olddecl)
1351 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != NULL_TREE
1352 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != olddecl
1353 && types_match)
1354 TREE_NOTHROW (built_in_decls [DECL_FUNCTION_CODE (olddecl)]) = 1;
1355
7e99327d
MM
1356 /* Whether or not the builtin can throw exceptions has no
1357 bearing on this declarator. */
1358 TREE_NOTHROW (olddecl) = 0;
1359
24f30ed4
MM
1360 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1361 {
1362 /* If a builtin function is redeclared as `static', merge
1363 the declarations, but make the original one static. */
1364 DECL_THIS_STATIC (olddecl) = 1;
1365 TREE_PUBLIC (olddecl) = 0;
9bfadf57 1366
421844e7
MM
1367 /* Make the old declaration consistent with the new one so
1368 that all remnants of the builtin-ness of this function
1369 will be banished. */
5d2ed28c 1370 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
84b8b0e0 1371 COPY_DECL_RTL (newdecl, olddecl);
24f30ed4 1372 }
39211cd5
MS
1373 }
1374 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1375 {
6936461f
OW
1376 /* C++ Standard, 3.3, clause 4:
1377 "[Note: a namespace name or a class template name must be unique
1378 in its declarative region (7.3.2, clause 14). ]" */
1379 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1380 && TREE_CODE (newdecl) != NAMESPACE_DECL
1381 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1382 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1383 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1384 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
9ed182dc 1385 {
6936461f
OW
1386 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1387 && TREE_CODE (newdecl) != TYPE_DECL)
1388 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1389 && TREE_CODE (olddecl) != TYPE_DECL))
1390 {
1391 /* We do nothing special here, because C++ does such nasty
1392 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1393 get shadowed, and know that if we need to find a TYPE_DECL
1394 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1395 slot of the identifier. */
1396 return NULL_TREE;
1397 }
1398
1399 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1400 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1401 || (TREE_CODE (olddecl) == FUNCTION_DECL
1402 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1403 return NULL_TREE;
9ed182dc
JM
1404 }
1405
2d01edd7 1406 error ("%q#D redeclared as different kind of symbol", newdecl);
39211cd5
MS
1407 if (TREE_CODE (olddecl) == TREE_LIST)
1408 olddecl = TREE_VALUE (olddecl);
dee15844 1409 error ("previous declaration of %q+#D", olddecl);
39211cd5 1410
c0694c4b 1411 return error_mark_node;
8d08fdba 1412 }
8d08fdba
MS
1413 else if (!types_match)
1414 {
4f1c5b7d 1415 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
7bdbfa05
MM
1416 /* These are certainly not duplicate declarations; they're
1417 from different scopes. */
b1a19c7c 1418 return NULL_TREE;
7bdbfa05 1419
8926095f 1420 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
f0e01782
MS
1421 {
1422 /* The name of a class template may not be declared to refer to
1423 any other template, class, function, object, namespace, value,
e92cc029 1424 or type in the same scope. */
5566b478
MS
1425 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1426 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
f0e01782 1427 {
2d01edd7 1428 error ("declaration of template %q#D", newdecl);
dee15844 1429 error ("conflicts with previous declaration %q+#D", olddecl);
f0e01782 1430 }
ec255269
MS
1431 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1432 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1433 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
91063b51 1434 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
75650646 1435 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
b9201622
NS
1436 DECL_TEMPLATE_PARMS (olddecl))
1437 /* Template functions can be disambiguated by
1438 return type. */
1439 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1440 TREE_TYPE (TREE_TYPE (olddecl))))
ec255269 1441 {
2d01edd7 1442 error ("new declaration %q#D", newdecl);
dee15844 1443 error ("ambiguates old declaration %q+#D", olddecl);
ec255269 1444 }
b1a19c7c 1445 return NULL_TREE;
f0e01782 1446 }
8926095f
MS
1447 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1448 {
eb68cb58 1449 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
8926095f 1450 {
2d01edd7 1451 error ("declaration of C function %q#D conflicts with",
0cbd7506 1452 newdecl);
dee15844 1453 error ("previous declaration %q+#D here", olddecl);
8926095f 1454 }
00595019 1455 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
91063b51 1456 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
700f8a87 1457 {
2d01edd7 1458 error ("new declaration %q#D", newdecl);
dee15844 1459 error ("ambiguates old declaration %q+#D", olddecl);
492b73bd 1460 return error_mark_node;
700f8a87
MS
1461 }
1462 else
b1a19c7c 1463 return NULL_TREE;
8926095f 1464 }
58ec3cc5 1465 else
8d08fdba 1466 {
2d01edd7 1467 error ("conflicting declaration %q#D", newdecl);
dee15844 1468 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
0cbd7506 1469 return error_mark_node;
8d08fdba
MS
1470 }
1471 }
68642fb6 1472 else if (TREE_CODE (newdecl) == FUNCTION_DECL
75650646
MM
1473 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1474 && (!DECL_TEMPLATE_INFO (newdecl)
68642fb6 1475 || (DECL_TI_TEMPLATE (newdecl)
75650646
MM
1476 != DECL_TI_TEMPLATE (olddecl))))
1477 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1478 && (!DECL_TEMPLATE_INFO (olddecl)
68642fb6 1479 || (DECL_TI_TEMPLATE (olddecl)
75650646 1480 != DECL_TI_TEMPLATE (newdecl))))))
386b8a85
JM
1481 /* It's OK to have a template specialization and a non-template
1482 with the same type, or to have specializations of two
75650646
MM
1483 different templates with the same type. Note that if one is a
1484 specialization, and the other is an instantiation of the same
1485 template, that we do not exit at this point. That situation
1486 can occur if we instantiate a template class, and then
0e339752 1487 specialize one of its methods. This situation is valid, but
75650646 1488 the declarations must be merged in the usual way. */
b1a19c7c 1489 return NULL_TREE;
68642fb6
UD
1490 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1491 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
75650646
MM
1492 && !DECL_USE_TEMPLATE (newdecl))
1493 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1494 && !DECL_USE_TEMPLATE (olddecl))))
1495 /* One of the declarations is a template instantiation, and the
1496 other is not a template at all. That's OK. */
b1a19c7c 1497 return NULL_TREE;
c30b4add
MM
1498 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1499 {
1500 /* In [namespace.alias] we have:
c8094d83 1501
0cbd7506 1502 In a declarative region, a namespace-alias-definition can be
c30b4add
MM
1503 used to redefine a namespace-alias declared in that declarative
1504 region to refer only to the namespace to which it already
1505 refers.
c8094d83 1506
c30b4add
MM
1507 Therefore, if we encounter a second alias directive for the same
1508 alias, we can just ignore the second directive. */
1509 if (DECL_NAMESPACE_ALIAS (newdecl)
c8094d83 1510 && (DECL_NAMESPACE_ALIAS (newdecl)
c30b4add
MM
1511 == DECL_NAMESPACE_ALIAS (olddecl)))
1512 return olddecl;
1513 /* [namespace.alias]
1514
0cbd7506 1515 A namespace-name or namespace-alias shall not be declared as
c30b4add
MM
1516 the name of any other entity in the same declarative region.
1517 A namespace-name defined at global scope shall not be
77880ae4 1518 declared as the name of any other entity in any global scope
c30b4add 1519 of the program. */
2d01edd7 1520 error ("declaration of namespace %qD conflicts with", newdecl);
dee15844 1521 error ("previous declaration of namespace %q+D here", olddecl);
c30b4add
MM
1522 return error_mark_node;
1523 }
8d08fdba
MS
1524 else
1525 {
d8e178a0 1526 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
8251199e 1527 if (errmsg)
8d08fdba 1528 {
402b8cf6 1529 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
8d08fdba 1530 if (DECL_NAME (olddecl) != NULL_TREE)
dee15844
JM
1531 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1532 ? "%q+#D previously defined here"
1533 : "%q+#D previously declared here", olddecl);
b1a19c7c 1534 return error_mark_node;
8d08fdba
MS
1535 }
1536 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1537 && DECL_INITIAL (olddecl) != NULL_TREE
1538 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1539 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1540 {
1541 /* Prototype decl follows defn w/o prototype. */
c5d75364
MLI
1542 warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1543 warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1544 "follows non-prototype definition here");
8d08fdba 1545 }
ace4831d
MM
1546 else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1547 || TREE_CODE (olddecl) == VAR_DECL)
8d08fdba 1548 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
8926095f 1549 {
ace4831d
MM
1550 /* [dcl.link]
1551 If two declarations of the same function or object
1552 specify different linkage-specifications ..., the program
1553 is ill-formed.... Except for functions with C++ linkage,
1554 a function declaration without a linkage specification
1555 shall not precede the first linkage specification for
1556 that function. A function can be declared without a
1557 linkage specification after an explicit linkage
1558 specification has been seen; the linkage explicitly
1559 specified in the earlier declaration is not affected by
1560 such a function declaration.
1561
1562 DR 563 raises the question why the restrictions on
1563 functions should not also apply to objects. Older
1564 versions of G++ silently ignore the linkage-specification
1565 for this example:
1566
1567 namespace N {
1568 extern int i;
1569 extern "C" int i;
1570 }
1571
1572 which is clearly wrong. Therefore, we now treat objects
1573 like functions. */
46ccf50a 1574 if (current_lang_depth () == 0)
ace4831d
MM
1575 {
1576 /* There is no explicit linkage-specification, so we use
1577 the linkage from the previous declaration. */
1578 if (!DECL_LANG_SPECIFIC (newdecl))
1579 retrofit_lang_decl (newdecl);
1580 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1581 }
8926095f
MS
1582 else
1583 {
dee15844
JM
1584 error ("previous declaration of %q+#D with %qL linkage",
1585 olddecl, DECL_LANGUAGE (olddecl));
2d01edd7 1586 error ("conflicts with new declaration with %qL linkage",
0cbd7506 1587 DECL_LANGUAGE (newdecl));
8926095f
MS
1588 }
1589 }
e1cd6e56 1590
a6f02587 1591 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
c32381b1
JM
1592 ;
1593 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
e1cd6e56
MS
1594 {
1595 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1596 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1597 int i = 1;
1598
1599 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1600 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
68642fb6 1601
e1cd6e56
MS
1602 for (; t1 && t1 != void_list_node;
1603 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1604 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1605 {
2507f3b5
RK
1606 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1607 TREE_PURPOSE (t2)))
e1cd6e56 1608 {
cbe5f3b3 1609 permerror (input_location, "default argument given for parameter %d of %q#D",
37ec60ed 1610 i, newdecl);
cbe5f3b3 1611 permerror (input_location, "after previous specification in %q+#D", olddecl);
e1cd6e56
MS
1612 }
1613 else
1614 {
2d01edd7 1615 error ("default argument given for parameter %d of %q#D",
0cbd7506 1616 i, newdecl);
dee15844 1617 error ("after previous specification in %q+#D",
e1cd6e56
MS
1618 olddecl);
1619 }
1620 }
1621 }
8d08fdba
MS
1622 }
1623
4782bd5b
RS
1624 /* Do not merge an implicit typedef with an explicit one. In:
1625
1626 class A;
1627 ...
1628 typedef class A A __attribute__ ((foo));
1629
1630 the attribute should apply only to the typedef. */
1631 if (TREE_CODE (olddecl) == TYPE_DECL
1632 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1633 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
b1a19c7c 1634 return NULL_TREE;
4782bd5b 1635
8d08fdba
MS
1636 /* If new decl is `static' and an `extern' was seen previously,
1637 warn about it. */
1638 warn_extern_redeclared_static (newdecl, olddecl);
1639
91ea6df3
GDR
1640 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1641 return error_mark_node;
1642
e92cc029 1643 /* We have committed to returning 1 at this point. */
8d08fdba
MS
1644 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1645 {
1646 /* Now that functions must hold information normally held
1647 by field decls, there is extra work to do so that
1648 declaration information does not get destroyed during
1649 definition. */
1650 if (DECL_VINDEX (olddecl))
1651 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1652 if (DECL_CONTEXT (olddecl))
1653 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
e1cd6e56
MS
1654 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1655 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
fee7654e 1656 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
864b83b9 1657 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
815951d8 1658 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
963d5758 1659 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
e0fff4b3
JM
1660 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1661 SET_OVERLOADED_OPERATOR_CODE
1662 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
0b60dfe3 1663 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
68642fb6 1664
0b60dfe3 1665 /* Optionally warn about more than one declaration for the same
0cbd7506
MS
1666 name, but don't warn about a function declaration followed by a
1667 definition. */
0b60dfe3
BK
1668 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1669 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
a1c65f9f 1670 /* Don't warn about extern decl followed by definition. */
0b60dfe3 1671 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
a1c65f9f 1672 /* Don't warn about friends, let add_friend take care of it. */
d63d5d0c 1673 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
0b60dfe3 1674 {
b323323f
LM
1675 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1676 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
0b60dfe3 1677 }
b87d79e6
JM
1678
1679 if (DECL_DELETED_FN (newdecl))
1680 {
1681 error ("deleted definition of %qD", newdecl);
1682 error ("after previous declaration %q+D", olddecl);
1683 }
8d08fdba
MS
1684 }
1685
1686 /* Deal with C++: must preserve virtual function table size. */
1687 if (TREE_CODE (olddecl) == TYPE_DECL)
1688 {
926ce8bd
KH
1689 tree newtype = TREE_TYPE (newdecl);
1690 tree oldtype = TREE_TYPE (olddecl);
8d08fdba
MS
1691
1692 if (newtype != error_mark_node && oldtype != error_mark_node
1693 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
e93ee644
MM
1694 CLASSTYPE_FRIEND_CLASSES (newtype)
1695 = CLASSTYPE_FRIEND_CLASSES (oldtype);
7df87825 1696
970d6386 1697 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
8d08fdba
MS
1698 }
1699
8d08fdba
MS
1700 /* Copy all the DECL_... slots specified in the new decl
1701 except for any that we copy here from the old type. */
91d231cb 1702 DECL_ATTRIBUTES (newdecl)
f6897b10 1703 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
8d08fdba 1704
5566b478
MS
1705 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1706 {
e1f0e7a6
MM
1707 tree old_result;
1708 tree new_result;
1709 old_result = DECL_TEMPLATE_RESULT (olddecl);
1710 new_result = DECL_TEMPLATE_RESULT (newdecl);
1711 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
68642fb6 1712 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
4d85e00e
MM
1713 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1714 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
68642fb6 1715
3a47c4e4
AO
1716 DECL_ATTRIBUTES (old_result)
1717 = (*targetm.merge_decl_attributes) (old_result, new_result);
1718
e1f0e7a6
MM
1719 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1720 {
3a47c4e4
AO
1721 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1722 && DECL_INITIAL (new_result))
1723 {
1724 if (DECL_INITIAL (old_result))
99355518 1725 DECL_UNINLINABLE (old_result) = 1;
3a47c4e4 1726 else
99355518 1727 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
3a47c4e4
AO
1728 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1729 DECL_NOT_REALLY_EXTERN (old_result)
1730 = DECL_NOT_REALLY_EXTERN (new_result);
1731 DECL_INTERFACE_KNOWN (old_result)
1732 = DECL_INTERFACE_KNOWN (new_result);
1733 DECL_DECLARED_INLINE_P (old_result)
1734 = DECL_DECLARED_INLINE_P (new_result);
1eea53df
AP
1735 DECL_DISREGARD_INLINE_LIMITS (old_result)
1736 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1737
3a47c4e4
AO
1738 }
1739 else
1740 {
3a47c4e4
AO
1741 DECL_DECLARED_INLINE_P (old_result)
1742 |= DECL_DECLARED_INLINE_P (new_result);
1eea53df
AP
1743 DECL_DISREGARD_INLINE_LIMITS (old_result)
1744 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
3a47c4e4
AO
1745 check_redeclaration_exception_specification (newdecl, olddecl);
1746 }
e1f0e7a6
MM
1747 }
1748
daa8df65 1749 /* If the new declaration is a definition, update the file and
72c4a4ca
GK
1750 line information on the declaration, and also make
1751 the old declaration the same definition. */
3a47c4e4 1752 if (DECL_INITIAL (new_result) != NULL_TREE)
daa8df65 1753 {
caf93cb0 1754 DECL_SOURCE_LOCATION (olddecl)
e1f0e7a6 1755 = DECL_SOURCE_LOCATION (old_result)
f31686a3 1756 = DECL_SOURCE_LOCATION (newdecl);
72c4a4ca 1757 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
26bcf8fc 1758 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
448545cb
JM
1759 {
1760 tree parm;
1761 DECL_ARGUMENTS (old_result)
1762 = DECL_ARGUMENTS (new_result);
1763 for (parm = DECL_ARGUMENTS (old_result); parm;
910ad8de 1764 parm = DECL_CHAIN (parm))
448545cb
JM
1765 DECL_CONTEXT (parm) = old_result;
1766 }
c11889ce
MM
1767 }
1768
b1a19c7c 1769 return olddecl;
5566b478 1770 }
68642fb6 1771
8d08fdba
MS
1772 if (types_match)
1773 {
1774 /* Automatically handles default parameters. */
1775 tree oldtype = TREE_TYPE (olddecl);
e1cd6e56 1776 tree newtype;
8d08fdba 1777
e1cd6e56 1778 /* Merge the data types specified in the two decls. */
6da794e8 1779 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
e1cd6e56 1780
6da794e8 1781 /* If merge_types produces a non-typedef type, just use the old type. */
9076e292
JM
1782 if (TREE_CODE (newdecl) == TYPE_DECL
1783 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1784 newtype = oldtype;
1785
8d08fdba 1786 if (TREE_CODE (newdecl) == VAR_DECL)
17bbb839
MM
1787 {
1788 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1789 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
3db45ab5 1790 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
6c06fbce 1791 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
39703eb9
MM
1792 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1793 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1799e5d5
RH
1794
1795 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1796 if (DECL_LANG_SPECIFIC (olddecl)
1797 && CP_DECL_THREADPRIVATE_P (olddecl))
1798 {
1799 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1800 if (!DECL_LANG_SPECIFIC (newdecl))
1801 retrofit_lang_decl (newdecl);
1802
1803 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1804 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1805 }
17bbb839
MM
1806 }
1807
6da794e8 1808 /* Do this after calling `merge_types' so that default
8d08fdba 1809 parameters don't confuse us. */
e1f0e7a6
MM
1810 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1811 check_redeclaration_exception_specification (newdecl, olddecl);
8d08fdba
MS
1812 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1813
4a2f6dc0
VR
1814 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1815 check_default_args (newdecl);
1816
8d08fdba 1817 /* Lay the type out, unless already done. */
407f03b8 1818 if (! same_type_p (newtype, oldtype)
5566b478 1819 && TREE_TYPE (newdecl) != error_mark_node
5156628f 1820 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe
MS
1821 layout_type (TREE_TYPE (newdecl));
1822
5566b478
MS
1823 if ((TREE_CODE (newdecl) == VAR_DECL
1824 || TREE_CODE (newdecl) == PARM_DECL
1825 || TREE_CODE (newdecl) == RESULT_DECL
1826 || TREE_CODE (newdecl) == FIELD_DECL
1827 || TREE_CODE (newdecl) == TYPE_DECL)
5156628f 1828 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe 1829 layout_decl (newdecl, 0);
8d08fdba
MS
1830
1831 /* Merge the type qualifiers. */
1832 if (TREE_READONLY (newdecl))
1833 TREE_READONLY (olddecl) = 1;
1834 if (TREE_THIS_VOLATILE (newdecl))
1835 TREE_THIS_VOLATILE (olddecl) = 1;
5cefa0d9
JM
1836 if (TREE_NOTHROW (newdecl))
1837 TREE_NOTHROW (olddecl) = 1;
8d08fdba 1838
302a2cc5
JM
1839 /* Merge deprecatedness. */
1840 if (TREE_DEPRECATED (newdecl))
1841 TREE_DEPRECATED (olddecl) = 1;
1842
5779e713
MM
1843 /* Preserve function specific target and optimization options */
1844 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1845 {
1846 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1847 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1848 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1849 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1850
1851 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1852 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1853 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1854 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1855 }
1856
8d08fdba 1857 /* Merge the initialization information. */
8926095f
MS
1858 if (DECL_INITIAL (newdecl) == NULL_TREE
1859 && DECL_INITIAL (olddecl) != NULL_TREE)
1860 {
1861 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
f31686a3 1862 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
b97e8a14 1863 if (TREE_CODE (newdecl) == FUNCTION_DECL)
69ee8086
RH
1864 {
1865 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1da326c3 1866 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
69ee8086 1867 }
8926095f 1868 }
39211cd5
MS
1869
1870 /* Merge the section attribute.
0cbd7506 1871 We want to issue an error if the sections conflict but that must be
39211cd5
MS
1872 done later in decl_attributes since we are called before attributes
1873 are assigned. */
1874 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1875 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1876
a157febd
GK
1877 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1878 {
1879 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1880 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1331d16f 1881 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
220a35cc 1882 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
220a35cc 1883 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1331d16f 1884 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1ea193c2 1885 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
becfd6e5
KZ
1886 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1887 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1888 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
1889 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
c740732f
MM
1890 /* Keep the old RTL. */
1891 COPY_DECL_RTL (olddecl, newdecl);
1892 }
caf93cb0 1893 else if (TREE_CODE (newdecl) == VAR_DECL
c740732f
MM
1894 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1895 {
1896 /* Keep the old RTL. We cannot keep the old RTL if the old
1897 declaration was for an incomplete object and the new
1898 declaration is not since many attributes of the RTL will
1899 change. */
1900 COPY_DECL_RTL (olddecl, newdecl);
a157febd 1901 }
8d08fdba
MS
1902 }
1903 /* If cannot merge, then use the new type and qualifiers,
1904 and don't preserve the old rtl. */
1905 else
1906 {
1907 /* Clean out any memory we had of the old declaration. */
1908 tree oldstatic = value_member (olddecl, static_aggregates);
1909 if (oldstatic)
1910 TREE_VALUE (oldstatic) = error_mark_node;
1911
1912 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1913 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1914 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1915 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1916 }
1917
1918 /* Merge the storage class information. */
45806a3f
FS
1919 merge_weak (newdecl, olddecl);
1920
fc26fae3
RAE
1921 if (DECL_ONE_ONLY (olddecl))
1922 DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
1923
794d4a61 1924 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
a9aedbc2
MS
1925 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1926 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1927 if (! DECL_EXTERNAL (olddecl))
1928 DECL_EXTERNAL (newdecl) = 0;
68642fb6 1929
2b110bfc 1930 new_template_info = NULL_TREE;
0b60dfe3 1931 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
8d08fdba 1932 {
fea10e36
AO
1933 bool new_redefines_gnu_inline = false;
1934
1935 if (new_defines_function
1936 && ((DECL_INTERFACE_KNOWN (olddecl)
1937 && TREE_CODE (olddecl) == FUNCTION_DECL)
1938 || (TREE_CODE (olddecl) == TEMPLATE_DECL
1939 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1940 == FUNCTION_DECL))))
3a47c4e4
AO
1941 {
1942 tree fn = olddecl;
1943
1944 if (TREE_CODE (fn) == TEMPLATE_DECL)
1945 fn = DECL_TEMPLATE_RESULT (olddecl);
1946
fea10e36 1947 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
3a47c4e4 1948 }
3a47c4e4 1949
fea10e36 1950 if (!new_redefines_gnu_inline)
3a47c4e4 1951 {
3a47c4e4
AO
1952 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1953 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1954 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1955 }
68642fb6 1956 DECL_TEMPLATE_INSTANTIATED (newdecl)
2b0a63a3 1957 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3146f36f 1958 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
c8094d83 1959
58fb06b4
NS
1960 /* If the OLDDECL is an instantiation and/or specialization,
1961 then the NEWDECL must be too. But, it may not yet be marked
1962 as such if the caller has created NEWDECL, but has not yet
1963 figured out that it is a redeclaration. */
1964 if (!DECL_USE_TEMPLATE (newdecl))
1965 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
c8094d83 1966
0b60dfe3
BK
1967 /* Don't really know how much of the language-specific
1968 values we should copy from old to new. */
1969 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
4684cd27 1970 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
3febd123 1971 DECL_INITIALIZED_IN_CLASS_P (newdecl)
0cbd7506 1972 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
6a629cac 1973
b97e8a14
JM
1974 if (LANG_DECL_HAS_MIN (newdecl))
1975 {
1976 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
1977 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
1978 if (DECL_TEMPLATE_INFO (newdecl))
1979 new_template_info = DECL_TEMPLATE_INFO (newdecl);
1980 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1981 }
1982 /* Only functions have these fields. */
6a629cac
MM
1983 if (TREE_CODE (newdecl) == FUNCTION_DECL
1984 || DECL_FUNCTION_TEMPLATE_P (newdecl))
bb5e8a7f 1985 {
b97e8a14
JM
1986 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1987 olddecl_friend = DECL_FRIEND_P (olddecl);
1988 hidden_friend = (DECL_ANTICIPATED (olddecl)
1989 && DECL_HIDDEN_FRIEND_P (olddecl)
1990 && newdecl_is_friend);
bb5e8a7f
MM
1991 DECL_BEFRIENDING_CLASSES (newdecl)
1992 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1993 DECL_BEFRIENDING_CLASSES (olddecl));
ca9e1382
KL
1994 /* DECL_THUNKS is only valid for virtual functions,
1995 otherwise it is a DECL_FRIEND_CONTEXT. */
1996 if (DECL_VIRTUAL_P (newdecl))
1997 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
bb5e8a7f 1998 }
48326487
JM
1999 /* Only variables have this field. */
2000 else if (TREE_CODE (newdecl) == VAR_DECL
2001 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2002 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
8d08fdba
MS
2003 }
2004
8d08fdba
MS
2005 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2006 {
448545cb
JM
2007 tree parm;
2008
bb36cc75
DM
2009 /* Merge parameter attributes. */
2010 tree oldarg, newarg;
2011 for (oldarg = DECL_ARGUMENTS(olddecl),
2012 newarg = DECL_ARGUMENTS(newdecl);
2013 oldarg && newarg;
910ad8de 2014 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
bb36cc75
DM
2015 DECL_ATTRIBUTES (newarg)
2016 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2017 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2018 }
2019
68642fb6
UD
2020 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2021 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
75650646
MM
2022 {
2023 /* If newdecl is not a specialization, then it is not a
2024 template-related function at all. And that means that we
bf7c02dd 2025 should have exited above, returning 0. */
50bc768d 2026 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
75650646 2027
3146f36f 2028 if (DECL_ODR_USED (olddecl))
75650646 2029 /* From [temp.expl.spec]:
68642fb6 2030
75650646
MM
2031 If a template, a member template or the member of a class
2032 template is explicitly specialized then that
2033 specialization shall be declared before the first use of
2034 that specialization that would cause an implicit
2035 instantiation to take place, in every translation unit in
2036 which such a use occurs. */
9e637a26 2037 error ("explicit specialization of %qD after first use",
75650646
MM
2038 olddecl);
2039
2040 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
d03d18e8 2041
b9e75696
JM
2042 /* Don't propagate visibility from the template to the
2043 specialization here. We'll do that in determine_visibility if
2044 appropriate. */
2045 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2046
d03d18e8
KL
2047 /* [temp.expl.spec/14] We don't inline explicit specialization
2048 just because the primary template says so. */
75650646 2049 }
3a47c4e4
AO
2050 else if (new_defines_function && DECL_INITIAL (olddecl))
2051 {
7e8b322a
JH
2052 /* Never inline re-defined extern inline functions.
2053 FIXME: this could be better handled by keeping both
2054 function as separate declarations. */
3a47c4e4
AO
2055 DECL_UNINLINABLE (newdecl) = 1;
2056 }
d03d18e8
KL
2057 else
2058 {
2059 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2060 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
faae18ab 2061
d03d18e8 2062 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
faae18ab 2063
d03d18e8
KL
2064 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2065 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
c536a6a7
RG
2066
2067 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2068 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2069 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2070 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
d03d18e8 2071 }
97055d5c 2072
5daf7c0a
JM
2073 /* Preserve abstractness on cloned [cd]tors. */
2074 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2075
448545cb
JM
2076 /* Update newdecl's parms to point at olddecl. */
2077 for (parm = DECL_ARGUMENTS (newdecl); parm;
910ad8de 2078 parm = DECL_CHAIN (parm))
448545cb
JM
2079 DECL_CONTEXT (parm) = olddecl;
2080
700f8a87
MS
2081 if (! types_match)
2082 {
5d2ed28c 2083 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
92643fea 2084 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
84b8b0e0 2085 COPY_DECL_RTL (newdecl, olddecl);
5566b478
MS
2086 }
2087 if (! types_match || new_defines_function)
2088 {
6f1b4c42
JM
2089 /* These need to be copied so that the names are available.
2090 Note that if the types do match, we'll preserve inline
2091 info and other bits, but if not, we won't. */
700f8a87
MS
2092 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2093 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
700f8a87 2094 }
8d08fdba
MS
2095 if (new_defines_function)
2096 /* If defining a function declared with other language
2097 linkage, use the previously declared language linkage. */
5d2ed28c 2098 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
6f1b4c42 2099 else if (types_match)
8d08fdba
MS
2100 {
2101 /* If redeclaring a builtin function, and not a definition,
2102 it stays built in. */
2103 if (DECL_BUILT_IN (olddecl))
2104 {
26db82d8 2105 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
39211cd5 2106 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
8d08fdba
MS
2107 /* If we're keeping the built-in definition, keep the rtl,
2108 regardless of declaration matches. */
84b8b0e0 2109 COPY_DECL_RTL (olddecl, newdecl);
8d08fdba 2110 }
8d08fdba
MS
2111
2112 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
448545cb
JM
2113 /* Don't clear out the arguments if we're just redeclaring a
2114 function. */
8d08fdba
MS
2115 if (DECL_ARGUMENTS (olddecl))
2116 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2117 }
2118 }
0b1161fc
MM
2119 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2120 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
a9aedbc2 2121
8d08fdba
MS
2122 /* Now preserve various other info from the definition. */
2123 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2124 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2125 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
92643fea 2126 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
8d08fdba 2127
d7afec4b 2128 /* Warn about conflicting visibility specifications. */
c8094d83 2129 if (DECL_VISIBILITY_SPECIFIED (olddecl)
73a8adb6 2130 && DECL_VISIBILITY_SPECIFIED (newdecl)
d7afec4b
ND
2131 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2132 {
c5d75364
MLI
2133 warning_at (input_location, OPT_Wattributes,
2134 "%q+D: visibility attribute ignored because it", newdecl);
2135 warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2136 "conflicts with previous declaration here");
d7afec4b
ND
2137 }
2138 /* Choose the declaration which specified visibility. */
2139 if (DECL_VISIBILITY_SPECIFIED (olddecl))
facef326 2140 {
facef326 2141 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
d7afec4b
ND
2142 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2143 }
3db45ab5 2144 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
820cc88f
DB
2145 so keep this behavior. */
2146 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2147 {
2148 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2149 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2150 }
88d787e7
UW
2151 /* Likewise for DECL_USER_ALIGN and DECL_PACKED. */
2152 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2153 if (TREE_CODE (newdecl) == FIELD_DECL)
2154 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
facef326 2155
1d786913
MM
2156 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2157 with that from NEWDECL below. */
2158 if (DECL_LANG_SPECIFIC (olddecl))
2159 {
c8094d83 2160 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
1d786913
MM
2161 != DECL_LANG_SPECIFIC (newdecl));
2162 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2163 }
2164
39ac02d7
L
2165 /* Merge the USED information. */
2166 if (TREE_USED (olddecl))
2167 TREE_USED (newdecl) = 1;
2168 else if (TREE_USED (newdecl))
2169 TREE_USED (olddecl) = 1;
03a904b5
JJ
2170 if (TREE_CODE (newdecl) == VAR_DECL)
2171 {
2172 if (DECL_READ_P (olddecl))
2173 DECL_READ_P (newdecl) = 1;
2174 else if (DECL_READ_P (newdecl))
2175 DECL_READ_P (olddecl) = 1;
2176 }
3a7ba040
MS
2177 if (DECL_PRESERVE_P (olddecl))
2178 DECL_PRESERVE_P (newdecl) = 1;
2179 else if (DECL_PRESERVE_P (newdecl))
2180 DECL_PRESERVE_P (olddecl) = 1;
e27fb29c 2181
8d08fdba
MS
2182 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2183 {
2184 int function_size;
8d08fdba 2185
820cc88f 2186 function_size = sizeof (struct tree_decl_common);
8d08fdba 2187
730e1556
KG
2188 memcpy ((char *) olddecl + sizeof (struct tree_common),
2189 (char *) newdecl + sizeof (struct tree_common),
2190 function_size - sizeof (struct tree_common));
8d08fdba 2191
820cc88f
DB
2192 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2193 (char *) newdecl + sizeof (struct tree_decl_common),
2194 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2b110bfc 2195 if (new_template_info)
b3445994
MM
2196 /* If newdecl is a template instantiation, it is possible that
2197 the following sequence of events has occurred:
2198
2199 o A friend function was declared in a class template. The
2200 class template was instantiated.
2201
2202 o The instantiation of the friend declaration was
2203 recorded on the instantiation list, and is newdecl.
2204
2205 o Later, however, instantiate_class_template called pushdecl
2206 on the newdecl to perform name injection. But, pushdecl in
2207 turn called duplicate_decls when it discovered that another
2208 declaration of a global function with the same name already
2209 existed.
2210
2211 o Here, in duplicate_decls, we decided to clobber newdecl.
2212
2213 If we're going to do that, we'd better make sure that
2214 olddecl, and not newdecl, is on the list of
2215 instantiations so that if we try to do the instantiation
2216 again we won't get the clobbered declaration. */
caf93cb0 2217 reregister_specialization (newdecl,
2b110bfc 2218 new_template_info,
b3445994 2219 olddecl);
8d08fdba
MS
2220 }
2221 else
2222 {
820cc88f 2223 size_t size = tree_code_size (TREE_CODE (olddecl));
730e1556
KG
2224 memcpy ((char *) olddecl + sizeof (struct tree_common),
2225 (char *) newdecl + sizeof (struct tree_common),
820cc88f 2226 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
3db45ab5 2227 switch (TREE_CODE (olddecl))
820cc88f
DB
2228 {
2229 case LABEL_DECL:
2230 case VAR_DECL:
2231 case RESULT_DECL:
2232 case PARM_DECL:
2233 case FIELD_DECL:
2234 case TYPE_DECL:
2235 case CONST_DECL:
2236 {
2237 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2238 (char *) newdecl + sizeof (struct tree_decl_common),
2239 size - sizeof (struct tree_decl_common)
2240 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2241 }
2242 break;
2243 default:
2244 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2245 (char *) newdecl + sizeof (struct tree_decl_common),
2246 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2247 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2248 break;
2249 }
8d08fdba 2250 }
8d08fdba
MS
2251 DECL_UID (olddecl) = olddecl_uid;
2252 if (olddecl_friend)
2253 DECL_FRIEND_P (olddecl) = 1;
d63d5d0c
ILT
2254 if (hidden_friend)
2255 {
2256 DECL_ANTICIPATED (olddecl) = 1;
2257 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2258 }
8d08fdba 2259
d9525bec
BK
2260 /* NEWDECL contains the merged attribute lists.
2261 Update OLDDECL to be the same. */
91d231cb 2262 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
d9525bec 2263
16e31964
DS
2264 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2265 so that encode_section_info has a chance to look at the new decl
2266 flags and attributes. */
caf93cb0 2267 if (DECL_RTL_SET_P (olddecl)
16e31964
DS
2268 && (TREE_CODE (olddecl) == FUNCTION_DECL
2269 || (TREE_CODE (olddecl) == VAR_DECL
2270 && TREE_STATIC (olddecl))))
0e6df31e 2271 make_decl_rtl (olddecl);
16e31964 2272
1d786913
MM
2273 /* The NEWDECL will no longer be needed. Because every out-of-class
2274 declaration of a member results in a call to duplicate_decls,
2275 freeing these nodes represents in a significant savings. */
2276 ggc_free (newdecl);
2277
b1a19c7c 2278 return olddecl;
8d08fdba 2279}
8d08fdba 2280\f
8251199e 2281/* Return zero if the declaration NEWDECL is valid
8d08fdba
MS
2282 when the declaration OLDDECL (assumed to be for the same name)
2283 has already been seen.
2284 Otherwise return an error message format string with a %s
2285 where the identifier should go. */
2286
d8e178a0 2287static const char *
11f6b451 2288redeclaration_error_message (tree newdecl, tree olddecl)
8d08fdba
MS
2289{
2290 if (TREE_CODE (newdecl) == TYPE_DECL)
2291 {
2292 /* Because C++ can put things into name space for free,
2293 constructs like "typedef struct foo { ... } foo"
2294 would look like an erroneous redeclaration. */
3bfdc719 2295 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
6aed477a 2296 return NULL;
8d08fdba 2297 else
9ee5ebeb 2298 return G_("redefinition of %q#D");
8d08fdba
MS
2299 }
2300 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2301 {
2302 /* If this is a pure function, its olddecl will actually be
2303 the original initialization to `0' (which we force to call
2304 abort()). Don't complain about redefinition in this case. */
d1fc3bbd
AO
2305 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2306 && DECL_INITIAL (olddecl) == NULL_TREE)
6aed477a 2307 return NULL;
8d08fdba 2308
2c73f9f5 2309 /* If both functions come from different namespaces, this is not
a1c65f9f 2310 a redeclaration - this is a conflict with a used function. */
6eb3bb27 2311 if (DECL_NAMESPACE_SCOPE_P (olddecl)
713101a6
AO
2312 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2313 && ! decls_match (olddecl, newdecl))
9ee5ebeb 2314 return G_("%qD conflicts with used function");
2c73f9f5 2315
db5ae43f 2316 /* We'll complain about linkage mismatches in
0cbd7506 2317 warn_extern_redeclared_static. */
db5ae43f 2318
2c73f9f5 2319 /* Defining the same name twice is no good. */
8d08fdba 2320 if (DECL_INITIAL (olddecl) != NULL_TREE
faae18ab 2321 && DECL_INITIAL (newdecl) != NULL_TREE)
8d08fdba
MS
2322 {
2323 if (DECL_NAME (olddecl) == NULL_TREE)
9ee5ebeb 2324 return G_("%q#D not declared in class");
3a47c4e4
AO
2325 else if (!GNU_INLINE_P (olddecl)
2326 || GNU_INLINE_P (newdecl))
9ee5ebeb 2327 return G_("redefinition of %q#D");
8d08fdba 2328 }
3a47c4e4
AO
2329
2330 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2331 {
2332 bool olda = GNU_INLINE_P (olddecl);
2333 bool newa = GNU_INLINE_P (newdecl);
2334
2335 if (olda != newa)
2336 {
2337 if (newa)
9ee5ebeb
SZ
2338 return G_("%q+D redeclared inline with "
2339 "%<gnu_inline%> attribute");
3a47c4e4 2340 else
9ee5ebeb
SZ
2341 return G_("%q+D redeclared inline without "
2342 "%<gnu_inline%> attribute");
3a47c4e4
AO
2343 }
2344 }
2345
6aed477a 2346 return NULL;
8d08fdba 2347 }
51c184be
MS
2348 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2349 {
5bd61841
MM
2350 tree nt, ot;
2351
2352 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2353 {
2354 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2355 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
9ee5ebeb 2356 return G_("redefinition of %q#D");
5bd61841
MM
2357 return NULL;
2358 }
2359
2360 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
caf93cb0 2361 || (DECL_TEMPLATE_RESULT (newdecl)
5bd61841
MM
2362 == DECL_TEMPLATE_RESULT (olddecl)))
2363 return NULL;
2364
2365 nt = DECL_TEMPLATE_RESULT (newdecl);
2366 if (DECL_TEMPLATE_INFO (nt))
2367 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2368 ot = DECL_TEMPLATE_RESULT (olddecl);
2369 if (DECL_TEMPLATE_INFO (ot))
2370 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
3a47c4e4
AO
2371 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2372 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
9ee5ebeb 2373 return G_("redefinition of %q#D");
5bd61841 2374
3a47c4e4
AO
2375 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2376 {
2377 bool olda = GNU_INLINE_P (ot);
2378 bool newa = GNU_INLINE_P (nt);
2379
2380 if (olda != newa)
2381 {
2382 if (newa)
9ee5ebeb
SZ
2383 return G_("%q+D redeclared inline with "
2384 "%<gnu_inline%> attribute");
3a47c4e4 2385 else
9ee5ebeb
SZ
2386 return G_("%q+D redeclared inline without "
2387 "%<gnu_inline%> attribute");
3a47c4e4
AO
2388 }
2389 }
2390
9b7dd5e8
DG
2391 /* Core issue #226 (C++0x):
2392
2393 If a friend function template declaration specifies a
2394 default template-argument, that declaration shall be a
2395 definition and shall be the only declaration of the
2396 function template in the translation unit. */
c1ae8be5 2397 if ((cxx_dialect != cxx98)
9b7dd5e8
DG
2398 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2399 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2400 /*is_primary=*/1, /*is_partial=*/0,
2401 /*is_friend_decl=*/2))
9ee5ebeb
SZ
2402 return G_("redeclaration of friend %q#D "
2403 "may not have default template arguments");
9b7dd5e8 2404
5bd61841 2405 return NULL;
51c184be 2406 }
31a79236 2407 else if (TREE_CODE (newdecl) == VAR_DECL
1799e5d5
RH
2408 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2409 && (! DECL_LANG_SPECIFIC (olddecl)
2410 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2411 || DECL_THREAD_LOCAL_P (newdecl)))
31a79236
JJ
2412 {
2413 /* Only variables can be thread-local, and all declarations must
2414 agree on this property. */
2415 if (DECL_THREAD_LOCAL_P (newdecl))
9ee5ebeb
SZ
2416 return G_("thread-local declaration of %q#D follows "
2417 "non-thread-local declaration");
31a79236 2418 else
9ee5ebeb
SZ
2419 return G_("non-thread-local declaration of %q#D follows "
2420 "thread-local declaration");
31a79236 2421 }
1f51a992 2422 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
8d08fdba 2423 {
555551c2
MM
2424 /* The objects have been declared at namespace scope. If either
2425 is a member of an anonymous union, then this is an invalid
2426 redeclaration. For example:
2427
2428 int i;
2429 union { int i; };
2430
2431 is invalid. */
aedfac0e
PC
2432 if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2433 || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
9ee5ebeb 2434 return G_("redeclaration of %q#D");
555551c2
MM
2435 /* If at least one declaration is a reference, there is no
2436 conflict. For example:
2437
2438 int i = 3;
2439 extern int i;
2440
2441 is valid. */
8d08fdba 2442 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
6aed477a 2443 return NULL;
8926095f 2444 /* Reject two definitions. */
9ee5ebeb 2445 return G_("redefinition of %q#D");
8d08fdba
MS
2446 }
2447 else
2448 {
2449 /* Objects declared with block scope: */
2450 /* Reject two definitions, and reject a definition
2451 together with an external reference. */
2452 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
9ee5ebeb 2453 return G_("redeclaration of %q#D");
6aed477a 2454 return NULL;
8d08fdba
MS
2455 }
2456}
2457\f
1799e5d5
RH
2458/* Hash and equality functions for the named_label table. */
2459
2460static hashval_t
2461named_label_entry_hash (const void *data)
2462{
2463 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2464 return DECL_UID (ent->label_decl);
2465}
2466
2467static int
2468named_label_entry_eq (const void *a, const void *b)
2469{
2470 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2471 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2472 return ent_a->label_decl == ent_b->label_decl;
2473}
2474
acef433b 2475/* Create a new label, named ID. */
8d08fdba 2476
acef433b 2477static tree
11f6b451 2478make_label_decl (tree id, int local_p)
8d08fdba 2479{
1799e5d5
RH
2480 struct named_label_entry *ent;
2481 void **slot;
acef433b 2482 tree decl;
8d08fdba 2483
c2255bc4 2484 decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
acef433b
MM
2485
2486 DECL_CONTEXT (decl) = current_function_decl;
2487 DECL_MODE (decl) = VOIDmode;
2488 C_DECLARED_LABEL_FLAG (decl) = local_p;
8d08fdba 2489
acef433b
MM
2490 /* Say where one reference is to the label, for the sake of the
2491 error if it is not defined. */
f31686a3 2492 DECL_SOURCE_LOCATION (decl) = input_location;
acef433b
MM
2493
2494 /* Record the fact that this identifier is bound to this label. */
2495 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2496
1799e5d5
RH
2497 /* Create the label htab for the function on demand. */
2498 if (!named_labels)
2499 named_labels = htab_create_ggc (13, named_label_entry_hash,
2500 named_label_entry_eq, NULL);
6625cdb5 2501
1799e5d5
RH
2502 /* Record this label on the list of labels used in this function.
2503 We do this before calling make_label_decl so that we get the
2504 IDENTIFIER_LABEL_VALUE before the new label is declared. */
a9429e29 2505 ent = ggc_alloc_cleared_named_label_entry ();
1799e5d5 2506 ent->label_decl = decl;
6625cdb5 2507
1799e5d5
RH
2508 slot = htab_find_slot (named_labels, ent, INSERT);
2509 gcc_assert (*slot == NULL);
2510 *slot = ent;
2511
2512 return decl;
acef433b 2513}
8d08fdba 2514
acef433b
MM
2515/* Look for a label named ID in the current function. If one cannot
2516 be found, create one. (We keep track of used, but undefined,
2517 labels, and complain about them at the end of a function.) */
8d08fdba 2518
68642fb6 2519tree
11f6b451 2520lookup_label (tree id)
acef433b
MM
2521{
2522 tree decl;
8d08fdba 2523
22ffcc6f 2524 timevar_push (TV_NAME_LOOKUP);
acef433b
MM
2525 /* You can't use labels at global scope. */
2526 if (current_function_decl == NULL_TREE)
2527 {
2d01edd7 2528 error ("label %qE referenced outside of any function", id);
22ffcc6f 2529 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
acef433b 2530 }
68642fb6 2531
acef433b
MM
2532 /* See if we've already got this label. */
2533 decl = IDENTIFIER_LABEL_VALUE (id);
2534 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
22ffcc6f 2535 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba 2536
acef433b 2537 decl = make_label_decl (id, /*local_p=*/0);
22ffcc6f 2538 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba
MS
2539}
2540
acef433b 2541/* Declare a local label named ID. */
8d08fdba
MS
2542
2543tree
11f6b451 2544declare_local_label (tree id)
8d08fdba 2545{
4d2fb769
NF
2546 tree decl;
2547 cp_label_binding *bind;
8d08fdba 2548
acef433b 2549 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
1799e5d5 2550 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
4d2fb769
NF
2551 bind = VEC_safe_push (cp_label_binding, gc,
2552 current_binding_level->shadowed_labels, NULL);
2553 bind->prev_value = IDENTIFIER_LABEL_VALUE (id);
1799e5d5 2554
acef433b 2555 decl = make_label_decl (id, /*local_p=*/1);
4d2fb769 2556 bind->label = decl;
68642fb6 2557
acef433b 2558 return decl;
8d08fdba
MS
2559}
2560
6625cdb5
JM
2561/* Returns nonzero if it is ill-formed to jump past the declaration of
2562 DECL. Returns 2 if it's also a real problem. */
2563
2564static int
11f6b451 2565decl_jump_unsafe (tree decl)
6625cdb5 2566{
c32097d8
JM
2567 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2568 with automatic storage duration is not in scope to a point where it is
2569 in scope is ill-formed unless the variable has scalar type, class type
2570 with a trivial default constructor and a trivial destructor, a
2571 cv-qualified version of one of these types, or an array of one of the
2572 preceding types and is declared without an initializer (8.5). */
2573 tree type = TREE_TYPE (decl);
2574
b88b7ced 2575 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
c32097d8 2576 || type == error_mark_node)
6625cdb5
JM
2577 return 0;
2578
c32097d8
JM
2579 type = strip_array_types (type);
2580
2581 if (type_has_nontrivial_default_init (TREE_TYPE (decl))
6c06fbce
MM
2582 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2583 return 2;
2584
c32097d8
JM
2585 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2586 return 1;
6625cdb5 2587
c32097d8 2588 return 0;
6625cdb5
JM
2589}
2590
1799e5d5
RH
2591/* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2592
2593static void
2594identify_goto (tree decl, const location_t *locus)
2595{
2596 if (decl)
cbe5f3b3 2597 permerror (input_location, "jump to label %qD", decl);
1799e5d5 2598 else
cbe5f3b3 2599 permerror (input_location, "jump to case label");
1799e5d5 2600 if (locus)
69bc6bff 2601 permerror (*locus, " from here");
1799e5d5
RH
2602}
2603
6625cdb5
JM
2604/* Check that a single previously seen jump to a newly defined label
2605 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2606 the jump context; NAMES are the names in scope in LEVEL at the jump
3db45ab5 2607 context; LOCUS is the source position of the jump or 0. Returns
1799e5d5 2608 true if all is well. */
6625cdb5 2609
1799e5d5
RH
2610static bool
2611check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2612 bool exited_omp, const location_t *locus)
2613{
2614 struct cp_binding_level *b;
2615 bool identified = false, saw_eh = false, saw_omp = false;
2616
2617 if (exited_omp)
2618 {
2619 identify_goto (decl, locus);
2620 error (" exits OpenMP structured block");
2621 identified = saw_omp = true;
2622 }
2623
2624 for (b = current_binding_level; b ; b = b->level_chain)
2625 {
2626 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2627
2628 for (new_decls = b->names; new_decls != old_decls;
910ad8de 2629 new_decls = DECL_CHAIN (new_decls))
6625cdb5
JM
2630 {
2631 int problem = decl_jump_unsafe (new_decls);
2632 if (! problem)
2633 continue;
2634
1799e5d5 2635 if (!identified)
6625cdb5 2636 {
1799e5d5
RH
2637 identify_goto (decl, locus);
2638 identified = true;
6625cdb5 2639 }
826840d9 2640 if (problem > 1)
dee15844 2641 error (" crosses initialization of %q+#D", new_decls);
6625cdb5 2642 else
c32097d8
JM
2643 permerror (input_location, " enters scope of %q+#D which has "
2644 "non-trivial destructor", new_decls);
6625cdb5
JM
2645 }
2646
2647 if (b == level)
2648 break;
1799e5d5 2649 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
6625cdb5 2650 {
1799e5d5 2651 if (!identified)
6625cdb5 2652 {
1799e5d5
RH
2653 identify_goto (decl, locus);
2654 identified = true;
6625cdb5 2655 }
a7e8c268 2656 if (b->kind == sk_try)
826840d9
RH
2657 error (" enters try block");
2658 else
2659 error (" enters catch block");
1799e5d5
RH
2660 saw_eh = true;
2661 }
2662 if (b->kind == sk_omp && !saw_omp)
2663 {
2664 if (!identified)
2665 {
2666 identify_goto (decl, locus);
2667 identified = true;
2668 }
2669 error (" enters OpenMP structured block");
2670 saw_omp = true;
6625cdb5
JM
2671 }
2672 }
6625cdb5 2673
1799e5d5 2674 return !identified;
6625cdb5
JM
2675}
2676
2677static void
1799e5d5 2678check_previous_goto (tree decl, struct named_label_use_entry *use)
6625cdb5 2679{
1799e5d5
RH
2680 check_previous_goto_1 (decl, use->binding_level,
2681 use->names_in_scope, use->in_omp_scope,
2682 &use->o_goto_locus);
6625cdb5
JM
2683}
2684
1799e5d5
RH
2685static bool
2686check_switch_goto (struct cp_binding_level* level)
6625cdb5 2687{
1799e5d5 2688 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
6625cdb5
JM
2689}
2690
2691/* Check that a new jump to a label DECL is OK. Called by
2692 finish_goto_stmt. */
2693
2694void
11f6b451 2695check_goto (tree decl)
6625cdb5 2696{
1799e5d5
RH
2697 struct named_label_entry *ent, dummy;
2698 bool saw_catch = false, identified = false;
6625cdb5 2699 tree bad;
c4ec9887 2700 unsigned ix;
6625cdb5 2701
1799e5d5
RH
2702 /* We can't know where a computed goto is jumping.
2703 So we assume that it's OK. */
2704 if (TREE_CODE (decl) != LABEL_DECL)
2705 return;
2706
2707 /* We didn't record any information about this label when we created it,
2708 and there's not much point since it's trivial to analyze as a return. */
2709 if (decl == cdtor_label)
e3cd9945
APB
2710 return;
2711
1799e5d5
RH
2712 dummy.label_decl = decl;
2713 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2714 gcc_assert (ent != NULL);
2715
6625cdb5
JM
2716 /* If the label hasn't been defined yet, defer checking. */
2717 if (! DECL_INITIAL (decl))
2718 {
1799e5d5 2719 struct named_label_use_entry *new_use;
6625cdb5 2720
1799e5d5
RH
2721 /* Don't bother creating another use if the last goto had the
2722 same data, and will therefore create the same set of errors. */
2723 if (ent->uses
2724 && ent->uses->names_in_scope == current_binding_level->names)
2725 return;
6625cdb5 2726
a9429e29 2727 new_use = ggc_alloc_named_label_use_entry ();
1799e5d5
RH
2728 new_use->binding_level = current_binding_level;
2729 new_use->names_in_scope = current_binding_level->names;
2730 new_use->o_goto_locus = input_location;
2731 new_use->in_omp_scope = false;
2732
2733 new_use->next = ent->uses;
2734 ent->uses = new_use;
2735 return;
2736 }
6625cdb5 2737
1799e5d5 2738 if (ent->in_try_scope || ent->in_catch_scope
c4ec9887 2739 || ent->in_omp_scope || !VEC_empty (tree, ent->bad_decls))
6625cdb5 2740 {
cbe5f3b3
MLI
2741 permerror (input_location, "jump to label %q+D", decl);
2742 permerror (input_location, " from here");
1799e5d5 2743 identified = true;
6625cdb5
JM
2744 }
2745
ac47786e 2746 FOR_EACH_VEC_ELT (tree, ent->bad_decls, ix, bad)
6625cdb5 2747 {
c4ec9887 2748 int u = decl_jump_unsafe (bad);
6625cdb5 2749
c4ec9887 2750 if (u > 1 && DECL_ARTIFICIAL (bad))
1799e5d5
RH
2751 {
2752 /* Can't skip init of __exception_info. */
c4ec9887 2753 error_at (DECL_SOURCE_LOCATION (bad), " enters catch block");
1799e5d5
RH
2754 saw_catch = true;
2755 }
6625cdb5 2756 else if (u > 1)
c4ec9887 2757 error (" skips initialization of %q+#D", bad);
6625cdb5 2758 else
c32097d8 2759 permerror (input_location, " enters scope of %q+#D which has "
c4ec9887 2760 "non-trivial destructor", bad);
6625cdb5
JM
2761 }
2762
1799e5d5 2763 if (ent->in_try_scope)
6625cdb5 2764 error (" enters try block");
1799e5d5 2765 else if (ent->in_catch_scope && !saw_catch)
826840d9 2766 error (" enters catch block");
1799e5d5
RH
2767
2768 if (ent->in_omp_scope)
2769 error (" enters OpenMP structured block");
2770 else if (flag_openmp)
2771 {
2772 struct cp_binding_level *b;
2773 for (b = current_binding_level; b ; b = b->level_chain)
2774 {
2775 if (b == ent->binding_level)
2776 break;
2777 if (b->kind == sk_omp)
2778 {
2779 if (!identified)
2780 {
cbe5f3b3
MLI
2781 permerror (input_location, "jump to label %q+D", decl);
2782 permerror (input_location, " from here");
1799e5d5
RH
2783 identified = true;
2784 }
2785 error (" exits OpenMP structured block");
2786 break;
2787 }
2788 }
2789 }
2790}
2791
2792/* Check that a return is ok wrt OpenMP structured blocks.
2793 Called by finish_return_stmt. Returns true if all is well. */
2794
2795bool
2796check_omp_return (void)
2797{
2798 struct cp_binding_level *b;
2799 for (b = current_binding_level; b ; b = b->level_chain)
2800 if (b->kind == sk_omp)
2801 {
2802 error ("invalid exit from OpenMP structured block");
2803 return false;
2804 }
2805 return true;
6625cdb5
JM
2806}
2807
8d08fdba 2808/* Define a label, specifying the location in the source file.
b9c87401 2809 Return the LABEL_DECL node for the label. */
8d08fdba
MS
2810
2811tree
5b030314 2812define_label (location_t location, tree name)
8d08fdba 2813{
1799e5d5 2814 struct named_label_entry *ent, dummy;
926ce8bd 2815 struct cp_binding_level *p;
1799e5d5 2816 tree decl;
6625cdb5 2817
22ffcc6f 2818 timevar_push (TV_NAME_LOOKUP);
1799e5d5
RH
2819
2820 decl = lookup_label (name);
2821
2822 dummy.label_decl = decl;
2823 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2824 gcc_assert (ent != NULL);
8d08fdba 2825
3dc9aec6 2826 /* After labels, make any new cleanups in the function go into their
8d08fdba 2827 own new (temporary) binding contour. */
caf93cb0
EC
2828 for (p = current_binding_level;
2829 p->kind != sk_function_parms;
a7e8c268 2830 p = p->level_chain)
3dc9aec6 2831 p->more_cleanups_ok = 0;
8d08fdba 2832
e1cd6e56 2833 if (name == get_identifier ("wchar_t"))
cbe5f3b3 2834 permerror (input_location, "label named wchar_t");
e1cd6e56 2835
8d08fdba 2836 if (DECL_INITIAL (decl) != NULL_TREE)
417fa55b
LM
2837 {
2838 error ("duplicate label %qD", decl);
2839 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
2840 }
8d08fdba
MS
2841 else
2842 {
1799e5d5
RH
2843 struct named_label_use_entry *use;
2844
8d08fdba
MS
2845 /* Mark label as having been defined. */
2846 DECL_INITIAL (decl) = error_mark_node;
2847 /* Say where in the source. */
f31686a3 2848 DECL_SOURCE_LOCATION (decl) = location;
1799e5d5
RH
2849
2850 ent->binding_level = current_binding_level;
2851 ent->names_in_scope = current_binding_level->names;
2852
2853 for (use = ent->uses; use ; use = use->next)
2854 check_previous_goto (decl, use);
2855 ent->uses = NULL;
8d08fdba 2856 }
b9c87401 2857
be99edf8 2858 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba
MS
2859}
2860
a5894242
MS
2861struct cp_switch
2862{
e2500fed 2863 struct cp_binding_level *level;
a5894242 2864 struct cp_switch *next;
56cb9733
MM
2865 /* The SWITCH_STMT being built. */
2866 tree switch_stmt;
2867 /* A splay-tree mapping the low element of a case range to the high
2868 element, or NULL_TREE if there is no high element. Used to
2869 determine whether or not a new case label duplicates an old case
2870 label. We need a tree, rather than simply a hash table, because
2871 of the GNU case range extension. */
2872 splay_tree cases;
a5894242
MS
2873};
2874
56cb9733
MM
2875/* A stack of the currently active switch statements. The innermost
2876 switch statement is on the top of the stack. There is no need to
2877 mark the stack for garbage collection because it is only active
2878 during the processing of the body of a function, and we never
2879 collect at that point. */
5362b086 2880
a5894242
MS
2881static struct cp_switch *switch_stack;
2882
56cb9733
MM
2883/* Called right after a switch-statement condition is parsed.
2884 SWITCH_STMT is the switch statement being parsed. */
2885
a5894242 2886void
11f6b451 2887push_switch (tree switch_stmt)
a5894242 2888{
0ac1b889 2889 struct cp_switch *p = XNEW (struct cp_switch);
a5894242
MS
2890 p->level = current_binding_level;
2891 p->next = switch_stack;
56cb9733
MM
2892 p->switch_stmt = switch_stmt;
2893 p->cases = splay_tree_new (case_compare, NULL, NULL);
a5894242
MS
2894 switch_stack = p;
2895}
2896
2897void
11f6b451 2898pop_switch (void)
a5894242 2899{
6de9cd9a 2900 struct cp_switch *cs = switch_stack;
fbc315db 2901 location_t switch_location;
6de9cd9a
DN
2902
2903 /* Emit warnings as needed. */
ec52b111 2904 switch_location = EXPR_LOC_OR_HERE (cs->switch_stmt);
dddf9a0a
AP
2905 if (!processing_template_decl)
2906 c_do_switch_warnings (cs->cases, switch_location,
2907 SWITCH_STMT_TYPE (cs->switch_stmt),
2908 SWITCH_STMT_COND (cs->switch_stmt));
5362b086 2909
56cb9733 2910 splay_tree_delete (cs->cases);
a5894242 2911 switch_stack = switch_stack->next;
bedda2da 2912 free (cs);
a5894242
MS
2913}
2914
b0a1da19
JM
2915/* Note that we've seen a definition of a case label, and complain if this
2916 is a bad place for one. */
e92cc029 2917
3e4d04a1 2918tree
c2255bc4 2919finish_case_label (location_t loc, tree low_value, tree high_value)
8d08fdba 2920{
3e4d04a1 2921 tree cond, r;
926ce8bd 2922 struct cp_binding_level *p;
a5894242 2923
56cb9733
MM
2924 if (processing_template_decl)
2925 {
8f17b5c5
MM
2926 tree label;
2927
56cb9733
MM
2928 /* For templates, just add the case label; we'll do semantic
2929 analysis at instantiation-time. */
c2255bc4
AH
2930 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
2931 return add_stmt (build_case_label (loc, low_value, high_value, label));
56cb9733
MM
2932 }
2933
2934 /* Find the condition on which this switch statement depends. */
ebaae582 2935 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
56cb9733
MM
2936 if (cond && TREE_CODE (cond) == TREE_LIST)
2937 cond = TREE_VALUE (cond);
56cb9733 2938
1799e5d5
RH
2939 if (!check_switch_goto (switch_stack->level))
2940 return error_mark_node;
2941
81f0bab2 2942 if (low_value)
fa2200cb 2943 low_value = cxx_constant_value (low_value);
81f0bab2 2944 if (high_value)
fa2200cb 2945 high_value = cxx_constant_value (high_value);
81f0bab2 2946
c2255bc4 2947 r = c_add_case_label (loc, switch_stack->cases, cond,
8c30a510 2948 SWITCH_STMT_TYPE (switch_stack->switch_stmt),
a6c0a76c 2949 low_value, high_value);
8d08fdba 2950
3dc9aec6 2951 /* After labels, make any new cleanups in the function go into their
8d08fdba 2952 own new (temporary) binding contour. */
caf93cb0
EC
2953 for (p = current_binding_level;
2954 p->kind != sk_function_parms;
a7e8c268 2955 p = p->level_chain)
3dc9aec6 2956 p->more_cleanups_ok = 0;
3e4d04a1
RH
2957
2958 return r;
8d08fdba
MS
2959}
2960\f
7ddedda4
MM
2961/* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2962
e2500fed 2963static hashval_t
11f6b451 2964typename_hash (const void* k)
7ddedda4 2965{
e2500fed 2966 hashval_t hash;
741ac903 2967 const_tree const t = (const_tree) k;
7ddedda4 2968
7bdfd72e
KG
2969 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2970 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
7ddedda4
MM
2971
2972 return hash;
2973}
2974
fc6a28d7
MM
2975typedef struct typename_info {
2976 tree scope;
2977 tree name;
2978 tree template_id;
2979 bool enum_p;
2980 bool class_p;
2981} typename_info;
2982
06d40de8
DG
2983/* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
2984 really of type `typename_info*' */
7ddedda4 2985
e2500fed 2986static int
11f6b451 2987typename_compare (const void * k1, const void * k2)
7ddedda4 2988{
741ac903
KG
2989 const_tree const t1 = (const_tree) k1;
2990 const typename_info *const t2 = (const typename_info *) k2;
fc6a28d7
MM
2991
2992 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2993 && TYPE_CONTEXT (t1) == t2->scope
2994 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2995 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2996 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
7ddedda4
MM
2997}
2998
45869a6c 2999/* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
fc6a28d7 3000 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
c8094d83 3001
45869a6c
MM
3002 Returns the new TYPENAME_TYPE. */
3003
e2500fed
GK
3004static GTY ((param_is (union tree_node))) htab_t typename_htab;
3005
8ce33230 3006static tree
fc6a28d7
MM
3007build_typename_type (tree context, tree name, tree fullname,
3008 enum tag_types tag_type)
45869a6c
MM
3009{
3010 tree t;
3011 tree d;
fc6a28d7 3012 typename_info ti;
fad205ff 3013 void **e;
fc6a28d7 3014 hashval_t hash;
45869a6c 3015
e2500fed 3016 if (typename_htab == NULL)
fc6a28d7
MM
3017 typename_htab = htab_create_ggc (61, &typename_hash,
3018 &typename_compare, NULL);
3019
c8094d83 3020 ti.scope = FROB_CONTEXT (context);
fc6a28d7
MM
3021 ti.name = name;
3022 ti.template_id = fullname;
3023 ti.enum_p = tag_type == enum_type;
3024 ti.class_p = (tag_type == class_type
3025 || tag_type == record_type
3026 || tag_type == union_type);
3027 hash = (htab_hash_pointer (ti.scope)
3028 ^ htab_hash_pointer (ti.name));
45869a6c 3029
7ddedda4 3030 /* See if we already have this type. */
fc6a28d7 3031 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
e2500fed
GK
3032 if (*e)
3033 t = (tree) *e;
7ddedda4 3034 else
fc6a28d7
MM
3035 {
3036 /* Build the TYPENAME_TYPE. */
9e1e64ec 3037 t = cxx_make_type (TYPENAME_TYPE);
fc6a28d7
MM
3038 TYPE_CONTEXT (t) = ti.scope;
3039 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3040 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3041 TYPENAME_IS_CLASS_P (t) = ti.class_p;
c8094d83 3042
fc6a28d7 3043 /* Build the corresponding TYPE_DECL. */
c2255bc4 3044 d = build_decl (input_location, TYPE_DECL, name, t);
fc6a28d7
MM
3045 TYPE_NAME (TREE_TYPE (d)) = d;
3046 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3047 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3048 DECL_ARTIFICIAL (d) = 1;
3049
3050 /* Store it in the hash table. */
3051 *e = t;
06d40de8
DG
3052
3053 /* TYPENAME_TYPEs must always be compared structurally, because
3054 they may or may not resolve down to another type depending on
3055 the currently open classes. */
3056 SET_TYPE_STRUCTURAL_EQUALITY (t);
fc6a28d7 3057 }
c8094d83 3058
45869a6c
MM
3059 return t;
3060}
3061
fc6a28d7
MM
3062/* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3063 provided to name the type. Returns an appropriate type, unless an
3064 error occurs, in which case error_mark_node is returned. If we
3065 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3066 return that, rather than the _TYPE it corresponds to, in other
3067 cases we look through the type decl. If TF_ERROR is set, complain
3068 about errors, otherwise be quiet. */
3baa501d 3069
5566b478 3070tree
fc6a28d7
MM
3071make_typename_type (tree context, tree name, enum tag_types tag_type,
3072 tsubst_flags_t complain)
5566b478 3073{
b2b7d40a 3074 tree fullname;
7d3bec9d
NS
3075 tree t;
3076 bool want_template;
a80e4195 3077
5dc5d13c
KL
3078 if (name == error_mark_node
3079 || context == NULL_TREE
3080 || context == error_mark_node)
3081 return error_mark_node;
3082
2f939d94 3083 if (TYPE_P (name))
78638e24 3084 {
68642fb6
UD
3085 if (!(TYPE_LANG_SPECIFIC (name)
3086 && (CLASSTYPE_IS_TEMPLATE (name)
78638e24
MM
3087 || CLASSTYPE_USE_TEMPLATE (name))))
3088 name = TYPE_IDENTIFIER (name);
3089 else
3090 /* Create a TEMPLATE_ID_EXPR for the type. */
3091 name = build_nt (TEMPLATE_ID_EXPR,
3092 CLASSTYPE_TI_TEMPLATE (name),
3093 CLASSTYPE_TI_ARGS (name));
3094 }
653cc74a 3095 else if (TREE_CODE (name) == TYPE_DECL)
a80e4195 3096 name = DECL_NAME (name);
b2b7d40a
JM
3097
3098 fullname = name;
3099
3100 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11686454
JM
3101 {
3102 name = TREE_OPERAND (name, 0);
3103 if (TREE_CODE (name) == TEMPLATE_DECL)
3104 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
50ef2c18
MM
3105 else if (TREE_CODE (name) == OVERLOAD)
3106 {
3107 error ("%qD is not a type", name);
3108 return error_mark_node;
3109 }
11686454 3110 }
8a2b77e7
JM
3111 if (TREE_CODE (name) == TEMPLATE_DECL)
3112 {
2d01edd7 3113 error ("%qD used without template parameters", name);
8a2b77e7
JM
3114 return error_mark_node;
3115 }
50bc768d 3116 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
0c88d886 3117 gcc_assert (TYPE_P (context));
04ddee1b 3118
9e1e64ec 3119 if (!MAYBE_CLASS_TYPE_P (context))
7d3bec9d
NS
3120 {
3121 if (complain & tf_error)
3122 error ("%q#T is not a class", context);
3123 return error_mark_node;
5566b478 3124 }
7d3bec9d 3125
1cb801bc
JM
3126 /* When the CONTEXT is a dependent type, NAME could refer to a
3127 dependent base class of CONTEXT. But look inside it anyway
3128 if CONTEXT is a currently open scope, in case it refers to a
3129 member of the current instantiation or a non-dependent base;
3130 lookup will stop when we hit a dependent base. */
3131 if (!dependent_scope_p (context))
3132 /* We should only set WANT_TYPE when we're a nested typename type.
3133 Then we can give better diagnostics if we find a non-type. */
5a080ad7 3134 t = lookup_field (context, name, 2, /*want_type=*/true);
1cb801bc
JM
3135 else
3136 t = NULL_TREE;
3137
5a080ad7 3138 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
1cb801bc
JM
3139 return build_typename_type (context, name, fullname, tag_type);
3140
7d3bec9d
NS
3141 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3142
7d3bec9d 3143 if (!t)
11249cf0 3144 {
4f2b0fb2 3145 if (complain & tf_error)
7d3bec9d
NS
3146 error (want_template ? "no class template named %q#T in %q#T"
3147 : "no type named %q#T in %q#T", name, context);
11249cf0
MM
3148 return error_mark_node;
3149 }
7d3bec9d 3150
5a080ad7
JM
3151 /* Pull out the template from an injected-class-name (or multiple). */
3152 if (want_template)
3153 t = maybe_get_template_decl_from_type_decl (t);
3154
3155 if (TREE_CODE (t) == TREE_LIST)
3156 {
3157 if (complain & tf_error)
3158 {
3159 error ("lookup of %qT in %qT is ambiguous", name, context);
3160 print_candidates (t);
3161 }
3162 return error_mark_node;
3163 }
3164
7d3bec9d
NS
3165 if (want_template && !DECL_CLASS_TEMPLATE_P (t))
3166 {
3167 if (complain & tf_error)
3168 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3169 context, name, t);
3170 return error_mark_node;
3171 }
3172 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3173 {
3174 if (complain & tf_error)
3175 error ("%<typename %T::%D%> names %q#T, which is not a type",
3176 context, name, t);
3177 return error_mark_node;
3178 }
3179
3180 if (complain & tf_error)
02022f3a 3181 perform_or_defer_access_check (TYPE_BINFO (context), t, t);
7d3bec9d 3182
aa373032
DS
3183 /* If we are currently parsing a template and if T is a typedef accessed
3184 through CONTEXT then we need to remember and check access of T at
3185 template instantiation time. */
3186 add_typedef_to_current_template_for_access_check (t, context, input_location);
3187
7d3bec9d
NS
3188 if (want_template)
3189 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3190 NULL_TREE, context,
3191 /*entering_scope=*/0,
3192 tf_warning_or_error | tf_user);
3193
3194 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3195 t = TREE_TYPE (t);
3196
3197 return t;
5566b478
MS
3198}
3199
b939a023 3200/* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
c8094d83 3201 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
b939a023
KL
3202 in which case error_mark_node is returned.
3203
3204 If PARM_LIST is non-NULL, also make sure that the template parameter
3205 list of TEMPLATE_DECL matches.
3206
3207 If COMPLAIN zero, don't complain about any errors that occur. */
b8c6534b
KL
3208
3209tree
b939a023
KL
3210make_unbound_class_template (tree context, tree name, tree parm_list,
3211 tsubst_flags_t complain)
b8c6534b
KL
3212{
3213 tree t;
3214 tree d;
3215
3216 if (TYPE_P (name))
3217 name = TYPE_IDENTIFIER (name);
3218 else if (DECL_P (name))
3219 name = DECL_NAME (name);
8dc2b103 3220 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
b8c6534b 3221
9579624e 3222 if (!dependent_type_p (context)
b8c6534b
KL
3223 || currently_open_class (context))
3224 {
3225 tree tmpl = NULL_TREE;
3226
9e1e64ec 3227 if (MAYBE_CLASS_TYPE_P (context))
86ac0575 3228 tmpl = lookup_field (context, name, 0, false);
b8c6534b
KL
3229
3230 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
3231 {
4f09be91 3232 if (complain & tf_error)
2d01edd7 3233 error ("no class template named %q#T in %q#T", name, context);
b8c6534b
KL
3234 return error_mark_node;
3235 }
caf93cb0 3236
b939a023
KL
3237 if (parm_list
3238 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3239 {
3240 if (complain & tf_error)
3241 {
3242 error ("template parameters do not match template");
dee15844 3243 error ("%q+D declared here", tmpl);
b939a023
KL
3244 }
3245 return error_mark_node;
3246 }
3247
2b59fc25 3248 if (complain & tf_error)
02022f3a 3249 perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
b8c6534b
KL
3250
3251 return tmpl;
3252 }
3253
3254 /* Build the UNBOUND_CLASS_TEMPLATE. */
9e1e64ec 3255 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
b8c6534b
KL
3256 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3257 TREE_TYPE (t) = NULL_TREE;
06d40de8 3258 SET_TYPE_STRUCTURAL_EQUALITY (t);
b8c6534b
KL
3259
3260 /* Build the corresponding TEMPLATE_DECL. */
c2255bc4 3261 d = build_decl (input_location, TEMPLATE_DECL, name, t);
b8c6534b
KL
3262 TYPE_NAME (TREE_TYPE (d)) = d;
3263 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3264 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3265 DECL_ARTIFICIAL (d) = 1;
b939a023 3266 DECL_TEMPLATE_PARMS (d) = parm_list;
b8c6534b
KL
3267
3268 return t;
3269}
3270
8d08fdba 3271\f
47aa0df4 3272
8d08fdba 3273/* Push the declarations of builtin types into the namespace.
4b0d3cbe
MM
3274 RID_INDEX is the index of the builtin type in the array
3275 RID_POINTERS. NAME is the name used when looking up the builtin
3276 type. TYPE is the _TYPE node for the builtin type. */
8d08fdba 3277
eaa7c03f 3278void
caf93cb0 3279record_builtin_type (enum rid rid_index,
0cbd7506
MS
3280 const char* name,
3281 tree type)
8d08fdba
MS
3282{
3283 tree rname = NULL_TREE, tname = NULL_TREE;
a703fb38 3284 tree tdecl = NULL_TREE;
8d08fdba 3285
0e5921e8 3286 if ((int) rid_index < (int) RID_MAX)
8d08fdba
MS
3287 rname = ridpointers[(int) rid_index];
3288 if (name)
3289 tname = get_identifier (name);
3290
4b0d3cbe
MM
3291 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3292 eliminated. Built-in types should not be looked up name; their
3293 names are keywords that the parser can recognize. However, there
3294 is code in c-common.c that uses identifier_global_value to look
3295 up built-in types by name. */
8d08fdba
MS
3296 if (tname)
3297 {
c2255bc4 3298 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
4b0d3cbe 3299 DECL_ARTIFICIAL (tdecl) = 1;
a7e8c268 3300 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
8d08fdba 3301 }
4b0d3cbe 3302 if (rname)
8d08fdba 3303 {
4b0d3cbe 3304 if (!tdecl)
8d08fdba 3305 {
c2255bc4 3306 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
4b0d3cbe 3307 DECL_ARTIFICIAL (tdecl) = 1;
8d08fdba 3308 }
4b0d3cbe 3309 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
8d08fdba 3310 }
4b0d3cbe
MM
3311
3312 if (!TYPE_NAME (type))
3313 TYPE_NAME (type) = tdecl;
47aa0df4
MM
3314
3315 if (tdecl)
21d13d83 3316 debug_hooks->type_decl (tdecl, 0);
8d08fdba
MS
3317}
3318
eff71ab0 3319/* Record one of the standard Java types.
4d8a1dd6
MM
3320 * Declare it as having the given NAME.
3321 * If SIZE > 0, it is the size of one of the integral types;
3322 * otherwise it is the negative of the size of one of the other types. */
eff71ab0
PB
3323
3324static tree
11f6b451 3325record_builtin_java_type (const char* name, int size)
eff71ab0
PB
3326{
3327 tree type, decl;
3328 if (size > 0)
2dc6d666 3329 type = build_nonstandard_integer_type (size, 0);
eff71ab0 3330 else if (size > -32)
2dc6d666
AO
3331 {
3332 tree stype;
3333 /* "__java_char" or ""__java_boolean". */
3334 type = build_nonstandard_integer_type (-size, 1);
3335 /* Get the signed type cached and attached to the unsigned type,
3336 so it doesn't get garbage-collected at "random" times,
3337 causing potential codegen differences out of different UIDs
3338 and different alias set numbers. */
3339 stype = build_nonstandard_integer_type (-size, 0);
3340 TREE_CHAIN (type) = stype;
70fef63a 3341 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
eff71ab0
PB
3342 }
3343 else
a1c65f9f 3344 { /* "__java_float" or ""__java_double". */
ec6a6eb7 3345 type = make_node (REAL_TYPE);
eff71ab0
PB
3346 TYPE_PRECISION (type) = - size;
3347 layout_type (type);
3348 }
0e5921e8 3349 record_builtin_type (RID_MAX, name, type);
eff71ab0 3350 decl = TYPE_NAME (type);
e229f2cd
PB
3351
3352 /* Suppress generate debug symbol entries for these types,
3353 since for normal C++ they are just clutter.
a1c65f9f 3354 However, push_lang_context undoes this if extern "Java" is seen. */
eff71ab0 3355 DECL_IGNORED_P (decl) = 1;
e229f2cd 3356
eff71ab0
PB
3357 TYPE_FOR_JAVA (type) = 1;
3358 return type;
3359}
3360
3b426391 3361/* Push a type into the namespace so that the back ends ignore it. */
036407f7
ML
3362
3363static void
11f6b451 3364record_unknown_type (tree type, const char* name)
036407f7 3365{
c2255bc4
AH
3366 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3367 TYPE_DECL, get_identifier (name), type));
036407f7
ML
3368 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3369 DECL_IGNORED_P (decl) = 1;
3370 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3371 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3372 TYPE_ALIGN (type) = 1;
11cf4d18 3373 TYPE_USER_ALIGN (type) = 0;
179d2f74 3374 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
68642fb6 3375}
036407f7 3376
13a44ee0 3377/* A string for which we should create an IDENTIFIER_NODE at
d43829f9
MM
3378 startup. */
3379
3380typedef struct predefined_identifier
3381{
3382 /* The name of the identifier. */
8b60264b 3383 const char *const name;
d43829f9 3384 /* The place where the IDENTIFIER_NODE should be stored. */
8b60264b 3385 tree *const node;
838dfd8a 3386 /* Nonzero if this is the name of a constructor or destructor. */
8b60264b 3387 const int ctor_or_dtor_p;
d43829f9
MM
3388} predefined_identifier;
3389
3390/* Create all the predefined identifiers. */
3391
3392static void
11f6b451 3393initialize_predefined_identifiers (void)
d43829f9 3394{
8b60264b 3395 const predefined_identifier *pid;
d43829f9
MM
3396
3397 /* A table of identifiers to create at startup. */
8b60264b 3398 static const predefined_identifier predefined_identifiers[] = {
298d6f60
MM
3399 { "C++", &lang_name_cplusplus, 0 },
3400 { "C", &lang_name_c, 0 },
3401 { "Java", &lang_name_java, 0 },
d6eec208
MM
3402 /* Some of these names have a trailing space so that it is
3403 impossible for them to conflict with names written by users. */
3404 { "__ct ", &ctor_identifier, 1 },
3405 { "__base_ctor ", &base_ctor_identifier, 1 },
3406 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3407 { "__dt ", &dtor_identifier, 1 },
3408 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3409 { "__base_dtor ", &base_dtor_identifier, 1 },
3410 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
298d6f60 3411 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
298d6f60
MM
3412 { "nelts", &nelts_identifier, 0 },
3413 { THIS_NAME, &this_identifier, 0 },
c4372ef4 3414 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
298d6f60 3415 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
298d6f60 3416 { "_vptr", &vptr_identifier, 0 },
3ec6bad3 3417 { "__vtt_parm", &vtt_parm_identifier, 0 },
82a2669e 3418 { "::", &global_scope_name, 0 },
1f6e1acc 3419 { "std", &std_identifier, 0 },
298d6f60 3420 { NULL, NULL, 0 }
d43829f9
MM
3421 };
3422
3423 for (pid = predefined_identifiers; pid->name; ++pid)
298d6f60
MM
3424 {
3425 *pid->node = get_identifier (pid->name);
3426 if (pid->ctor_or_dtor_p)
3427 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3428 }
d43829f9
MM
3429}
3430
8d08fdba
MS
3431/* Create the predefined scalar types of C,
3432 and some nodes representing standard constants (0, 1, (void *)0).
3433 Initialize the global binding level.
3434 Make definitions for built-in primitive functions. */
3435
3436void
11f6b451 3437cxx_init_decl_processing (void)
8d08fdba 3438{
10841285
MM
3439 tree void_ftype;
3440 tree void_ftype_ptr;
8d08fdba 3441
3b9e5d95 3442 build_common_tree_nodes (flag_signed_char);
6de66680 3443
d43829f9
MM
3444 /* Create all the identifiers we need. */
3445 initialize_predefined_identifiers ();
8d08fdba 3446
9cd64686
MM
3447 /* Create the global variables. */
3448 push_to_top_level ();
8012c983 3449
82a2669e 3450 current_function_decl = NULL_TREE;
1ec57cf0 3451 current_binding_level = NULL;
a1c65f9f 3452 /* Enter the global namespace. */
50bc768d 3453 gcc_assert (global_namespace == NULL_TREE);
82a2669e 3454 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
0cbd7506 3455 void_type_node);
725214ac 3456 DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
b9e75696 3457 TREE_PUBLIC (global_namespace) = 1;
ac20c67a 3458 begin_scope (sk_namespace, global_namespace);
82a2669e 3459
30394414
JM
3460 current_lang_name = NULL_TREE;
3461
ddbfd28d
GK
3462 if (flag_visibility_ms_compat)
3463 default_visibility = VISIBILITY_HIDDEN;
3464
8d08fdba
MS
3465 /* Initially, C. */
3466 current_lang_name = lang_name_c;
3467
6bcedb4e 3468 /* Create the `std' namespace. */
1dbb6023
NS
3469 push_namespace (std_identifier);
3470 std_node = current_namespace;
3471 pop_namespace ();
5362b086 3472
eaa7c03f 3473 c_common_nodes_and_builtins ();
37c46b43 3474
4d8a1dd6
MM
3475 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3476 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3477 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3478 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3479 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3480 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3481 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3482 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
eff71ab0 3483
7d60be94 3484 integer_two_node = build_int_cst (NULL_TREE, 2);
8d08fdba 3485
255512c1 3486 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
de7df9eb
JM
3487 truthvalue_type_node = boolean_type_node;
3488 truthvalue_false_node = boolean_false_node;
3489 truthvalue_true_node = boolean_true_node;
2986ae00 3490
4cc1d462 3491 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3a55fb4c
JM
3492 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3493 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
5fd8e536
JM
3494
3495#if 0
3e411c3f 3496 record_builtin_type (RID_MAX, NULL, string_type_node);
5fd8e536
JM
3497#endif
3498
1f84ec23
MM
3499 delta_type_node = ptrdiff_type_node;
3500 vtable_index_type = ptrdiff_type_node;
c7e266a6 3501
3ec6bad3 3502 vtt_parm_type = build_pointer_type (const_ptr_type_node);
0244e6f7
NF
3503 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3504 void_ftype_ptr = build_function_type_list (void_type_node,
3505 ptr_type_node, NULL_TREE);
824b9a4c 3506 void_ftype_ptr
4cc1d462 3507 = build_exception_variant (void_ftype_ptr, empty_except_spec);
8d08fdba 3508
8d08fdba
MS
3509 /* C++ extensions */
3510
fbfc8363 3511 unknown_type_node = make_node (LANG_TYPE);
036407f7
ML
3512 record_unknown_type (unknown_type_node, "unknown type");
3513
8d08fdba
MS
3514 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3515 TREE_TYPE (unknown_type_node) = unknown_type_node;
a6967cc0 3516
a6967cc0
JM
3517 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3518 result. */
8d08fdba
MS
3519 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3520 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3521
fbfc8363 3522 init_list_type_node = make_node (LANG_TYPE);
09357846
JM
3523 record_unknown_type (init_list_type_node, "init list");
3524
c4372ef4
NS
3525 {
3526 /* Make sure we get a unique function type, so we can give
3527 its pointer type a name. (This wins for gdb.) */
ec6a6eb7 3528 tree vfunc_type = make_node (FUNCTION_TYPE);
c4372ef4
NS
3529 TREE_TYPE (vfunc_type) = integer_type_node;
3530 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3531 layout_type (vfunc_type);
3532
3533 vtable_entry_type = build_pointer_type (vfunc_type);
3534 }
0e5921e8 3535 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
8d08fdba 3536
8d08fdba 3537 vtbl_type_node
52bf7d5d 3538 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
8d08fdba 3539 layout_type (vtbl_type_node);
a3360e77 3540 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3e411c3f 3541 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
849da744
MM
3542 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3543 layout_type (vtbl_ptr_type_node);
3e411c3f 3544 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
8d08fdba 3545
1f84ec23
MM
3546 push_namespace (get_identifier ("__cxxabiv1"));
3547 abi_node = current_namespace;
3548 pop_namespace ();
6633d636 3549
ec6a6eb7 3550 global_type_node = make_node (LANG_TYPE);
036407f7 3551 record_unknown_type (global_type_node, "global type");
2c73f9f5 3552
db5ae43f
MS
3553 /* Now, C++. */
3554 current_lang_name = lang_name_cplusplus;
8d08fdba 3555
ced78d8b 3556 {
4b0d3cbe 3557 tree newtype, deltype;
10841285 3558 tree ptr_ftype_sizetype;
3a55fb4c 3559 tree new_eh_spec;
caf93cb0
EC
3560
3561 ptr_ftype_sizetype
0244e6f7 3562 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3a55fb4c
JM
3563 if (cxx_dialect == cxx98)
3564 {
3565 tree bad_alloc_id;
3566 tree bad_alloc_type_node;
3567 tree bad_alloc_decl;
3568
3569 push_namespace (std_identifier);
3570 bad_alloc_id = get_identifier ("bad_alloc");
3571 bad_alloc_type_node = make_class_type (RECORD_TYPE);
3572 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3573 bad_alloc_decl
3574 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3575 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3576 pop_namespace ();
3577
3578 new_eh_spec
3579 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3580 }
3581 else
3582 new_eh_spec = noexcept_false_spec;
3583
3584 newtype = build_exception_variant (ptr_ftype_sizetype, new_eh_spec);
4cc1d462 3585 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
596ea4e5
AS
3586 push_cp_library_fn (NEW_EXPR, newtype);
3587 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3588 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3589 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
14c2101d 3590
1e85e720 3591 nullptr_type_node = make_node (NULLPTR_TYPE);
5116acc6
JM
3592 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3593 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3594 TYPE_UNSIGNED (nullptr_type_node) = 1;
3595 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3596 SET_TYPE_MODE (nullptr_type_node, Pmode);
3597 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
1e85e720 3598 nullptr_node = build_int_cst (nullptr_type_node, 0);
ced78d8b 3599 }
8d08fdba
MS
3600
3601 abort_fndecl
1f84ec23 3602 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
8d08fdba 3603
8d08fdba
MS
3604 /* Perform other language dependent initializations. */
3605 init_class_processing ();
db48b831 3606 init_rtti_processing ();
2b110bfc 3607 init_template_processing ();
8d08fdba 3608
6467930b 3609 if (flag_exceptions)
8d2733ca 3610 init_exception_processing ();
9e9ff709 3611
7fcdf4c2 3612 if (! supports_one_only ())
72b7eeff 3613 flag_weak = 0;
8d08fdba 3614
2ce07e2d 3615 make_fname_decl = cp_make_fname_decl;
0ba8a114 3616 start_fname_decls ();
8d08fdba 3617
e9a25f70 3618 /* Show we use EH for cleanups. */
6de9cd9a
DN
3619 if (flag_exceptions)
3620 using_eh_for_cleanups ();
62c154ed
JM
3621}
3622
0ba8a114 3623/* Generate an initializer for a function naming variable from
bb885938 3624 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
f4f206f4 3625 filled in with the type of the init. */
0ba8a114
NS
3626
3627tree
bb885938 3628cp_fname_init (const char* name, tree *type_p)
0ba8a114
NS
3629{
3630 tree domain = NULL_TREE;
3631 tree type;
3632 tree init = NULL_TREE;
3633 size_t length = 0;
3634
3635 if (name)
3636 {
3637 length = strlen (name);
3638 domain = build_index_type (size_int (length));
f0b150ba 3639 init = build_string (length + 1, name);
0ba8a114 3640 }
caf93cb0 3641
a3360e77 3642 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
0ba8a114
NS
3643 type = build_cplus_array_type (type, domain);
3644
bb885938 3645 *type_p = type;
caf93cb0 3646
0ba8a114
NS
3647 if (init)
3648 TREE_TYPE (init) = type;
3649 else
bb885938 3650 init = error_mark_node;
caf93cb0 3651
0ba8a114
NS
3652 return init;
3653}
3654
c2255bc4
AH
3655/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3656 the decl, LOC is the location to give the decl, NAME is the
3657 initialization string and TYPE_DEP indicates whether NAME depended
3658 on the type of the function. We make use of that to detect
3659 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3660 at the point of first use, so we mustn't push the decl now. */
2ce07e2d
NS
3661
3662static tree
c2255bc4 3663cp_make_fname_decl (location_t loc, tree id, int type_dep)
2ce07e2d 3664{
83182544 3665 const char *const name = (type_dep && processing_template_decl
e913996d 3666 ? NULL : fname_as_string (type_dep));
bb885938
NS
3667 tree type;
3668 tree init = cp_fname_init (name, &type);
c2255bc4 3669 tree decl = build_decl (loc, VAR_DECL, id, type);
2ce07e2d 3670
9e6f2e7d 3671 if (name)
b1d5455a 3672 free (CONST_CAST (char *, name));
9e6f2e7d 3673
6cce57b0 3674 /* As we're using pushdecl_with_scope, we must set the context. */
0ba8a114
NS
3675 DECL_CONTEXT (decl) = current_function_decl;
3676 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
caf93cb0 3677
2ce07e2d
NS
3678 TREE_STATIC (decl) = 1;
3679 TREE_READONLY (decl) = 1;
2ce07e2d 3680 DECL_ARTIFICIAL (decl) = 1;
caf93cb0 3681
0ba8a114 3682 TREE_USED (decl) = 1;
5362b086 3683
6cce57b0
JM
3684 if (current_function_decl)
3685 {
3686 struct cp_binding_level *b = current_binding_level;
a7e8c268 3687 while (b->level_chain->kind != sk_function_parms)
6cce57b0 3688 b = b->level_chain;
d63d5d0c 3689 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3db45ab5 3690 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
d174af6c 3691 LOOKUP_ONLYCONVERTING);
e913996d 3692 }
ad16ae7f
MM
3693 else
3694 pushdecl_top_level_and_finish (decl, init);
caf93cb0 3695
2ce07e2d
NS
3696 return decl;
3697}
3698
c79efc4d 3699static tree
5779e713 3700builtin_function_1 (tree decl, tree context, bool is_global)
c79efc4d
RÁE
3701{
3702 tree id = DECL_NAME (decl);
3703 const char *name = IDENTIFIER_POINTER (id);
8d08fdba 3704
c79efc4d 3705 retrofit_lang_decl (decl);
0c11ada6 3706
c79efc4d
RÁE
3707 DECL_ARTIFICIAL (decl) = 1;
3708 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3709 SET_DECL_LANGUAGE (decl, lang_c);
3710 /* Runtime library routines are, by definition, available in an
3711 external shared object. */
3712 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3713 DECL_VISIBILITY_SPECIFIED (decl) = 1;
8d08fdba 3714
d52e4867 3715 DECL_CONTEXT (decl) = context;
12a22e76 3716
5779e713
MM
3717 if (is_global)
3718 pushdecl_top_level (decl);
3719 else
3720 pushdecl (decl);
6bcedb4e 3721
d63d5d0c
ILT
3722 /* A function in the user's namespace should have an explicit
3723 declaration before it is used. Mark the built-in function as
3724 anticipated but not actually declared. */
935d1834
ZW
3725 if (name[0] != '_' || name[1] != '_')
3726 DECL_ANTICIPATED (decl) = 1;
012c4da9
JJ
3727 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3728 {
3729 size_t len = strlen (name);
3730
3731 /* Treat __*_chk fortification functions as anticipated as well,
3732 unless they are __builtin_*. */
3733 if (len > strlen ("___chk")
3734 && memcmp (name + len - strlen ("_chk"),
3735 "_chk", strlen ("_chk") + 1) == 0)
3736 DECL_ANTICIPATED (decl) = 1;
3737 }
935d1834 3738
8d08fdba
MS
3739 return decl;
3740}
7f4edbcb 3741
d52e4867 3742tree
c79efc4d 3743cxx_builtin_function (tree decl)
d52e4867 3744{
c79efc4d
RÁE
3745 tree id = DECL_NAME (decl);
3746 const char *name = IDENTIFIER_POINTER (id);
d52e4867
RS
3747 /* All builtins that don't begin with an '_' should additionally
3748 go in the 'std' namespace. */
3749 if (name[0] != '_')
3750 {
e5b44dfb 3751 tree decl2 = copy_node(decl);
d52e4867 3752 push_namespace (std_identifier);
5779e713
MM
3753 builtin_function_1 (decl2, std_node, false);
3754 pop_namespace ();
3755 }
3756
3757 return builtin_function_1 (decl, NULL_TREE, false);
3758}
3759
3760/* Like cxx_builtin_function, but guarantee the function is added to the global
3761 scope. This is to allow function specific options to add new machine
3762 dependent builtins when the target ISA changes via attribute((target(...)))
3763 which saves space on program startup if the program does not use non-generic
3764 ISAs. */
3765
3766tree
3767cxx_builtin_function_ext_scope (tree decl)
3768{
3769
3770 tree id = DECL_NAME (decl);
3771 const char *name = IDENTIFIER_POINTER (id);
3772 /* All builtins that don't begin with an '_' should additionally
3773 go in the 'std' namespace. */
3774 if (name[0] != '_')
3775 {
3776 tree decl2 = copy_node(decl);
3777 push_namespace (std_identifier);
3778 builtin_function_1 (decl2, std_node, true);
d52e4867
RS
3779 pop_namespace ();
3780 }
3781
5779e713 3782 return builtin_function_1 (decl, NULL_TREE, true);
d52e4867
RS
3783}
3784
0c11ada6
JM
3785/* Generate a FUNCTION_DECL with the typical flags for a runtime library
3786 function. Not called directly. */
3787
3788static tree
11f6b451 3789build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
0c11ada6
JM
3790{
3791 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3792 DECL_EXTERNAL (fn) = 1;
3793 TREE_PUBLIC (fn) = 1;
3794 DECL_ARTIFICIAL (fn) = 1;
596ea4e5 3795 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
5d2ed28c 3796 SET_DECL_LANGUAGE (fn, lang_c);
73a8adb6
MM
3797 /* Runtime library routines are, by definition, available in an
3798 external shared object. */
3799 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3800 DECL_VISIBILITY_SPECIFIED (fn) = 1;
0c11ada6
JM
3801 return fn;
3802}
c2a37c55 3803
0c11ada6
JM
3804/* Returns the _DECL for a library function with C linkage.
3805 We assume that such functions never throw; if this is incorrect,
3806 callers should unset TREE_NOTHROW. */
c2a37c55 3807
448083e5 3808static tree
11f6b451 3809build_library_fn (tree name, tree type)
0c11ada6 3810{
f59d2aad
RH
3811 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3812 TREE_NOTHROW (fn) = 1;
3813 return fn;
0c11ada6
JM
3814}
3815
3816/* Returns the _DECL for a library function with C++ linkage. */
3817
596ea4e5 3818static tree
11f6b451 3819build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
0c11ada6 3820{
596ea4e5 3821 tree fn = build_library_fn_1 (name, operator_code, type);
0c11ada6 3822 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6bbf1598 3823 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
5d2ed28c 3824 SET_DECL_LANGUAGE (fn, lang_cplusplus);
0c11ada6
JM
3825 return fn;
3826}
3827
3828/* Like build_library_fn, but takes a C string instead of an
3829 IDENTIFIER_NODE. */
3830
3831tree
11f6b451 3832build_library_fn_ptr (const char* name, tree type)
7f4edbcb 3833{
0c11ada6
JM
3834 return build_library_fn (get_identifier (name), type);
3835}
3836
3837/* Like build_cp_library_fn, but takes a C string instead of an
3838 IDENTIFIER_NODE. */
3839
3840tree
11f6b451 3841build_cp_library_fn_ptr (const char* name, tree type)
0c11ada6 3842{
596ea4e5 3843 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
3844}
3845
3846/* Like build_library_fn, but also pushes the function so that we will
448083e5
PC
3847 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
3848 may throw exceptions listed in RAISES. */
0c11ada6
JM
3849
3850tree
448083e5 3851push_library_fn (tree name, tree type, tree raises)
0c11ada6 3852{
448083e5
PC
3853 tree fn;
3854
3855 if (raises)
3856 type = build_exception_variant (type, raises);
3857
3858 fn = build_library_fn (name, type);
0c11ada6
JM
3859 pushdecl_top_level (fn);
3860 return fn;
3861}
3862
3863/* Like build_cp_library_fn, but also pushes the function so that it
3864 will be found by normal lookup. */
3865
596ea4e5 3866static tree
11f6b451 3867push_cp_library_fn (enum tree_code operator_code, tree type)
0c11ada6 3868{
5362b086 3869 tree fn = build_cp_library_fn (ansi_opname (operator_code),
596ea4e5
AS
3870 operator_code,
3871 type);
0c11ada6
JM
3872 pushdecl (fn);
3873 return fn;
3874}
3875
3876/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3877 a FUNCTION_TYPE. */
3878
3879tree
11f6b451 3880push_void_library_fn (tree name, tree parmtypes)
0c11ada6
JM
3881{
3882 tree type = build_function_type (void_type_node, parmtypes);
448083e5 3883 return push_library_fn (name, type, NULL_TREE);
0c11ada6
JM
3884}
3885
cf74fb86 3886/* Like push_library_fn, but also note that this function throws
0c11ada6
JM
3887 and does not return. Used for __throw_foo and the like. */
3888
3889tree
11f6b451 3890push_throw_library_fn (tree name, tree type)
0c11ada6 3891{
448083e5 3892 tree fn = push_library_fn (name, type, NULL_TREE);
0c11ada6
JM
3893 TREE_THIS_VOLATILE (fn) = 1;
3894 TREE_NOTHROW (fn) = 0;
3895 return fn;
7f4edbcb 3896}
8d08fdba 3897\f
61a127b3
MM
3898/* When we call finish_struct for an anonymous union, we create
3899 default copy constructors and such. But, an anonymous union
3900 shouldn't have such things; this function undoes the damage to the
3901 anonymous union type T.
3902
3903 (The reason that we create the synthesized methods is that we don't
3904 distinguish `union { int i; }' from `typedef union { int i; } U'.
3905 The first is an anonymous union; the second is just an ordinary
3906 union type.) */
3907
3908void
11f6b451 3909fixup_anonymous_aggr (tree t)
61a127b3
MM
3910{
3911 tree *q;
3912
f4f206f4 3913 /* Wipe out memory of synthesized methods. */
0fcedd9c 3914 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
61a127b3 3915 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
066ec0a4
JM
3916 TYPE_HAS_COPY_CTOR (t) = 0;
3917 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
3918 TYPE_HAS_COPY_ASSIGN (t) = 0;
3919 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
61a127b3
MM
3920
3921 /* Splice the implicitly generated functions out of the TYPE_METHODS
3922 list. */
3923 q = &TYPE_METHODS (t);
3924 while (*q)
3925 {
3926 if (DECL_ARTIFICIAL (*q))
3927 *q = TREE_CHAIN (*q);
3928 else
910ad8de 3929 q = &DECL_CHAIN (*q);
61a127b3
MM
3930 }
3931
cab1f180 3932 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
61a127b3 3933 if (TYPE_METHODS (t))
24f58e74
PC
3934 {
3935 tree decl = TYPE_MAIN_DECL (t);
3936
3937 if (TREE_CODE (t) != UNION_TYPE)
c5d75364
MLI
3938 error_at (DECL_SOURCE_LOCATION (decl),
3939 "an anonymous struct cannot have function members");
24f58e74 3940 else
c5d75364
MLI
3941 error_at (DECL_SOURCE_LOCATION (decl),
3942 "an anonymous union cannot have function members");
24f58e74 3943 }
a1c2b86d
JJ
3944
3945 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3946 assignment operators (because they cannot have these methods themselves).
3947 For anonymous unions this is already checked because they are not allowed
3948 in any union, otherwise we have to check it. */
3949 if (TREE_CODE (t) != UNION_TYPE)
3950 {
3951 tree field, type;
3952
910ad8de 3953 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
a1c2b86d
JJ
3954 if (TREE_CODE (field) == FIELD_DECL)
3955 {
3956 type = TREE_TYPE (field);
3957 if (CLASS_TYPE_P (type))
3958 {
0cbd7506 3959 if (TYPE_NEEDS_CONSTRUCTING (type))
dee15844
JM
3960 error ("member %q+#D with constructor not allowed "
3961 "in anonymous aggregate", field);
a1c2b86d 3962 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
dee15844
JM
3963 error ("member %q+#D with destructor not allowed "
3964 "in anonymous aggregate", field);
066ec0a4 3965 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
dee15844
JM
3966 error ("member %q+#D with copy assignment operator "
3967 "not allowed in anonymous aggregate", field);
a1c2b86d
JJ
3968 }
3969 }
3970 }
61a127b3
MM
3971}
3972
72a93143 3973/* Make sure that a declaration with no declarator is well-formed, i.e.
a723baf1 3974 just declares a tagged type or anonymous union.
8d08fdba 3975
a723baf1 3976 Returns the type declared; or NULL_TREE if none. */
8d08fdba 3977
72a93143 3978tree
62d1db17 3979check_tag_decl (cp_decl_specifier_seq *declspecs)
8d08fdba 3980{
62d1db17
MM
3981 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3982 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
a723baf1
MM
3983 /* If a class, struct, or enum type is declared by the DECLSPECS
3984 (i.e, if a class-specifier, enum-specifier, or non-typename
3985 elaborated-type-specifier appears in the DECLSPECS),
3986 DECLARED_TYPE is set to the corresponding type. */
3987 tree declared_type = NULL_TREE;
3988 bool error_p = false;
8d08fdba 3989
62d1db17 3990 if (declspecs->multiple_types_p)
72a93143 3991 error ("multiple types in one declaration");
62d1db17
MM
3992 else if (declspecs->redefined_builtin_type)
3993 {
3994 if (!in_system_header)
cbe5f3b3 3995 permerror (input_location, "redeclaration of C++ built-in type %qT",
37ec60ed 3996 declspecs->redefined_builtin_type);
62d1db17
MM
3997 return NULL_TREE;
3998 }
7e2067ca 3999
c827f22f
MM
4000 if (declspecs->type
4001 && TYPE_P (declspecs->type)
caf93cb0 4002 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
9e1e64ec 4003 && MAYBE_CLASS_TYPE_P (declspecs->type))
62d1db17
MM
4004 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4005 declared_type = declspecs->type;
4006 else if (declspecs->type == error_mark_node)
4007 error_p = true;
a723baf1 4008 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
cbe5f3b3 4009 permerror (input_location, "declaration does not declare anything");
1951a1b6 4010 /* Check for an anonymous union. */
9e1e64ec 4011 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
a723baf1 4012 && TYPE_ANONYMOUS_P (declared_type))
0dd3962d 4013 {
e8186ecf 4014 /* 7/3 In a simple-declaration, the optional init-declarator-list
0cbd7506
MS
4015 can be omitted only when declaring a class (clause 9) or
4016 enumeration (7.2), that is, when the decl-specifier-seq contains
4017 either a class-specifier, an elaborated-type-specifier with
4018 a class-key (9.1), or an enum-specifier. In these cases and
4019 whenever a class-specifier or enum-specifier is present in the
4020 decl-specifier-seq, the identifiers in these specifiers are among
4021 the names being declared by the declaration (as class-name,
4022 enum-names, or enumerators, depending on the syntax). In such
4023 cases, and except for the declaration of an unnamed bit-field (9.6),
4024 the decl-specifier-seq shall introduce one or more names into the
4025 program, or shall redeclare a name introduced by a previous
4026 declaration. [Example:
4027 enum { }; // ill-formed
4028 typedef class { }; // ill-formed
4029 --end example] */
e8186ecf 4030 if (saw_typedef)
0cbd7506
MS
4031 {
4032 error ("missing type-name in typedef-declaration");
4033 return NULL_TREE;
4034 }
0dd3962d 4035 /* Anonymous unions are objects, so they can have specifiers. */;
a723baf1 4036 SET_ANON_AGGR_TYPE_P (declared_type);
6bdb8141 4037
fcf73884 4038 if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
509c9d60 4039 pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
0dd3962d
JM
4040 }
4041
62d1db17 4042 else
8d08fdba 4043 {
62d1db17
MM
4044 if (declspecs->specs[(int)ds_inline]
4045 || declspecs->specs[(int)ds_virtual])
2d01edd7 4046 error ("%qs can only be specified for functions",
caf93cb0 4047 declspecs->specs[(int)ds_inline]
62d1db17
MM
4048 ? "inline" : "virtual");
4049 else if (saw_friend
caf93cb0 4050 && (!current_class_type
62d1db17 4051 || current_scope () != current_class_type))
2d01edd7 4052 error ("%<friend%> can only be specified inside a class");
62d1db17 4053 else if (declspecs->specs[(int)ds_explicit])
2d01edd7 4054 error ("%<explicit%> can only be specified for constructors");
62d1db17
MM
4055 else if (declspecs->storage_class)
4056 error ("a storage class can only be specified for objects "
4057 "and functions");
4058 else if (declspecs->specs[(int)ds_const]
4059 || declspecs->specs[(int)ds_volatile]
4060 || declspecs->specs[(int)ds_restrict]
4061 || declspecs->specs[(int)ds_thread])
4062 error ("qualifiers can only be specified for objects "
4063 "and functions");
41dc91a8
SB
4064 else if (saw_typedef)
4065 warning (0, "%<typedef%> was ignored in this declaration");
7ecbca9d 4066 else if (declspecs->specs[(int) ds_constexpr])
91ea6df3 4067 error ("%<constexpr%> cannot be used for type declarations");
72a93143 4068 }
8d08fdba 4069
a723baf1 4070 return declared_type;
72a93143
JM
4071}
4072
4073/* Called when a declaration is seen that contains no names to declare.
4074 If its type is a reference to a structure, union or enum inherited
4075 from a containing scope, shadow that tag name for the current scope
4076 with a forward reference.
4077 If its type defines a new named structure or union
4078 or defines an enum, it is valid but we need not do anything here.
4079 Otherwise, it is an error.
4080
4081 C++: may have to grok the declspecs to learn about static,
caf93cb0 4082 complain for anonymous unions.
72a93143 4083
a723baf1
MM
4084 Returns the TYPE declared -- or NULL_TREE if none. */
4085
4086tree
62d1db17 4087shadow_tag (cp_decl_specifier_seq *declspecs)
72a93143
JM
4088{
4089 tree t = check_tag_decl (declspecs);
4090
a723baf1
MM
4091 if (!t)
4092 return NULL_TREE;
4093
3cabd8f9
MA
4094 if (declspecs->attributes)
4095 {
dee15844
JM
4096 warning (0, "attribute ignored in declaration of %q+#T", t);
4097 warning (0, "attribute for %q+#T must follow the %qs keyword",
4098 t, class_key_or_enum_as_string (t));
3cabd8f9
MA
4099
4100 }
4101
d2a8ac2c
LM
4102 if (maybe_process_partial_specialization (t) == error_mark_node)
4103 return NULL_TREE;
72a93143
JM
4104
4105 /* This is where the variables in an anonymous union are
4106 declared. An anonymous union declaration looks like:
4107 union { ... } ;
4108 because there is no declarator after the union, the parser
4109 sends that declaration here. */
a723baf1 4110 if (ANON_AGGR_TYPE_P (t))
72a93143 4111 {
6bdb8141 4112 fixup_anonymous_aggr (t);
72a93143
JM
4113
4114 if (TYPE_FIELDS (t))
4115 {
caf93cb0 4116 tree decl = grokdeclarator (/*declarator=*/NULL,
058b15c1 4117 declspecs, NORMAL, 0, NULL);
72a93143
JM
4118 finish_anon_union (decl);
4119 }
8d08fdba 4120 }
a723baf1
MM
4121
4122 return t;
8d08fdba
MS
4123}
4124\f
4125/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4126
4127tree
caf93cb0 4128groktypename (cp_decl_specifier_seq *type_specifiers,
0d9c0892
JM
4129 const cp_declarator *declarator,
4130 bool is_template_arg)
8d08fdba 4131{
62d1db17 4132 tree attrs;
98884b26 4133 tree type;
0d9c0892
JM
4134 enum decl_context context
4135 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
62d1db17
MM
4136 attrs = type_specifiers->attributes;
4137 type_specifiers->attributes = NULL_TREE;
0d9c0892 4138 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
ba19e12f 4139 if (attrs && type != error_mark_node)
c206a697
JM
4140 {
4141 if (CLASS_TYPE_P (type))
b2a7def5
JM
4142 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4143 "outside of definition", type);
9e1e64ec 4144 else if (MAYBE_CLASS_TYPE_P (type))
b2a7def5
JM
4145 /* A template type parameter or other dependent type. */
4146 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4147 "type %qT without an associated declaration", type);
c206a697
JM
4148 else
4149 cplus_decl_attributes (&type, attrs, 0);
4150 }
98884b26 4151 return type;
8d08fdba
MS
4152}
4153
15896502
MM
4154/* Process a DECLARATOR for a function-scope variable declaration,
4155 namespace-scope variable declaration, or function declaration.
4156 (Function definitions go through start_function; class member
4157 declarations appearing in the body of the class go through
4158 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4159 If an error occurs, the error_mark_node is returned instead.
4160
4ad610c9
JM
4161 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4162 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4163 for an explicitly defaulted function, or SD_DELETED for an explicitly
4164 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4165 implicitly initialized via a default constructor. ATTRIBUTES and
4166 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4167 *PUSHED_SCOPE_P is set to the scope entered in this function, if any; if
4168 set, the caller is responsible for calling pop_scope. */
8d08fdba 4169
8d08fdba 4170tree
caf93cb0 4171start_decl (const cp_declarator *declarator,
62d1db17 4172 cp_decl_specifier_seq *declspecs,
0cbd7506
MS
4173 int initialized,
4174 tree attributes,
4175 tree prefix_attributes,
4514aa8c 4176 tree *pushed_scope_p)
8d08fdba 4177{
59387d2e 4178 tree decl;
8d08fdba 4179 tree context;
c3b7031d 4180 bool was_public;
317c435f 4181 int flags;
3bb1ed66 4182 bool alias;
8d08fdba 4183
4514aa8c 4184 *pushed_scope_p = NULL_TREE;
c8094d83 4185
e23bd218
IR
4186 /* An object declared as __attribute__((deprecated)) suppresses
4187 warnings of uses of other deprecated items. */
4188 if (lookup_attribute ("deprecated", attributes))
4189 deprecated_state = DEPRECATED_SUPPRESS;
4190
91d231cb 4191 attributes = chainon (attributes, prefix_attributes);
b17e2870 4192
c11b6f21 4193 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
91d231cb 4194 &attributes);
68642fb6 4195
e23bd218
IR
4196 deprecated_state = DEPRECATED_NORMAL;
4197
2d00b4f2
AP
4198 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4199 || decl == error_mark_node)
44370687 4200 return error_mark_node;
8d08fdba 4201
725214ac
RG
4202 context = CP_DECL_CONTEXT (decl);
4203 if (context != global_namespace)
4204 *pushed_scope_p = push_scope (context);
2c73f9f5 4205
8d08fdba
MS
4206 if (initialized)
4207 /* Is it valid for this decl to have an initializer at all?
4208 If not, set INITIALIZED to zero, which will indirectly
82580166 4209 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba
MS
4210 switch (TREE_CODE (decl))
4211 {
4212 case TYPE_DECL:
b87d79e6 4213 error ("typedef %qD is initialized (use decltype instead)", decl);
cc011e7f 4214 return error_mark_node;
8d08fdba
MS
4215
4216 case FUNCTION_DECL:
4ad610c9 4217 if (initialized == SD_DELETED)
b87d79e6
JM
4218 /* We'll handle the rest of the semantics later, but we need to
4219 set this now so it's visible to duplicate_decls. */
4220 DECL_DELETED_FN (decl) = 1;
4221 break;
8d08fdba
MS
4222
4223 default:
3e41d13b 4224 break;
8d08fdba
MS
4225 }
4226
8d08fdba
MS
4227 if (initialized)
4228 {
a9aedbc2 4229 if (! toplevel_bindings_p ()
8d08fdba 4230 && DECL_EXTERNAL (decl))
d4ee4d25 4231 warning (0, "declaration of %q#D has %<extern%> and is initialized",
0cbd7506 4232 decl);
8d08fdba 4233 DECL_EXTERNAL (decl) = 0;
5566b478 4234 if (toplevel_bindings_p ())
8d08fdba 4235 TREE_STATIC (decl) = 1;
8d08fdba 4236 }
3bb1ed66
NS
4237 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4238
4239 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4240 record_key_method_defined (decl);
8d08fdba 4241
317c435f
JM
4242 /* If this is a typedef that names the class for linkage purposes
4243 (7.1.3p8), apply any attributes directly to the type. */
4244 if (TREE_CODE (decl) == TYPE_DECL
4245 && TAGGED_TYPE_P (TREE_TYPE (decl))
4246 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4247 flags = ATTR_FLAG_TYPE_IN_PLACE;
4248 else
4249 flags = 0;
4250
fa20888b 4251 /* Set attributes here so if duplicate decl, will have proper attributes. */
317c435f 4252 cplus_decl_attributes (&decl, attributes, flags);
fa20888b 4253
4e2bb0a4
DS
4254 /* Dllimported symbols cannot be defined. Static data members (which
4255 can be initialized in-class and dllimported) go through grokfield,
4256 not here, so we don't need to exclude those decls when checking for
4257 a definition. */
4258 if (initialized && DECL_DLLIMPORT_P (decl))
4259 {
4260 error ("definition of %q#D is marked %<dllimport%>", decl);
4261 DECL_DLLIMPORT_P (decl) = 0;
4262 }
4263
ecb0eece 4264 /* If #pragma weak was used, mark the decl weak now. */
3693d46c 4265 maybe_apply_pragma_weak (decl);
ecb0eece 4266
97055d5c
AO
4267 if (TREE_CODE (decl) == FUNCTION_DECL
4268 && DECL_DECLARED_INLINE_P (decl)
4269 && DECL_UNINLINABLE (decl)
4270 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
dee15844 4271 warning (0, "inline function %q+D given attribute noinline", decl);
97055d5c 4272
725214ac 4273 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
5b605f68
MS
4274 {
4275 if (TREE_CODE (decl) == VAR_DECL)
4276 {
86ac0575 4277 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5b605f68 4278 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
2d01edd7 4279 error ("%q#D is not a static member of %q#T", decl, context);
e349ee73
MS
4280 else
4281 {
4282 if (DECL_CONTEXT (field) != context)
f2d773a2 4283 {
a723baf1 4284 if (!same_type_p (DECL_CONTEXT (field), context))
cbe5f3b3 4285 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
37ec60ed
JW
4286 "to be defined as %<%T::%D%>",
4287 DECL_CONTEXT (field), DECL_NAME (decl),
4288 context, DECL_NAME (decl));
f2d773a2
JM
4289 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4290 }
91146169
GB
4291 if (processing_specialization
4292 && template_class_depth (context) == 0
4293 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4294 error ("template header not allowed in member definition "
4295 "of explicitly specialized class");
75650646
MM
4296 /* Static data member are tricky; an in-class initialization
4297 still doesn't provide a definition, so the in-class
4298 declaration will have DECL_EXTERNAL set, but will have an
4299 initialization. Thus, duplicate_decls won't warn
4300 about this situation, and so we check here. */
e92fb501 4301 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
9e637a26 4302 error ("duplicate initialization of %qD", decl);
d63d5d0c 4303 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
e349ee73 4304 decl = field;
7ecbca9d
GDR
4305 if (declspecs->specs[(int) ds_constexpr]
4306 && !DECL_DECLARED_CONSTEXPR_P (field))
4307 error ("%qD declared %<constexpr%> outside its class", field);
e349ee73 4308 }
5b605f68 4309 }
f30432d7
MS
4310 else
4311 {
d43f603d 4312 tree field = check_classfn (context, decl,
44021471
GB
4313 (processing_template_decl
4314 > template_class_depth (context))
4315 ? current_template_parms
4316 : NULL_TREE);
f8c3b097
PC
4317 if (field && field != error_mark_node
4318 && duplicate_decls (decl, field,
4319 /*newdecl_is_friend=*/false))
f30432d7
MS
4320 decl = field;
4321 }
4322
4323 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
dff3e828 4324 DECL_IN_AGGR_P (decl) = 0;
9267ee62
NS
4325 /* Do not mark DECL as an explicit specialization if it was not
4326 already marked as an instantiation; a declaration should
4327 never be marked as a specialization unless we know what
c8094d83 4328 template is being specialized. */
9267ee62 4329 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
84e6233f 4330 {
9267ee62 4331 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
c8094d83 4332
84e6233f
JM
4333 /* [temp.expl.spec] An explicit specialization of a static data
4334 member of a template is a definition if the declaration
4335 includes an initializer; otherwise, it is a declaration.
c8094d83 4336
84e6233f
JM
4337 We check for processing_specialization so this only applies
4338 to the new specialization syntax. */
e92fb501 4339 if (!initialized && processing_specialization)
84e6233f
JM
4340 DECL_EXTERNAL (decl) = 1;
4341 }
f30432d7 4342
3bb1ed66
NS
4343 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4344 /* Aliases are definitions. */
4345 && !alias)
cbe5f3b3 4346 permerror (input_location, "declaration of %q#D outside of class is not definition",
37ec60ed 4347 decl);
5b605f68
MS
4348 }
4349
c3b7031d
JM
4350 was_public = TREE_PUBLIC (decl);
4351
9188c363 4352 /* Enter this declaration into the symbol table. */
15896502 4353 decl = maybe_push_decl (decl);
2ee887f2 4354
5156628f 4355 if (processing_template_decl)
15896502
MM
4356 decl = push_template_decl (decl);
4357 if (decl == error_mark_node)
156fc2bb 4358 return error_mark_node;
5566b478 4359
3b426391 4360 /* Tell the back end to use or not use .common as appropriate. If we say
a50f0918
MS
4361 -fconserve-space, we want this to save .data space, at the expense of
4362 wrong semantics. If we say -fno-conserve-space, we want this to
4363 produce errors about redefs; to do this we force variables into the
4364 data segment. */
434aeebb 4365 if (flag_conserve_space
15896502
MM
4366 && TREE_CODE (decl) == VAR_DECL
4367 && TREE_PUBLIC (decl)
4368 && !DECL_THREAD_LOCAL_P (decl)
434aeebb 4369 && !have_global_bss_p ())
15896502 4370 DECL_COMMON (decl) = 1;
68642fb6 4371
15896502
MM
4372 if (TREE_CODE (decl) == VAR_DECL
4373 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4374 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
c3b7031d
JM
4375 {
4376 /* This is a const variable with implicit 'static'. Set
4377 DECL_THIS_STATIC so we can tell it from variables that are
4378 !TREE_PUBLIC because of the anonymous namespace. */
91ea6df3 4379 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
15896502 4380 DECL_THIS_STATIC (decl) = 1;
c3b7031d
JM
4381 }
4382
15896502
MM
4383 if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4384 start_decl_1 (decl, initialized);
8d08fdba 4385
15896502 4386 return decl;
8d08fdba
MS
4387}
4388
15896502
MM
4389/* Process the declaration of a variable DECL. INITIALIZED is true
4390 iff DECL is explicitly initialized. (INITIALIZED is false if the
4391 variable is initialized via an implicitly-called constructor.)
4392 This function must be called for ordinary variables (including, for
4393 example, implicit instantiations of templates), but must not be
4394 called for template declarations. */
4395
5566b478 4396void
e92fb501 4397start_decl_1 (tree decl, bool initialized)
8d08fdba 4398{
e92fb501 4399 tree type;
15896502
MM
4400 bool complete_p;
4401 bool aggregate_definition_p;
8d08fdba 4402
e92fb501
MM
4403 gcc_assert (!processing_template_decl);
4404
4405 if (error_operand_p (decl))
44689c12
ML
4406 return;
4407
e92fb501 4408 gcc_assert (TREE_CODE (decl) == VAR_DECL);
15896502 4409
e92fb501 4410 type = TREE_TYPE (decl);
15896502 4411 complete_p = COMPLETE_TYPE_P (type);
9e1e64ec 4412 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
15896502
MM
4413
4414 /* If an explicit initializer is present, or if this is a definition
4415 of an aggregate, then we need a complete type at this point.
4416 (Scalars are always complete types, so there is nothing to
4417 check.) This code just sets COMPLETE_P; errors (if necessary)
4418 are issued below. */
4419 if ((initialized || aggregate_definition_p)
4420 && !complete_p
4421 && COMPLETE_TYPE_P (complete_type (type)))
4422 {
4423 complete_p = true;
4424 /* We will not yet have set TREE_READONLY on DECL if the type
4425 was "const", but incomplete, before this point. But, now, we
4426 have a complete type, so we can try again. */
4427 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4428 }
e92fb501 4429
5566b478 4430 if (initialized)
15896502 4431 /* Is it valid for this decl to have an initializer at all? */
8d08fdba 4432 {
5566b478
MS
4433 /* Don't allow initializations for incomplete types except for
4434 arrays which might be completed by the initialization. */
15896502 4435 if (complete_p)
5566b478 4436 ; /* A complete type is ok. */
86a09a9e
JM
4437 else if (type_uses_auto (type))
4438 ; /* An auto type is ok. */
5566b478 4439 else if (TREE_CODE (type) != ARRAY_TYPE)
8d08fdba 4440 {
2d01edd7 4441 error ("variable %q#D has initializer but incomplete type", decl);
25eb19ff 4442 type = TREE_TYPE (decl) = error_mark_node;
5566b478 4443 }
d0f062fb 4444 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5566b478
MS
4445 {
4446 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
2d01edd7 4447 error ("elements of array %q#D have incomplete type", decl);
5566b478 4448 /* else we already gave an error in start_decl. */
8d08fdba 4449 }
8d08fdba 4450 }
15896502 4451 else if (aggregate_definition_p && !complete_p)
8d08fdba 4452 {
86a09a9e
JM
4453 if (type_uses_auto (type))
4454 error ("declaration of %q#D has no initializer", decl);
4455 else
4456 error ("aggregate %q#D has incomplete type and cannot be defined",
4457 decl);
15896502
MM
4458 /* Change the type so that assemble_variable will give
4459 DECL an rtl we can live with: (mem (const_int 0)). */
4460 type = TREE_TYPE (decl) = error_mark_node;
5566b478
MS
4461 }
4462
c6671cbb
MM
4463 /* Create a new scope to hold this declaration if necessary.
4464 Whether or not a new scope is necessary cannot be determined
4465 until after the type has been completed; if the type is a
4466 specialization of a class template it is not until after
4467 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4468 will be set correctly. */
4469 maybe_push_cleanup_level (type);
5566b478
MS
4470}
4471
7e99327d
MM
4472/* Handle initialization of references. DECL, TYPE, and INIT have the
4473 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4474 but will be set to a new CLEANUP_STMT if a temporary is created
cd0be382 4475 that must be destroyed subsequently.
7e99327d
MM
4476
4477 Returns an initializer expression to use to initialize DECL, or
4478 NULL if the initialization can be performed statically.
e92cc029
MS
4479
4480 Quotes on semantics can be found in ARM 8.4.3. */
4481
8e4ce833 4482static tree
7e99327d 4483grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
5566b478
MS
4484{
4485 tree tmp;
4486
4487 if (init == NULL_TREE)
4488 {
4489 if ((DECL_LANG_SPECIFIC (decl) == 0
4490 || DECL_IN_AGGR_P (decl) == 0)
4491 && ! DECL_THIS_EXTERN (decl))
c4f73174 4492 error ("%qD declared as reference but not initialized", decl);
8e4ce833 4493 return NULL_TREE;
5566b478
MS
4494 }
4495
8d08fdba 4496 if (TREE_CODE (init) == TREE_LIST)
d555b1c7
PC
4497 init = build_x_compound_expr_from_list (init, ELK_INIT,
4498 tf_warning_or_error);
8d08fdba
MS
4499
4500 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4501 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
0a72704b
MM
4502 /* Note: default conversion is only called in very special cases. */
4503 init = decay_conversion (init);
68642fb6 4504
24bef158
MM
4505 /* Convert INIT to the reference type TYPE. This may involve the
4506 creation of a temporary, whose lifetime must be the same as that
350fae66
RK
4507 of the reference. If so, a DECL_EXPR for the temporary will be
4508 added just after the DECL_EXPR for DECL. That's why we don't set
24bef158
MM
4509 DECL_INITIAL for local references (instead assigning to them
4510 explicitly); we need to allow the temporary to be initialized
4511 first. */
60d21717 4512 tmp = initialize_reference (type, init, decl, cleanup, tf_warning_or_error);
8d08fdba 4513
a3203465 4514 if (tmp == error_mark_node)
8e4ce833
JJ
4515 return NULL_TREE;
4516 else if (tmp == NULL_TREE)
8d08fdba 4517 {
2d01edd7 4518 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
8e4ce833 4519 return NULL_TREE;
8d08fdba 4520 }
8d08fdba 4521
8e4ce833
JJ
4522 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4523 return tmp;
4524
08ac397c 4525 DECL_INITIAL (decl) = tmp;
8e4ce833
JJ
4526
4527 return NULL_TREE;
8d08fdba
MS
4528}
4529
09357846
JM
4530/* Subroutine of check_initializer. We're initializing a DECL of
4531 std::initializer_list<T> TYPE from a braced-init-list INIT, and need to
4532 extend the lifetime of the underlying array to match that of the decl,
4533 just like for reference initialization. CLEANUP is as for
4534 grok_reference_init. */
4535
4536static tree
fa2200cb
JM
4537build_init_list_var_init (tree decl, tree type, tree init, tree *array_init,
4538 tree *cleanup)
09357846
JM
4539{
4540 tree aggr_init, array, arrtype;
4541 init = perform_implicit_conversion (type, init, tf_warning_or_error);
f8c6dba2
PC
4542 if (error_operand_p (init))
4543 return error_mark_node;
4544
09357846 4545 aggr_init = TARGET_EXPR_INITIAL (init);
09357846
JM
4546 array = AGGR_INIT_EXPR_ARG (aggr_init, 1);
4547 arrtype = TREE_TYPE (array);
4548 STRIP_NOPS (array);
4549 gcc_assert (TREE_CODE (array) == ADDR_EXPR);
4550 array = TREE_OPERAND (array, 0);
4551 /* If the array is constant, finish_compound_literal already made it a
4552 static variable and we don't need to do anything here. */
4553 if (decl && TREE_CODE (array) == TARGET_EXPR)
4554 {
fa2200cb 4555 tree var = set_up_extended_ref_temp (decl, array, cleanup, array_init);
09357846
JM
4556 var = build_address (var);
4557 var = convert (arrtype, var);
4558 AGGR_INIT_EXPR_ARG (aggr_init, 1) = var;
09357846
JM
4559 }
4560 return init;
4561}
4562
76239779
MM
4563/* Designated initializers in arrays are not supported in GNU C++.
4564 The parser cannot detect this error since it does not know whether
4565 a given brace-enclosed initializer is for a class type or for an
4566 array. This function checks that CE does not use a designated
4567 initializer. If it does, an error is issued. Returns true if CE
4568 is valid, i.e., does not have a designated initializer. */
4569
4570static bool
4571check_array_designated_initializer (const constructor_elt *ce)
4572{
48c9a7f0 4573 /* Designated initializers for array elements are not supported. */
76239779
MM
4574 if (ce->index)
4575 {
4576 /* The parser only allows identifiers as designated
39a13be5 4577 initializers. */
6a837908
SM
4578 if (ce->index == error_mark_node)
4579 error ("name used in a GNU-style designated "
4580 "initializer for an array");
4581 else
4582 {
4583 gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4584 error ("name %qD used in a GNU-style designated "
4585 "initializer for an array", ce->index);
4586 }
76239779
MM
4587 return false;
4588 }
4589
4590 return true;
4591}
4592
27778b73
MM
4593/* When parsing `int a[] = {1, 2};' we don't know the size of the
4594 array until we finish parsing the initializer. If that's the
4595 situation we're in, update DECL accordingly. */
4596
4597static void
11f6b451 4598maybe_deduce_size_from_array_init (tree decl, tree init)
27778b73
MM
4599{
4600 tree type = TREE_TYPE (decl);
4601
4602 if (TREE_CODE (type) == ARRAY_TYPE
4603 && TYPE_DOMAIN (type) == NULL_TREE
4604 && TREE_CODE (decl) != TYPE_DECL)
4605 {
f2ae0c45
JM
4606 /* do_default is really a C-ism to deal with tentative definitions.
4607 But let's leave it here to ease the eventual merge. */
4608 int do_default = !DECL_EXTERNAL (decl);
27778b73 4609 tree initializer = init ? init : DECL_INITIAL (decl);
76239779 4610 int failure = 0;
27778b73 4611
76239779
MM
4612 /* Check that there are no designated initializers in INIT, as
4613 those are not supported in GNU C++, and as the middle-end
4614 will crash if presented with a non-numeric designated
4615 initializer. */
4616 if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
2b643eda 4617 {
76239779
MM
4618 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4619 constructor_elt *ce;
4620 HOST_WIDE_INT i;
ac47786e 4621 FOR_EACH_VEC_ELT (constructor_elt, v, i, ce)
76239779
MM
4622 if (!check_array_designated_initializer (ce))
4623 failure = 1;
2b643eda 4624 }
76239779
MM
4625
4626 if (!failure)
27778b73 4627 {
76239779
MM
4628 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4629 do_default);
4630 if (failure == 1)
2b643eda 4631 {
76239779
MM
4632 error ("initializer fails to determine size of %qD", decl);
4633 TREE_TYPE (decl) = error_mark_node;
4634 }
4635 else if (failure == 2)
4636 {
4637 if (do_default)
4638 {
4639 error ("array size missing in %qD", decl);
4640 TREE_TYPE (decl) = error_mark_node;
4641 }
4642 /* If a `static' var's size isn't known, make it extern as
4643 well as static, so it does not get allocated. If it's not
4644 `static', then don't mark it extern; finish_incomplete_decl
4645 will give it a default size and it will get allocated. */
4646 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4647 DECL_EXTERNAL (decl) = 1;
4648 }
4649 else if (failure == 3)
4650 {
4651 error ("zero-size array %qD", decl);
2b643eda
MM
4652 TREE_TYPE (decl) = error_mark_node;
4653 }
2b643eda 4654 }
27778b73 4655
f23b8501
JJ
4656 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4657
a3a7bf5f 4658 relayout_decl (decl);
27778b73
MM
4659 }
4660}
4661
4662/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
57b52417 4663 any appropriate error messages regarding the layout. */
27778b73 4664
57b52417 4665static void
11f6b451 4666layout_var_decl (tree decl)
27778b73 4667{
2b643eda
MM
4668 tree type;
4669
2b643eda
MM
4670 type = TREE_TYPE (decl);
4671 if (type == error_mark_node)
4672 return;
57b52417
MM
4673
4674 /* If we haven't already layed out this declaration, do so now.
4675 Note that we must not call complete type for an external object
4676 because it's type might involve templates that we are not
34cd5ae7 4677 supposed to instantiate yet. (And it's perfectly valid to say
57b52417
MM
4678 `extern X x' for some incomplete type `X'.) */
4679 if (!DECL_EXTERNAL (decl))
4680 complete_type (type);
caf93cb0 4681 if (!DECL_SIZE (decl)
328de7c2 4682 && TREE_TYPE (decl) != error_mark_node
7de85f7e 4683 && (COMPLETE_TYPE_P (type)
caf93cb0 4684 || (TREE_CODE (type) == ARRAY_TYPE
7de85f7e
MM
4685 && !TYPE_DOMAIN (type)
4686 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
27778b73
MM
4687 layout_decl (decl, 0);
4688
c82dbd95 4689 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
27778b73
MM
4690 {
4691 /* An automatic variable with an incomplete type: that is an error.
4692 Don't talk about array types here, since we took care of that
4693 message in grokdeclarator. */
d8a07487 4694 error ("storage size of %qD isn%'t known", decl);
27778b73
MM
4695 TREE_TYPE (decl) = error_mark_node;
4696 }
ae673f14
JM
4697#if 0
4698 /* Keep this code around in case we later want to control debug info
4699 based on whether a type is "used". (jason 1999-11-11) */
4700
9e1e64ec 4701 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
27778b73
MM
4702 /* Let debugger know it should output info for this type. */
4703 note_debug_info_needed (ttype);
4704
4705 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4706 note_debug_info_needed (DECL_CONTEXT (decl));
ae673f14 4707#endif
27778b73
MM
4708
4709 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4710 && DECL_SIZE (decl) != NULL_TREE
4711 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4712 {
4713 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4714 constant_expression_warning (DECL_SIZE (decl));
4715 else
b97d8153 4716 {
d8a07487 4717 error ("storage size of %qD isn%'t constant", decl);
b97d8153
JJ
4718 TREE_TYPE (decl) = error_mark_node;
4719 }
27778b73
MM
4720 }
4721}
4722
27778b73
MM
4723/* If a local static variable is declared in an inline function, or if
4724 we have a weak definition, we must endeavor to create only one
4725 instance of the variable at link-time. */
4726
68017cb4 4727void
11f6b451 4728maybe_commonize_var (tree decl)
27778b73
MM
4729{
4730 /* Static data in a function with comdat linkage also has comdat
4731 linkage. */
4732 if (TREE_STATIC (decl)
4733 /* Don't mess with __FUNCTION__. */
cf74fb86 4734 && ! DECL_ARTIFICIAL (decl)
0b50d7f1 4735 && DECL_FUNCTION_SCOPE_P (decl)
d6dcdbd5 4736 && vague_linkage_p (DECL_CONTEXT (decl)))
27778b73 4737 {
0dbc5cd3 4738 if (flag_weak)
27778b73 4739 {
0dbc5cd3
MM
4740 /* With weak symbols, we simply make the variable COMDAT;
4741 that will cause copies in multiple translations units to
4742 be merged. */
4743 comdat_linkage (decl);
4744 }
4745 else
4746 {
4747 if (DECL_INITIAL (decl) == NULL_TREE
4748 || DECL_INITIAL (decl) == error_mark_node)
27778b73 4749 {
0dbc5cd3
MM
4750 /* Without weak symbols, we can use COMMON to merge
4751 uninitialized variables. */
27778b73
MM
4752 TREE_PUBLIC (decl) = 1;
4753 DECL_COMMON (decl) = 1;
4754 }
0dbc5cd3 4755 else
27778b73 4756 {
0dbc5cd3
MM
4757 /* While for initialized variables, we must use internal
4758 linkage -- which means that multiple copies will not
4759 be merged. */
4760 TREE_PUBLIC (decl) = 0;
4761 DECL_COMMON (decl) = 0;
c5d75364
MLI
4762 warning_at (input_location, 0,
4763 "sorry: semantics of inline function static "
d8a07487 4764 "data %q+#D are wrong (you%'ll wind up "
c5d75364
MLI
4765 "with multiple copies)", decl);
4766 warning_at (DECL_SOURCE_LOCATION (decl), 0,
4767 " you can work around this by removing "
4768 "the initializer");
27778b73
MM
4769 }
4770 }
4771 }
4772 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4773 /* Set it up again; we might have set DECL_INITIAL since the last
4774 time. */
4775 comdat_linkage (decl);
4776}
4777
91063b51
MM
4778/* Issue an error message if DECL is an uninitialized const variable. */
4779
4780static void
11f6b451 4781check_for_uninitialized_const_var (tree decl)
91063b51 4782{
6ad86a5b 4783 tree type = strip_array_types (TREE_TYPE (decl));
91063b51
MM
4784
4785 /* ``Unless explicitly declared extern, a const object does not have
4786 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4787 7.1.6 */
91ea6df3 4788 if (TREE_CODE (decl) == VAR_DECL
91063b51
MM
4789 && TREE_CODE (type) != REFERENCE_TYPE
4790 && CP_TYPE_CONST_P (type)
6ad86a5b
FC
4791 && (!TYPE_NEEDS_CONSTRUCTING (type)
4792 || !type_has_user_provided_default_constructor (type))
91063b51 4793 && !DECL_INITIAL (decl))
6ad86a5b
FC
4794 {
4795 permerror (DECL_SOURCE_LOCATION (decl),
4796 "uninitialized const %qD", decl);
91063b51 4797
6ad86a5b
FC
4798 if (CLASS_TYPE_P (type)
4799 && !type_has_user_provided_default_constructor (type))
4800 {
4801 tree defaulted_ctor;
4802
4803 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
4804 "%q#T has no user-provided default constructor", type);
4805 defaulted_ctor = in_class_defaulted_default_constructor (type);
4806 if (defaulted_ctor)
4807 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
4808 "constructor is not user-provided because it is "
4809 "explicitly defaulted in the class body");
4810 }
4811 }
4812}
4038c495
GB
4813\f
4814/* Structure holding the current initializer being processed by reshape_init.
4815 CUR is a pointer to the current element being processed, END is a pointer
4816 after the last element present in the initializer. */
4817typedef struct reshape_iterator_t
4818{
4819 constructor_elt *cur;
4820 constructor_elt *end;
4821} reshape_iter;
4822
4823static tree reshape_init_r (tree, reshape_iter *, bool);
4824
8e3df2de
MM
4825/* FIELD is a FIELD_DECL or NULL. In the former case, the value
4826 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4827 initialized. If there are no more such fields, the return value
4828 will be NULL. */
4829
d4b5fb22 4830tree
8e3df2de
MM
4831next_initializable_field (tree field)
4832{
4833 while (field
4834 && (TREE_CODE (field) != FIELD_DECL
4835 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4836 || DECL_ARTIFICIAL (field)))
910ad8de 4837 field = DECL_CHAIN (field);
8e3df2de
MM
4838
4839 return field;
4840}
4841
4038c495
GB
4842/* Subroutine of reshape_init_array and reshape_init_vector, which does
4843 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4844 INTEGER_CST representing the size of the array minus one (the maximum index),
4845 or NULL_TREE if the array was declared without specifying the size. D is
4846 the iterator within the constructor. */
4847
4848static tree
4849reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
3d142be2 4850{
4038c495 4851 tree new_init;
3d142be2 4852 bool sized_array_p = (max_index != NULL_TREE);
004c400a
JJ
4853 unsigned HOST_WIDE_INT max_index_cst = 0;
4854 unsigned HOST_WIDE_INT index;
3d142be2 4855
4038c495 4856 /* The initializer for an array is always a CONSTRUCTOR. */
09357846 4857 new_init = build_constructor (init_list_type_node, NULL);
4038c495 4858
3d142be2 4859 if (sized_array_p)
004c400a 4860 {
d7d93837
AH
4861 /* Minus 1 is used for zero sized arrays. */
4862 if (integer_all_onesp (max_index))
4863 return new_init;
4864
004c400a
JJ
4865 if (host_integerp (max_index, 1))
4866 max_index_cst = tree_low_cst (max_index, 1);
4867 /* sizetype is sign extended, not zero extended. */
4868 else
4869 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4870 1);
4871 }
3d142be2
GB
4872
4873 /* Loop until there are no more initializers. */
4874 for (index = 0;
4038c495 4875 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
3d142be2
GB
4876 ++index)
4877 {
4038c495
GB
4878 tree elt_init;
4879
76239779 4880 check_array_designated_initializer (d->cur);
4038c495 4881 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
07471dfb
MM
4882 if (elt_init == error_mark_node)
4883 return error_mark_node;
4038c495 4884 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
3d142be2
GB
4885 }
4886
4038c495 4887 return new_init;
3d142be2
GB
4888}
4889
4038c495
GB
4890/* Subroutine of reshape_init_r, processes the initializers for arrays.
4891 Parameters are the same of reshape_init_r. */
8e3df2de 4892
4038c495
GB
4893static tree
4894reshape_init_array (tree type, reshape_iter *d)
4895{
4896 tree max_index = NULL_TREE;
caf93cb0 4897
4038c495 4898 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
8e3df2de 4899
4038c495
GB
4900 if (TYPE_DOMAIN (type))
4901 max_index = array_type_nelts (type);
4902
4903 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4904}
4905
4906/* Subroutine of reshape_init_r, processes the initializers for vectors.
4907 Parameters are the same of reshape_init_r. */
8e3df2de
MM
4908
4909static tree
4038c495 4910reshape_init_vector (tree type, reshape_iter *d)
8e3df2de 4911{
4038c495 4912 tree max_index = NULL_TREE;
4038c495
GB
4913
4914 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4915
3b2db49f 4916 if (COMPOUND_LITERAL_P (d->cur->value))
4038c495
GB
4917 {
4918 tree value = d->cur->value;
4919 if (!same_type_p (TREE_TYPE (value), type))
4920 {
4921 error ("invalid type %qT as initializer for a vector of type %qT",
4922 TREE_TYPE (d->cur->value), type);
3db45ab5 4923 value = error_mark_node;
4038c495
GB
4924 }
4925 ++d->cur;
4926 return value;
4927 }
4928
7ffacec4
RB
4929 /* For a vector, we initialize it as an array of the appropriate size. */
4930 if (TREE_CODE (type) == VECTOR_TYPE)
4931 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
4038c495
GB
4932
4933 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4934}
4935
4936/* Subroutine of reshape_init_r, processes the initializers for classes
4937 or union. Parameters are the same of reshape_init_r. */
4938
4939static tree
4940reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4941{
4942 tree field;
8e3df2de 4943 tree new_init;
8e3df2de 4944
4038c495 4945 gcc_assert (CLASS_TYPE_P (type));
8e3df2de 4946
4038c495 4947 /* The initializer for a class is always a CONSTRUCTOR. */
09357846 4948 new_init = build_constructor (init_list_type_node, NULL);
4038c495 4949 field = next_initializable_field (TYPE_FIELDS (type));
ee7ecb29 4950
4038c495 4951 if (!field)
8e3df2de 4952 {
4038c495
GB
4953 /* [dcl.init.aggr]
4954
4955 An initializer for an aggregate member that is an
4956 empty class shall have the form of an empty
4957 initializer-list {}. */
4958 if (!first_initializer_p)
4959 {
4960 error ("initializer for %qT must be brace-enclosed", type);
4961 return error_mark_node;
4962 }
4963 return new_init;
8e3df2de 4964 }
4038c495
GB
4965
4966 /* Loop through the initializable fields, gathering initializers. */
4967 while (d->cur != d->end)
8e3df2de 4968 {
4038c495
GB
4969 tree field_init;
4970
4971 /* Handle designated initializers, as an extension. */
4972 if (d->cur->index)
4973 {
4038c495
GB
4974 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4975
4976 if (!field || TREE_CODE (field) != FIELD_DECL)
77bffd4c
SE
4977 {
4978 error ("%qT has no non-static data member named %qD", type,
4979 d->cur->index);
4980 return error_mark_node;
4981 }
4038c495
GB
4982 }
4983
4984 /* If we processed all the member of the class, we are done. */
4985 if (!field)
4986 break;
4987
4988 field_init = reshape_init_r (TREE_TYPE (field), d,
4989 /*first_initializer_p=*/false);
97471c71
PC
4990 if (field_init == error_mark_node)
4991 return error_mark_node;
4992
4038c495
GB
4993 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4994
4995 /* [dcl.init.aggr]
4996
4997 When a union is initialized with a brace-enclosed
4998 initializer, the braces shall only contain an
4999 initializer for the first member of the union. */
5000 if (TREE_CODE (type) == UNION_TYPE)
5001 break;
5002
910ad8de 5003 field = next_initializable_field (DECL_CHAIN (field));
8e3df2de
MM
5004 }
5005
4038c495
GB
5006 return new_init;
5007}
5008
5009/* Subroutine of reshape_init, which processes a single initializer (part of
5010 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5011 iterator within the CONSTRUCTOR which points to the initializer to process.
5012 FIRST_INITIALIZER_P is true if this is the first initializer of the
40b125d7 5013 outermost CONSTRUCTOR node. */
4038c495
GB
5014
5015static tree
5016reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
5017{
5018 tree init = d->cur->value;
5019
ffe79825
PC
5020 if (error_operand_p (init))
5021 return error_mark_node;
5022
8e3df2de
MM
5023 /* A non-aggregate type is always initialized with a single
5024 initializer. */
5025 if (!CP_AGGREGATE_TYPE_P (type))
4038c495
GB
5026 {
5027 /* It is invalid to initialize a non-aggregate type with a
b71836b0 5028 brace-enclosed initializer before C++0x.
4038c495
GB
5029 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5030 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5031 a CONSTRUCTOR (with a record type). */
5032 if (TREE_CODE (init) == CONSTRUCTOR
5033 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5034 {
b71836b0
JM
5035 if (SCALAR_TYPE_P (type))
5036 {
5037 error ("braces around scalar initializer for type %qT", type);
5038 init = error_mark_node;
5039 }
5040 else
848f237b 5041 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
4038c495 5042 }
3db45ab5 5043
4038c495
GB
5044 d->cur++;
5045 return init;
5046 }
8e3df2de
MM
5047
5048 /* [dcl.init.aggr]
5049
5050 All implicit type conversions (clause _conv_) are considered when
5051 initializing the aggregate member with an initializer from an
5052 initializer-list. If the initializer can initialize a member,
5053 the member is initialized. Otherwise, if the member is itself a
5054 non-empty subaggregate, brace elision is assumed and the
5055 initializer is considered for the initialization of the first
5056 member of the subaggregate. */
4038c495 5057 if (TREE_CODE (init) != CONSTRUCTOR
40b125d7
JM
5058 /* But don't try this for the first initializer, since that would be
5059 looking through the outermost braces; A a2 = { a1 }; is not a
5060 valid aggregate initialization. */
5061 && !first_initializer_p
d5f4eddd
JM
5062 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5063 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL)))
8e3df2de 5064 {
4038c495
GB
5065 d->cur++;
5066 return init;
8e3df2de
MM
5067 }
5068
4038c495
GB
5069 /* [dcl.init.string]
5070
5071 A char array (whether plain char, signed char, or unsigned char)
5072 can be initialized by a string-literal (optionally enclosed in
5073 braces); a wchar_t array can be initialized by a wide
5074 string-literal (optionally enclosed in braces). */
5075 if (TREE_CODE (type) == ARRAY_TYPE
42328048 5076 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
8e3df2de 5077 {
4038c495 5078 tree str_init = init;
8e3df2de 5079
4038c495 5080 /* Strip one level of braces if and only if they enclose a single
3db45ab5 5081 element (as allowed by [dcl.init.string]). */
4038c495
GB
5082 if (!first_initializer_p
5083 && TREE_CODE (str_init) == CONSTRUCTOR
5084 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
8e3df2de 5085 {
4038c495
GB
5086 str_init = VEC_index (constructor_elt,
5087 CONSTRUCTOR_ELTS (str_init), 0)->value;
5088 }
3db45ab5 5089
4038c495 5090 /* If it's a string literal, then it's the initializer for the array
3db45ab5 5091 as a whole. Otherwise, continue with normal initialization for
4038c495
GB
5092 array types (one value per array element). */
5093 if (TREE_CODE (str_init) == STRING_CST)
5094 {
5095 d->cur++;
5096 return str_init;
5097 }
5098 }
8e3df2de 5099
4038c495
GB
5100 /* The following cases are about aggregates. If we are not within a full
5101 initializer already, and there is not a CONSTRUCTOR, it means that there
5102 is a missing set of braces (that is, we are processing the case for
5103 which reshape_init exists). */
5104 if (!first_initializer_p)
5105 {
5106 if (TREE_CODE (init) == CONSTRUCTOR)
5107 {
70ec16f7
AP
5108 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5109 /* There is no need to reshape pointer-to-member function
5110 initializers, as they are always constructed correctly
5111 by the front end. */
5112 ;
5113 else if (COMPOUND_LITERAL_P (init))
4038c495
GB
5114 /* For a nested compound literal, there is no need to reshape since
5115 brace elision is not allowed. Even if we decided to allow it,
5116 we should add a call to reshape_init in finish_compound_literal,
5117 before calling digest_init, so changing this code would still
5118 not be necessary. */
70ec16f7
AP
5119 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5120 else
8e3df2de 5121 {
4038c495
GB
5122 ++d->cur;
5123 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5124 return reshape_init (type, init);
8e3df2de 5125 }
8e3df2de 5126 }
f8e7a389 5127
4038c495
GB
5128 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5129 type);
5130 }
8e3df2de 5131
4038c495
GB
5132 /* Dispatch to specialized routines. */
5133 if (CLASS_TYPE_P (type))
5134 return reshape_init_class (type, d, first_initializer_p);
5135 else if (TREE_CODE (type) == ARRAY_TYPE)
5136 return reshape_init_array (type, d);
5137 else if (TREE_CODE (type) == VECTOR_TYPE)
5138 return reshape_init_vector (type, d);
5139 else
5140 gcc_unreachable();
5141}
8e3df2de 5142
4038c495
GB
5143/* Undo the brace-elision allowed by [dcl.init.aggr] in a
5144 brace-enclosed aggregate initializer.
8e3df2de 5145
4038c495
GB
5146 INIT is the CONSTRUCTOR containing the list of initializers describing
5147 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5148 It may not presently match the shape of the TYPE; for example:
5149
5150 struct S { int a; int b; };
5151 struct S a[] = { 1, 2, 3, 4 };
5152
5153 Here INIT will hold a VEC of four elements, rather than a
5154 VEC of two elements, each itself a VEC of two elements. This
5155 routine transforms INIT from the former form into the latter. The
5156 revised CONSTRUCTOR node is returned. */
5157
3b2db49f 5158tree
4038c495
GB
5159reshape_init (tree type, tree init)
5160{
5161 VEC(constructor_elt, gc) *v;
5162 reshape_iter d;
5163 tree new_init;
5164
4038c495
GB
5165 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5166
5167 v = CONSTRUCTOR_ELTS (init);
5168
5169 /* An empty constructor does not need reshaping, and it is always a valid
5170 initializer. */
5171 if (VEC_empty (constructor_elt, v))
5172 return init;
5173
5174 /* Recurse on this CONSTRUCTOR. */
5175 d.cur = VEC_index (constructor_elt, v, 0);
5176 d.end = d.cur + VEC_length (constructor_elt, v);
5177
5178 new_init = reshape_init_r (type, &d, true);
07471dfb
MM
5179 if (new_init == error_mark_node)
5180 return error_mark_node;
4038c495
GB
5181
5182 /* Make sure all the element of the constructor were used. Otherwise,
5183 issue an error about exceeding initializers. */
5184 if (d.cur != d.end)
5185 error ("too many initializers for %qT", type);
8e3df2de
MM
5186
5187 return new_init;
5188}
5189
23bee8f4
JJ
5190/* Verify array initializer. Returns true if errors have been reported. */
5191
5192bool
5193check_array_initializer (tree decl, tree type, tree init)
5194{
5195 tree element_type = TREE_TYPE (type);
5196
5197 /* The array type itself need not be complete, because the
5198 initializer may tell us how many elements are in the array.
5199 But, the elements of the array must be complete. */
5200 if (!COMPLETE_TYPE_P (complete_type (element_type)))
5201 {
5202 if (decl)
5203 error ("elements of array %q#D have incomplete type", decl);
5204 else
5205 error ("elements of array %q#T have incomplete type", type);
5206 return true;
5207 }
5208 /* It is not valid to initialize a VLA. */
5209 if (init
5210 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5211 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5212 {
5213 if (decl)
5214 error ("variable-sized object %qD may not be initialized", decl);
5215 else
5216 error ("variable-sized compound literal");
5217 return true;
5218 }
5219 return false;
5220}
5221
09357846
JM
5222/* Subroutine of check_initializer; args are passed down from that function.
5223 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
5224
5225static tree
5226build_aggr_init_full_exprs (tree decl, tree init, int flags)
5227
5228{
5229 int saved_stmts_are_full_exprs_p = 0;
5230 if (building_stmt_tree ())
5231 {
5232 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5233 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5234 }
5235 init = build_aggr_init (decl, init, flags, tf_warning_or_error);
5236 if (building_stmt_tree ())
5237 current_stmt_tree ()->stmts_are_full_exprs_p =
5238 saved_stmts_are_full_exprs_p;
5239 return init;
5240}
5241
c82dbd95 5242/* Verify INIT (the initializer for DECL), and record the
7e99327d
MM
5243 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
5244 grok_reference_init.
8e3df2de
MM
5245
5246 If the return value is non-NULL, it is an expression that must be
5247 evaluated dynamically to initialize DECL. */
27778b73 5248
c82dbd95 5249static tree
7e99327d 5250check_initializer (tree decl, tree init, int flags, tree *cleanup)
27778b73 5251{
17bbb839 5252 tree type = TREE_TYPE (decl);
25ebb82a 5253 tree init_code = NULL;
fa2200cb 5254 tree extra_init = NULL_TREE;
34655c9e 5255 tree core_type;
fc0e7bf5 5256
328de7c2
MM
5257 /* Things that are going to be initialized need to have complete
5258 type. */
5259 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
c82dbd95 5260
328de7c2
MM
5261 if (type == error_mark_node)
5262 /* We will have already complained. */
f724eac4
MM
5263 return NULL_TREE;
5264
5265 if (TREE_CODE (type) == ARRAY_TYPE)
328de7c2 5266 {
23bee8f4
JJ
5267 if (check_array_initializer (decl, type, init))
5268 return NULL_TREE;
328de7c2 5269 }
f724eac4 5270 else if (!COMPLETE_TYPE_P (type))
328de7c2 5271 {
2d01edd7 5272 error ("%qD has incomplete type", decl);
328de7c2 5273 TREE_TYPE (decl) = error_mark_node;
f724eac4 5274 return NULL_TREE;
27778b73 5275 }
f724eac4
MM
5276 else
5277 /* There is no way to make a variable-sized class type in GNU C++. */
5278 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
c1ae8be5
SM
5279
5280 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
f47165c9 5281 {
c1ae8be5
SM
5282 int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5283 if (SCALAR_TYPE_P (type))
5284 {
09357846
JM
5285 if (init_len == 0)
5286 {
848f237b 5287 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
09357846
JM
5288 init = build_zero_init (type, NULL_TREE, false);
5289 }
5290 else if (init_len != 1)
c1ae8be5
SM
5291 {
5292 error ("scalar object %qD requires one element in initializer",
5293 decl);
5294 TREE_TYPE (decl) = error_mark_node;
5295 return NULL_TREE;
5296 }
5297 }
f47165c9 5298 }
27778b73
MM
5299
5300 if (TREE_CODE (decl) == CONST_DECL)
5301 {
7525db03 5302 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
27778b73
MM
5303
5304 DECL_INITIAL (decl) = init;
5305
50bc768d 5306 gcc_assert (init != NULL_TREE);
27778b73
MM
5307 init = NULL_TREE;
5308 }
fa2200cb
JM
5309 else if (!init && DECL_REALLY_EXTERN (decl))
5310 ;
5311 else if (TREE_CODE (type) == REFERENCE_TYPE)
7e99327d 5312 init = grok_reference_init (decl, type, init, cleanup);
fa2200cb 5313 else if (init || TYPE_NEEDS_CONSTRUCTING (type))
27778b73 5314 {
fa2200cb
JM
5315 if (!init)
5316 check_for_uninitialized_const_var (decl);
4038c495 5317 /* Do not reshape constructors of vectors (they don't need to be
3db45ab5 5318 reshaped. */
fa2200cb 5319 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
a16f2357 5320 {
09357846 5321 if (is_std_init_list (type))
fa2200cb
JM
5322 init = build_init_list_var_init (decl, type, init,
5323 &extra_init, cleanup);
09357846
JM
5324 else if (TYPE_NON_AGGREGATE_CLASS (type))
5325 {
5326 /* Don't reshape if the class has constructors. */
5327 if (cxx_dialect == cxx98)
5328 error ("in C++98 %qD must be initialized by constructor, "
5329 "not by %<{...}%>",
5330 decl);
09357846 5331 }
b6fc2cdb 5332 else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
6e1b3a7c
AH
5333 {
5334 error ("opaque vector types cannot be initialized");
5335 init = error_mark_node;
5336 }
09357846
JM
5337 else
5338 init = reshape_init (type, init);
a16f2357 5339 }
8e3df2de
MM
5340
5341 /* If DECL has an array type without a specific bound, deduce the
5342 array size from the initializer. */
5343 maybe_deduce_size_from_array_init (decl, init);
5344 type = TREE_TYPE (decl);
2b643eda
MM
5345 if (type == error_mark_node)
5346 return NULL_TREE;
8e3df2de 5347
09357846
JM
5348 if (TYPE_NEEDS_CONSTRUCTING (type)
5349 || (CLASS_TYPE_P (type)
fa2200cb
JM
5350 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init))))
5351 {
5352 init_code = build_aggr_init_full_exprs (decl, init, flags);
5353
5354 /* If this is a constexpr initializer, expand_default_init will
5355 have returned an INIT_EXPR rather than a CALL_EXPR. In that
5356 case, pull the initializer back out and pass it down into
5357 store_init_value. */
5358 while (TREE_CODE (init_code) == EXPR_STMT
5359 || TREE_CODE (init_code) == CONVERT_EXPR)
5360 init_code = TREE_OPERAND (init_code, 0);
5361 if (TREE_CODE (init_code) == INIT_EXPR)
5362 {
5363 init = TREE_OPERAND (init_code, 1);
5364 init_code = NULL_TREE;
5365 /* Don't call digest_init; it's unnecessary and will complain
5366 about aggregate initialization of non-aggregate classes. */
5367 flags |= LOOKUP_ALREADY_DIGESTED;
5368 }
5369 else if (DECL_DECLARED_CONSTEXPR_P (decl))
5370 {
5371 /* Declared constexpr, but no suitable initializer; massage
5372 init appropriately so we can pass it into store_init_value
5373 for the error. */
5374 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5375 init = finish_compound_literal (type, init);
5376 else if (CLASS_TYPE_P (type)
5377 && (!init || TREE_CODE (init) == TREE_LIST))
5378 {
5379 init = build_functional_cast (type, init, tf_none);
5380 if (init != error_mark_node)
5381 TARGET_EXPR_DIRECT_INIT_P (init) = true;
5382 }
5383 init_code = NULL_TREE;
5384 }
5385 else
5386 init = NULL_TREE;
5387 }
5388
5389 if (init && TREE_CODE (init) != TREE_VEC)
27778b73 5390 {
e57d93c6 5391 init_code = store_init_value (decl, init, flags);
09357846
JM
5392 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5393 && DECL_INITIAL (decl)
5394 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5395 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5396 warning (0, "array %qD initialized by parenthesized string literal %qE",
5397 decl, DECL_INITIAL (decl));
5398 init = NULL;
27778b73 5399 }
27778b73 5400 }
fa2200cb 5401 else
27778b73 5402 {
fa2200cb
JM
5403 if (CLASS_TYPE_P (core_type = strip_array_types (type))
5404 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5405 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
34655c9e
FC
5406 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5407 /*complain=*/true);
27778b73
MM
5408
5409 check_for_uninitialized_const_var (decl);
27778b73 5410 }
68642fb6 5411
8e3df2de 5412 if (init && init != error_mark_node)
f293ce4b 5413 init_code = build2 (INIT_EXPR, type, decl, init);
8e3df2de 5414
fa2200cb
JM
5415 if (extra_init)
5416 init_code = add_stmt_to_compound (extra_init, init_code);
5417
5418 if (init_code && DECL_IN_AGGR_P (decl))
5419 {
5420 static int explained = 0;
5421
5422 if (cxx_dialect < cxx0x)
5423 error ("initializer invalid for static member with constructor");
5424 else
5425 error ("non-constant in-class initialization invalid for static "
5426 "member %qD", decl);
5427 if (!explained)
5428 {
5429 error ("(an out of class initialization is required)");
5430 explained = 1;
5431 }
5432 }
5433
25ebb82a 5434 return init_code;
27778b73
MM
5435}
5436
5437/* If DECL is not a local variable, give it RTL. */
5438
5439static void
11f6b451 5440make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
27778b73 5441{
95ee998c
MM
5442 int toplev = toplevel_bindings_p ();
5443 int defer_p;
9f12b095 5444 const char *filename;
27778b73 5445
0e6df31e
GK
5446 /* Set the DECL_ASSEMBLER_NAME for the object. */
5447 if (asmspec)
5448 {
5449 /* The `register' keyword, when used together with an
5450 asm-specification, indicates that the variable should be
5451 placed in a particular register. */
5452 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5453 {
11e3f4b6 5454 set_user_assembler_name (decl, asmspec);
0e6df31e
GK
5455 DECL_HARD_REGISTER (decl) = 1;
5456 }
5457 else
b482789c
MA
5458 {
5459 if (TREE_CODE (decl) == FUNCTION_DECL
5460 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5461 set_builtin_user_assembler_name (decl, asmspec);
5462 set_user_assembler_name (decl, asmspec);
5463 }
0e6df31e
GK
5464 }
5465
f39ee884
MM
5466 /* Handle non-variables up front. */
5467 if (TREE_CODE (decl) != VAR_DECL)
5468 {
0e6df31e 5469 rest_of_decl_compilation (decl, toplev, at_eof);
f39ee884
MM
5470 return;
5471 }
5472
95ee998c
MM
5473 /* If we see a class member here, it should be a static data
5474 member. */
5475 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5476 {
50bc768d 5477 gcc_assert (TREE_STATIC (decl));
95ee998c
MM
5478 /* An in-class declaration of a static data member should be
5479 external; it is only a declaration, and not a definition. */
5480 if (init == NULL_TREE)
dc472c59 5481 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
95ee998c
MM
5482 }
5483
95ee998c
MM
5484 /* We don't create any RTL for local variables. */
5485 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5486 return;
27778b73 5487
95ee998c 5488 /* We defer emission of local statics until the corresponding
350fae66 5489 DECL_EXPR is expanded. */
95ee998c
MM
5490 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5491
b602511f
JM
5492 /* We try to defer namespace-scope static constants so that they are
5493 not emitted into the object file unnecessarily. */
9f12b095 5494 filename = input_filename;
b602511f
JM
5495 if (!DECL_VIRTUAL_P (decl)
5496 && TREE_READONLY (decl)
5497 && DECL_INITIAL (decl) != NULL_TREE
5498 && DECL_INITIAL (decl) != error_mark_node
9f12b095 5499 && filename != NULL
b602511f
JM
5500 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5501 && toplev
5502 && !TREE_PUBLIC (decl))
5cc90635
JM
5503 {
5504 /* Fool with the linkage of static consts according to #pragma
5505 interface. */
c533e34d 5506 struct c_fileinfo *finfo = get_fileinfo (filename);
5d709b00 5507 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
27778b73 5508 {
95ee998c 5509 TREE_PUBLIC (decl) = 1;
5d709b00 5510 DECL_EXTERNAL (decl) = finfo->interface_only;
27778b73 5511 }
27778b73 5512
95ee998c 5513 defer_p = 1;
27778b73 5514 }
b602511f 5515 /* Likewise for template instantiations. */
4684cd27
MM
5516 else if (DECL_LANG_SPECIFIC (decl)
5517 && DECL_IMPLICIT_INSTANTIATION (decl))
b602511f 5518 defer_p = 1;
95ee998c 5519
95ee998c 5520 /* If we're not deferring, go ahead and assemble the variable. */
0e6df31e
GK
5521 if (!defer_p)
5522 rest_of_decl_compilation (decl, toplev, at_eof);
27778b73
MM
5523}
5524
a24549d4
JM
5525/* walk_tree helper for wrap_temporary_cleanups, below. */
5526
5527static tree
5528wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5529{
5530 if (TYPE_P (*stmt_p))
5531 {
5532 *walk_subtrees = 0;
5533 return NULL_TREE;
5534 }
5535
5536 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5537 {
5538 tree guard = (tree)data;
5539 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5540
5541 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
33b45227
JM
5542 /* Tell honor_protect_cleanup_actions to handle this as a separate
5543 cleanup. */
5544 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5545
a24549d4
JM
5546 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5547 }
5548
5549 return NULL_TREE;
5550}
5551
5552/* We're initializing a local variable which has a cleanup GUARD. If there
5553 are any temporaries used in the initializer INIT of this variable, we
5554 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
33b45227
JM
5555 variable will be cleaned up properly if one of them throws.
5556
5557 Unfortunately, there's no way to express this properly in terms of
5558 nesting, as the regions for the temporaries overlap the region for the
5559 variable itself; if there are two temporaries, the variable needs to be
5560 the first thing destroyed if either of them throws. However, we only
5561 want to run the variable's cleanup if it actually got constructed. So
5562 we need to guard the temporary cleanups with the variable's cleanup if
5563 they are run on the normal path, but not if they are run on the
5564 exceptional path. We implement this by telling
5565 honor_protect_cleanup_actions to strip the variable cleanup from the
5566 exceptional path. */
a24549d4
JM
5567
5568static void
5569wrap_temporary_cleanups (tree init, tree guard)
5570{
5571 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5572}
5573
ed5511d9 5574/* Generate code to initialize DECL (a local variable). */
27778b73 5575
8e3df2de 5576static void
11f6b451 5577initialize_local_var (tree decl, tree init)
27778b73 5578{
9ed9e79a 5579 tree type = TREE_TYPE (decl);
170b020f 5580 tree cleanup;
a24549d4 5581 int already_used;
27778b73 5582
50bc768d
NS
5583 gcc_assert (TREE_CODE (decl) == VAR_DECL
5584 || TREE_CODE (decl) == RESULT_DECL);
5585 gcc_assert (!TREE_STATIC (decl));
b7b8bcd2 5586
8e3df2de 5587 if (DECL_SIZE (decl) == NULL_TREE)
b7b8bcd2
MM
5588 {
5589 /* If we used it already as memory, it must stay in memory. */
5590 DECL_INITIAL (decl) = NULL_TREE;
5591 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
a24549d4 5592 return;
b7b8bcd2
MM
5593 }
5594
a24549d4
JM
5595 if (type == error_mark_node)
5596 return;
68642fb6 5597
a24549d4
JM
5598 /* Compute and store the initial value. */
5599 already_used = TREE_USED (decl) || TREE_USED (type);
026698d2
JJ
5600 if (TREE_USED (type))
5601 DECL_READ_P (decl) = 1;
27778b73 5602
a24549d4
JM
5603 /* Generate a cleanup, if necessary. */
5604 cleanup = cxx_maybe_build_cleanup (decl);
27778b73 5605
a24549d4
JM
5606 /* Perform the initialization. */
5607 if (init)
5608 {
5609 int saved_stmts_are_full_exprs_p;
5610
5611 /* If we're only initializing a single object, guard the destructors
5612 of any temporaries used in its initializer with its destructor.
5613 This isn't right for arrays because each element initialization is
5614 a full-expression. */
5615 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5616 wrap_temporary_cleanups (init, cleanup);
5617
5618 gcc_assert (building_stmt_tree ());
5619 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5620 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5621 finish_expr_stmt (init);
5622 current_stmt_tree ()->stmts_are_full_exprs_p =
5623 saved_stmts_are_full_exprs_p;
27778b73 5624 }
24bef158 5625
a24549d4
JM
5626 /* Set this to 0 so we can tell whether an aggregate which was
5627 initialized was ever used. Don't do this if it has a
5628 destructor, so we don't complain about the 'resource
5629 allocation is initialization' idiom. Now set
5630 attribute((unused)) on types so decls of that type will be
5631 marked used. (see TREE_USED, above.) */
5632 if (TYPE_NEEDS_CONSTRUCTING (type)
5633 && ! already_used
5634 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5635 && DECL_NAME (decl))
5636 TREE_USED (decl) = 0;
5637 else if (already_used)
5638 TREE_USED (decl) = 1;
5639
5640 if (cleanup)
170b020f 5641 finish_decl_cleanup (decl, cleanup);
24bef158
MM
5642}
5643
19c29b2f
MM
5644/* DECL is a VAR_DECL for a compiler-generated variable with static
5645 storage duration (like a virtual table) whose initializer is a
9d6a019c 5646 compile-time constant. Initialize the variable and provide it to the
3b2db49f 5647 back end. */
19c29b2f
MM
5648
5649void
9d6a019c 5650initialize_artificial_var (tree decl, VEC(constructor_elt,gc) *v)
19c29b2f 5651{
9d6a019c 5652 tree init;
d23f3d60 5653 gcc_assert (DECL_ARTIFICIAL (decl));
9d6a019c 5654 init = build_constructor (TREE_TYPE (decl), v);
3b2db49f
MM
5655 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5656 DECL_INITIAL (decl) = init;
19c29b2f
MM
5657 DECL_INITIALIZED_P (decl) = 1;
5658 determine_visibility (decl);
5659 layout_var_decl (decl);
5660 maybe_commonize_var (decl);
5661 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5662}
5663
32a11c08
MM
5664/* INIT is the initializer for a variable, as represented by the
5665 parser. Returns true iff INIT is value-dependent. */
5666
5667static bool
5668value_dependent_init_p (tree init)
5669{
5670 if (TREE_CODE (init) == TREE_LIST)
5671 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5672 return any_value_dependent_elements_p (init);
5673 else if (TREE_CODE (init) == CONSTRUCTOR)
5674 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5675 {
5676 VEC(constructor_elt, gc) *elts;
5677 size_t nelts;
5678 size_t i;
5679
5680 elts = CONSTRUCTOR_ELTS (init);
5681 nelts = VEC_length (constructor_elt, elts);
5682 for (i = 0; i < nelts; ++i)
5683 if (value_dependent_init_p (VEC_index (constructor_elt,
5684 elts, i)->value))
5685 return true;
5686 }
5687 else
5688 /* It must be a simple expression, e.g., int i = 3; */
5689 return value_dependent_expression_p (init);
5690
5691 return false;
5692}
5693
8d08fdba
MS
5694/* Finish processing of a declaration;
5695 install its line number and initial value.
5696 If the length of an array type is not known before,
5697 it must be determined now, from the initial value, or it is an error.
5698
d174af6c
MM
5699 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
5700 true, then INIT is an integral constant expression.
8d08fdba 5701
920f9474 5702 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
f78c7bc6 5703 if the (init) syntax was used. */
8d08fdba
MS
5704
5705void
3db45ab5 5706cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
d174af6c 5707 tree asmspec_tree, int flags)
8d08fdba 5708{
7e99327d 5709 tree type;
7e99327d 5710 tree cleanup;
9c0758dd 5711 const char *asmspec = NULL;
8d08fdba 5712 int was_readonly = 0;
745d26d9 5713 bool var_definition_p = false;
2b643eda 5714 int saved_processing_template_decl;
86a09a9e 5715 tree auto_node;
8d08fdba 5716
11325dcd
KL
5717 if (decl == error_mark_node)
5718 return;
5719 else if (! decl)
8d08fdba
MS
5720 {
5721 if (init)
8251199e 5722 error ("assignment (not initialization) in declaration");
8d08fdba
MS
5723 return;
5724 }
5725
50bc768d 5726 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
2b643eda
MM
5727 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5728 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5729
5730 type = TREE_TYPE (decl);
5731 if (type == error_mark_node)
5732 return;
170b020f 5733
7e99327d
MM
5734 /* Assume no cleanup is required. */
5735 cleanup = NULL_TREE;
2b643eda 5736 saved_processing_template_decl = processing_template_decl;
7e99327d 5737
a4443a08 5738 /* If a name was specified, get the string. */
5f52c0e0 5739 if (global_scope_p (current_binding_level))
41c64394 5740 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4f543d15 5741 if (asmspec_tree && asmspec_tree != error_mark_node)
5cc90635 5742 asmspec = TREE_STRING_POINTER (asmspec_tree);
8d08fdba 5743
6ba89f8e 5744 if (current_class_type
4f1c5b7d 5745 && CP_DECL_CONTEXT (decl) == current_class_type
6ba89f8e
MM
5746 && TYPE_BEING_DEFINED (current_class_type)
5747 && (DECL_INITIAL (decl) || init))
3febd123 5748 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6ba89f8e 5749
86a09a9e 5750 auto_node = type_uses_auto (type);
0a3098bb 5751 if (auto_node)
86a09a9e 5752 {
be2b93e6 5753 tree d_init;
0a3098bb
JJ
5754 if (init == NULL_TREE)
5755 {
5756 error ("declaration of %q#D has no initializer", decl);
5757 TREE_TYPE (decl) = error_mark_node;
5758 return;
5759 }
be2b93e6
JM
5760 d_init = init;
5761 if (TREE_CODE (d_init) == TREE_LIST)
5762 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
5763 tf_warning_or_error);
2e5748d2 5764 d_init = resolve_nondeduced_context (d_init);
be2b93e6 5765 if (describable_type (d_init))
0a3098bb 5766 {
be2b93e6
JM
5767 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
5768 auto_node);
0a3098bb
JJ
5769 if (type == error_mark_node)
5770 return;
5771 }
86a09a9e
JM
5772 }
5773
91ea6df3
GDR
5774 if (TREE_CODE (decl) == FUNCTION_DECL)
5775 validate_constexpr_fundecl (decl);
5776
5777 else if (!ensure_literal_type_for_constexpr_object (decl))
5778 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
5779
3f6079dd
JM
5780 if (init && TREE_CODE (decl) == FUNCTION_DECL)
5781 {
2968d410 5782 tree clone;
3f6079dd
JM
5783 if (init == ridpointers[(int)RID_DELETE])
5784 {
5785 /* FIXME check this is 1st decl. */
5786 DECL_DELETED_FN (decl) = 1;
5787 DECL_DECLARED_INLINE_P (decl) = 1;
5788 DECL_INITIAL (decl) = error_mark_node;
2968d410
JM
5789 FOR_EACH_CLONE (clone, decl)
5790 {
5791 DECL_DELETED_FN (clone) = 1;
5792 DECL_DECLARED_INLINE_P (clone) = 1;
5793 DECL_INITIAL (clone) = error_mark_node;
5794 }
3f6079dd
JM
5795 init = NULL_TREE;
5796 }
5797 else if (init == ridpointers[(int)RID_DEFAULT])
5798 {
20f2653e
JM
5799 if (defaultable_fn_check (decl))
5800 DECL_DEFAULTED_FN (decl) = 1;
3f6079dd 5801 else
20f2653e 5802 DECL_INITIAL (decl) = NULL_TREE;
3f6079dd
JM
5803 }
5804 }
fa2200cb
JM
5805
5806 if (init && TREE_CODE (decl) == VAR_DECL)
5807 {
5808 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5809 /* FIXME we rely on TREE_CONSTANT below; basing that on
5810 init_const_expr_p is probably wrong for C++0x. */
5811 if (init_const_expr_p)
5812 {
5813 /* Set these flags now for C++98 templates. We'll update the
5814 flags in store_init_value for instantiations and C++0x. */
5815 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5816 if (decl_maybe_constant_var_p (decl))
5817 TREE_CONSTANT (decl) = 1;
5818 }
5819 }
5820
5156628f 5821 if (processing_template_decl)
5566b478 5822 {
2b643eda
MM
5823 bool type_dependent_p;
5824
08ac397c 5825 /* Add this declaration to the statement-tree. */
170b020f 5826 if (at_function_scope_p ())
350fae66 5827 add_decl_expr (decl);
08ac397c 5828
2b643eda
MM
5829 type_dependent_p = dependent_type_p (type);
5830
7b3e2d46
DG
5831 if (check_for_bare_parameter_packs (init))
5832 {
5833 init = NULL_TREE;
5834 DECL_INITIAL (decl) = NULL_TREE;
5835 }
5836
32a11c08 5837 /* Generally, initializers in templates are expanded when the
fa2200cb
JM
5838 template is instantiated. But, if DECL is a variable constant
5839 then it can be used in future constant expressions, so its value
5840 must be available. */
32a11c08
MM
5841 if (!(init
5842 && DECL_CLASS_SCOPE_P (decl)
fa2200cb
JM
5843 /* We just set TREE_CONSTANT appropriately; see above. */
5844 && TREE_CONSTANT (decl)
32a11c08 5845 && !type_dependent_p
fa2200cb 5846 /* FIXME non-value-dependent constant expression */
32a11c08 5847 && !value_dependent_init_p (init)))
2b643eda
MM
5848 {
5849 if (init)
5850 DECL_INITIAL (decl) = init;
5851 if (TREE_CODE (decl) == VAR_DECL
5852 && !DECL_PRETTY_FUNCTION_P (decl)
5853 && !type_dependent_p)
5854 maybe_deduce_size_from_array_init (decl, init);
5855 goto finish_end;
5856 }
c8094d83 5857
a125de0c
PC
5858 if (TREE_CODE (init) == TREE_LIST)
5859 {
5860 /* If the parenthesized-initializer form was used (e.g.,
5861 "int A<N>::i(X)"), then INIT will be a TREE_LIST of initializer
5862 arguments. (There is generally only one.) We convert them
5863 individually. */
5864 tree list = init;
5865 for (; list; list = TREE_CHAIN (list))
5866 {
5867 tree elt = TREE_VALUE (list);
5868 TREE_VALUE (list) = fold_non_dependent_expr (elt);
5869 }
5870 }
5871 else
5872 init = fold_non_dependent_expr (init);
2b643eda 5873 processing_template_decl = 0;
5566b478 5874 }
3e41d13b 5875
8d08fdba
MS
5876 /* Take care of TYPE_DECLs up front. */
5877 if (TREE_CODE (decl) == TYPE_DECL)
5878 {
a0a33927 5879 if (type != error_mark_node
9e1e64ec 5880 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
8d08fdba
MS
5881 {
5882 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
d4ee4d25 5883 warning (0, "shadowing previous type declaration of %q#D", decl);
4b0d3cbe 5884 set_identifier_type_value (DECL_NAME (decl), decl);
8d08fdba 5885 }
cffa8729
MS
5886
5887 /* If we have installed this as the canonical typedef for this
5888 type, and that type has not been defined yet, delay emitting
956d6950 5889 the debug information for it, as we will emit it later. */
d2e5ee5c 5890 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
d0f062fb 5891 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
cffa8729
MS
5892 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5893
725214ac 5894 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
0e6df31e 5895 at_eof);
8d08fdba
MS
5896 goto finish_end;
5897 }
3e41d13b 5898
67935995 5899 /* A reference will be modified here, as it is initialized. */
c8094d83 5900 if (! DECL_EXTERNAL (decl)
67935995
MM
5901 && TREE_READONLY (decl)
5902 && TREE_CODE (type) == REFERENCE_TYPE)
8d08fdba 5903 {
8d08fdba 5904 was_readonly = 1;
67935995 5905 TREE_READONLY (decl) = 0;
8d08fdba
MS
5906 }
5907
437081d7 5908 if (TREE_CODE (decl) == VAR_DECL)
17bbb839 5909 {
c32097d8
JM
5910 /* Only variables with trivial initialization and destruction can
5911 have thread-local storage. */
5912 if (DECL_THREAD_LOCAL_P (decl)
5913 && (type_has_nontrivial_default_init (TREE_TYPE (decl))
5914 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
5915 error ("%qD cannot be thread-local because it has non-trivial "
5916 "type %qT", decl, TREE_TYPE (decl));
d23f3d60
MM
5917 /* If this is a local variable that will need a mangled name,
5918 register it now. We must do this before processing the
5919 initializer for the variable, since the initialization might
5920 require a guard variable, and since the mangled name of the
5921 guard variable will depend on the mangled name of this
5922 variable. */
b0eb6a8f 5923 if (DECL_FUNCTION_SCOPE_P (decl)
d23f3d60
MM
5924 && TREE_STATIC (decl)
5925 && !DECL_ARTIFICIAL (decl))
e6ca6e2a
JM
5926 {
5927 push_local_name (decl);
5928 if (DECL_CONSTRUCTOR_P (current_function_decl)
5929 || DECL_DESTRUCTOR_P (current_function_decl))
5930 /* Normally local_decls is populated during GIMPLE lowering,
5931 but [cd]tors are never actually compiled directly. We need
5932 to put statics on the list so we can deal with the label
5933 address extension. */
c021f10b 5934 add_local_decl (cfun, decl);
e6ca6e2a
JM
5935 }
5936
17bbb839
MM
5937 /* Convert the initializer to the type of DECL, if we have not
5938 already initialized DECL. */
5939 if (!DECL_INITIALIZED_P (decl)
5940 /* If !DECL_EXTERNAL then DECL is being defined. In the
8e3df2de 5941 case of a static data member initialized inside the
17bbb839
MM
5942 class-specifier, there can be an initializer even if DECL
5943 is *not* defined. */
5944 && (!DECL_EXTERNAL (decl) || init))
5945 {
9e1e64ec 5946 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
360f866c
JJ
5947 {
5948 tree jclass
5949 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
5950 /* Allow libjava/prims.cc define primitive classes. */
5951 if (init != NULL_TREE
5952 || jclass == NULL_TREE
5953 || TREE_CODE (jclass) != TYPE_DECL
5954 || !POINTER_TYPE_P (TREE_TYPE (jclass))
5955 || !same_type_ignoring_top_level_qualifiers_p
5956 (type, TREE_TYPE (TREE_TYPE (jclass))))
5957 error ("Java object %qD not allocated with %<new%>", decl);
5958 init = NULL_TREE;
5959 }
7e99327d 5960 init = check_initializer (decl, init, flags, &cleanup);
b4c20e52 5961 /* Thread-local storage cannot be dynamically initialized. */
c2f7fa15 5962 if (DECL_THREAD_LOCAL_P (decl) && init)
b4c20e52 5963 {
2d01edd7 5964 error ("%qD is thread-local and so cannot be dynamically "
b4c20e52
MM
5965 "initialized", decl);
5966 init = NULL_TREE;
5967 }
b794e321
MM
5968
5969 /* Check that the initializer for a static data member was a
1634705d 5970 constant. Although we check in the parser that the
b794e321
MM
5971 initializer is an integral constant expression, we do not
5972 simplify division-by-zero at the point at which it
5973 occurs. Therefore, in:
5974
5975 struct S { static const int i = 7 / 0; };
3db45ab5 5976
b794e321
MM
5977 we issue an error at this point. It would
5978 probably be better to forbid division by zero in
5979 integral constant expressions. */
8fe4d24b
NS
5980 if (DECL_EXTERNAL (decl) && init)
5981 {
8fe4d24b
NS
5982 error ("%qD cannot be initialized by a non-constant expression"
5983 " when being declared", decl);
5984 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5985 init = NULL_TREE;
5986 }
c8094d83 5987
17bbb839 5988 /* Handle:
caf93cb0 5989
17bbb839 5990 [dcl.init]
caf93cb0 5991
17bbb839
MM
5992 The memory occupied by any object of static storage
5993 duration is zero-initialized at program startup before
5994 any other initialization takes place.
caf93cb0 5995
17bbb839
MM
5996 We cannot create an appropriate initializer until after
5997 the type of DECL is finalized. If DECL_INITIAL is set,
5998 then the DECL is statically initialized, and any
5999 necessary zero-initialization has already been performed. */
6000 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6001 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
1cb8292f 6002 /*nelts=*/NULL_TREE,
17bbb839
MM
6003 /*static_storage_p=*/true);
6004 /* Remember that the initialization for this variable has
6005 taken place. */
6006 DECL_INITIALIZED_P (decl) = 1;
745d26d9
MM
6007 /* This declaration is the definition of this variable,
6008 unless we are initializing a static data member within
6009 the class specifier. */
6010 if (!DECL_EXTERNAL (decl))
6011 var_definition_p = true;
17bbb839 6012 }
d881ff25
MM
6013 /* If the variable has an array type, lay out the type, even if
6014 there is no initializer. It is valid to index through the
6015 array, and we must get TYPE_ALIGN set correctly on the array
6016 type. */
6017 else if (TREE_CODE (type) == ARRAY_TYPE)
6018 layout_type (type);
b646ba3f
DS
6019
6020 if (!processing_template_decl
6021 && TREE_STATIC (decl)
6022 && !at_function_scope_p ()
6023 && current_function_decl == NULL)
6024 /* So decl is a global variable or a static member of a
6025 non local class. Record the types it uses
6026 so that we can decide later to emit debug info for them. */
6027 record_types_used_by_current_var_decl (decl);
17bbb839 6028 }
360f866c 6029 else if (TREE_CODE (decl) == FIELD_DECL
9e1e64ec 6030 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
360f866c 6031 error ("non-static data member %qD has Java class type", decl);
3e41d13b 6032
57cf57fb 6033 /* Add this declaration to the statement-tree. This needs to happen
350fae66
RK
6034 after the call to check_initializer so that the DECL_EXPR for a
6035 reference temp is added before the DECL_EXPR for the reference itself. */
170b020f 6036 if (at_function_scope_p ())
350fae66 6037 add_decl_expr (decl);
08ac397c 6038
da71e18c
MM
6039 /* Let the middle end know about variables and functions -- but not
6040 static data members in uninstantiated class templates. */
6041 if (!saved_processing_template_decl
6042 && (TREE_CODE (decl) == VAR_DECL
6043 || TREE_CODE (decl) == FUNCTION_DECL))
8d08fdba 6044 {
27778b73 6045 if (TREE_CODE (decl) == VAR_DECL)
da71e18c
MM
6046 {
6047 layout_var_decl (decl);
6048 maybe_commonize_var (decl);
6049 }
8d08fdba 6050
4c5bae34
RS
6051 /* This needs to happen after the linkage is set. */
6052 determine_visibility (decl);
6053
b0eb6a8f
JJ
6054 if (var_definition_p && TREE_STATIC (decl))
6055 {
6056 /* If a TREE_READONLY variable needs initialization
6057 at runtime, it is no longer readonly and we need to
6058 avoid MEM_READONLY_P being set on RTL created for it. */
6059 if (init)
6060 {
6061 if (TREE_READONLY (decl))
6062 TREE_READONLY (decl) = 0;
6063 was_readonly = 0;
6064 }
6065 else if (was_readonly)
6066 TREE_READONLY (decl) = 1;
6067 }
6068
27778b73 6069 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8d08fdba 6070
7fb213d8
GB
6071 /* Check for abstractness of the type. Notice that there is no
6072 need to strip array types here since the check for those types
6073 is already done within create_array_type_for_decl. */
68642fb6 6074 if (TREE_CODE (type) == FUNCTION_TYPE
27778b73 6075 || TREE_CODE (type) == METHOD_TYPE)
7fb213d8 6076 abstract_virtuals_error (decl, TREE_TYPE (type));
68642fb6 6077 else
cfb91b67 6078 abstract_virtuals_error (decl, type);
8d08fdba 6079
b87d79e6 6080 if (TREE_TYPE (decl) == error_mark_node)
8e3df2de 6081 /* No initialization required. */
faae18ab 6082 ;
b87d79e6
JM
6083 else if (TREE_CODE (decl) == FUNCTION_DECL)
6084 {
6085 if (init)
6086 {
3f6079dd 6087 if (init == ridpointers[(int)RID_DEFAULT])
b87d79e6 6088 {
3f6079dd
JM
6089 /* An out-of-class default definition is defined at
6090 the point where it is explicitly defaulted. */
6091 if (DECL_INITIAL (decl) == error_mark_node)
6092 synthesize_method (decl);
b87d79e6
JM
6093 }
6094 else
6095 error ("function %q#D is initialized like a variable", decl);
6096 }
6097 /* else no initialization required. */
6098 }
67d743fe
MS
6099 else if (DECL_EXTERNAL (decl)
6100 && ! (DECL_LANG_SPECIFIC (decl)
6101 && DECL_NOT_REALLY_EXTERN (decl)))
5566b478
MS
6102 {
6103 if (init)
6104 DECL_INITIAL (decl) = init;
6105 }
b0eb6a8f
JJ
6106 /* A variable definition. */
6107 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6108 /* Initialize the local variable. */
6109 initialize_local_var (decl, init);
6110
6111 /* If a variable is defined, and then a subsequent
6112 definition with external linkage is encountered, we will
6113 get here twice for the same variable. We want to avoid
6114 calling expand_static_init more than once. For variables
6115 that are not static data members, we can call
6116 expand_static_init only when we actually process the
6117 initializer. It is not legal to redeclare a static data
6118 member, so this issue does not arise in that case. */
6119 else if (var_definition_p && TREE_STATIC (decl))
6120 expand_static_init (decl, init);
8d08fdba
MS
6121 }
6122
7e99327d
MM
6123 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6124 reference, insert it in the statement-tree now. */
6125 if (cleanup)
325c3691 6126 push_cleanup (decl, cleanup, false);
7e99327d 6127
8d08fdba 6128 finish_end:
2b643eda 6129 processing_template_decl = saved_processing_template_decl;
8d08fdba 6130
8d08fdba
MS
6131 if (was_readonly)
6132 TREE_READONLY (decl) = 1;
8d08fdba
MS
6133}
6134
db4283a0
MM
6135/* Returns a declaration for a VAR_DECL as if:
6136
6137 extern "C" TYPE NAME;
6138
6139 had been seen. Used to create compiler-generated global
6140 variables. */
6141
993acaec 6142static tree
11f6b451 6143declare_global_var (tree name, tree type)
db4283a0
MM
6144{
6145 tree decl;
6146
6147 push_to_top_level ();
c2255bc4 6148 decl = build_decl (input_location, VAR_DECL, name, type);
db4283a0
MM
6149 TREE_PUBLIC (decl) = 1;
6150 DECL_EXTERNAL (decl) = 1;
6151 DECL_ARTIFICIAL (decl) = 1;
de3fe73c
MM
6152 /* If the user has explicitly declared this variable (perhaps
6153 because the code we are compiling is part of a low-level runtime
6154 library), then it is possible that our declaration will be merged
6155 with theirs by pushdecl. */
6156 decl = pushdecl (decl);
3600f678 6157 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
db4283a0
MM
6158 pop_from_top_level ();
6159
6160 return decl;
6161}
6162
46a9e521
MM
6163/* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6164 if "__cxa_atexit" is not being used) corresponding to the function
6165 to be called when the program exits. */
6166
6167static tree
6168get_atexit_fn_ptr_type (void)
6169{
46a9e521
MM
6170 tree fn_type;
6171
6172 if (!atexit_fn_ptr_type_node)
6173 {
0244e6f7 6174 tree arg_type;
46a9e521
MM
6175 if (flag_use_cxa_atexit
6176 && !targetm.cxx.use_atexit_for_cxa_atexit ())
6177 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
0244e6f7 6178 arg_type = ptr_type_node;
46a9e521
MM
6179 else
6180 /* The parameter to "atexit" is "void (*)(void)". */
0244e6f7 6181 arg_type = NULL_TREE;
46a9e521 6182
0244e6f7
NF
6183 fn_type = build_function_type_list (void_type_node,
6184 arg_type, NULL_TREE);
46a9e521
MM
6185 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6186 }
6187
6188 return atexit_fn_ptr_type_node;
6189}
6190
db4283a0 6191/* Returns a pointer to the `atexit' function. Note that if
838dfd8a 6192 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
db4283a0
MM
6193 `__cxa_atexit' function specified in the IA64 C++ ABI. */
6194
6195static tree
11f6b451 6196get_atexit_node (void)
db4283a0
MM
6197{
6198 tree atexit_fndecl;
db4283a0
MM
6199 tree fn_type;
6200 tree fn_ptr_type;
6201 const char *name;
9f62c3e3 6202 bool use_aeabi_atexit;
db4283a0
MM
6203
6204 if (atexit_node)
6205 return atexit_node;
6206
97388150 6207 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
db4283a0
MM
6208 {
6209 /* The declaration for `__cxa_atexit' is:
6210
6211 int __cxa_atexit (void (*)(void *), void *, void *)
6212
085c1b47 6213 We build up the argument types and then the function type
db4283a0 6214 itself. */
0244e6f7 6215 tree argtype0, argtype1, argtype2;
68642fb6 6216
9f62c3e3 6217 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
db4283a0
MM
6218 /* First, build the pointer-to-function type for the first
6219 argument. */
46a9e521 6220 fn_ptr_type = get_atexit_fn_ptr_type ();
db4283a0 6221 /* Then, build the rest of the argument types. */
0244e6f7 6222 argtype2 = ptr_type_node;
9f62c3e3
PB
6223 if (use_aeabi_atexit)
6224 {
0244e6f7
NF
6225 argtype1 = fn_ptr_type;
6226 argtype0 = ptr_type_node;
9f62c3e3
PB
6227 }
6228 else
6229 {
0244e6f7
NF
6230 argtype1 = ptr_type_node;
6231 argtype0 = fn_ptr_type;
9f62c3e3 6232 }
db4283a0 6233 /* And the final __cxa_atexit type. */
0244e6f7
NF
6234 fn_type = build_function_type_list (integer_type_node,
6235 argtype0, argtype1, argtype2,
6236 NULL_TREE);
db4283a0 6237 fn_ptr_type = build_pointer_type (fn_type);
9f62c3e3
PB
6238 if (use_aeabi_atexit)
6239 name = "__aeabi_atexit";
6240 else
6241 name = "__cxa_atexit";
db4283a0
MM
6242 }
6243 else
6244 {
6245 /* The declaration for `atexit' is:
68642fb6 6246
0cbd7506 6247 int atexit (void (*)());
db4283a0 6248
085c1b47 6249 We build up the argument types and then the function type
db4283a0 6250 itself. */
46a9e521 6251 fn_ptr_type = get_atexit_fn_ptr_type ();
db4283a0 6252 /* Build the final atexit type. */
0244e6f7
NF
6253 fn_type = build_function_type_list (integer_type_node,
6254 fn_ptr_type, NULL_TREE);
db4283a0
MM
6255 name = "atexit";
6256 }
6257
6258 /* Now, build the function declaration. */
6259 push_lang_context (lang_name_c);
0c11ada6 6260 atexit_fndecl = build_library_fn_ptr (name, fn_type);
db4283a0
MM
6261 mark_used (atexit_fndecl);
6262 pop_lang_context ();
0a72704b 6263 atexit_node = decay_conversion (atexit_fndecl);
db4283a0
MM
6264
6265 return atexit_node;
6266}
6267
6268/* Returns the __dso_handle VAR_DECL. */
6269
6270static tree
11f6b451 6271get_dso_handle_node (void)
db4283a0
MM
6272{
6273 if (dso_handle_node)
6274 return dso_handle_node;
6275
6276 /* Declare the variable. */
6277 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6278 ptr_type_node);
6279
6280 return dso_handle_node;
6281}
6282
6283/* Begin a new function with internal linkage whose job will be simply
6284 to destroy some particular variable. */
6285
d192828a
GK
6286static GTY(()) int start_cleanup_cnt;
6287
db4283a0 6288static tree
11f6b451 6289start_cleanup_fn (void)
db4283a0 6290{
db4283a0 6291 char name[32];
db4283a0
MM
6292 tree fntype;
6293 tree fndecl;
97388150
DS
6294 bool use_cxa_atexit = flag_use_cxa_atexit
6295 && !targetm.cxx.use_atexit_for_cxa_atexit ();
db4283a0
MM
6296
6297 push_to_top_level ();
6298
6299 /* No need to mangle this. */
6300 push_lang_context (lang_name_c);
6301
db4283a0 6302 /* Build the name of the function. */
d192828a 6303 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
db4283a0 6304 /* Build the function declaration. */
46a9e521 6305 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
db4283a0
MM
6306 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6307 /* It's a function with internal linkage, generated by the
6308 compiler. */
6309 TREE_PUBLIC (fndecl) = 0;
6310 DECL_ARTIFICIAL (fndecl) = 1;
5a728aca
MM
6311 /* Make the function `inline' so that it is only emitted if it is
6312 actually needed. It is unlikely that it will be inlined, since
aba649ba 6313 it is only called via a function pointer, but we avoid unnecessary
5a728aca 6314 emissions this way. */
3b14bb39 6315 DECL_DECLARED_INLINE_P (fndecl) = 1;
d4d1ebc1 6316 DECL_INTERFACE_KNOWN (fndecl) = 1;
db4283a0 6317 /* Build the parameter. */
97388150 6318 if (use_cxa_atexit)
db4283a0
MM
6319 {
6320 tree parmdecl;
6321
8e51619a 6322 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
db4283a0 6323 DECL_CONTEXT (parmdecl) = fndecl;
db4283a0 6324 TREE_USED (parmdecl) = 1;
03a904b5 6325 DECL_READ_P (parmdecl) = 1;
db4283a0
MM
6326 DECL_ARGUMENTS (fndecl) = parmdecl;
6327 }
6328
09ed39ad 6329 pushdecl (fndecl);
058b15c1 6330 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
db4283a0 6331
db4283a0
MM
6332 pop_lang_context ();
6333
6334 return current_function_decl;
6335}
6336
6337/* Finish the cleanup function begun by start_cleanup_fn. */
6338
6339static void
11f6b451 6340end_cleanup_fn (void)
db4283a0 6341{
8cd2462c 6342 expand_or_defer_fn (finish_function (0));
db4283a0
MM
6343
6344 pop_from_top_level ();
6345}
6346
bf419747
MM
6347/* Generate code to handle the destruction of DECL, an object with
6348 static storage duration. */
f0105ed3 6349
40aac948 6350tree
11f6b451 6351register_dtor_fn (tree decl)
f0105ed3 6352{
db4283a0 6353 tree cleanup;
f0105ed3 6354 tree compound_stmt;
db4283a0 6355 tree fcall;
46a9e521
MM
6356 tree type;
6357 bool use_dtor;
450f4293 6358 tree arg0, arg1 = NULL_TREE, arg2 = NULL_TREE;
f0105ed3 6359
46a9e521
MM
6360 type = TREE_TYPE (decl);
6361 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
40aac948 6362 return void_zero_node;
bf419747 6363
46a9e521
MM
6364 /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6365 a class object, we can just pass the destructor to
6366 "__cxa_atexit"; we don't have to build a temporary function to do
6367 the cleanup. */
6368 use_dtor = (flag_use_cxa_atexit
6369 && !targetm.cxx.use_atexit_for_cxa_atexit ()
6370 && CLASS_TYPE_P (type));
6371 if (use_dtor)
6372 {
6373 int idx;
6374
6375 /* Find the destructor. */
6376 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6377 gcc_assert (idx >= 0);
6378 cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6379 /* Make sure it is accessible. */
6380 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6381 }
6382 else
6383 {
6384 /* Call build_cleanup before we enter the anonymous function so
6385 that any access checks will be done relative to the current
6386 scope, rather than the scope of the anonymous function. */
6387 build_cleanup (decl);
6388
6389 /* Now start the function. */
6390 cleanup = start_cleanup_fn ();
6391
6392 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
6393 to the original function, rather than the anonymous one. That
6394 will make the back end think that nested functions are in use,
6395 which causes confusion. */
6396 push_deferring_access_checks (dk_no_check);
6397 fcall = build_cleanup (decl);
6398 pop_deferring_access_checks ();
6399
6400 /* Create the body of the anonymous function. */
6401 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6402 finish_expr_stmt (fcall);
6403 finish_compound_stmt (compound_stmt);
6404 end_cleanup_fn ();
6405 }
f0105ed3
MM
6406
6407 /* Call atexit with the cleanup function. */
bb4f6e6b 6408 mark_used (cleanup);
46a9e521 6409 cleanup = build_address (cleanup);
97388150 6410 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
db4283a0 6411 {
46a9e521
MM
6412 tree addr;
6413
6414 if (use_dtor)
6415 {
6416 /* We must convert CLEANUP to the type that "__cxa_atexit"
6417 expects. */
6418 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6419 /* "__cxa_atexit" will pass the address of DECL to the
6420 cleanup function. */
6421 mark_used (decl);
6422 addr = build_address (decl);
6423 /* The declared type of the parameter to "__cxa_atexit" is
6424 "void *". For plain "T*", we could just let the
5ade1ed2 6425 machinery in cp_build_function_call convert it -- but if the
46a9e521
MM
6426 type is "cv-qualified T *", then we need to convert it
6427 before passing it in, to avoid spurious errors. */
6428 addr = build_nop (ptr_type_node, addr);
6429 }
6430 else
6431 /* Since the cleanup functions we build ignore the address
6432 they're given, there's no reason to pass the actual address
6433 in, and, in general, it's cheaper to pass NULL than any
6434 other value. */
6435 addr = null_pointer_node;
93c0e0bb
JM
6436 arg2 = cp_build_addr_expr (get_dso_handle_node (),
6437 tf_warning_or_error);
9f62c3e3
PB
6438 if (targetm.cxx.use_aeabi_atexit ())
6439 {
450f4293
NF
6440 arg1 = cleanup;
6441 arg0 = addr;
9f62c3e3
PB
6442 }
6443 else
6444 {
450f4293
NF
6445 arg1 = addr;
6446 arg0 = cleanup;
9f62c3e3 6447 }
db4283a0
MM
6448 }
6449 else
450f4293
NF
6450 arg0 = cleanup;
6451 return cp_build_function_call_nary (get_atexit_node (), tf_warning_or_error,
6452 arg0, arg1, arg2, NULL_TREE);
f0105ed3
MM
6453}
6454
8e3df2de
MM
6455/* DECL is a VAR_DECL with static storage duration. INIT, if present,
6456 is its initializer. Generate code to handle the construction
6457 and destruction of DECL. */
6458
6459static void
11f6b451 6460expand_static_init (tree decl, tree init)
8d08fdba 6461{
50bc768d
NS
6462 gcc_assert (TREE_CODE (decl) == VAR_DECL);
6463 gcc_assert (TREE_STATIC (decl));
8e3df2de 6464
fa2200cb 6465 /* Some variables require no dynamic initialization. */
caf93cb0 6466 if (!init
8e3df2de
MM
6467 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6468 return;
6469
eba6cfb6 6470 if (DECL_FUNCTION_SCOPE_P (decl))
8d08fdba
MS
6471 {
6472 /* Emit code to perform this initialization but once. */
445cf5eb
JM
6473 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6474 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
94a0dd7b 6475 tree guard, guard_addr;
40aac948
JM
6476 tree acquire_fn, release_fn, abort_fn;
6477 tree flag, begin;
8d08fdba 6478
2036a15c
MM
6479 /* Emit code to perform this initialization but once. This code
6480 looks like:
6481
0cbd7506
MS
6482 static <type> guard;
6483 if (!guard.first_byte) {
40aac948
JM
6484 if (__cxa_guard_acquire (&guard)) {
6485 bool flag = false;
6486 try {
0cbd7506
MS
6487 // Do initialization.
6488 flag = true; __cxa_guard_release (&guard);
6489 // Register variable for destruction at end of program.
40aac948 6490 } catch {
0cbd7506 6491 if (!flag) __cxa_guard_abort (&guard);
40aac948 6492 }
2036a15c
MM
6493 }
6494
40aac948 6495 Note that the `flag' variable is only set to 1 *after* the
2036a15c
MM
6496 initialization is complete. This ensures that an exception,
6497 thrown during the construction, will cause the variable to
6498 reinitialized when we pass through this code again, as per:
68642fb6 6499
2036a15c
MM
6500 [stmt.dcl]
6501
c8094d83 6502 If the initialization exits by throwing an exception, the
2036a15c
MM
6503 initialization is not complete, so it will be tried again
6504 the next time control enters the declaration.
6505
0cbd7506 6506 This process should be thread-safe, too; multiple threads
40aac948
JM
6507 should not be able to initialize the variable more than
6508 once. */
c395453c
MM
6509
6510 /* Create the guard variable. */
6511 guard = get_guard (decl);
2036a15c 6512
445cf5eb
JM
6513 /* This optimization isn't safe on targets with relaxed memory
6514 consistency. On such targets we force synchronization in
6515 __cxa_guard_acquire. */
6516 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6517 {
6518 /* Begin the conditional initialization. */
6519 if_stmt = begin_if_stmt ();
6520 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6521 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6522 }
40aac948
JM
6523
6524 if (flag_threadsafe_statics)
6525 {
6526 guard_addr = build_address (guard);
40aac948
JM
6527
6528 acquire_fn = get_identifier ("__cxa_guard_acquire");
6529 release_fn = get_identifier ("__cxa_guard_release");
6530 abort_fn = get_identifier ("__cxa_guard_abort");
6531 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
6532 {
0244e6f7
NF
6533 tree vfntype = build_function_type_list (void_type_node,
6534 TREE_TYPE (guard_addr),
6535 NULL_TREE);
40aac948 6536 acquire_fn = push_library_fn
0244e6f7
NF
6537 (acquire_fn, build_function_type_list (integer_type_node,
6538 TREE_TYPE (guard_addr),
6539 NULL_TREE),
448083e5
PC
6540 NULL_TREE);
6541 release_fn = push_library_fn (release_fn, vfntype, NULL_TREE);
6542 abort_fn = push_library_fn (abort_fn, vfntype, NULL_TREE);
40aac948
JM
6543 }
6544 else
6545 {
6546 release_fn = identifier_global_value (release_fn);
6547 abort_fn = identifier_global_value (abort_fn);
6548 }
6549
6550 inner_if_stmt = begin_if_stmt ();
94a0dd7b 6551 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
40aac948
JM
6552 inner_if_stmt);
6553
6554 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6555 begin = get_target_expr (boolean_false_node);
6556 flag = TARGET_EXPR_SLOT (begin);
6557
6558 TARGET_EXPR_CLEANUP (begin)
81eba3a8
KH
6559 = build3 (COND_EXPR, void_type_node, flag,
6560 void_zero_node,
94a0dd7b 6561 build_call_n (abort_fn, 1, guard_addr));
40aac948
JM
6562 CLEANUP_EH_ONLY (begin) = 1;
6563
6564 /* Do the initialization itself. */
6565 init = add_stmt_to_compound (begin, init);
6566 init = add_stmt_to_compound
81eba3a8 6567 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
40aac948 6568 init = add_stmt_to_compound
94a0dd7b 6569 (init, build_call_n (release_fn, 1, guard_addr));
40aac948 6570 }
f1dedc31 6571 else
40aac948 6572 init = add_stmt_to_compound (init, set_guard (guard));
72b7eeff 6573
2036a15c
MM
6574 /* Use atexit to register a function for destroying this static
6575 variable. */
40aac948
JM
6576 init = add_stmt_to_compound (init, register_dtor_fn (decl));
6577
6578 finish_expr_stmt (init);
6579
6580 if (flag_threadsafe_statics)
6581 {
6582 finish_compound_stmt (inner_then_clause);
6583 finish_then_clause (inner_if_stmt);
6584 finish_if_stmt (inner_if_stmt);
6585 }
72b7eeff 6586
445cf5eb
JM
6587 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6588 {
6589 finish_compound_stmt (then_clause);
6590 finish_then_clause (if_stmt);
6591 finish_if_stmt (if_stmt);
6592 }
8d08fdba
MS
6593 }
6594 else
bbd15aac 6595 static_aggregates = tree_cons (init, decl, static_aggregates);
8d08fdba 6596}
3c5c0849 6597
8d08fdba
MS
6598\f
6599/* Make TYPE a complete type based on INITIAL_VALUE.
6600 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
07900878
PC
6601 2 if there was no information (in which case assume 0 if DO_DEFAULT),
6602 3 if the initializer list is empty (in pedantic mode). */
8d08fdba
MS
6603
6604int
aab038d5 6605cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8d08fdba 6606{
aab038d5
RH
6607 int failure;
6608 tree type, elt_type;
68642fb6 6609
8d08fdba
MS
6610 if (initial_value)
6611 {
49b5e2f6
DG
6612 unsigned HOST_WIDE_INT i;
6613 tree value;
6614
7b019c19 6615 /* An array of character type can be initialized from a
4038c495
GB
6616 brace-enclosed string constant.
6617
6618 FIXME: this code is duplicated from reshape_init. Probably
6619 we should just call reshape_init here? */
aab038d5 6620 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7b019c19 6621 && TREE_CODE (initial_value) == CONSTRUCTOR
4038c495
GB
6622 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6623 {
6624 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6625 tree value = VEC_index (constructor_elt, v, 0)->value;
6626
6627 if (TREE_CODE (value) == STRING_CST
6628 && VEC_length (constructor_elt, v) == 1)
6629 initial_value = value;
6630 }
49b5e2f6
DG
6631
6632 /* If any of the elements are parameter packs, we can't actually
6633 complete this type now because the array size is dependent. */
6634 if (TREE_CODE (initial_value) == CONSTRUCTOR)
6635 {
6636 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
6637 i, value)
6638 {
6639 if (PACK_EXPANSION_P (value))
6640 return 0;
6641 }
6642 }
8d08fdba
MS
6643 }
6644
aab038d5 6645 failure = complete_array_type (ptype, initial_value, do_default);
8d08fdba 6646
aab038d5
RH
6647 /* We can create the array before the element type is complete, which
6648 means that we didn't have these two bits set in the original type
6649 either. In completing the type, we are expected to propagate these
6650 bits. See also complete_type which does the same thing for arrays
6651 of fixed size. */
6652 type = *ptype;
6653 if (TYPE_DOMAIN (type))
8d08fdba 6654 {
81b4398d 6655 elt_type = TREE_TYPE (type);
aab038d5 6656 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
81b4398d 6657 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
aab038d5 6658 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8d08fdba
MS
6659 }
6660
aab038d5 6661 return failure;
8d08fdba
MS
6662}
6663\f
6664/* Return zero if something is declared to be a member of type
6665 CTYPE when in the context of CUR_TYPE. STRING is the error
6666 message to print in that case. Otherwise, quietly return 1. */
e92cc029 6667
8d08fdba 6668static int
11f6b451 6669member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8d08fdba
MS
6670{
6671 if (ctype && ctype != cur_type)
6672 {
4dacf5bd 6673 if (flags == DTOR_FLAG)
2d01edd7 6674 error ("destructor for alien class %qT cannot be a member", ctype);
4dacf5bd 6675 else
2d01edd7 6676 error ("constructor for alien class %qT cannot be a member", ctype);
8d08fdba
MS
6677 return 0;
6678 }
6679 return 1;
6680}
6681\f
6682/* Subroutine of `grokdeclarator'. */
6683
6684/* Generate errors possibly applicable for a given set of specifiers.
6685 This is for ARM $7.1.2. */
e92cc029 6686
8d08fdba 6687static void
11f6b451 6688bad_specifiers (tree object,
2f5b91f5 6689 enum bad_spec_place type,
0cbd7506
MS
6690 int virtualp,
6691 int quals,
6692 int inlinep,
6693 int friendp,
6694 int raises)
8d08fdba 6695{
2f5b91f5
SZ
6696 switch (type)
6697 {
6698 case BSP_VAR:
6699 if (virtualp)
6700 error ("%qD declared as a %<virtual%> variable", object);
6701 if (inlinep)
6702 error ("%qD declared as an %<inline%> variable", object);
6703 if (quals)
6704 error ("%<const%> and %<volatile%> function specifiers on "
6705 "%qD invalid in variable declaration", object);
6706 break;
6707 case BSP_PARM:
6708 if (virtualp)
6709 error ("%qD declared as a %<virtual%> parameter", object);
6710 if (inlinep)
6711 error ("%qD declared as an %<inline%> parameter", object);
6712 if (quals)
6713 error ("%<const%> and %<volatile%> function specifiers on "
6714 "%qD invalid in parameter declaration", object);
6715 break;
6716 case BSP_TYPE:
6717 if (virtualp)
6718 error ("%qD declared as a %<virtual%> type", object);
6719 if (inlinep)
6720 error ("%qD declared as an %<inline%> type", object);
6721 if (quals)
6722 error ("%<const%> and %<volatile%> function specifiers on "
6723 "%qD invalid in type declaration", object);
6724 break;
6725 case BSP_FIELD:
6726 if (virtualp)
6727 error ("%qD declared as a %<virtual%> field", object);
6728 if (inlinep)
6729 error ("%qD declared as an %<inline%> field", object);
6730 if (quals)
6731 error ("%<const%> and %<volatile%> function specifiers on "
6732 "%qD invalid in field declaration", object);
6733 break;
6734 default:
6735 gcc_unreachable();
6736 }
8d08fdba 6737 if (friendp)
dee15844 6738 error ("%q+D declared as a friend", object);
e1be26f4
RS
6739 if (raises
6740 && (TREE_CODE (object) == TYPE_DECL
6741 || (!TYPE_PTRFN_P (TREE_TYPE (object))
742a37d5 6742 && !TYPE_REFFN_P (TREE_TYPE (object))
e1be26f4 6743 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
dee15844 6744 error ("%q+D declared with an exception specification", object);
8d08fdba
MS
6745}
6746
9c12301f
MM
6747/* DECL is a member function or static data member and is presently
6748 being defined. Check that the definition is taking place in a
6749 valid namespace. */
6750
6751static void
6752check_class_member_definition_namespace (tree decl)
6753{
6754 /* These checks only apply to member functions and static data
6755 members. */
6756 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6757 || TREE_CODE (decl) == VAR_DECL);
6758 /* We check for problems with specializations in pt.c in
6759 check_specialization_namespace, where we can issue better
6760 diagnostics. */
6761 if (processing_specialization)
6762 return;
6763 /* There are no restrictions on the placement of
6764 explicit instantiations. */
6765 if (processing_explicit_instantiation)
6766 return;
6767 /* [class.mfct]
6768
6769 A member function definition that appears outside of the
6770 class definition shall appear in a namespace scope enclosing
6771 the class definition.
6772
6773 [class.static.data]
6774
6775 The definition for a static data member shall appear in a
6776 namespace scope enclosing the member's class definition. */
6777 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
cbe5f3b3 6778 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
37ec60ed 6779 decl, DECL_CONTEXT (decl));
9c12301f
MM
6780}
6781
e2537f2c
MM
6782/* Build a PARM_DECL for the "this" parameter. TYPE is the
6783 METHOD_TYPE for a non-static member function; QUALS are the
6784 cv-qualifiers that apply to the function. */
3db45ab5 6785
e2537f2c
MM
6786tree
6787build_this_parm (tree type, cp_cv_quals quals)
6788{
6789 tree this_type;
6790 tree qual_type;
6791 tree parm;
6792 cp_cv_quals this_quals;
6793
6794 this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
6795 /* The `this' parameter is implicitly `const'; it cannot be
6796 assigned to. */
6797 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
6798 qual_type = cp_build_qualified_type (this_type, this_quals);
6799 parm = build_artificial_parm (this_identifier, qual_type);
6800 cp_apply_type_quals_to_decl (this_quals, parm);
6801 return parm;
3db45ab5 6802}
e2537f2c 6803
8d08fdba
MS
6804/* CTYPE is class type, or null if non-class.
6805 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
6806 or METHOD_TYPE.
6807 DECLARATOR is the function's name.
4546865e 6808 PARMS is a chain of PARM_DECLs for the function.
8d08fdba
MS
6809 VIRTUALP is truthvalue of whether the function is virtual or not.
6810 FLAGS are to be passed through to `grokclassfn'.
6811 QUALS are qualifiers indicating whether the function is `const'
6812 or `volatile'.
6813 RAISES is a list of exceptions that this function can raise.
6814 CHECK is 1 if we must find this method in CTYPE, 0 if we should
68642fb6 6815 not look, and -1 if we should not call `grokclassfn' at all.
3ddfb0e6 6816
27d6592c
MM
6817 SFK is the kind of special function (if any) for the new function.
6818
20496fa2 6819 Returns `NULL_TREE' if something goes wrong, after issuing
3ddfb0e6 6820 applicable error messages. */
e92cc029 6821
8d08fdba 6822static tree
caf93cb0 6823grokfndecl (tree ctype,
0cbd7506
MS
6824 tree type,
6825 tree declarator,
4546865e 6826 tree parms,
0cbd7506
MS
6827 tree orig_declarator,
6828 int virtualp,
6829 enum overload_flags flags,
3c01e5df 6830 cp_cv_quals quals,
0cbd7506
MS
6831 tree raises,
6832 int check,
6833 int friendp,
6834 int publicp,
6835 int inlinep,
27d6592c 6836 special_function_kind sfk,
357d956e 6837 bool funcdef_flag,
0cbd7506
MS
6838 int template_count,
6839 tree in_namespace,
402b8cf6
AH
6840 tree* attrlist,
6841 location_t location)
8d08fdba 6842{
1951a1b6 6843 tree decl;
8d08fdba 6844 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
42976354 6845 tree t;
8d08fdba 6846
8d08fdba 6847 if (raises)
271e6f02 6848 type = build_exception_variant (type, raises);
c11b6f21 6849
8d08fdba 6850 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
402b8cf6
AH
6851
6852 /* If we have an explicit location, use it, otherwise use whatever
6853 build_lang_decl used (probably input_location). */
6854 if (location != UNKNOWN_LOCATION)
6855 DECL_SOURCE_LOCATION (decl) = location;
6856
e2537f2c
MM
6857 if (TREE_CODE (type) == METHOD_TYPE)
6858 {
6859 tree parm;
6860 parm = build_this_parm (type, quals);
910ad8de 6861 DECL_CHAIN (parm) = parms;
e2537f2c
MM
6862 parms = parm;
6863 }
4546865e 6864 DECL_ARGUMENTS (decl) = parms;
910ad8de 6865 for (t = parms; t; t = DECL_CHAIN (t))
448545cb 6866 DECL_CONTEXT (t) = decl;
a1c65f9f 6867 /* Propagate volatile out from type to decl. */
8d08fdba 6868 if (TYPE_VOLATILE (type))
893de33c 6869 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba 6870
71aea5f2
SM
6871 /* Setup decl according to sfk. */
6872 switch (sfk)
6873 {
6874 case sfk_constructor:
6875 case sfk_copy_constructor:
d5f4eddd 6876 case sfk_move_constructor:
71aea5f2
SM
6877 DECL_CONSTRUCTOR_P (decl) = 1;
6878 break;
6879 case sfk_destructor:
6880 DECL_DESTRUCTOR_P (decl) = 1;
6881 break;
6882 default:
6883 break;
6884 }
6885
837edd5f
GK
6886 /* If pointers to member functions use the least significant bit to
6887 indicate whether a function is virtual, ensure a pointer
6888 to this function will have that bit clear. */
6889 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6890 && TREE_CODE (type) == METHOD_TYPE
6891 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
6892 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
6893
abc088aa
MM
6894 if (friendp
6895 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
6896 {
6897 if (funcdef_flag)
6898 error
6899 ("defining explicit specialization %qD in friend declaration",
6900 orig_declarator);
6901 else
6902 {
6903 tree fns = TREE_OPERAND (orig_declarator, 0);
6904 tree args = TREE_OPERAND (orig_declarator, 1);
6905
6906 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
6907 {
6908 /* Something like `template <class T> friend void f<T>()'. */
6909 error ("invalid use of template-id %qD in declaration "
6910 "of primary template",
6911 orig_declarator);
6912 return NULL_TREE;
6913 }
6914
6915
6916 /* A friend declaration of the form friend void f<>(). Record
6917 the information in the TEMPLATE_ID_EXPR. */
6918 SET_DECL_IMPLICIT_INSTANTIATION (decl);
6919
6920 if (TREE_CODE (fns) == COMPONENT_REF)
6921 {
6922 /* Due to bison parser ickiness, we will have already looked
6923 up an operator_name or PFUNCNAME within the current class
6924 (see template_id in parse.y). If the current class contains
6925 such a name, we'll get a COMPONENT_REF here. Undo that. */
6926
6927 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
6928 == current_class_type);
6929 fns = TREE_OPERAND (fns, 1);
6930 }
6931 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
6932 || TREE_CODE (fns) == OVERLOAD);
aa373032 6933 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
abc088aa
MM
6934
6935 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
6936 if (TREE_PURPOSE (t)
6937 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
6938 {
6939 error ("default arguments are not allowed in declaration "
6940 "of friend template specialization %qD",
6941 decl);
6942 return NULL_TREE;
6943 }
6944
6945 if (inlinep)
6946 {
6947 error ("%<inline%> is not allowed in declaration of friend "
6948 "template specialization %qD",
6949 decl);
6950 return NULL_TREE;
6951 }
6952 }
6953 }
6954
79c4d4b7 6955 /* If this decl has namespace scope, set that up. */
2c73f9f5 6956 if (in_namespace)
b262d64c 6957 set_decl_namespace (decl, in_namespace, friendp);
adae082f 6958 else if (!ctype)
ae099258 6959 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
2c73f9f5 6960
0f8766b8
JM
6961 /* `main' and builtins have implicit 'C' linkage. */
6962 if ((MAIN_NAME_P (declarator)
6963 || (IDENTIFIER_LENGTH (declarator) > 10
6964 && IDENTIFIER_POINTER (declarator)[0] == '_'
6965 && IDENTIFIER_POINTER (declarator)[1] == '_'
6966 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
6967 && current_lang_name == lang_name_cplusplus
94706a5c 6968 && ctype == NULL_TREE
725214ac 6969 && DECL_FILE_SCOPE_P (decl))
5d2ed28c 6970 SET_DECL_LANGUAGE (decl, lang_c);
0f8766b8 6971
8d08fdba
MS
6972 /* Should probably propagate const out from type to decl I bet (mrs). */
6973 if (staticp)
6974 {
6975 DECL_STATIC_FUNCTION_P (decl) = 1;
6976 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
6977 }
6978
e76a2646 6979 if (ctype)
9c12301f
MM
6980 {
6981 DECL_CONTEXT (decl) = ctype;
6982 if (funcdef_flag)
6983 check_class_member_definition_namespace (decl);
6984 }
e76a2646 6985
0f8766b8 6986 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
faae18ab 6987 {
848b92e1 6988 if (processing_template_decl)
2d01edd7 6989 error ("cannot declare %<::main%> to be a template");
faae18ab 6990 if (inlinep)
2d01edd7 6991 error ("cannot declare %<::main%> to be inline");
f22967f3 6992 if (!publicp)
2d01edd7 6993 error ("cannot declare %<::main%> to be static");
faae18ab
MS
6994 inlinep = 0;
6995 publicp = 1;
6996 }
50a6dbd7 6997
59e76fc6 6998 /* Members of anonymous types and local classes have no linkage; make
9fc444cc 6999 them internal. If a typedef is made later, this will be changed. */
1951a1b6 7000 if (ctype && (TYPE_ANONYMOUS_P (ctype)
4f1c5b7d 7001 || decl_function_context (TYPE_MAIN_DECL (ctype))))
50a6dbd7
JM
7002 publicp = 0;
7003
1eee69dd
JM
7004 if (publicp && cxx_dialect == cxx98)
7005 {
7006 /* [basic.link]: A name with no linkage (notably, the name of a class
7007 or enumeration declared in a local scope) shall not be used to
7008 declare an entity with linkage.
7009
7010 DR 757 relaxes this restriction for C++0x. */
7011 t = no_linkage_check (TREE_TYPE (decl),
7012 /*relaxed_p=*/false);
7013 if (t)
7014 {
7015 if (TYPE_ANONYMOUS_P (t))
7016 {
7017 if (DECL_EXTERN_C_P (decl))
7018 /* Allow this; it's pretty common in C. */;
7019 else
7020 {
2401726e
JM
7021 permerror (input_location, "anonymous type with no linkage "
7022 "used to declare function %q#D with linkage",
7023 decl);
1eee69dd
JM
7024 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7025 permerror (input_location, "%q+#D does not refer to the unqualified "
7026 "type, so it is not used for linkage",
7027 TYPE_NAME (t));
7028 }
7029 }
7030 else
2401726e
JM
7031 permerror (input_location, "type %qT with no linkage used to "
7032 "declare function %q#D with linkage", t, decl);
1eee69dd
JM
7033 }
7034 }
7035
893de33c 7036 TREE_PUBLIC (decl) = publicp;
faae18ab 7037 if (! publicp)
893de33c
JM
7038 {
7039 DECL_INTERFACE_KNOWN (decl) = 1;
7040 DECL_NOT_REALLY_EXTERN (decl) = 1;
7041 }
faae18ab 7042
acc72c37 7043 /* If the declaration was declared inline, mark it as such. */
faae18ab 7044 if (inlinep)
acc72c37 7045 DECL_DECLARED_INLINE_P (decl) = 1;
91ea6df3
GDR
7046 if (inlinep & 2)
7047 DECL_DECLARED_CONSTEXPR_P (decl) = true;
8d08fdba
MS
7048
7049 DECL_EXTERNAL (decl) = 1;
3c01e5df 7050 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba 7051 {
e7c41c99
DM
7052 error (ctype
7053 ? G_("static member function %qD cannot have cv-qualifier")
32b1d579 7054 : G_("non-member function %qD cannot have cv-qualifier"),
e7c41c99 7055 decl);
3c01e5df 7056 quals = TYPE_UNQUALIFIED;
8d08fdba
MS
7057 }
7058
398cd199
VR
7059 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7060 && !grok_op_properties (decl, /*complain=*/true))
7061 return NULL_TREE;
8d08fdba 7062
1eb0072d
JM
7063 if (funcdef_flag)
7064 /* Make the init_value nonzero so pushdecl knows this is not
7065 tentative. error_mark_node is replaced later with the BLOCK. */
7066 DECL_INITIAL (decl) = error_mark_node;
7067
93ca4ba7 7068 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
1660cb3a
JM
7069 TREE_NOTHROW (decl) = 1;
7070
75650646 7071 /* Caller will do the rest of this. */
8d08fdba
MS
7072 if (check < 0)
7073 return decl;
7074
74b846e0 7075 if (ctype != NULL_TREE)
71aea5f2 7076 grokclassfn (ctype, decl, flags);
74b846e0
MM
7077
7078 decl = check_explicit_specialization (orig_declarator, decl,
7079 template_count,
357d956e 7080 2 * funcdef_flag +
74b846e0
MM
7081 4 * (friendp != 0));
7082 if (decl == error_mark_node)
7083 return NULL_TREE;
98c1c668 7084
037cc9c5
FJ
7085 if (attrlist)
7086 {
7087 cplus_decl_attributes (&decl, *attrlist, 0);
7088 *attrlist = NULL_TREE;
7089 }
7090
da337784
JJ
7091 /* Check main's type after attributes have been applied. */
7092 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7093 {
7094 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7095 integer_type_node))
7096 {
7097 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7098 tree newtype;
7099 error ("%<::main%> must return %<int%>");
7100 newtype = build_function_type (integer_type_node, oldtypeargs);
7101 TREE_TYPE (decl) = newtype;
7102 }
4003301d
MLI
7103 if (warn_main)
7104 check_main_parameter_types (decl);
da337784
JJ
7105 }
7106
74b846e0
MM
7107 if (ctype != NULL_TREE
7108 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7109 && check)
8d08fdba 7110 {
f8c3b097
PC
7111 tree old_decl = check_classfn (ctype, decl,
7112 (processing_template_decl
7113 > template_class_depth (ctype))
7114 ? current_template_parms
7115 : NULL_TREE);
7116
7117 if (old_decl == error_mark_node)
7118 return NULL_TREE;
8d08fdba 7119
74b846e0 7120 if (old_decl)
8d08fdba 7121 {
79ae853c 7122 tree ok;
4514aa8c 7123 tree pushed_scope;
316a2456 7124
357d956e
MM
7125 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7126 /* Because grokfndecl is always supposed to return a
7127 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7128 here. We depend on our callers to figure out that its
7129 really a template that's being returned. */
7130 old_decl = DECL_TEMPLATE_RESULT (old_decl);
7131
7132 if (DECL_STATIC_FUNCTION_P (old_decl)
7133 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7134 /* Remove the `this' parm added by grokclassfn.
7135 XXX Isn't this done in start_function, too? */
7136 revert_static_member_fn (decl);
7137 if (DECL_ARTIFICIAL (old_decl))
db160137
AP
7138 {
7139 error ("definition of implicitly-declared %qD", old_decl);
7140 return NULL_TREE;
7141 }
357d956e 7142
74b846e0
MM
7143 /* Since we've smashed OLD_DECL to its
7144 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
7145 if (TREE_CODE (decl) == TEMPLATE_DECL)
7146 decl = DECL_TEMPLATE_RESULT (decl);
7147
7148 /* Attempt to merge the declarations. This can fail, in
0e339752 7149 the case of some invalid specialization declarations. */
4514aa8c 7150 pushed_scope = push_scope (ctype);
d63d5d0c 7151 ok = duplicate_decls (decl, old_decl, friendp);
4514aa8c
NS
7152 if (pushed_scope)
7153 pop_scope (pushed_scope);
316a2456
MM
7154 if (!ok)
7155 {
2d01edd7 7156 error ("no %q#D member function declared in class %qT",
316a2456
MM
7157 decl, ctype);
7158 return NULL_TREE;
7159 }
74b846e0 7160 return old_decl;
8d08fdba
MS
7161 }
7162 }
74b846e0
MM
7163
7164 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7165 return NULL_TREE;
7166
7167 if (ctype == NULL_TREE || check)
7168 return decl;
7169
7170 if (virtualp)
cbb40945 7171 DECL_VIRTUAL_P (decl) = 1;
74b846e0 7172
8d08fdba
MS
7173 return decl;
7174}
7175
4684cd27
MM
7176/* DECL is a VAR_DECL for a static data member. Set flags to reflect
7177 the linkage that DECL will receive in the object file. */
7178
7179static void
7180set_linkage_for_static_data_member (tree decl)
7181{
7182 /* A static data member always has static storage duration and
7183 external linkage. Note that static data members are forbidden in
7184 local classes -- the only situation in which a class has
7185 non-external linkage. */
7186 TREE_PUBLIC (decl) = 1;
7187 TREE_STATIC (decl) = 1;
7188 /* For non-template classes, static data members are always put
7189 out in exactly those files where they are defined, just as
77880ae4 7190 with ordinary namespace-scope variables. */
4684cd27
MM
7191 if (!processing_template_decl)
7192 DECL_INTERFACE_KNOWN (decl) = 1;
7193}
7194
caf93cb0 7195/* Create a VAR_DECL named NAME with the indicated TYPE.
9e259dd1
MM
7196
7197 If SCOPE is non-NULL, it is the class type or namespace containing
7198 the variable. If SCOPE is NULL, the variable should is created in
7199 the innermost enclosings scope. */
7200
8d08fdba 7201static tree
11f6b451 7202grokvardecl (tree type,
0cbd7506 7203 tree name,
1ff3c076 7204 const cp_decl_specifier_seq *declspecs,
0cbd7506
MS
7205 int initialized,
7206 int constp,
7207 tree scope)
8d08fdba
MS
7208{
7209 tree decl;
5ae9ba3e 7210 tree explicit_scope;
f7da6097 7211
50bc768d 7212 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
9e259dd1 7213
5ae9ba3e
MM
7214 /* Compute the scope in which to place the variable, but remember
7215 whether or not that scope was explicitly specified by the user. */
7216 explicit_scope = scope;
9e259dd1 7217 if (!scope)
8d08fdba 7218 {
9e259dd1
MM
7219 /* An explicit "extern" specifier indicates a namespace-scope
7220 variable. */
62d1db17 7221 if (declspecs->storage_class == sc_extern)
ae099258 7222 scope = current_decl_namespace ();
9e259dd1 7223 else if (!at_function_scope_p ())
a5201a91 7224 scope = current_scope ();
9e259dd1
MM
7225 }
7226
7227 if (scope
7228 && (/* If the variable is a namespace-scope variable declared in a
7229 template, we need DECL_LANG_SPECIFIC. */
7230 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7231 /* Similarly for namespace-scope variables with language linkage
7232 other than C++. */
caf93cb0 7233 || (TREE_CODE (scope) == NAMESPACE_DECL
9e259dd1
MM
7234 && current_lang_name != lang_name_cplusplus)
7235 /* Similarly for static data members. */
7236 || TYPE_P (scope)))
7237 decl = build_lang_decl (VAR_DECL, name, type);
8d08fdba 7238 else
c2255bc4 7239 decl = build_decl (input_location, VAR_DECL, name, type);
79c4d4b7 7240
5ae9ba3e
MM
7241 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7242 set_decl_namespace (decl, explicit_scope, 0);
9e259dd1 7243 else
74b0d490 7244 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
6060a796 7245
62d1db17 7246 if (declspecs->storage_class == sc_extern)
8d08fdba
MS
7247 {
7248 DECL_THIS_EXTERN (decl) = 1;
7249 DECL_EXTERNAL (decl) = !initialized;
7250 }
7251
2b9dc906 7252 if (DECL_CLASS_SCOPE_P (decl))
8d08fdba 7253 {
4684cd27
MM
7254 set_linkage_for_static_data_member (decl);
7255 /* This function is only called with out-of-class definitions. */
5b605f68 7256 DECL_EXTERNAL (decl) = 0;
9c12301f 7257 check_class_member_definition_namespace (decl);
8d08fdba
MS
7258 }
7259 /* At top level, either `static' or no s.c. makes a definition
7260 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 7261 else if (toplevel_bindings_p ())
8d08fdba 7262 {
62d1db17 7263 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9fffd093 7264 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
7265 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7266 }
7267 /* Not at top level, only `static' makes a static definition. */
7268 else
7269 {
62d1db17 7270 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
8d08fdba
MS
7271 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7272 }
50a6dbd7 7273
62d1db17 7274 if (declspecs->specs[(int)ds_thread])
8893239d 7275 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7a1f3f5f 7276
1eee69dd
JM
7277 /* If the type of the decl has no linkage, make sure that we'll
7278 notice that in mark_used. */
7279 if (cxx_dialect > cxx98
7280 && decl_linkage (decl) != lk_none
7281 && DECL_LANG_SPECIFIC (decl) == NULL
7282 && !DECL_EXTERN_C_P (decl)
7283 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7284 retrofit_lang_decl (decl);
7285
50a6dbd7
JM
7286 if (TREE_PUBLIC (decl))
7287 {
1eee69dd
JM
7288 /* [basic.link]: A name with no linkage (notably, the name of a class
7289 or enumeration declared in a local scope) shall not be used to
7290 declare an entity with linkage.
7291
7292 DR 757 relaxes this restriction for C++0x. */
7293 tree t = (cxx_dialect > cxx98 ? NULL_TREE
7294 : no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7295 if (t)
7296 {
7297 if (TYPE_ANONYMOUS_P (t))
7298 {
7299 if (DECL_EXTERN_C_P (decl))
7300 /* Allow this; it's pretty common in C. */
7301 ;
7302 else
7303 {
7304 /* DRs 132, 319 and 389 seem to indicate types with
7305 no linkage can only be used to declare extern "C"
7306 entities. Since it's not always an error in the
7307 ISO C++ 90 Standard, we only issue a warning. */
2401726e
JM
7308 warning (0, "anonymous type with no linkage used to declare "
7309 "variable %q#D with linkage", decl);
1eee69dd
JM
7310 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7311 warning (0, "%q+#D does not refer to the unqualified "
7312 "type, so it is not used for linkage",
7313 TYPE_NAME (t));
7314 }
7315 }
7316 else
2401726e
JM
7317 warning (0, "type %qT with no linkage used to declare variable "
7318 "%q#D with linkage", t, decl);
1eee69dd 7319 }
50a6dbd7 7320 }
1ceb02be
MM
7321 else
7322 DECL_INTERFACE_KNOWN (decl) = 1;
50a6dbd7 7323
8d08fdba
MS
7324 return decl;
7325}
7326
d8f8dca1
MM
7327/* Create and return a canonical pointer to member function type, for
7328 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8d08fdba
MS
7329
7330tree
11f6b451 7331build_ptrmemfunc_type (tree type)
8d08fdba 7332{
4977bab6 7333 tree field, fields;
8d08fdba 7334 tree t;
46cbda4a 7335 tree unqualified_variant = NULL_TREE;
8d08fdba 7336
d48ebde1
NS
7337 if (type == error_mark_node)
7338 return type;
d363e7bf 7339
8d08fdba
MS
7340 /* If a canonical type already exists for this type, use it. We use
7341 this method instead of type_hash_canon, because it only does a
7342 simple equality check on the list of field members. */
7343
7344 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7345 return t;
7346
46cbda4a
MM
7347 /* Make sure that we always have the unqualified pointer-to-member
7348 type first. */
89d684bb 7349 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
68642fb6 7350 unqualified_variant
46cbda4a
MM
7351 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7352
9e1e64ec 7353 t = make_class_type (RECORD_TYPE);
cad7e87b 7354 xref_basetypes (t, NULL_TREE);
caf93cb0 7355
3b426391 7356 /* Let the front end know this is a pointer to member function... */
db5ae43f 7357 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9e1e64ec
PC
7358 /* ... and not really a class type. */
7359 SET_CLASS_TYPE_P (t, 0);
8d08fdba 7360
c2255bc4 7361 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
4977bab6 7362 fields = field;
caf93cb0 7363
c2255bc4
AH
7364 field = build_decl (input_location, FIELD_DECL, delta_identifier,
7365 delta_type_node);
910ad8de 7366 DECL_CHAIN (field) = fields;
4977bab6 7367 fields = field;
caf93cb0 7368
4977bab6 7369 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8d08fdba 7370
3b426391 7371 /* Zap out the name so that the back end will give us the debugging
8d08fdba
MS
7372 information for this anonymous RECORD_TYPE. */
7373 TYPE_NAME (t) = NULL_TREE;
7374
46cbda4a
MM
7375 /* If this is not the unqualified form of this pointer-to-member
7376 type, set the TYPE_MAIN_VARIANT for this type to be the
7377 unqualified type. Since they are actually RECORD_TYPEs that are
22521c89
RG
7378 not variants of each other, we must do this manually.
7379 As we just built a new type there is no need to do yet another copy. */
89d684bb 7380 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
46cbda4a 7381 {
22521c89
RG
7382 int type_quals = cp_type_quals (type);
7383 TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7384 TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7385 TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
46cbda4a
MM
7386 TYPE_MAIN_VARIANT (t) = unqualified_variant;
7387 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7388 TYPE_NEXT_VARIANT (unqualified_variant) = t;
0f67bdf1 7389 TREE_TYPE (TYPE_BINFO (t)) = t;
46cbda4a
MM
7390 }
7391
7392 /* Cache this pointer-to-member type so that we can find it again
7393 later. */
8d08fdba
MS
7394 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7395
0f67bdf1
JM
7396 if (TYPE_STRUCTURAL_EQUALITY_P (type))
7397 SET_TYPE_STRUCTURAL_EQUALITY (t);
7398 else if (TYPE_CANONICAL (type) != type)
7399 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
06d40de8 7400
8d08fdba
MS
7401 return t;
7402}
7403
9e259dd1
MM
7404/* Create and return a pointer to data member type. */
7405
7406tree
7407build_ptrmem_type (tree class_type, tree member_type)
7408{
a5ac359a
MM
7409 if (TREE_CODE (member_type) == METHOD_TYPE)
7410 {
2872152c 7411 cp_cv_quals quals = type_memfn_quals (member_type);
3c3905fc 7412 member_type = build_memfn_type (member_type, class_type, quals);
a5ac359a
MM
7413 return build_ptrmemfunc_type (build_pointer_type (member_type));
7414 }
7415 else
7416 {
50bc768d 7417 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
a5ac359a
MM
7418 return build_offset_type (class_type, member_type);
7419 }
9e259dd1
MM
7420}
7421
b17e2870
JM
7422/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7423 Check to see that the definition is valid. Issue appropriate error
7424 messages. Return 1 if the definition is particularly bad, or 0
7425 otherwise. */
7426
7427int
11f6b451 7428check_static_variable_definition (tree decl, tree type)
b17e2870 7429{
91ea6df3
GDR
7430 /* If DECL is declared constexpr, we'll do the appropriate checks
7431 in check_initializer. */
7432 if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
7433 return 0;
7434 else if (cxx_dialect >= cxx0x && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7435 {
7436 if (literal_type_p (type))
7437 error ("%<constexpr%> needed for in-class initialization of static "
7438 "data member %q#D of non-integral type", decl);
7439 else
7440 error ("in-class initialization of static data member %q#D of "
7441 "non-literal type", decl);
7442 return 1;
7443 }
7444
b17e2870
JM
7445 /* Motion 10 at San Diego: If a static const integral data member is
7446 initialized with an integral constant expression, the initializer
7447 may appear either in the declaration (within the class), or in
7448 the definition, but not both. If it appears in the class, the
7449 member is a member constant. The file-scope definition is always
7450 required. */
dcba9b0f 7451 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
b17e2870 7452 {
2d01edd7 7453 error ("invalid in-class initialization of static data member "
0cbd7506 7454 "of non-integral type %qT",
dcba9b0f 7455 type);
b17e2870
JM
7456 return 1;
7457 }
7458 else if (!CP_TYPE_CONST_P (type))
2d01edd7 7459 error ("ISO C++ forbids in-class initialization of non-const "
0cbd7506
MS
7460 "static member %qD",
7461 decl);
550a799d 7462 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
509c9d60 7463 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
0cbd7506 7464 "%qD of non-integral type %qT", decl, type);
b17e2870
JM
7465
7466 return 0;
7467}
7468
2848ad0f
MM
7469/* Given the SIZE (i.e., number of elements) in an array, compute an
7470 appropriate index type for the array. If non-NULL, NAME is the
7471 name of the thing being declared. */
7472
c95cd22e 7473tree
fa2200cb 7474compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
2848ad0f 7475{
d174af6c 7476 tree type;
2848ad0f 7477 tree itype;
fa2200cb 7478 tree osize = size;
06d40de8 7479 tree abi_1_itype = NULL_TREE;
2848ad0f 7480
d174af6c
MM
7481 if (error_operand_p (size))
7482 return error_mark_node;
7483
7484 type = TREE_TYPE (size);
fa2200cb
JM
7485 /* type_dependent_expression_p? */
7486 if (!dependent_type_p (type))
2848ad0f 7487 {
fa2200cb
JM
7488 mark_rvalue_use (size);
7489
7490 if (cxx_dialect < cxx0x && TREE_CODE (size) == NOP_EXPR
7491 && TREE_SIDE_EFFECTS (size))
7492 /* In C++98, we mark a non-constant array bound with a magic
7493 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
d63b5e9f 7494 else
fa2200cb
JM
7495 {
7496 size = fold_non_dependent_expr (size);
7497
7498 if (CLASS_TYPE_P (type)
7499 && CLASSTYPE_LITERAL_P (type))
7500 {
7501 size = build_expr_type_conversion (WANT_INT, size, true);
7502 if (size == error_mark_node)
7503 return error_mark_node;
7504 type = TREE_TYPE (size);
7505 }
7506
7507 size = maybe_constant_value (size);
7508 }
7509
7510 if (error_operand_p (size))
7511 return error_mark_node;
7512
7513 /* The array bound must be an integer type. */
7514 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
7515 {
7516 if (!(complain & tf_error))
7517 return error_mark_node;
7518 if (name)
7519 error ("size of array %qD has non-integral type %qT", name, type);
7520 else
7521 error ("size of array has non-integral type %qT", type);
7522 size = integer_one_node;
7523 type = TREE_TYPE (size);
7524 }
2848ad0f
MM
7525 }
7526
3fdb8851
JM
7527 /* A type is dependent if it is...an array type constructed from any
7528 dependent type or whose size is specified by a constant expression
7529 that is value-dependent. */
c1165535 7530 /* We can only call value_dependent_expression_p on integral constant
fa2200cb 7531 expressions; treat non-constant expressions as dependent, too. */
c1165535 7532 if (processing_template_decl
3fdb8851 7533 && (dependent_type_p (type)
fa2200cb 7534 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
c1165535
JM
7535 {
7536 /* We cannot do any checking for a SIZE that isn't known to be
7537 constant. Just build the index type and mark that it requires
7538 structural equality checks. */
06d40de8
DG
7539 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7540 size, integer_one_node));
483a1dce
JM
7541 TYPE_DEPENDENT_P (itype) = 1;
7542 TYPE_DEPENDENT_P_VALID (itype) = 1;
06d40de8
DG
7543 SET_TYPE_STRUCTURAL_EQUALITY (itype);
7544 return itype;
7545 }
7546
7547 if (!abi_version_at_least (2) && processing_template_decl)
7548 /* For abi-1, we handled all instances in templates the same way,
39a13be5 7549 even when they were non-dependent. This affects the manglings
06d40de8
DG
7550 produced. So, we do the normal checking for non-dependent
7551 sizes, but at the end we'll return the same type that abi-1
7552 would have, but with TYPE_CANONICAL set to the "right"
7553 value that the current ABI would provide. */
7554 abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
fa2200cb 7555 osize, integer_one_node));
80f5bb34 7556
2848ad0f 7557 /* Normally, the array-bound will be a constant. */
2bb5d995 7558 if (TREE_CODE (size) == INTEGER_CST)
2848ad0f
MM
7559 {
7560 /* Check to see if the array bound overflowed. Make that an
7561 error, no matter how generous we're being. */
393eda6a 7562 constant_expression_error (size);
2848ad0f
MM
7563
7564 /* An array must have a positive number of elements. */
7565 if (INT_CST_LT (size, integer_zero_node))
7566 {
fa2200cb
JM
7567 if (!(complain & tf_error))
7568 return error_mark_node;
d67cdbc3 7569 if (name)
2d01edd7 7570 error ("size of array %qD is negative", name);
d67cdbc3 7571 else
33bd39a2 7572 error ("size of array is negative");
2848ad0f
MM
7573 size = integer_one_node;
7574 }
fa2200cb
JM
7575 /* As an extension we allow zero-sized arrays. */
7576 else if (integer_zerop (size))
d67cdbc3 7577 {
fa2200cb
JM
7578 if (!(complain & tf_error))
7579 /* We must fail if performing argument deduction (as
7580 indicated by the state of complain), so that
7581 another substitution can be found. */
7582 return error_mark_node;
7583 else if (in_system_header)
7584 /* Allow them in system headers because glibc uses them. */;
7585 else if (name)
509c9d60 7586 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
d67cdbc3 7587 else
509c9d60 7588 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
d67cdbc3 7589 }
2848ad0f 7590 }
fa2200cb
JM
7591 else if (TREE_CONSTANT (size)
7592 /* We don't allow VLAs at non-function scopes, or during
7593 tentative template substitution. */
7594 || !at_function_scope_p () || !(complain & tf_error))
2bb5d995 7595 {
fa2200cb
JM
7596 if (!(complain & tf_error))
7597 return error_mark_node;
2bb5d995
JM
7598 /* `(int) &fn' is not a valid array bound. */
7599 if (name)
2d01edd7 7600 error ("size of array %qD is not an integral constant-expression",
0cbd7506 7601 name);
2bb5d995 7602 else
33bd39a2 7603 error ("size of array is not an integral constant-expression");
3aa2ddb8 7604 size = integer_one_node;
2bb5d995 7605 }
50d50fc7 7606 else if (pedantic && warn_vla != 0)
d63b5e9f
NS
7607 {
7608 if (name)
509c9d60 7609 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
d63b5e9f 7610 else
509c9d60 7611 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
50d50fc7
SP
7612 }
7613 else if (warn_vla > 0)
7614 {
7615 if (name)
7616 warning (OPT_Wvla,
7617 "variable length array %qD is used", name);
7618 else
7619 warning (OPT_Wvla,
7620 "variable length array is used");
d63b5e9f 7621 }
2848ad0f 7622
d63b5e9f
NS
7623 if (processing_template_decl && !TREE_CONSTANT (size))
7624 /* A variable sized array. */
7625 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7626 else
2848ad0f 7627 {
455f19cb
MM
7628 HOST_WIDE_INT saved_processing_template_decl;
7629
d63b5e9f 7630 /* Compute the index of the largest element in the array. It is
0cbd7506
MS
7631 one less than the number of elements in the array. We save
7632 and restore PROCESSING_TEMPLATE_DECL so that computations in
7633 cp_build_binary_op will be appropriately folded. */
455f19cb
MM
7634 saved_processing_template_decl = processing_template_decl;
7635 processing_template_decl = 0;
ba47d38d
AH
7636 itype = cp_build_binary_op (input_location,
7637 MINUS_EXPR,
455f19cb 7638 cp_convert (ssizetype, size),
5ade1ed2
DG
7639 cp_convert (ssizetype, integer_one_node),
7640 tf_warning_or_error);
455f19cb
MM
7641 itype = fold (itype);
7642 processing_template_decl = saved_processing_template_decl;
7643
d63b5e9f 7644 if (!TREE_CONSTANT (itype))
f4f206f4 7645 /* A variable sized array. */
d63b5e9f
NS
7646 itype = variable_size (itype);
7647 /* Make sure that there was no overflow when creating to a signed
0cbd7506
MS
7648 index type. (For example, on a 32-bit machine, an array with
7649 size 2^32 - 1 is too big.) */
9116d529
RS
7650 else if (TREE_CODE (itype) == INTEGER_CST
7651 && TREE_OVERFLOW (itype))
2848ad0f 7652 {
fa2200cb
JM
7653 if (!(complain & tf_error))
7654 return error_mark_node;
d63b5e9f
NS
7655 error ("overflow in array dimension");
7656 TREE_OVERFLOW (itype) = 0;
2848ad0f 7657 }
2848ad0f 7658 }
68642fb6 7659
2848ad0f 7660 /* Create and return the appropriate index type. */
06d40de8
DG
7661 if (abi_1_itype)
7662 {
7663 tree t = build_index_type (itype);
7664 TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
3fdb8851 7665 itype = abi_1_itype;
06d40de8
DG
7666 }
7667 else
3fdb8851
JM
7668 itype = build_index_type (itype);
7669
7670 /* If the index type were dependent, we would have returned early, so
7671 remember that it isn't. */
7672 TYPE_DEPENDENT_P (itype) = 0;
7673 TYPE_DEPENDENT_P_VALID (itype) = 1;
7674 return itype;
2848ad0f
MM
7675}
7676
a723baf1
MM
7677/* Returns the scope (if any) in which the entity declared by
7678 DECLARATOR will be located. If the entity was declared with an
7679 unqualified name, NULL_TREE is returned. */
7680
7681tree
058b15c1 7682get_scope_of_declarator (const cp_declarator *declarator)
a723baf1 7683{
058b15c1
MM
7684 while (declarator && declarator->kind != cdk_id)
7685 declarator = declarator->declarator;
7686
7687 /* If the declarator-id is a SCOPE_REF, the scope in which the
7688 declaration occurs is the first operand. */
7689 if (declarator
1d786913
MM
7690 && declarator->u.id.qualifying_scope)
7691 return declarator->u.id.qualifying_scope;
058b15c1 7692
77880ae4 7693 /* Otherwise, the declarator is not a qualified name; the entity will
058b15c1
MM
7694 be declared in the current scope. */
7695 return NULL_TREE;
a723baf1
MM
7696}
7697
2848ad0f
MM
7698/* Returns an ARRAY_TYPE for an array with SIZE elements of the
7699 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
7700 with this type. */
7701
7702static tree
11f6b451 7703create_array_type_for_decl (tree name, tree type, tree size)
2848ad0f
MM
7704{
7705 tree itype = NULL_TREE;
2848ad0f
MM
7706
7707 /* If things have already gone awry, bail now. */
7708 if (type == error_mark_node || size == error_mark_node)
7709 return error_mark_node;
7710
4cd5a50a
PB
7711 /* If there are some types which cannot be array elements,
7712 issue an error-message and return. */
2848ad0f
MM
7713 switch (TREE_CODE (type))
7714 {
7715 case VOID_TYPE:
4cd5a50a
PB
7716 if (name)
7717 error ("declaration of %qD as array of void", name);
7718 else
7719 error ("creating array of void");
7720 return error_mark_node;
2848ad0f
MM
7721
7722 case FUNCTION_TYPE:
4cd5a50a
PB
7723 if (name)
7724 error ("declaration of %qD as array of functions", name);
7725 else
7726 error ("creating array of functions");
7727 return error_mark_node;
2848ad0f
MM
7728
7729 case REFERENCE_TYPE:
4cd5a50a
PB
7730 if (name)
7731 error ("declaration of %qD as array of references", name);
7732 else
7733 error ("creating array of references");
7734 return error_mark_node;
2848ad0f 7735
2848ad0f 7736 case METHOD_TYPE:
4cd5a50a
PB
7737 if (name)
7738 error ("declaration of %qD as array of function members", name);
7739 else
7740 error ("creating array of function members");
7741 return error_mark_node;
2848ad0f
MM
7742
7743 default:
7744 break;
7745 }
7746
2848ad0f 7747 /* [dcl.array]
68642fb6 7748
2848ad0f
MM
7749 The constant expressions that specify the bounds of the arrays
7750 can be omitted only for the first member of the sequence. */
7751 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
7752 {
b3faacfd 7753 if (name)
2d01edd7 7754 error ("declaration of %qD as multidimensional array must "
0cbd7506
MS
7755 "have bounds for all dimensions except the first",
7756 name);
b3faacfd 7757 else
2d01edd7 7758 error ("multidimensional array must have bounds for all "
0cbd7506 7759 "dimensions except the first");
2848ad0f
MM
7760
7761 return error_mark_node;
7762 }
7763
7764 /* Figure out the index type for the array. */
7765 if (size)
fa2200cb 7766 itype = compute_array_index_type (name, size, tf_warning_or_error);
2848ad0f 7767
7fb213d8
GB
7768 /* [dcl.array]
7769 T is called the array element type; this type shall not be [...] an
7770 abstract class type. */
7771 abstract_virtuals_error (name, type);
7772
2848ad0f
MM
7773 return build_cplus_array_type (type, itype);
7774}
7775
3dbc07b6
MM
7776/* Check that it's OK to declare a function with the indicated TYPE.
7777 SFK indicates the kind of special function (if any) that this
1f84ec23 7778 function is. OPTYPE is the type given in a conversion operator
44d10c10
PB
7779 declaration, or the class type for a constructor/destructor.
7780 Returns the actual return type of the function; that
3dbc07b6
MM
7781 may be different than TYPE if an error occurs, or for certain
7782 special functions. */
7783
7784static tree
11f6b451 7785check_special_function_return_type (special_function_kind sfk,
0cbd7506
MS
7786 tree type,
7787 tree optype)
3dbc07b6
MM
7788{
7789 switch (sfk)
7790 {
7791 case sfk_constructor:
7792 if (type)
33bd39a2 7793 error ("return type specification for constructor invalid");
5362b086 7794
44d10c10
PB
7795 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7796 type = build_pointer_type (optype);
7797 else
7798 type = void_type_node;
3dbc07b6
MM
7799 break;
7800
7801 case sfk_destructor:
7802 if (type)
33bd39a2 7803 error ("return type specification for destructor invalid");
44d10c10 7804 /* We can't use the proper return type here because we run into
77880ae4 7805 problems with ambiguous bases and covariant returns.
44d10c10
PB
7806 Java classes are left unchanged because (void *) isn't a valid
7807 Java type, and we don't want to change the Java ABI. */
7808 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7809 type = build_pointer_type (void_type_node);
7810 else
7811 type = void_type_node;
3dbc07b6
MM
7812 break;
7813
7814 case sfk_conversion:
caba2081
PC
7815 if (type)
7816 error ("return type specified for %<operator %T%>", optype);
3dbc07b6
MM
7817 type = optype;
7818 break;
7819
7820 default:
8dc2b103 7821 gcc_unreachable ();
3dbc07b6
MM
7822 }
7823
7824 return type;
7825}
7826
62e19030
MM
7827/* A variable or data member (whose unqualified name is IDENTIFIER)
7828 has been declared with the indicated TYPE. If the TYPE is not
7829 acceptable, issue an error message and return a type to use for
03fd3f84 7830 error-recovery purposes. */
62e19030
MM
7831
7832tree
7833check_var_type (tree identifier, tree type)
7834{
7835 if (VOID_TYPE_P (type))
7836 {
7837 if (!identifier)
7838 error ("unnamed variable or field declared void");
7839 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
7840 {
7841 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
7842 error ("variable or field %qE declared void", identifier);
7843 }
7844 else
7845 error ("variable or field declared void");
650fcd07 7846 type = error_mark_node;
62e19030 7847 }
c8094d83 7848
62e19030
MM
7849 return type;
7850}
7851
a723baf1
MM
7852/* Given declspecs and a declarator (abstract or otherwise), determine
7853 the name and type of the object declared and construct a DECL node
7854 for it.
8d08fdba 7855
5e32a5cf
GDR
7856 DECLSPECS points to the representation of declaration-specifier
7857 sequence that precedes declarator.
8d08fdba
MS
7858
7859 DECL_CONTEXT says which syntactic context this declaration is in:
7860 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7861 FUNCDEF for a function definition. Like NORMAL but a few different
7862 error messages in each case. Return value may be zero meaning
7863 this definition is too screwy to try to parse.
7864 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
7865 handle member functions (which have FIELD context).
7866 Return value may be zero meaning this definition is too screwy to
7867 try to parse.
7868 PARM for a parameter declaration (either within a function prototype
7869 or before a function body). Make a PARM_DECL, or return void_type_node.
0229b692 7870 TPARM for a template parameter declaration.
db5ae43f 7871 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
7872 TYPENAME if for a typename (in a cast or sizeof).
7873 Don't make a DECL node; just return the ..._TYPE node.
7874 FIELD for a struct or union field; make a FIELD_DECL.
7875 BITFIELD for a field with specified width.
0229b692 7876
b87d79e6 7877 INITIALIZED is as for start_decl.
8d08fdba 7878
91d231cb
JM
7879 ATTRLIST is a pointer to the list of attributes, which may be NULL
7880 if there are none; *ATTRLIST may be modified if attributes from inside
7881 the declarator should be applied to the declaration.
b17e2870 7882
a723baf1
MM
7883 When this function is called, scoping variables (such as
7884 CURRENT_CLASS_TYPE) should reflect the scope in which the
7885 declaration occurs, not the scope in which the new declaration will
7886 be placed. For example, on:
8d08fdba 7887
a723baf1 7888 void S::f() { ... }
8d08fdba 7889
a723baf1 7890 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
344f237b
LM
7891 should not be `S'.
7892
7893 Returns a DECL (if a declarator is present), a TYPE (if there is no
7894 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
7895 error occurs. */
8d08fdba 7896
8d08fdba 7897tree
058b15c1 7898grokdeclarator (const cp_declarator *declarator,
1ff3c076 7899 const cp_decl_specifier_seq *declspecs,
0cbd7506
MS
7900 enum decl_context decl_context,
7901 int initialized,
7902 tree* attrlist)
8d08fdba 7903{
8d08fdba
MS
7904 tree type = NULL_TREE;
7905 int longlong = 0;
a6766312 7906 int explicit_int128 = 0;
db5ae43f 7907 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
7908 int explicit_int = 0;
7909 int explicit_char = 0;
37c46b43 7910 int defaulted_int = 0;
d1c78882 7911 tree dependent_name = NULL_TREE;
caf93cb0 7912
8d08fdba 7913 tree typedef_decl = NULL_TREE;
058b15c1 7914 const char *name = NULL;
8d08fdba 7915 tree typedef_type = NULL_TREE;
357d956e
MM
7916 /* True if this declarator is a function definition. */
7917 bool funcdef_flag = false;
058b15c1 7918 cp_declarator_kind innermost_code = cdk_error;
8d08fdba 7919 int bitfield = 0;
6125f3be
DE
7920#if 0
7921 /* See the code below that used this. */
91d231cb 7922 tree decl_attr = NULL_TREE;
6125f3be 7923#endif
8d08fdba
MS
7924
7925 /* Keep track of what sort of function is being processed
7926 so that we can warn about default return values, or explicit
7927 return values which do not match prescribed defaults. */
3dbc07b6 7928 special_function_kind sfk = sfk_none;
8d08fdba
MS
7929
7930 tree dname = NULL_TREE;
8d08fdba
MS
7931 tree ctor_return_type = NULL_TREE;
7932 enum overload_flags flags = NO_SPECIAL;
e2537f2c
MM
7933 /* cv-qualifiers that apply to the declarator, for a declaration of
7934 a member function. */
7935 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
7936 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
7937 int type_quals;
c11b6f21 7938 tree raises = NULL_TREE;
386b8a85 7939 int template_count = 0;
91d231cb 7940 tree returned_attrs = NULL_TREE;
4546865e 7941 tree parms = NULL_TREE;
058b15c1
MM
7942 const cp_declarator *id_declarator;
7943 /* The unqualified name of the declarator; either an
7944 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
7945 tree unqualified_id;
7946 /* The class type, if any, in which this entity is located,
7947 or NULL_TREE if none. Note that this value may be different from
7948 the current class type; for example if an attempt is made to declare
7949 "A::f" inside "B", this value will be "A". */
7950 tree ctype = current_class_type;
7951 /* The NAMESPACE_DECL for the namespace in which this entity is
7952 located. If an unqualified name is used to declare the entity,
7953 this value will be NULL_TREE, even if the entity is located at
caf93cb0 7954 namespace scope. */
058b15c1 7955 tree in_namespace = NULL_TREE;
1ff3c076
MM
7956 cp_storage_class storage_class;
7957 bool unsigned_p, signed_p, short_p, long_p, thread_p;
2cfe82fe 7958 bool type_was_error_mark_node = false;
5d80a306 7959 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
0d9c0892 7960 bool template_type_arg = false;
0229b692 7961 bool template_parm_flag = false;
7ecbca9d 7962 bool constexpr_p = declspecs->specs[(int) ds_constexpr];
40449a90 7963 const char *errmsg;
1ff3c076
MM
7964
7965 signed_p = declspecs->specs[(int)ds_signed];
7966 unsigned_p = declspecs->specs[(int)ds_unsigned];
7967 short_p = declspecs->specs[(int)ds_short];
7968 long_p = declspecs->specs[(int)ds_long];
28c84d63 7969 longlong = declspecs->specs[(int)ds_long] >= 2;
a6766312 7970 explicit_int128 = declspecs->explicit_int128_p;
1ff3c076 7971 thread_p = declspecs->specs[(int)ds_thread];
8d08fdba 7972
8d08fdba 7973 if (decl_context == FUNCDEF)
357d956e 7974 funcdef_flag = true, decl_context = NORMAL;
8d08fdba 7975 else if (decl_context == MEMFUNCDEF)
357d956e 7976 funcdef_flag = true, decl_context = FIELD;
8d08fdba
MS
7977 else if (decl_context == BITFIELD)
7978 bitfield = 1, decl_context = FIELD;
0d9c0892
JM
7979 else if (decl_context == TEMPLATE_TYPE_ARG)
7980 template_type_arg = true, decl_context = TYPENAME;
0229b692
PC
7981 else if (decl_context == TPARM)
7982 template_parm_flag = true, decl_context = PARM;
8d08fdba 7983
b87d79e6
JM
7984 if (initialized > 1)
7985 funcdef_flag = true;
7986
8d08fdba
MS
7987 /* Look inside a declarator for the name being declared
7988 and get it as a string, for an error message. */
caf93cb0
EC
7989 for (id_declarator = declarator;
7990 id_declarator;
058b15c1
MM
7991 id_declarator = id_declarator->declarator)
7992 {
7993 if (id_declarator->kind != cdk_id)
7994 innermost_code = id_declarator->kind;
8d08fdba 7995
058b15c1
MM
7996 switch (id_declarator->kind)
7997 {
7998 case cdk_function:
7999 if (id_declarator->declarator
8000 && id_declarator->declarator->kind == cdk_id)
8d08fdba 8001 {
058b15c1
MM
8002 sfk = id_declarator->declarator->u.id.sfk;
8003 if (sfk == sfk_destructor)
8004 flags = DTOR_FLAG;
51c184be 8005 }
058b15c1 8006 break;
be99da77 8007
058b15c1
MM
8008 case cdk_id:
8009 {
1d786913
MM
8010 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8011 tree decl = id_declarator->u.id.unqualified_name;
058b15c1
MM
8012 if (!decl)
8013 break;
1d786913 8014 if (qualifying_scope)
8d08fdba 8015 {
2884e22c
MM
8016 if (at_function_scope_p ())
8017 {
8018 /* [dcl.meaning]
8019
8020 A declarator-id shall not be qualified except
8021 for ...
8022
8023 None of the cases are permitted in block
8024 scope. */
8025 if (qualifying_scope == global_namespace)
8026 error ("invalid use of qualified-name %<::%D%>",
8027 decl);
8028 else if (TYPE_P (qualifying_scope))
8029 error ("invalid use of qualified-name %<%T::%D%>",
8030 qualifying_scope, decl);
8031 else
8032 error ("invalid use of qualified-name %<%D::%D%>",
8033 qualifying_scope, decl);
8034 return error_mark_node;
8035 }
8036 else if (TYPE_P (qualifying_scope))
058b15c1 8037 {
1d786913 8038 ctype = qualifying_scope;
058b15c1
MM
8039 if (innermost_code != cdk_function
8040 && current_class_type
caf93cb0 8041 && !UNIQUELY_DERIVED_FROM_P (ctype,
058b15c1
MM
8042 current_class_type))
8043 {
2d01edd7 8044 error ("type %qT is not derived from type %qT",
058b15c1 8045 ctype, current_class_type);
1d786913 8046 return error_mark_node;
058b15c1 8047 }
058b15c1
MM
8048 }
8049 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8050 in_namespace = qualifying_scope;
058b15c1 8051 }
058b15c1
MM
8052 switch (TREE_CODE (decl))
8053 {
8054 case BIT_NOT_EXPR:
be99da77 8055 {
88e95ee3
MM
8056 tree type;
8057
8058 if (innermost_code != cdk_function)
8059 {
8060 error ("declaration of %qD as non-function", decl);
8061 return error_mark_node;
8062 }
c8094d83 8063 else if (!qualifying_scope
88e95ee3
MM
8064 && !(current_class_type && at_class_scope_p ()))
8065 {
8066 error ("declaration of %qD as non-member", decl);
8067 return error_mark_node;
8068 }
c8094d83 8069
88e95ee3 8070 type = TREE_OPERAND (decl, 0);
bd967b22
JM
8071 if (TYPE_P (type))
8072 type = constructor_name (type);
f41c4af3 8073 name = identifier_to_locale (IDENTIFIER_POINTER (type));
af02935e 8074 dname = decl;
058b15c1
MM
8075 }
8076 break;
633221db 8077
058b15c1
MM
8078 case TEMPLATE_ID_EXPR:
8079 {
8080 tree fns = TREE_OPERAND (decl, 0);
633221db 8081
058b15c1 8082 dname = fns;
058b15c1 8083 if (TREE_CODE (dname) != IDENTIFIER_NODE)
be99da77 8084 {
50bc768d 8085 gcc_assert (is_overloaded_fn (dname));
058b15c1 8086 dname = DECL_NAME (get_first_fn (dname));
be99da77
MS
8087 }
8088 }
058b15c1 8089 /* Fall through. */
be99da77 8090
058b15c1
MM
8091 case IDENTIFIER_NODE:
8092 if (TREE_CODE (decl) == IDENTIFIER_NODE)
8093 dname = decl;
be99da77 8094
058b15c1
MM
8095 if (C_IS_RESERVED_WORD (dname))
8096 {
2d01edd7 8097 error ("declarator-id missing; using reserved word %qD",
058b15c1 8098 dname);
f41c4af3 8099 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
058b15c1
MM
8100 }
8101 else if (!IDENTIFIER_TYPENAME_P (dname))
f41c4af3 8102 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
058b15c1
MM
8103 else
8104 {
50bc768d 8105 gcc_assert (flags == NO_SPECIAL);
058b15c1
MM
8106 flags = TYPENAME_FLAG;
8107 ctor_return_type = TREE_TYPE (dname);
8108 sfk = sfk_conversion;
8109 if (is_typename_at_global_scope (dname))
f41c4af3 8110 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
058b15c1
MM
8111 else
8112 name = "<invalid operator>";
8113 }
8114 break;
8115
058b15c1 8116 default:
8dc2b103 8117 gcc_unreachable ();
058b15c1 8118 }
45537677 8119 break;
b08f991d 8120 }
45537677 8121
b08f991d
SB
8122 case cdk_array:
8123 case cdk_pointer:
8124 case cdk_reference:
8125 case cdk_ptrmem:
8126 break;
2ee366b5 8127
b08f991d
SB
8128 case cdk_error:
8129 return error_mark_node;
058b15c1 8130
b08f991d
SB
8131 default:
8132 gcc_unreachable ();
058b15c1
MM
8133 }
8134 if (id_declarator->kind == cdk_id)
8135 break;
8136 }
8d08fdba 8137
fa6098f8 8138 /* [dcl.fct.edf]
3db45ab5 8139
fa6098f8
MM
8140 The declarator in a function-definition shall have the form
8141 D1 ( parameter-declaration-clause) ... */
058b15c1 8142 if (funcdef_flag && innermost_code != cdk_function)
fa6098f8
MM
8143 {
8144 error ("function definition does not declare parameters");
8145 return error_mark_node;
8146 }
8d08fdba 8147
e1cd6e56 8148 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
058b15c1 8149 && innermost_code != cdk_function
62d1db17 8150 && ! (ctype && !declspecs->any_specifiers_p))
e1cd6e56 8151 {
2d01edd7 8152 error ("declaration of %qD as non-function", dname);
943e3ede 8153 return error_mark_node;
e1cd6e56
MS
8154 }
8155
8d08fdba
MS
8156 /* Anything declared one level down from the top level
8157 must be one of the parameters of a function
8158 (because the body is at least two levels down). */
8159
8160 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
8161 by not allowing C++ class definitions to specify their parameters
8162 with xdecls (must be spec.d in the parmlist).
8163
8164 Since we now wait to push a class scope until we are sure that
8165 we are in a legitimate method context, we must set oldcname
a9aedbc2
MS
8166 explicitly (since current_class_name is not yet alive).
8167
8168 We also want to avoid calling this a PARM if it is in a namespace. */
8d08fdba 8169
9188c363 8170 if (decl_context == NORMAL && !toplevel_bindings_p ())
a9aedbc2 8171 {
e2500fed 8172 struct cp_binding_level *b = current_binding_level;
ff955512 8173 current_binding_level = b->level_chain;
a9aedbc2
MS
8174 if (current_binding_level != 0 && toplevel_bindings_p ())
8175 decl_context = PARM;
ff955512 8176 current_binding_level = b;
a9aedbc2 8177 }
8d08fdba 8178
34fc957d
NS
8179 if (name == NULL)
8180 name = decl_context == PARM ? "parameter" : "type name";
68642fb6 8181
91ea6df3
GDR
8182 if (constexpr_p && declspecs->specs[(int)ds_typedef])
8183 {
8184 error ("%<constexpr%> cannot appear in a typedef declaration");
8185 return error_mark_node;
8186 }
8187
62d1db17
MM
8188 /* If there were multiple types specified in the decl-specifier-seq,
8189 issue an error message. */
8190 if (declspecs->multiple_types_p)
32273f9f
LM
8191 {
8192 error ("two or more data types in declaration of %qs", name);
8193 return error_mark_node;
8194 }
8195
9b70c6b0
PC
8196 if (declspecs->conflicting_specifiers_p)
8197 {
8198 error ("conflicting specifiers in declaration of %qs", name);
8199 return error_mark_node;
8200 }
8201
62d1db17
MM
8202 /* Extract the basic type from the decl-specifier-seq. */
8203 type = declspecs->type;
8204 if (type == error_mark_node)
2cfe82fe
ZW
8205 {
8206 type = NULL_TREE;
8207 type_was_error_mark_node = true;
8208 }
62d1db17
MM
8209 /* If the entire declaration is itself tagged as deprecated then
8210 suppress reports of deprecated items. */
8211 if (type && TREE_DEPRECATED (type)
8212 && deprecated_state != DEPRECATED_SUPPRESS)
9b86d6bb 8213 warn_deprecated_use (type, NULL_TREE);
62d1db17 8214 if (type && TREE_CODE (type) == TYPE_DECL)
8d08fdba 8215 {
62d1db17
MM
8216 typedef_decl = type;
8217 type = TREE_TYPE (typedef_decl);
823dd937
JM
8218 if (TREE_DEPRECATED (type)
8219 && DECL_ARTIFICIAL (typedef_decl)
8220 && deprecated_state != DEPRECATED_SUPPRESS)
9b86d6bb 8221 warn_deprecated_use (type, NULL_TREE);
62d1db17
MM
8222 }
8223 /* No type at all: default to `int', and set DEFAULTED_INT
8224 because it was not a user-defined typedef. */
1ff3c076 8225 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
62d1db17
MM
8226 {
8227 /* These imply 'int'. */
8228 type = integer_type_node;
8229 defaulted_int = 1;
8230 }
8231 /* Gather flags. */
8232 explicit_int = declspecs->explicit_int_p;
8233 explicit_char = declspecs->explicit_char_p;
7a1f3f5f 8234
8d6e459d
NS
8235#if 0
8236 /* See the code below that used this. */
8237 if (typedef_decl)
8238 decl_attr = DECL_ATTRIBUTES (typedef_decl);
8239#endif
8d08fdba
MS
8240 typedef_type = type;
8241
a3203465 8242
44d10c10
PB
8243 if (sfk != sfk_conversion)
8244 ctor_return_type = ctype;
8245
3dbc07b6
MM
8246 if (sfk != sfk_none)
8247 type = check_special_function_return_type (sfk, type,
3dbc07b6
MM
8248 ctor_return_type);
8249 else if (type == NULL_TREE)
8d08fdba 8250 {
3dbc07b6
MM
8251 int is_main;
8252
8d08fdba 8253 explicit_int = -1;
3dbc07b6 8254
0fd0b7ee
JM
8255 /* We handle `main' specially here, because 'main () { }' is so
8256 common. With no options, it is allowed. With -Wreturn-type,
8257 it is a warning. It is only an error with -pedantic-errors. */
3dbc07b6 8258 is_main = (funcdef_flag
b960ce04
PC
8259 && dname && TREE_CODE (dname) == IDENTIFIER_NODE
8260 && MAIN_NAME_P (dname)
3dbc07b6
MM
8261 && ctype == NULL_TREE
8262 && in_namespace == NULL_TREE
8263 && current_namespace == global_namespace);
8264
2cfe82fe
ZW
8265 if (type_was_error_mark_node)
8266 /* We've already issued an error, don't complain more. */;
8267 else if (in_system_header || flag_ms_extensions)
3dbc07b6 8268 /* Allow it, sigh. */;
37ec60ed 8269 else if (! is_main)
cbe5f3b3 8270 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
37ec60ed 8271 else if (pedantic)
509c9d60 8272 pedwarn (input_location, OPT_pedantic,
fcf73884 8273 "ISO C++ forbids declaration of %qs with no type", name);
b10fc6f5
GDR
8274 else
8275 warning (OPT_Wreturn_type,
8276 "ISO C++ forbids declaration of %qs with no type", name);
41eff652 8277
3dbc07b6 8278 type = integer_type_node;
51c184be 8279 }
caf93cb0 8280
8d08fdba
MS
8281 ctype = NULL_TREE;
8282
8283 /* Now process the modifiers that were specified
8284 and check for invalid combinations. */
8285
8286 /* Long double is a special combination. */
3cc189f5 8287 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8d08fdba 8288 {
1ff3c076 8289 long_p = false;
a3360e77
JM
8290 type = cp_build_qualified_type (long_double_type_node,
8291 cp_type_quals (type));
8d08fdba
MS
8292 }
8293
8294 /* Check all other uses of type modifiers. */
8295
1ff3c076 8296 if (unsigned_p || signed_p || long_p || short_p)
8d08fdba
MS
8297 {
8298 int ok = 0;
8299
3cc189f5
VR
8300 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
8301 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
1ff3c076 8302 else if (signed_p && unsigned_p)
3cc189f5
VR
8303 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
8304 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
8305 error ("%<long long%> invalid for %qs", name);
a6766312
KT
8306 else if (explicit_int128 && TREE_CODE (type) != INTEGER_TYPE)
8307 error ("%<__int128%> invalid for %qs", name);
3cc189f5
VR
8308 else if (long_p && TREE_CODE (type) == REAL_TYPE)
8309 error ("%<long%> invalid for %qs", name);
8310 else if (short_p && TREE_CODE (type) == REAL_TYPE)
8311 error ("%<short%> invalid for %qs", name);
5d48268f
VR
8312 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
8313 error ("%<long%> or %<short%> invalid for %qs", name);
a6766312
KT
8314 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
8315 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
3cc189f5
VR
8316 else if ((long_p || short_p) && explicit_char)
8317 error ("%<long%> or %<short%> specified with char for %qs", name);
8318 else if (long_p && short_p)
8319 error ("%<long%> and %<short%> specified together for %qs", name);
b6baa67d
KVH
8320 else if (type == char16_type_node || type == char32_type_node)
8321 {
8322 if (signed_p || unsigned_p)
8323 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8324 else if (short_p || long_p)
8325 error ("%<short%> or %<long%> invalid for %qs", name);
8326 }
8d08fdba
MS
8327 else
8328 {
8329 ok = 1;
a6766312 8330 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
8d08fdba 8331 {
509c9d60 8332 pedwarn (input_location, OPT_pedantic,
fcf73884 8333 "long, short, signed or unsigned used invalidly for %qs",
8d08fdba
MS
8334 name);
8335 if (flag_pedantic_errors)
8336 ok = 0;
8337 }
a6766312
KT
8338 if (explicit_int128)
8339 {
8340 if (int128_integer_type_node == NULL_TREE)
8341 {
8342 error ("%<__int128%> is not supported by this target");
8343 ok = 0;
8344 }
8345 else if (pedantic)
8346 {
8347 pedwarn (input_location, OPT_pedantic,
8348 "ISO C++ does not support %<__int128%> for %qs",
8349 name);
8350 if (flag_pedantic_errors)
8351 ok = 0;
8352 }
8353 }
8d08fdba
MS
8354 }
8355
8356 /* Discard the type modifiers if they are invalid. */
8357 if (! ok)
8358 {
1ff3c076
MM
8359 unsigned_p = false;
8360 signed_p = false;
8361 long_p = false;
8362 short_p = false;
8d08fdba 8363 longlong = 0;
a6766312 8364 explicit_int128 = false;
8d08fdba
MS
8365 }
8366 }
8367
8368 /* Decide whether an integer type is signed or not.
8369 Optionally treat bitfields as signed by default. */
1ff3c076 8370 if (unsigned_p
b89c5a7b
MM
8371 /* [class.bit]
8372
8373 It is implementation-defined whether a plain (neither
8374 explicitly signed or unsigned) char, short, int, or long
8375 bit-field is signed or unsigned.
68642fb6 8376
b89c5a7b
MM
8377 Naturally, we extend this to long long as well. Note that
8378 this does not include wchar_t. */
8379 || (bitfield && !flag_signed_bitfields
1ff3c076 8380 && !signed_p
b89c5a7b
MM
8381 /* A typedef for plain `int' without `signed' can be
8382 controlled just like plain `int', but a typedef for
8383 `signed int' cannot be so controlled. */
68642fb6 8384 && !(typedef_decl
29bbeb1c 8385 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
b38a05d0 8386 && TREE_CODE (type) == INTEGER_TYPE
29bbeb1c 8387 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8d08fdba 8388 {
a6766312
KT
8389 if (explicit_int128)
8390 type = int128_unsigned_type_node;
8391 else if (longlong)
8d08fdba 8392 type = long_long_unsigned_type_node;
1ff3c076 8393 else if (long_p)
8d08fdba 8394 type = long_unsigned_type_node;
1ff3c076 8395 else if (short_p)
8d08fdba
MS
8396 type = short_unsigned_type_node;
8397 else if (type == char_type_node)
8398 type = unsigned_char_type_node;
8399 else if (typedef_decl)
ca5ba2a3 8400 type = unsigned_type_for (type);
8d08fdba
MS
8401 else
8402 type = unsigned_type_node;
8403 }
1ff3c076 8404 else if (signed_p && type == char_type_node)
8d08fdba 8405 type = signed_char_type_node;
a6766312
KT
8406 else if (explicit_int128)
8407 type = int128_integer_type_node;
8d08fdba
MS
8408 else if (longlong)
8409 type = long_long_integer_type_node;
1ff3c076 8410 else if (long_p)
8d08fdba 8411 type = long_integer_type_node;
1ff3c076 8412 else if (short_p)
8d08fdba
MS
8413 type = short_integer_type_node;
8414
62d1db17 8415 if (declspecs->specs[(int)ds_complex])
37c46b43 8416 {
1ff3c076 8417 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
2d01edd7 8418 error ("complex invalid for %qs", name);
37c46b43
MS
8419 /* If we just have "complex", it is equivalent to
8420 "complex double", but if any modifiers at all are specified it is
8421 the complex form of TYPE. E.g, "complex short" is
8422 "complex short int". */
a6766312 8423 else if (defaulted_int && ! longlong && ! explicit_int128
1ff3c076 8424 && ! (long_p || short_p || signed_p || unsigned_p))
37c46b43
MS
8425 type = complex_double_type_node;
8426 else if (type == integer_type_node)
8427 type = complex_integer_type_node;
8428 else if (type == float_type_node)
8429 type = complex_float_type_node;
8430 else if (type == double_type_node)
8431 type = complex_double_type_node;
8432 else if (type == long_double_type_node)
8433 type = complex_long_double_type_node;
8434 else
8435 type = build_complex_type (type);
8436 }
8437
4f2b0fb2 8438 type_quals = TYPE_UNQUALIFIED;
62d1db17 8439 if (declspecs->specs[(int)ds_const])
4f2b0fb2 8440 type_quals |= TYPE_QUAL_CONST;
62d1db17 8441 if (declspecs->specs[(int)ds_volatile])
4f2b0fb2 8442 type_quals |= TYPE_QUAL_VOLATILE;
62d1db17 8443 if (declspecs->specs[(int)ds_restrict])
4f2b0fb2
NS
8444 type_quals |= TYPE_QUAL_RESTRICT;
8445 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
2d01edd7 8446 error ("qualifiers are not allowed on declaration of %<operator %T%>",
0cbd7506 8447 ctor_return_type);
3ac3d9ea 8448
4f2b0fb2
NS
8449 type_quals |= cp_type_quals (type);
8450 type = cp_build_qualified_type_real
8451 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
23fca1f5 8452 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
4f2b0fb2
NS
8453 /* We might have ignored or rejected some of the qualifiers. */
8454 type_quals = cp_type_quals (type);
caf93cb0 8455
8d08fdba 8456 staticp = 0;
62d1db17
MM
8457 inlinep = !! declspecs->specs[(int)ds_inline];
8458 virtualp = !! declspecs->specs[(int)ds_virtual];
8459 explicitp = !! declspecs->specs[(int)ds_explicit];
8d08fdba 8460
1ff3c076
MM
8461 storage_class = declspecs->storage_class;
8462 if (storage_class == sc_static)
8d08fdba
MS
8463 staticp = 1 + (decl_context == FIELD);
8464
8465 if (virtualp && staticp == 2)
8466 {
2d01edd7 8467 error ("member %qD cannot be declared both virtual and static", dname);
7e1e0765 8468 storage_class = sc_none;
8d08fdba
MS
8469 staticp = 0;
8470 }
62d1db17 8471 friendp = !! declspecs->specs[(int)ds_friend];
8d08fdba 8472
d1c78882 8473 if (dependent_name && !friendp)
d5614afb 8474 {
d1c78882 8475 error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
13dbe691 8476 return error_mark_node;
d5614afb 8477 }
8d08fdba 8478
62d1db17
MM
8479 /* Issue errors about use of storage classes for parameters. */
8480 if (decl_context == PARM)
8d08fdba 8481 {
62d1db17 8482 if (declspecs->specs[(int)ds_typedef])
709f9dcf
VR
8483 {
8484 error ("typedef declaration invalid in parameter declaration");
8485 return error_mark_node;
8486 }
0229b692
PC
8487 else if (template_parm_flag && storage_class != sc_none)
8488 {
8489 error ("storage class specified for template parameter %qs", name);
8490 return error_mark_node;
8491 }
1ff3c076
MM
8492 else if (storage_class == sc_static
8493 || storage_class == sc_extern
8494 || thread_p)
8251199e 8495 error ("storage class specifiers invalid in parameter declarations");
3f50c846
JM
8496
8497 if (type_uses_auto (type))
8498 {
8499 error ("parameter declared %<auto%>");
8500 type = error_mark_node;
8501 }
7ecbca9d
GDR
8502
8503 /* Function parameters cannot be constexpr. If we saw one, moan
8504 and pretend it wasn't there. */
8505 if (constexpr_p)
8506 {
8507 error ("a parameter cannot be declared %<constexpr%>");
8508 constexpr_p = 0;
8509 }
8d08fdba
MS
8510 }
8511
8512 /* Give error if `virtual' is used outside of class declaration. */
b7484fbe
MS
8513 if (virtualp
8514 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba 8515 {
bcac2b89 8516 error ("%<virtual%> outside class declaration");
8d08fdba
MS
8517 virtualp = 0;
8518 }
8d08fdba
MS
8519
8520 /* Static anonymous unions are dealt with here. */
8521 if (staticp && decl_context == TYPENAME
62d1db17
MM
8522 && declspecs->type
8523 && ANON_AGGR_TYPE_P (declspecs->type))
8d08fdba
MS
8524 decl_context = FIELD;
8525
8d08fdba
MS
8526 /* Warn about storage classes that are invalid for certain
8527 kinds of declarations (parameters, typenames, etc.). */
3e66d096
JJ
8528 if (thread_p
8529 && ((storage_class
8530 && storage_class != sc_extern
8531 && storage_class != sc_static)
8532 || declspecs->specs[(int)ds_typedef]))
8533 {
8534 error ("multiple storage classes in declaration of %qs", name);
8535 thread_p = false;
8536 }
9b70c6b0
PC
8537 if (decl_context != NORMAL
8538 && ((storage_class != sc_none
8539 && storage_class != sc_mutable)
8540 || thread_p))
8d08fdba 8541 {
db5ae43f 8542 if ((decl_context == PARM || decl_context == CATCHPARM)
1ff3c076
MM
8543 && (storage_class == sc_register
8544 || storage_class == sc_auto))
8d08fdba 8545 ;
62d1db17 8546 else if (declspecs->specs[(int)ds_typedef])
fc378698 8547 ;
8d08fdba 8548 else if (decl_context == FIELD
f4f206f4 8549 /* C++ allows static class elements. */
1ff3c076 8550 && storage_class == sc_static)
d363e7bf
AJ
8551 /* C++ also allows inlines and signed and unsigned elements,
8552 but in those cases we don't come in here. */
8d08fdba
MS
8553 ;
8554 else
8555 {
8556 if (decl_context == FIELD)
389c6c8b 8557 error ("storage class specified for %qs", name);
8d08fdba 8558 else
b9d12519
KG
8559 {
8560 if (decl_context == PARM || decl_context == CATCHPARM)
2d01edd7 8561 error ("storage class specified for parameter %qs", name);
b9d12519
KG
8562 else
8563 error ("storage class specified for typename");
8564 }
1ff3c076
MM
8565 if (storage_class == sc_register
8566 || storage_class == sc_auto
8567 || storage_class == sc_extern
8568 || thread_p)
8569 storage_class = sc_none;
8d08fdba
MS
8570 }
8571 }
1ff3c076 8572 else if (storage_class == sc_extern && funcdef_flag
a9aedbc2 8573 && ! toplevel_bindings_p ())
2d01edd7 8574 error ("nested function %qs declared %<extern%>", name);
a9aedbc2 8575 else if (toplevel_bindings_p ())
8d08fdba 8576 {
1ff3c076 8577 if (storage_class == sc_auto)
2d01edd7 8578 error ("top-level declaration of %qs specifies %<auto%>", name);
8d08fdba 8579 }
1ff3c076
MM
8580 else if (thread_p
8581 && storage_class != sc_extern
8582 && storage_class != sc_static)
7a1f3f5f 8583 {
2d01edd7 8584 error ("function-scope %qs implicitly auto and declared %<__thread%>",
7a1f3f5f 8585 name);
1ff3c076 8586 thread_p = false;
7a1f3f5f 8587 }
8d08fdba 8588
1ff3c076 8589 if (storage_class && friendp)
ff7437d0
SM
8590 {
8591 error ("storage class specifiers invalid in friend function declarations");
8592 storage_class = sc_none;
8593 staticp = 0;
8594 }
909e536a 8595
058b15c1
MM
8596 if (!id_declarator)
8597 unqualified_id = NULL_TREE;
8598 else
8d08fdba 8599 {
1d786913 8600 unqualified_id = id_declarator->u.id.unqualified_name;
058b15c1 8601 switch (TREE_CODE (unqualified_id))
8d08fdba 8602 {
058b15c1 8603 case BIT_NOT_EXPR:
bd967b22
JM
8604 unqualified_id = TREE_OPERAND (unqualified_id, 0);
8605 if (TYPE_P (unqualified_id))
8606 unqualified_id = constructor_name (unqualified_id);
058b15c1 8607 break;
caf93cb0 8608
058b15c1
MM
8609 case IDENTIFIER_NODE:
8610 case TEMPLATE_ID_EXPR:
52fbc847 8611 break;
caf93cb0 8612
058b15c1 8613 default:
8dc2b103 8614 gcc_unreachable ();
058b15c1
MM
8615 }
8616 }
52fbc847 8617
058b15c1
MM
8618 /* Determine the type of the entity declared by recurring on the
8619 declarator. */
f4f18103 8620 for (; declarator; declarator = declarator->declarator)
058b15c1
MM
8621 {
8622 const cp_declarator *inner_declarator;
8623 tree attrs;
8d08fdba 8624
058b15c1
MM
8625 if (type == error_mark_node)
8626 return error_mark_node;
c1b177ec 8627
058b15c1
MM
8628 attrs = declarator->attributes;
8629 if (attrs)
8630 {
8631 int attr_flags;
caf93cb0 8632
058b15c1
MM
8633 attr_flags = 0;
8634 if (declarator == NULL || declarator->kind == cdk_id)
8635 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8636 if (declarator->kind == cdk_function)
8637 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8638 if (declarator->kind == cdk_array)
8639 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8640 returned_attrs = decl_attributes (&type,
8641 chainon (returned_attrs, attrs),
8642 attr_flags);
8643 }
8644
f4f18103
MM
8645 if (declarator->kind == cdk_id)
8646 break;
8647
8648 inner_declarator = declarator->declarator;
8649
058b15c1
MM
8650 switch (declarator->kind)
8651 {
8652 case cdk_array:
caf93cb0 8653 type = create_array_type_for_decl (dname, type,
058b15c1 8654 declarator->u.array.bounds);
8d08fdba
MS
8655 break;
8656
058b15c1 8657 case cdk_function:
8d08fdba
MS
8658 {
8659 tree arg_types;
f376e137 8660 int funcdecl_p;
8d08fdba
MS
8661
8662 /* Declaring a function type.
8663 Make sure we have a valid type for the function to return. */
8d08fdba 8664
1891dec4
DM
8665 if (type_quals != TYPE_UNQUALIFIED)
8666 {
8667 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
5db2e9ca 8668 warning (OPT_Wignored_qualifiers,
1891dec4
DM
8669 "type qualifiers ignored on function return type");
8670 /* We now know that the TYPE_QUALS don't apply to the
8671 decl, but to its return type. */
8672 type_quals = TYPE_UNQUALIFIED;
1891dec4 8673 }
40449a90
SL
8674 errmsg = targetm.invalid_return_type (type);
8675 if (errmsg)
8676 {
8677 error (errmsg);
8678 type = integer_type_node;
8679 }
8d08fdba 8680
e3276457 8681 /* Error about some types functions can't return. */
8d08fdba
MS
8682
8683 if (TREE_CODE (type) == FUNCTION_TYPE)
8684 {
2d01edd7 8685 error ("%qs declared as function returning a function", name);
e3276457 8686 return error_mark_node;
8d08fdba
MS
8687 }
8688 if (TREE_CODE (type) == ARRAY_TYPE)
8689 {
2d01edd7 8690 error ("%qs declared as function returning an array", name);
e3276457 8691 return error_mark_node;
8d08fdba
MS
8692 }
8693
b7484fbe 8694 /* Pick up type qualifiers which should be applied to `this'. */
e2537f2c 8695 memfn_quals = declarator->u.function.qualifiers;
b7484fbe 8696
c11b6f21 8697 /* Pick up the exception specifications. */
058b15c1 8698 raises = declarator->u.function.exception_specification;
c11b6f21 8699
4f48b9c1
JJ
8700 /* Say it's a definition only for the CALL_EXPR
8701 closest to the identifier. */
8702 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
8703
f57ca1ea 8704 /* Handle a late-specified return type. */
4f48b9c1
JJ
8705 if (funcdecl_p)
8706 {
8707 if (type_uses_auto (type))
8708 {
64e12c68 8709 if (!declarator->u.function.late_return_type)
4f48b9c1 8710 {
3f50c846 8711 error ("%qs function uses %<auto%> type specifier without"
4f48b9c1
JJ
8712 " late return type", name);
8713 return error_mark_node;
8714 }
8715 else if (!is_auto (type))
8716 {
3f50c846
JM
8717 error ("%qs function with late return type has"
8718 " %qT as its type rather than plain %<auto%>",
8719 name, type);
4f48b9c1
JJ
8720 return error_mark_node;
8721 }
8722 }
8723 else if (declarator->u.function.late_return_type)
8724 {
8725 error ("%qs function with late return type not declared"
3f50c846 8726 " with %<auto%> type specifier", name);
4f48b9c1
JJ
8727 return error_mark_node;
8728 }
8729 }
f57ca1ea
JM
8730 type = splice_late_return_type
8731 (type, declarator->u.function.late_return_type);
8732 if (type == error_mark_node)
8733 return error_mark_node;
8734
8d08fdba
MS
8735 if (ctype == NULL_TREE
8736 && decl_context == FIELD
f376e137 8737 && funcdecl_p
8d08fdba
MS
8738 && (friendp == 0 || dname == current_class_name))
8739 ctype = current_class_type;
8740
058b15c1
MM
8741 if (ctype && (sfk == sfk_constructor
8742 || sfk == sfk_destructor))
8d08fdba
MS
8743 {
8744 /* We are within a class's scope. If our declarator name
8745 is the same as the class name, and we are defining
8746 a function, then it is a constructor/destructor, and
8747 therefore returns a void type. */
3db45ab5 8748
e2537f2c
MM
8749 /* ISO C++ 12.4/2. A destructor may not be declared
8750 const or volatile. A destructor may not be
8751 static.
3db45ab5 8752
e2537f2c
MM
8753 ISO C++ 12.1. A constructor may not be declared
8754 const or volatile. A constructor may not be
8755 virtual. A constructor may not be static. */
3db45ab5 8756 if (staticp == 2)
e2537f2c
MM
8757 error ((flags == DTOR_FLAG)
8758 ? "destructor cannot be static member function"
8759 : "constructor cannot be static member function");
8760 if (memfn_quals)
8d08fdba 8761 {
e2537f2c
MM
8762 error ((flags == DTOR_FLAG)
8763 ? "destructors may not be cv-qualified"
8764 : "constructors may not be cv-qualified");
8765 memfn_quals = TYPE_UNQUALIFIED;
8d08fdba 8766 }
e2537f2c
MM
8767
8768 if (decl_context == FIELD
8769 && !member_function_or_else (ctype,
8770 current_class_type,
8771 flags))
13dbe691 8772 return error_mark_node;
e2537f2c
MM
8773
8774 if (flags != DTOR_FLAG)
8d08fdba 8775 {
e2537f2c 8776 /* It's a constructor. */
db5ae43f
MS
8777 if (explicitp == 1)
8778 explicitp = 2;
8d08fdba
MS
8779 if (virtualp)
8780 {
cbe5f3b3 8781 permerror (input_location, "constructors cannot be declared virtual");
8d08fdba
MS
8782 virtualp = 0;
8783 }
7137605e
MM
8784 if (decl_context == FIELD
8785 && sfk != sfk_constructor)
13dbe691 8786 return error_mark_node;
8d08fdba
MS
8787 }
8788 if (decl_context == FIELD)
8789 staticp = 0;
8790 }
b7484fbe 8791 else if (friendp)
8d08fdba 8792 {
b7484fbe 8793 if (initialized)
d8a07487 8794 error ("can%'t initialize friend function %qs", name);
b7484fbe
MS
8795 if (virtualp)
8796 {
8797 /* Cannot be both friend and virtual. */
8251199e 8798 error ("virtual functions cannot be friends");
b7484fbe
MS
8799 friendp = 0;
8800 }
28cbf42c 8801 if (decl_context == NORMAL)
8251199e 8802 error ("friend declaration not in class definition");
28cbf42c 8803 if (current_function_decl && funcdef_flag)
d8a07487 8804 error ("can%'t define friend function %qs in a local "
0cbd7506
MS
8805 "class definition",
8806 name);
8d08fdba 8807 }
e57d93c6
JM
8808 else if (ctype && sfk == sfk_conversion)
8809 {
8810 if (explicitp == 1)
8811 {
848f237b 8812 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
e57d93c6
JM
8813 explicitp = 2;
8814 }
8815 }
8d08fdba 8816
caf93cb0 8817 arg_types = grokparms (declarator->u.function.parameters,
058b15c1 8818 &parms);
8d08fdba 8819
058b15c1
MM
8820 if (inner_declarator
8821 && inner_declarator->kind == cdk_id
8822 && inner_declarator->u.id.sfk == sfk_destructor
8823 && arg_types != void_list_node)
8d08fdba 8824 {
058b15c1
MM
8825 error ("destructors may not have parameters");
8826 arg_types = void_list_node;
8827 parms = NULL_TREE;
8d08fdba 8828 }
caf93cb0 8829
d22c8596 8830 type = build_function_type (type, arg_types);
8d08fdba
MS
8831 }
8832 break;
8833
058b15c1
MM
8834 case cdk_pointer:
8835 case cdk_reference:
8836 case cdk_ptrmem:
8d08fdba
MS
8837 /* Filter out pointers-to-references and references-to-references.
8838 We can get these if a TYPE_DECL is used. */
8839
8840 if (TREE_CODE (type) == REFERENCE_TYPE)
8841 {
8af2fec4
RY
8842 if (declarator->kind != cdk_reference)
8843 {
8844 error ("cannot declare pointer to %q#T", type);
8845 type = TREE_TYPE (type);
8846 }
8847
8848 /* In C++0x, we allow reference to reference declarations
8849 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
8850 and template type arguments [14.3.1/4 temp.arg.type]. The
8851 check for direct reference to reference declarations, which
8852 are still forbidden, occurs below. Reasoning behind the change
8853 can be found in DR106, DR540, and the rvalue reference
8854 proposals. */
c1ae8be5 8855 else if (cxx_dialect == cxx98)
8af2fec4
RY
8856 {
8857 error ("cannot declare reference to %q#T", type);
8858 type = TREE_TYPE (type);
8859 }
a5894242 8860 }
058b15c1
MM
8861 else if (VOID_TYPE_P (type))
8862 {
8863 if (declarator->kind == cdk_reference)
2d01edd7 8864 error ("cannot declare reference to %q#T", type);
058b15c1 8865 else if (declarator->kind == cdk_ptrmem)
2d01edd7 8866 error ("cannot declare pointer to %q#T member", type);
058b15c1 8867 }
61a127b3 8868
91063b51
MM
8869 /* We now know that the TYPE_QUALS don't apply to the decl,
8870 but to the target of the pointer. */
8871 type_quals = TYPE_UNQUALIFIED;
8d08fdba 8872
058b15c1 8873 if (declarator->kind == cdk_ptrmem
1b021ff4
JJ
8874 && (TREE_CODE (type) == FUNCTION_TYPE
8875 || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
058b15c1 8876 {
2872152c 8877 memfn_quals |= type_memfn_quals (type);
3db45ab5 8878 type = build_memfn_type (type,
e2537f2c
MM
8879 declarator->u.pointer.class_type,
8880 memfn_quals);
6809f4b5
PC
8881 if (type == error_mark_node)
8882 return error_mark_node;
e2537f2c 8883 memfn_quals = TYPE_UNQUALIFIED;
058b15c1
MM
8884 }
8885
0d9c0892 8886 if (TREE_CODE (type) == FUNCTION_TYPE
2872152c 8887 && type_memfn_quals (type) != TYPE_UNQUALIFIED)
24ea727a
SZ
8888 error (declarator->kind == cdk_reference
8889 ? G_("cannot declare reference to qualified function type %qT")
8890 : G_("cannot declare pointer to qualified function type %qT"),
0d9c0892
JM
8891 type);
8892
6ab4e49c
JM
8893 /* When the pointed-to type involves components of variable size,
8894 care must be taken to ensure that the size evaluation code is
8895 emitted early enough to dominate all the possible later uses
8896 and late enough for the variables on which it depends to have
8897 been assigned.
8898
8899 This is expected to happen automatically when the pointed-to
8900 type has a name/declaration of it's own, but special attention
8901 is required if the type is anonymous.
8902
8903 We handle the NORMAL and FIELD contexts here by inserting a
8904 dummy statement that just evaluates the size at a safe point
8905 and ensures it is not deferred until e.g. within a deeper
8906 conditional context (c++/43555).
8907
8908 We expect nothing to be needed here for PARM or TYPENAME.
8909 Evaluating the size at this point for TYPENAME would
8910 actually be incorrect, as we might be in the middle of an
8911 expression with side effects on the pointed-to type size
8912 "arguments" prior to the pointer declaration point and the
8913 size evaluation could end up prior to the side effects. */
8914
8915 if (!TYPE_NAME (type)
8916 && (decl_context == NORMAL || decl_context == FIELD)
8917 && at_function_scope_p ()
8918 && variably_modified_type_p (type, NULL_TREE))
8919 finish_expr_stmt (TYPE_SIZE (type));
8920
058b15c1 8921 if (declarator->kind == cdk_reference)
8d08fdba 8922 {
8af2fec4
RY
8923 /* In C++0x, the type we are creating a reference to might be
8924 a typedef which is itself a reference type. In that case,
8925 we follow the reference collapsing rules in
8926 [7.1.3/8 dcl.typedef] to create the final reference type:
8927
8928 "If a typedef TD names a type that is a reference to a type
8929 T, an attempt to create the type 'lvalue reference to cv TD'
8930 creates the type 'lvalue reference to T,' while an attempt
8931 to create the type "rvalue reference to cv TD' creates the
8932 type TD."
8933 */
dd29188b 8934 if (!VOID_TYPE_P (type))
8af2fec4
RY
8935 type = cp_build_reference_type
8936 ((TREE_CODE (type) == REFERENCE_TYPE
8937 ? TREE_TYPE (type) : type),
8938 (declarator->u.reference.rvalue_ref
8939 && (TREE_CODE(type) != REFERENCE_TYPE
8940 || TYPE_REF_IS_RVALUE (type))));
8941
8942 /* In C++0x, we need this check for direct reference to
8943 reference declarations, which are forbidden by
8944 [8.3.2/5 dcl.ref]. Reference to reference declarations
8945 are only allowed indirectly through typedefs and template
8946 type arguments. Example:
8947
8948 void foo(int & &); // invalid ref-to-ref decl
8949
8950 typedef int & int_ref;
8951 void foo(int_ref &); // valid ref-to-ref decl
8952 */
8953 if (inner_declarator && inner_declarator->kind == cdk_reference)
8954 error ("cannot declare reference to %q#T, which is not "
8955 "a typedef or a template type argument", type);
8d08fdba
MS
8956 }
8957 else if (TREE_CODE (type) == METHOD_TYPE)
d8f8dca1 8958 type = build_ptrmemfunc_type (build_pointer_type (type));
058b15c1 8959 else if (declarator->kind == cdk_ptrmem)
f4ed7d21 8960 {
63c9a190
MM
8961 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
8962 != NAMESPACE_DECL);
8963 if (declarator->u.pointer.class_type == error_mark_node)
4230cec2
NS
8964 /* We will already have complained. */
8965 type = error_mark_node;
f4ed7d21
NS
8966 else
8967 type = build_ptrmem_type (declarator->u.pointer.class_type,
8968 type);
8969 }
8d08fdba
MS
8970 else
8971 type = build_pointer_type (type);
8972
8973 /* Process a list of type modifier keywords (such as
8974 const or volatile) that were given inside the `*' or `&'. */
8975
058b15c1 8976 if (declarator->u.pointer.qualifiers)
8d08fdba 8977 {
caf93cb0
EC
8978 type
8979 = cp_build_qualified_type (type,
3c01e5df 8980 declarator->u.pointer.qualifiers);
4f2b0fb2 8981 type_quals = cp_type_quals (type);
8d08fdba 8982 }
8d08fdba
MS
8983 ctype = NULL_TREE;
8984 break;
8985
058b15c1
MM
8986 case cdk_error:
8987 break;
8d08fdba 8988
058b15c1 8989 default:
8dc2b103 8990 gcc_unreachable ();
058b15c1
MM
8991 }
8992 }
caf93cb0 8993
91ea6df3
GDR
8994 /* A `constexpr' specifier used in an object declaration declares
8995 the object as `const'. */
8996 if (constexpr_p && innermost_code != cdk_function)
8997 {
8998 if (type_quals & TYPE_QUAL_CONST)
8999 error ("both %<const%> and %<constexpr%> cannot be used here");
9000 if (type_quals & TYPE_QUAL_VOLATILE)
9001 error ("both %<volatile%> and %<constexpr%> cannot be used here");
9002 type_quals |= TYPE_QUAL_CONST;
9003 type = cp_build_qualified_type (type, type_quals);
9004 }
9005
058b15c1
MM
9006 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
9007 && TREE_CODE (type) != FUNCTION_TYPE
9008 && TREE_CODE (type) != METHOD_TYPE)
9009 {
2d01edd7 9010 error ("template-id %qD used as a declarator",
058b15c1
MM
9011 unqualified_id);
9012 unqualified_id = dname;
9013 }
386b8a85 9014
9c12301f
MM
9015 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
9016 qualified with a class-name, turn it into a METHOD_TYPE, unless
9017 we know that the function is static. We take advantage of this
9018 opportunity to do other processing that pertains to entities
9019 explicitly declared to be class members. Note that if DECLARATOR
9020 is non-NULL, we know it is a cdk_id declarator; otherwise, we
9021 would not have exited the loop above. */
caf93cb0 9022 if (declarator
1d786913
MM
9023 && declarator->u.id.qualifying_scope
9024 && TYPE_P (declarator->u.id.qualifying_scope))
058b15c1
MM
9025 {
9026 tree t;
8d08fdba 9027
1d786913
MM
9028 ctype = declarator->u.id.qualifying_scope;
9029 ctype = TYPE_MAIN_VARIANT (ctype);
058b15c1
MM
9030 t = ctype;
9031 while (t != NULL_TREE && CLASS_TYPE_P (t))
9032 {
9033 /* You're supposed to have one `template <...>' for every
9034 template class, but you don't need one for a full
9035 specialization. For example:
8d08fdba 9036
058b15c1
MM
9037 template <class T> struct S{};
9038 template <> struct S<int> { void f(); };
9039 void S<int>::f () {}
28cbf42c 9040
058b15c1
MM
9041 is correct; there shouldn't be a `template <>' for the
9042 definition of `S<int>::f'. */
f0d60e22
MM
9043 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
9044 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
9045 /* T is an explicit (not partial) specialization. All
9046 containing classes must therefore also be explicitly
9047 specialized. */
9048 break;
9049 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
058b15c1
MM
9050 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
9051 template_count += 1;
28cbf42c 9052
058b15c1
MM
9053 t = TYPE_MAIN_DECL (t);
9054 t = DECL_CONTEXT (t);
9055 }
8d08fdba 9056
058b15c1 9057 if (ctype == current_class_type)
59e7c84c
VR
9058 {
9059 if (friendp)
b46ce77f 9060 {
cbe5f3b3 9061 permerror (input_location, "member functions are implicitly friends of their class");
b46ce77f
SM
9062 friendp = 0;
9063 }
59e7c84c 9064 else
cbe5f3b3 9065 permerror (declarator->id_loc,
7e99f74b
MLI
9066 "extra qualification %<%T::%> on member %qs",
9067 ctype, name);
59e7c84c 9068 }
fa6098f8
MM
9069 else if (/* If the qualifying type is already complete, then we
9070 can skip the following checks. */
9071 !COMPLETE_TYPE_P (ctype)
cc328145
MM
9072 && (/* If the function is being defined, then
9073 qualifying type must certainly be complete. */
3db45ab5 9074 funcdef_flag
cc328145
MM
9075 /* A friend declaration of "T::f" is OK, even if
9076 "T" is a template parameter. But, if this
9077 function is not a friend, the qualifying type
9078 must be a class. */
9079 || (!friendp && !CLASS_TYPE_P (ctype))
9080 /* For a declaration, the type need not be
9081 complete, if either it is dependent (since there
9082 is no meaningful definition of complete in that
9083 case) or the qualifying class is currently being
9084 defined. */
fa6098f8
MM
9085 || !(dependent_type_p (ctype)
9086 || currently_open_class (ctype)))
9f9a713e 9087 /* Check that the qualifying type is complete. */
fa6098f8
MM
9088 && !complete_type_or_else (ctype, NULL_TREE))
9089 return error_mark_node;
058b15c1
MM
9090 else if (TREE_CODE (type) == FUNCTION_TYPE)
9091 {
357d956e
MM
9092 if (current_class_type
9093 && (!friendp || funcdef_flag))
9094 {
9095 error (funcdef_flag
9096 ? "cannot define member function %<%T::%s%> within %<%T%>"
9097 : "cannot declare member function %<%T::%s%> within %<%T%>",
9098 ctype, name, current_class_type);
9099 return error_mark_node;
9100 }
058b15c1 9101 }
62d1db17 9102 else if (declspecs->specs[(int)ds_typedef]
fa6098f8 9103 && current_class_type)
058b15c1 9104 {
fa6098f8
MM
9105 error ("cannot declare member %<%T::%s%> within %qT",
9106 ctype, name, current_class_type);
058b15c1 9107 return error_mark_node;
8d08fdba
MS
9108 }
9109 }
9110
91ea6df3
GDR
9111 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
9112 ctype = current_class_type;
9113
9114 /* A constexpr non-static member function is implicitly const. */
9115 if (constexpr_p && ctype && staticp == 0
9116 && TREE_CODE (type) == FUNCTION_TYPE
9117 && sfk != sfk_constructor && sfk != sfk_destructor)
9118 memfn_quals |= TYPE_QUAL_CONST;
9119
9c12301f
MM
9120 /* Now TYPE has the actual type. */
9121
91d231cb 9122 if (returned_attrs)
1eab9b56 9123 {
91d231cb
JM
9124 if (attrlist)
9125 *attrlist = chainon (returned_attrs, *attrlist);
1eab9b56 9126 else
91d231cb 9127 attrlist = &returned_attrs;
1eab9b56
JM
9128 }
9129
5d80a306
DG
9130 /* Handle parameter packs. */
9131 if (parameter_pack_p)
9132 {
9133 if (decl_context == PARM)
9134 /* Turn the type into a pack expansion.*/
9135 type = make_pack_expansion (type);
9136 else
9137 error ("non-parameter %qs cannot be a parameter pack", name);
9138 }
9139
55b3d665
JM
9140 /* Did array size calculations overflow? */
9141
9142 if (TREE_CODE (type) == ARRAY_TYPE
9143 && COMPLETE_TYPE_P (type)
96ce2ac9
JW
9144 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
9145 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
55b3d665 9146 {
2d01edd7 9147 error ("size of array %qs is too large", name);
aba649ba 9148 /* If we proceed with the array type as it is, we'll eventually
55b3d665
JM
9149 crash in tree_low_cst(). */
9150 type = error_mark_node;
9151 }
9152
2fff6d71 9153 if ((decl_context == FIELD || decl_context == PARM)
caf93cb0 9154 && !processing_template_decl
5377d5ba 9155 && variably_modified_type_p (type, NULL_TREE))
dac45b5c 9156 {
2fff6d71 9157 if (decl_context == FIELD)
2d01edd7 9158 error ("data member may not have variably modified type %qT", type);
2fff6d71 9159 else
2d01edd7 9160 error ("parameter may not have variably modified type %qT", type);
dac45b5c
MM
9161 type = error_mark_node;
9162 }
9163
34fc957d 9164 if (explicitp == 1 || (explicitp && friendp))
db5ae43f 9165 {
34fc957d 9166 /* [dcl.fct.spec] The explicit specifier shall only be used in
0cbd7506 9167 declarations of constructors within a class definition. */
2d01edd7 9168 error ("only declarations of constructors can be %<explicit%>");
db5ae43f
MS
9169 explicitp = 0;
9170 }
9171
1ff3c076 9172 if (storage_class == sc_mutable)
f30432d7 9173 {
4223f82f 9174 if (decl_context != FIELD || friendp)
0cbd7506 9175 {
2d01edd7 9176 error ("non-member %qs cannot be declared %<mutable%>", name);
1ff3c076 9177 storage_class = sc_none;
0cbd7506 9178 }
62d1db17 9179 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
f30432d7 9180 {
2d01edd7 9181 error ("non-object member %qs cannot be declared %<mutable%>", name);
1ff3c076 9182 storage_class = sc_none;
f30432d7 9183 }
34fc957d 9184 else if (TREE_CODE (type) == FUNCTION_TYPE
0cbd7506
MS
9185 || TREE_CODE (type) == METHOD_TYPE)
9186 {
2d01edd7 9187 error ("function %qs cannot be declared %<mutable%>", name);
1ff3c076 9188 storage_class = sc_none;
0cbd7506 9189 }
f30432d7
MS
9190 else if (staticp)
9191 {
2d01edd7 9192 error ("static %qs cannot be declared %<mutable%>", name);
1ff3c076 9193 storage_class = sc_none;
f30432d7 9194 }
34fc957d
NS
9195 else if (type_quals & TYPE_QUAL_CONST)
9196 {
2d01edd7 9197 error ("const %qs cannot be declared %<mutable%>", name);
1ff3c076 9198 storage_class = sc_none;
34fc957d 9199 }
f30432d7
MS
9200 }
9201
419c6212 9202 /* If this is declaring a typedef name, return a TYPE_DECL. */
62d1db17 9203 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
8d08fdba
MS
9204 {
9205 tree decl;
9206
9207 /* Note that the grammar rejects storage classes
9208 in typenames, fields or parameters. */
eff71ab0
PB
9209 if (current_lang_name == lang_name_java)
9210 TYPE_FOR_JAVA (type) = 1;
3db45ab5 9211
e2537f2c
MM
9212 /* This declaration:
9213
3db45ab5 9214 typedef void f(int) const;
e2537f2c 9215
3db45ab5 9216 declares a function type which is not a member of any
e2537f2c 9217 particular class, but which is cv-qualified; for
3db45ab5 9218 example "f S::*" declares a pointer to a const-qualified
e2537f2c
MM
9219 member function of S. We record the cv-qualification in the
9220 function type. */
9221 if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
771026dd 9222 {
2872152c 9223 type = apply_memfn_quals (type, memfn_quals);
771026dd
DG
9224
9225 /* We have now dealt with these qualifiers. */
9226 memfn_quals = TYPE_UNQUALIFIED;
9227 }
8d08fdba 9228
d2e5ee5c 9229 if (decl_context == FIELD)
e3016344 9230 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
d2e5ee5c 9231 else
c2255bc4 9232 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
dcbdf612 9233 if (id_declarator && declarator->u.id.qualifying_scope) {
c5d75364
MLI
9234 error_at (DECL_SOURCE_LOCATION (decl),
9235 "typedef name may not be a nested-name-specifier");
dcbdf612
SM
9236 TREE_TYPE (decl) = error_mark_node;
9237 }
e3016344
MM
9238
9239 if (decl_context != FIELD)
6bda7a5e 9240 {
6bda7a5e
NS
9241 if (!current_function_decl)
9242 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
1dc82a99 9243 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
c8094d83 9244 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
1dc82a99
MM
9245 (current_function_decl)))
9246 /* The TYPE_DECL is "abstract" because there will be
9247 clones of this constructor/destructor, and there will
9248 be copies of this TYPE_DECL generated in those
9249 clones. */
9250 DECL_ABSTRACT (decl) = 1;
6bda7a5e 9251 }
e3016344 9252 else if (constructor_name_p (unqualified_id, current_class_type))
cbe5f3b3 9253 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
37ec60ed
JW
9254 "as enclosing class",
9255 unqualified_id);
caf93cb0 9256
9188c363
MM
9257 /* If the user declares "typedef struct {...} foo" then the
9258 struct will have an anonymous name. Fill that name in now.
9259 Nothing can refer to it, so nothing needs know about the name
9260 change. */
8d08fdba 9261 if (type != error_mark_node
058b15c1 9262 && unqualified_id
8d08fdba
MS
9263 && TYPE_NAME (type)
9264 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1951a1b6 9265 && TYPE_ANONYMOUS_P (type)
89d684bb 9266 && cp_type_quals (type) == TYPE_UNQUALIFIED)
8d08fdba 9267 {
dcd08efc
JM
9268 tree t;
9269
2c73f9f5 9270 /* Replace the anonymous name with the real name everywhere. */
dcd08efc 9271 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
a417cdd9
CM
9272 {
9273 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
e62b90b4
DS
9274 /* We do not rename the debug info representing the
9275 anonymous tagged type because the standard says in
9276 [dcl.typedef] that the naming applies only for
9277 linkage purposes. */
9278 /*debug_hooks->set_name (t, decl);*/
9279 TYPE_NAME (t) = decl;
a417cdd9 9280 }
8d08fdba
MS
9281
9282 if (TYPE_LANG_SPECIFIC (type))
9283 TYPE_WAS_ANONYMOUS (type) = 1;
9284
33964bf4
MM
9285 /* If this is a typedef within a template class, the nested
9286 type is a (non-primary) template. The name for the
9287 template needs updating as well. */
9288 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
68642fb6 9289 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
33964bf4
MM
9290 = TYPE_IDENTIFIER (type);
9291
ecc607fc
JM
9292 /* Adjust linkage now that we aren't anonymous anymore. */
9293 set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
9294 determine_visibility (TYPE_MAIN_DECL (type));
9295
50a6dbd7
JM
9296 /* FIXME remangle member functions; member functions of a
9297 type with external linkage have external linkage. */
fc378698 9298 }
fc378698 9299
1ff3c076 9300 if (signed_p
8d08fdba
MS
9301 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9302 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9303
2f5b91f5 9304 bad_specifiers (decl, BSP_TYPE, virtualp,
e2537f2c 9305 memfn_quals != TYPE_UNQUALIFIED,
c91a56d2
MS
9306 inlinep, friendp, raises != NULL_TREE);
9307
8d08fdba
MS
9308 return decl;
9309 }
9310
9311 /* Detect the case of an array type of unspecified size
9312 which came, as such, direct from a typedef name.
8d6e459d
NS
9313 We must copy the type, so that the array's domain can be
9314 individually set by the object's initializer. */
8d08fdba 9315
8d6e459d
NS
9316 if (type && typedef_type
9317 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
55b3d665 9318 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8d6e459d 9319 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
8d08fdba 9320
969fd501 9321 /* Detect where we're using a typedef of function type to declare a
4546865e 9322 function. PARMS will not be set, so we must create it now. */
caf93cb0 9323
969fd501
NS
9324 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
9325 {
9326 tree decls = NULL_TREE;
9327 tree args;
9328
7b3ad9f9
JM
9329 for (args = TYPE_ARG_TYPES (type);
9330 args && args != void_list_node;
9331 args = TREE_CHAIN (args))
969fd501 9332 {
8e51619a 9333 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
969fd501 9334
910ad8de 9335 DECL_CHAIN (decl) = decls;
969fd501
NS
9336 decls = decl;
9337 }
caf93cb0 9338
4546865e 9339 parms = nreverse (decls);
9804209d
DG
9340
9341 if (decl_context != TYPENAME)
0cbd7506
MS
9342 {
9343 /* A cv-qualifier-seq shall only be part of the function type
9344 for a non-static member function. [8.3.5/4 dcl.fct] */
2872152c 9345 if (type_memfn_quals (type) != TYPE_UNQUALIFIED
0cbd7506
MS
9346 && (current_class_type == NULL_TREE || staticp) )
9347 {
ebbc3ce1 9348 error (staticp
f88d05c0
DM
9349 ? G_("qualified function types cannot be used to "
9350 "declare static member functions")
9351 : G_("qualified function types cannot be used to "
9352 "declare free functions"));
0cbd7506
MS
9353 type = TYPE_MAIN_VARIANT (type);
9354 }
9355
9356 /* The qualifiers on the function type become the qualifiers on
9357 the non-static member function. */
2872152c 9358 memfn_quals |= type_memfn_quals (type);
e4672ccd 9359 type_quals = TYPE_UNQUALIFIED;
0cbd7506 9360 }
969fd501
NS
9361 }
9362
8d08fdba
MS
9363 /* If this is a type name (such as, in a cast or sizeof),
9364 compute the type and return it now. */
9365
9366 if (decl_context == TYPENAME)
9367 {
9368 /* Note that the grammar rejects storage classes
9369 in typenames, fields or parameters. */
91063b51 9370 if (type_quals != TYPE_UNQUALIFIED)
6eabb241 9371 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
9372
9373 /* Special case: "friend class foo" looks like a TYPENAME context. */
9374 if (friendp)
9375 {
91063b51 9376 if (type_quals != TYPE_UNQUALIFIED)
b7484fbe 9377 {
33bd39a2 9378 error ("type qualifiers specified for friend class declaration");
91063b51 9379 type_quals = TYPE_UNQUALIFIED;
b7484fbe
MS
9380 }
9381 if (inlinep)
9382 {
2d01edd7 9383 error ("%<inline%> specified for friend class declaration");
b7484fbe
MS
9384 inlinep = 0;
9385 }
f2ae0c45 9386
218e0eb6 9387 if (!current_aggr)
4b054b80 9388 {
218e0eb6 9389 /* Don't allow friend declaration without a class-key. */
4b054b80 9390 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
cbe5f3b3 9391 permerror (input_location, "template parameters cannot be friends");
f2ae0c45 9392 else if (TREE_CODE (type) == TYPENAME_TYPE)
cbe5f3b3 9393 permerror (input_location, "friend declaration requires class-key, "
37ec60ed
JW
9394 "i.e. %<friend class %T::%D%>",
9395 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
4b054b80 9396 else
cbe5f3b3 9397 permerror (input_location, "friend declaration requires class-key, "
37ec60ed
JW
9398 "i.e. %<friend %#T%>",
9399 type);
4b054b80 9400 }
b7484fbe
MS
9401
9402 /* Only try to do this stuff if we didn't already give up. */
9403 if (type != integer_type_node)
9404 {
9405 /* A friendly class? */
9406 if (current_class_type)
19db77ce
KL
9407 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9408 /*complain=*/true);
b7484fbe 9409 else
2d01edd7 9410 error ("trying to make class %qT a friend of global scope",
0cbd7506 9411 type);
d363e7bf 9412
b7484fbe
MS
9413 type = void_type_node;
9414 }
8d08fdba 9415 }
e2537f2c 9416 else if (memfn_quals)
8d08fdba 9417 {
0d9c0892
JM
9418 if (ctype == NULL_TREE
9419 && TREE_CODE (type) == METHOD_TYPE)
9420 ctype = TYPE_METHOD_BASETYPE (type);
9421
41cbc04c 9422 if (ctype)
e2537f2c 9423 type = build_memfn_type (type, ctype, memfn_quals);
0d9c0892
JM
9424 /* Core issue #547: need to allow this in template type args. */
9425 else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
2872152c 9426 type = apply_memfn_quals (type, memfn_quals);
0d9c0892
JM
9427 else
9428 error ("invalid qualifiers on non-member function type");
8d08fdba
MS
9429 }
9430
9431 return type;
9432 }
058b15c1 9433 else if (unqualified_id == NULL_TREE && decl_context != PARM
db5ae43f 9434 && decl_context != CATCHPARM
8d08fdba
MS
9435 && TREE_CODE (type) != UNION_TYPE
9436 && ! bitfield)
9437 {
2d01edd7 9438 error ("abstract declarator %qT used as declaration", type);
22ab714d 9439 return error_mark_node;
8d08fdba
MS
9440 }
9441
62e19030
MM
9442 /* Only functions may be declared using an operator-function-id. */
9443 if (unqualified_id
9444 && IDENTIFIER_OPNAME_P (unqualified_id)
9445 && TREE_CODE (type) != FUNCTION_TYPE
9446 && TREE_CODE (type) != METHOD_TYPE)
8d08fdba 9447 {
62e19030
MM
9448 error ("declaration of %qD as non-function", unqualified_id);
9449 return error_mark_node;
8d08fdba
MS
9450 }
9451
62e19030
MM
9452 /* We don't check parameter types here because we can emit a better
9453 error message later. */
9454 if (decl_context != PARM)
650fcd07
LM
9455 {
9456 type = check_var_type (unqualified_id, type);
9457 if (type == error_mark_node)
9458 return error_mark_node;
9459 }
62e19030 9460
8d08fdba
MS
9461 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9462 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
9463
14ae7e7d
JM
9464 if (decl_context == PARM || decl_context == CATCHPARM)
9465 {
9466 if (ctype || in_namespace)
2d01edd7 9467 error ("cannot use %<::%> in parameter declaration");
14ae7e7d
JM
9468
9469 /* A parameter declared as an array of T is really a pointer to T.
9470 One declared as a function is really a pointer to a function.
9471 One declared as a member is really a pointer to member. */
9472
9473 if (TREE_CODE (type) == ARRAY_TYPE)
9474 {
9475 /* Transfer const-ness of array into that of type pointed to. */
9476 type = build_pointer_type (TREE_TYPE (type));
91063b51 9477 type_quals = TYPE_UNQUALIFIED;
14ae7e7d
JM
9478 }
9479 else if (TREE_CODE (type) == FUNCTION_TYPE)
9480 type = build_pointer_type (type);
14ae7e7d 9481 }
68642fb6 9482
91ea6df3
GDR
9483 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9484 && !NEW_DELETE_OPNAME_P (unqualified_id))
9485 type = build_memfn_type (type, ctype, memfn_quals);
9486
8d08fdba 9487 {
926ce8bd 9488 tree decl;
8d08fdba
MS
9489
9490 if (decl_context == PARM)
9491 {
058b15c1 9492 decl = cp_build_parm_decl (unqualified_id, type);
8d08fdba 9493
2f5b91f5 9494 bad_specifiers (decl, BSP_PARM, virtualp,
e2537f2c 9495 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba 9496 inlinep, friendp, raises != NULL_TREE);
8d08fdba
MS
9497 }
9498 else if (decl_context == FIELD)
9499 {
01bf0f3e
JM
9500 /* The C99 flexible array extension. */
9501 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
9502 && TYPE_DOMAIN (type) == NULL_TREE)
9503 {
fa2200cb
JM
9504 tree itype = compute_array_index_type (dname, integer_zero_node,
9505 tf_warning_or_error);
01bf0f3e
JM
9506 type = build_cplus_array_type (TREE_TYPE (type), itype);
9507 }
9508
8d08fdba
MS
9509 if (type == error_mark_node)
9510 {
9511 /* Happens when declaring arrays of sizes which
9512 are error_mark_node, for example. */
9513 decl = NULL_TREE;
9514 }
997a088c 9515 else if (in_namespace && !friendp)
05008fb9
MM
9516 {
9517 /* Something like struct S { int N::j; }; */
2d01edd7 9518 error ("invalid use of %<::%>");
9a171ca4 9519 return error_mark_node;
05008fb9 9520 }
91ea6df3
GDR
9521 else if (TREE_CODE (type) == FUNCTION_TYPE
9522 || TREE_CODE (type) == METHOD_TYPE)
8d08fdba
MS
9523 {
9524 int publicp = 0;
e1467ff2 9525 tree function_context;
8d08fdba
MS
9526
9527 if (friendp == 0)
9528 {
91ea6df3 9529 gcc_assert (ctype);
8d08fdba
MS
9530
9531 /* ``A union may [ ... ] not [ have ] virtual functions.''
9532 ARM 9.5 */
9533 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9534 {
2d01edd7 9535 error ("function %qD declared virtual inside a union",
058b15c1 9536 unqualified_id);
13dbe691 9537 return error_mark_node;
8d08fdba
MS
9538 }
9539
058b15c1 9540 if (NEW_DELETE_OPNAME_P (unqualified_id))
8d08fdba
MS
9541 {
9542 if (virtualp)
9543 {
2d01edd7 9544 error ("%qD cannot be declared virtual, since it "
0cbd7506 9545 "is always static",
058b15c1 9546 unqualified_id);
8d08fdba
MS
9547 virtualp = 0;
9548 }
9549 }
8d08fdba
MS
9550 }
9551
88e95ee3 9552 /* Check that the name used for a destructor makes sense. */
6d2989e1 9553 if (sfk == sfk_destructor)
88e95ee3 9554 {
bd967b22
JM
9555 tree uqname = id_declarator->u.id.unqualified_name;
9556
6d2989e1
VR
9557 if (!ctype)
9558 {
9559 gcc_assert (friendp);
9560 error ("expected qualified name in friend declaration "
bd967b22 9561 "for destructor %qD", uqname);
6d2989e1
VR
9562 return error_mark_node;
9563 }
9564
bd967b22 9565 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
6d2989e1
VR
9566 {
9567 error ("declaration of %qD as member of %qT",
bd967b22 9568 uqname, ctype);
6d2989e1
VR
9569 return error_mark_node;
9570 }
7ecbca9d 9571 if (constexpr_p)
91ea6df3
GDR
9572 {
9573 error ("a destructor cannot be %<constexpr%>");
9574 return error_mark_node;
9575 }
88e95ee3 9576 }
91ea6df3 9577 else if (sfk == sfk_constructor && friendp && !ctype)
ac3b1156
JJ
9578 {
9579 error ("expected qualified name in friend declaration "
9580 "for constructor %qD",
9581 id_declarator->u.id.unqualified_name);
9582 return error_mark_node;
9583 }
88e95ee3 9584
8d08fdba 9585 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
68642fb6 9586 function_context = (ctype != NULL_TREE) ?
4f1c5b7d 9587 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
e1467ff2
MM
9588 publicp = (! friendp || ! staticp)
9589 && function_context == NULL_TREE;
68642fb6 9590 decl = grokfndecl (ctype, type,
058b15c1
MM
9591 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9592 ? unqualified_id : dname,
4546865e 9593 parms,
058b15c1 9594 unqualified_id,
e2537f2c 9595 virtualp, flags, memfn_quals, raises,
7ecbca9d 9596 friendp ? -1 : 0, friendp, publicp,
91ea6df3 9597 inlinep | (2 * constexpr_p),
27d6592c 9598 sfk,
402b8cf6
AH
9599 funcdef_flag, template_count, in_namespace,
9600 attrlist, declarator->id_loc);
20496fa2 9601 if (decl == NULL_TREE)
ba5719d9 9602 return error_mark_node;
6125f3be
DE
9603#if 0
9604 /* This clobbers the attrs stored in `decl' from `attrlist'. */
91d231cb
JM
9605 /* The decl and setting of decl_attr is also turned off. */
9606 decl = build_decl_attribute_variant (decl, decl_attr);
6125f3be 9607#endif
f0e01782 9608
cc804e51
MM
9609 /* [class.conv.ctor]
9610
9611 A constructor declared without the function-specifier
9612 explicit that can be called with a single parameter
9613 specifies a conversion from the type of its first
9614 parameter to the type of its class. Such a constructor
9615 is called a converting constructor. */
db5ae43f
MS
9616 if (explicitp == 2)
9617 DECL_NONCONVERTING_P (decl) = 1;
8d08fdba 9618 }
a9f46cbb 9619 else if (!staticp && !dependent_type_p (type)
d0f062fb 9620 && !COMPLETE_TYPE_P (complete_type (type))
8d08fdba
MS
9621 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9622 {
058b15c1 9623 if (unqualified_id)
2d01edd7 9624 error ("field %qD has incomplete type", unqualified_id);
b7484fbe 9625 else
2d01edd7 9626 error ("name %qT has incomplete type", type);
8d08fdba
MS
9627
9628 /* If we're instantiating a template, tell them which
9629 instantiation made the field's type be incomplete. */
9630 if (current_class_type
9631 && TYPE_NAME (current_class_type)
d2e5ee5c 9632 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
62d1db17
MM
9633 && declspecs->type
9634 && declspecs->type == type)
2d01edd7 9635 error (" in instantiation of template %qT",
0cbd7506 9636 current_class_type);
db5ae43f 9637
623c65f1 9638 return error_mark_node;
8d08fdba
MS
9639 }
9640 else
9641 {
9642 if (friendp)
9643 {
2d01edd7 9644 error ("%qE is neither function nor member function; "
0cbd7506 9645 "cannot be declared friend", unqualified_id);
8d08fdba
MS
9646 friendp = 0;
9647 }
9648 decl = NULL_TREE;
9649 }
9650
9651 if (friendp)
9652 {
9653 /* Friends are treated specially. */
9654 if (ctype == current_class_type)
37ec60ed 9655 ; /* We already issued a permerror. */
0cbd7506 9656 else if (decl && DECL_NAME (decl))
8db1028e
NS
9657 {
9658 if (template_class_depth (current_class_type) == 0)
9659 {
9660 decl = check_explicit_specialization
058b15c1 9661 (unqualified_id, decl, template_count,
357d956e 9662 2 * funcdef_flag + 4);
8db1028e
NS
9663 if (decl == error_mark_node)
9664 return error_mark_node;
9665 }
caf93cb0 9666
9a801c38 9667 DECL_DECLARED_CONSTEXPR_P (decl) = constexpr_p;
058b15c1 9668 decl = do_friend (ctype, unqualified_id, decl,
3db45ab5 9669 *attrlist, flags,
e2537f2c 9670 funcdef_flag);
8db1028e
NS
9671 return decl;
9672 }
9673 else
13dbe691 9674 return error_mark_node;
8d08fdba
MS
9675 }
9676
f4f206f4 9677 /* Structure field. It may not be a function, except for C++. */
8d08fdba
MS
9678
9679 if (decl == NULL_TREE)
9680 {
8d08fdba
MS
9681 if (initialized)
9682 {
3ac3d9ea
MM
9683 if (!staticp)
9684 {
9685 /* An attempt is being made to initialize a non-static
9686 member. But, from [class.mem]:
68642fb6 9687
3ac3d9ea
MM
9688 4 A member-declarator can contain a
9689 constant-initializer only if it declares a static
9690 member (_class.static_) of integral or enumeration
68642fb6 9691 type, see _class.static.data_.
3ac3d9ea
MM
9692
9693 This used to be relatively common practice, but
9694 the rest of the compiler does not correctly
9695 handle the initialization unless the member is
9696 static so we make it static below. */
91ea6df3
GDR
9697 if (cxx_dialect >= cxx0x)
9698 {
9699 sorry ("non-static data member initializers");
9700 }
9701 else
9702 {
9703 permerror (input_location, "ISO C++ forbids initialization of member %qD",
9704 unqualified_id);
9705 permerror (input_location, "making %qD static", unqualified_id);
9706 staticp = 1;
9707 }
3ac3d9ea
MM
9708 }
9709
6ba89f8e
MM
9710 if (uses_template_parms (type))
9711 /* We'll check at instantiation time. */
9712 ;
91ea6df3
GDR
9713 else if (constexpr_p)
9714 /* constexpr has the same requirements. */
9715 ;
058b15c1 9716 else if (check_static_variable_definition (unqualified_id,
6ba89f8e
MM
9717 type))
9718 /* If we just return the declaration, crashes
9719 will sometimes occur. We therefore return
72a93143
JM
9720 void_type_node, as if this was a friend
9721 declaration, to cause callers to completely
9722 ignore this declaration. */
13dbe691 9723 return error_mark_node;
8d08fdba
MS
9724 }
9725
3ac3d9ea 9726 if (staticp)
8d08fdba 9727 {
f18a14bc
MM
9728 /* C++ allows static class members. All other work
9729 for this is done by grokfield. */
058b15c1 9730 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
4684cd27
MM
9731 set_linkage_for_static_data_member (decl);
9732 /* Even if there is an in-class initialization, DECL
9733 is considered undefined until an out-of-class
9734 definition is provided. */
9735 DECL_EXTERNAL (decl) = 1;
31a79236
JJ
9736
9737 if (thread_p)
8893239d 9738 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8d08fdba
MS
9739 }
9740 else
9741 {
7ecbca9d 9742 if (constexpr_p)
202be748
JM
9743 {
9744 error ("non-static data member %qE declared %<constexpr%>",
9745 unqualified_id);
9746 constexpr_p = false;
9747 }
c2255bc4
AH
9748 decl = build_decl (input_location,
9749 FIELD_DECL, unqualified_id, type);
2bf105ab 9750 DECL_NONADDRESSABLE_P (decl) = bitfield;
ab53bae2
AO
9751 if (bitfield && !unqualified_id)
9752 TREE_NO_WARNING (decl) = 1;
9753
1ff3c076 9754 if (storage_class == sc_mutable)
8d08fdba
MS
9755 {
9756 DECL_MUTABLE_P (decl) = 1;
1ff3c076 9757 storage_class = sc_none;
8d08fdba
MS
9758 }
9759 }
9760
2f5b91f5 9761 bad_specifiers (decl, BSP_FIELD, virtualp,
e2537f2c 9762 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba
MS
9763 inlinep, friendp, raises != NULL_TREE);
9764 }
9765 }
fd9aef9d
NS
9766 else if (TREE_CODE (type) == FUNCTION_TYPE
9767 || TREE_CODE (type) == METHOD_TYPE)
8d08fdba 9768 {
386b8a85 9769 tree original_name;
8d08fdba
MS
9770 int publicp = 0;
9771
058b15c1 9772 if (!unqualified_id)
13dbe691 9773 return error_mark_node;
8d08fdba 9774
058b15c1 9775 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
386b8a85
JM
9776 original_name = dname;
9777 else
058b15c1 9778 original_name = unqualified_id;
386b8a85 9779
1ff3c076 9780 if (storage_class == sc_auto)
2d01edd7 9781 error ("storage class %<auto%> invalid for function %qs", name);
1ff3c076 9782 else if (storage_class == sc_register)
2d01edd7 9783 error ("storage class %<register%> invalid for function %qs", name);
1ff3c076 9784 else if (thread_p)
2d01edd7 9785 error ("storage class %<__thread%> invalid for function %qs", name);
8d08fdba
MS
9786
9787 /* Function declaration not at top level.
9788 Storage classes other than `extern' are not allowed
9789 and `extern' makes no difference. */
a9aedbc2 9790 if (! toplevel_bindings_p ()
1ff3c076 9791 && (storage_class == sc_static
62d1db17 9792 || declspecs->specs[(int)ds_inline])
8d08fdba 9793 && pedantic)
8926095f 9794 {
1ff3c076 9795 if (storage_class == sc_static)
509c9d60 9796 pedwarn (input_location, OPT_pedantic,
fcf73884 9797 "%<static%> specified invalid for function %qs "
0cbd7506 9798 "declared out of global scope", name);
8926095f 9799 else
509c9d60 9800 pedwarn (input_location, OPT_pedantic,
fcf73884 9801 "%<inline%> specifier invalid for function %qs "
0cbd7506 9802 "declared out of global scope", name);
8926095f 9803 }
68642fb6 9804
a2712544
AP
9805 if (ctype != NULL_TREE
9806 && TREE_CODE (ctype) != NAMESPACE_DECL && !MAYBE_CLASS_TYPE_P (ctype))
9807 {
9808 error ("%q#T is not a class or a namespace", ctype);
9809 ctype = NULL_TREE;
9810 }
9811
8d08fdba
MS
9812 if (ctype == NULL_TREE)
9813 {
9814 if (virtualp)
9815 {
2d01edd7 9816 error ("virtual non-class function %qs", name);
8d08fdba
MS
9817 virtualp = 0;
9818 }
48b6cd9d
SM
9819 else if (sfk == sfk_constructor
9820 || sfk == sfk_destructor)
9821 {
9822 error (funcdef_flag
9823 ? "%qs defined in a non-class scope"
9824 : "%qs declared in a non-class scope", name);
9825 sfk = sfk_none;
9826 }
8d08fdba 9827 }
8d08fdba 9828
eb66be0e 9829 /* Record presence of `static'. */
faae18ab 9830 publicp = (ctype != NULL_TREE
1ff3c076
MM
9831 || storage_class == sc_extern
9832 || storage_class != sc_static);
8d08fdba 9833
058b15c1 9834 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
e2537f2c 9835 virtualp, flags, memfn_quals, raises,
75650646 9836 1, friendp,
91ea6df3
GDR
9837 publicp, inlinep | (2 * constexpr_p), sfk,
9838 funcdef_flag,
402b8cf6
AH
9839 template_count, in_namespace, attrlist,
9840 declarator->id_loc);
f0e01782 9841 if (decl == NULL_TREE)
13dbe691 9842 return error_mark_node;
8d08fdba 9843
8d08fdba
MS
9844 if (staticp == 1)
9845 {
0e339752 9846 int invalid_static = 0;
8d08fdba
MS
9847
9848 /* Don't allow a static member function in a class, and forbid
9849 declaring main to be static. */
9850 if (TREE_CODE (type) == METHOD_TYPE)
9851 {
cbe5f3b3 9852 permerror (input_location, "cannot declare member function %qD to have "
37ec60ed 9853 "static linkage", decl);
0e339752 9854 invalid_static = 1;
8d08fdba 9855 }
8d08fdba
MS
9856 else if (current_function_decl)
9857 {
9858 /* FIXME need arm citation */
8251199e 9859 error ("cannot declare static function inside another function");
0e339752 9860 invalid_static = 1;
8d08fdba
MS
9861 }
9862
0e339752 9863 if (invalid_static)
8d08fdba
MS
9864 {
9865 staticp = 0;
1ff3c076 9866 storage_class = sc_none;
8d08fdba
MS
9867 }
9868 }
8d08fdba
MS
9869 }
9870 else
9871 {
9872 /* It's a variable. */
9873
9874 /* An uninitialized decl with `extern' is a reference. */
caf93cb0 9875 decl = grokvardecl (type, unqualified_id,
62d1db17 9876 declspecs,
68642fb6
UD
9877 initialized,
9878 (type_quals & TYPE_QUAL_CONST) != 0,
9e259dd1 9879 ctype ? ctype : in_namespace);
2f5b91f5 9880 bad_specifiers (decl, BSP_VAR, virtualp,
e2537f2c 9881 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba
MS
9882 inlinep, friendp, raises != NULL_TREE);
9883
9884 if (ctype)
9885 {
f0e01782 9886 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
9887 if (staticp == 1)
9888 {
cbe5f3b3 9889 permerror (input_location, "%<static%> may not be used when defining "
37ec60ed 9890 "(as opposed to declaring) a static data member");
0cbd7506 9891 staticp = 0;
1ff3c076 9892 storage_class = sc_none;
8d08fdba 9893 }
1ff3c076 9894 if (storage_class == sc_register && TREE_STATIC (decl))
b7484fbe 9895 {
2d01edd7 9896 error ("static member %qD declared %<register%>", decl);
1ff3c076 9897 storage_class = sc_none;
b7484fbe 9898 }
1ff3c076 9899 if (storage_class == sc_extern && pedantic)
8d08fdba 9900 {
509c9d60 9901 pedwarn (input_location, OPT_pedantic,
fcf73884
MLI
9902 "cannot explicitly declare member %q#D to have "
9903 "extern linkage", decl);
1ff3c076 9904 storage_class = sc_none;
8d08fdba
MS
9905 }
9906 }
91ea6df3
GDR
9907 else if (constexpr_p && DECL_EXTERNAL (decl))
9908 error ("declaration of constexpr variable %qD is not a definition",
9909 decl);
8d08fdba
MS
9910 }
9911
94eeabbe
DS
9912 if (storage_class == sc_extern && initialized && !funcdef_flag)
9913 {
9914 if (toplevel_bindings_p ())
9915 {
9916 /* It's common practice (and completely valid) to have a const
9917 be initialized and declared extern. */
9918 if (!(type_quals & TYPE_QUAL_CONST))
9919 warning (0, "%qs initialized and declared %<extern%>", name);
9920 }
9921 else
0450a966
PC
9922 {
9923 error ("%qs has both %<extern%> and initializer", name);
9924 return error_mark_node;
9925 }
94eeabbe
DS
9926 }
9927
8d08fdba
MS
9928 /* Record `register' declaration for warnings on &
9929 and in case doing stupid register allocation. */
9930
1ff3c076 9931 if (storage_class == sc_register)
8d08fdba 9932 DECL_REGISTER (decl) = 1;
1ff3c076 9933 else if (storage_class == sc_extern)
8926095f 9934 DECL_THIS_EXTERN (decl) = 1;
1ff3c076 9935 else if (storage_class == sc_static)
faae18ab
MS
9936 DECL_THIS_STATIC (decl) = 1;
9937
7ecbca9d 9938 /* Don't forget constexprness. */
91ea6df3
GDR
9939 if (constexpr_p)
9940 DECL_DECLARED_CONSTEXPR_P (decl) = true;
7ecbca9d 9941
15896502
MM
9942 /* Record constancy and volatility on the DECL itself . There's
9943 no need to do this when processing a template; we'll do this
9944 for the instantiated declaration based on the type of DECL. */
adecb3f4 9945 if (!processing_template_decl)
9804209d 9946 cp_apply_type_quals_to_decl (type_quals, decl);
8d08fdba
MS
9947
9948 return decl;
9949 }
9950}
9951\f
f181d4ae
MM
9952/* Subroutine of start_function. Ensure that each of the parameter
9953 types (as listed in PARMS) is complete, as is required for a
9954 function definition. */
e92cc029 9955
8d08fdba 9956static void
11f6b451 9957require_complete_types_for_parms (tree parms)
8d08fdba 9958{
910ad8de 9959 for (; parms; parms = DECL_CHAIN (parms))
8d08fdba 9960 {
c9387915
GB
9961 if (dependent_type_p (TREE_TYPE (parms)))
9962 continue;
dff1b563
VR
9963 if (!VOID_TYPE_P (TREE_TYPE (parms))
9964 && complete_type_or_else (TREE_TYPE (parms), parms))
753225c1 9965 {
7523dc31 9966 relayout_decl (parms);
753225c1
JM
9967 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9968 }
dff1b563
VR
9969 else
9970 /* grokparms or complete_type_or_else will have already issued
9971 an error. */
9972 TREE_TYPE (parms) = error_mark_node;
8d08fdba
MS
9973 }
9974}
9975
838dfd8a 9976/* Returns nonzero if T is a local variable. */
297e73d8 9977
46e8c075 9978int
ac7d7749 9979local_variable_p (const_tree t)
297e73d8 9980{
68642fb6 9981 if ((TREE_CODE (t) == VAR_DECL
297e73d8
MM
9982 /* A VAR_DECL with a context that is a _TYPE is a static data
9983 member. */
9984 && !TYPE_P (CP_DECL_CONTEXT (t))
9985 /* Any other non-local variable must be at namespace scope. */
46e8c075 9986 && !DECL_NAMESPACE_SCOPE_P (t))
297e73d8 9987 || (TREE_CODE (t) == PARM_DECL))
46e8c075 9988 return 1;
297e73d8 9989
46e8c075
MM
9990 return 0;
9991}
9992
46e8c075
MM
9993/* Like local_variable_p, but suitable for use as a tree-walking
9994 function. */
9995
9996static tree
44de5aeb
RK
9997local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9998 void *data ATTRIBUTE_UNUSED)
46e8c075 9999{
44de5aeb
RK
10000 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
10001 return *tp;
10002 else if (TYPE_P (*tp))
10003 *walk_subtrees = 0;
10004
10005 return NULL_TREE;
297e73d8
MM
10006}
10007
44de5aeb 10008
297e73d8 10009/* Check that ARG, which is a default-argument expression for a
0e339752 10010 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
297e73d8
MM
10011 something goes wrong. DECL may also be a _TYPE node, rather than a
10012 DECL, if there is no DECL available. */
10013
10014tree
11f6b451 10015check_default_argument (tree decl, tree arg)
297e73d8
MM
10016{
10017 tree var;
10018 tree decl_type;
10019
10020 if (TREE_CODE (arg) == DEFAULT_ARG)
10021 /* We get a DEFAULT_ARG when looking at an in-class declaration
10022 with a default argument. Ignore the argument for now; we'll
10023 deal with it after the class is complete. */
10024 return arg;
10025
297e73d8
MM
10026 if (TYPE_P (decl))
10027 {
10028 decl_type = decl;
10029 decl = NULL_TREE;
10030 }
10031 else
10032 decl_type = TREE_TYPE (decl);
10033
68642fb6 10034 if (arg == error_mark_node
297e73d8
MM
10035 || decl == error_mark_node
10036 || TREE_TYPE (arg) == error_mark_node
10037 || decl_type == error_mark_node)
10038 /* Something already went wrong. There's no need to check
10039 further. */
10040 return error_mark_node;
10041
10042 /* [dcl.fct.default]
68642fb6 10043
297e73d8
MM
10044 A default argument expression is implicitly converted to the
10045 parameter type. */
10046 if (!TREE_TYPE (arg)
30f86ec3 10047 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
297e73d8
MM
10048 {
10049 if (decl)
2d01edd7 10050 error ("default argument for %q#D has type %qT",
0cbd7506 10051 decl, TREE_TYPE (arg));
297e73d8 10052 else
2d01edd7 10053 error ("default argument for parameter of type %qT has type %qT",
0cbd7506 10054 decl_type, TREE_TYPE (arg));
297e73d8
MM
10055
10056 return error_mark_node;
10057 }
10058
10059 /* [dcl.fct.default]
10060
10061 Local variables shall not be used in default argument
68642fb6 10062 expressions.
297e73d8
MM
10063
10064 The keyword `this' shall not be used in a default argument of a
10065 member function. */
14588106 10066 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
297e73d8
MM
10067 if (var)
10068 {
2d01edd7 10069 error ("default argument %qE uses local variable %qD", arg, var);
297e73d8
MM
10070 return error_mark_node;
10071 }
10072
10073 /* All is well. */
10074 return arg;
10075}
10076
b344d949
JM
10077/* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
10078
10079static tree
10080type_is_deprecated (tree type)
10081{
10082 enum tree_code code;
10083 if (TREE_DEPRECATED (type))
10084 return type;
10085 if (TYPE_NAME (type)
10086 && TREE_DEPRECATED (TYPE_NAME (type)))
10087 return type;
10088
98fba7f7
JM
10089 /* Do warn about using typedefs to a deprecated class. */
10090 if (TAGGED_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
10091 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
10092
b344d949
JM
10093 code = TREE_CODE (type);
10094
10095 if (code == POINTER_TYPE || code == REFERENCE_TYPE
10096 || code == OFFSET_TYPE || code == FUNCTION_TYPE
10097 || code == METHOD_TYPE || code == ARRAY_TYPE)
10098 return type_is_deprecated (TREE_TYPE (type));
10099
10100 if (TYPE_PTRMEMFUNC_P (type))
10101 return type_is_deprecated
10102 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
10103
10104 return NULL_TREE;
10105}
10106
8d08fdba
MS
10107/* Decode the list of parameter types for a function type.
10108 Given the list of things declared inside the parens,
10109 return a list of types.
10110
058b15c1
MM
10111 If this parameter does not end with an ellipsis, we append
10112 void_list_node.
5cce22b6 10113
4546865e 10114 *PARMS is set to the chain of PARM_DECLs created. */
8d08fdba
MS
10115
10116static tree
b344d949 10117grokparms (tree parmlist, tree *parms)
8d08fdba
MS
10118{
10119 tree result = NULL_TREE;
10120 tree decls = NULL_TREE;
b344d949 10121 tree parm;
5cce22b6 10122 int any_error = 0;
8d08fdba 10123
b344d949 10124 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
8d08fdba 10125 {
0657c69c 10126 tree type = NULL_TREE;
b344d949
JM
10127 tree init = TREE_PURPOSE (parm);
10128 tree decl = TREE_VALUE (parm);
40449a90 10129 const char *errmsg;
8d08fdba 10130
b344d949 10131 if (parm == void_list_node)
0cbd7506 10132 break;
8d08fdba 10133
5cce22b6 10134 if (! decl || TREE_TYPE (decl) == error_mark_node)
0cbd7506 10135 continue;
d363e7bf 10136
5cce22b6
NS
10137 type = TREE_TYPE (decl);
10138 if (VOID_TYPE_P (type))
0cbd7506
MS
10139 {
10140 if (same_type_p (type, void_type_node)
e7e53192 10141 && DECL_SELF_REFERENCE_P (type)
b344d949 10142 && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
0cbd7506
MS
10143 /* this is a parmlist of `(void)', which is ok. */
10144 break;
10145 cxx_incomplete_type_error (decl, type);
0657c69c
MM
10146 /* It's not a good idea to actually create parameters of
10147 type `void'; other parts of the compiler assume that a
10148 void type terminates the parameter list. */
04f3dc2b 10149 type = error_mark_node;
0657c69c 10150 TREE_TYPE (decl) = error_mark_node;
0cbd7506 10151 }
8d08fdba 10152
360f866c
JJ
10153 if (type != error_mark_node
10154 && TYPE_FOR_JAVA (type)
9e1e64ec 10155 && MAYBE_CLASS_TYPE_P (type))
360f866c
JJ
10156 {
10157 error ("parameter %qD has Java class type", decl);
10158 type = error_mark_node;
10159 TREE_TYPE (decl) = error_mark_node;
10160 init = NULL_TREE;
10161 }
10162
40449a90
SL
10163 if (type != error_mark_node
10164 && (errmsg = targetm.invalid_parameter_type (type)))
10165 {
10166 error (errmsg);
10167 type = error_mark_node;
10168 TREE_TYPE (decl) = error_mark_node;
10169 }
10170
d363e7bf 10171 if (type != error_mark_node)
04f3dc2b 10172 {
b344d949
JM
10173 if (deprecated_state != DEPRECATED_SUPPRESS)
10174 {
10175 tree deptype = type_is_deprecated (type);
10176 if (deptype)
9b86d6bb 10177 warn_deprecated_use (deptype, NULL_TREE);
b344d949
JM
10178 }
10179
04f3dc2b
MM
10180 /* Top-level qualifiers on the parameters are
10181 ignored for function types. */
79a1a736 10182 type = cp_build_qualified_type (type, 0);
04f3dc2b
MM
10183 if (TREE_CODE (type) == METHOD_TYPE)
10184 {
2d01edd7 10185 error ("parameter %qD invalidly declared method type", decl);
04f3dc2b
MM
10186 type = build_pointer_type (type);
10187 TREE_TYPE (decl) = type;
10188 }
04f3dc2b 10189 else if (abstract_virtuals_error (decl, type))
a1c65f9f 10190 any_error = 1; /* Seems like a good idea. */
04f3dc2b
MM
10191 else if (POINTER_TYPE_P (type))
10192 {
10193 /* [dcl.fct]/6, parameter types cannot contain pointers
10194 (references) to arrays of unknown bound. */
98979fe0
NS
10195 tree t = TREE_TYPE (type);
10196 int ptr = TYPE_PTR_P (type);
10197
0cbd7506
MS
10198 while (1)
10199 {
10200 if (TYPE_PTR_P (t))
10201 ptr = 1;
10202 else if (TREE_CODE (t) != ARRAY_TYPE)
10203 break;
10204 else if (!TYPE_DOMAIN (t))
10205 break;
10206 t = TREE_TYPE (t);
10207 }
04f3dc2b 10208 if (TREE_CODE (t) == ARRAY_TYPE)
4cd5a50a
PB
10209 error (ptr
10210 ? G_("parameter %qD includes pointer to array of "
10211 "unknown bound %qT")
10212 : G_("parameter %qD includes reference to array of "
10213 "unknown bound %qT"),
10214 decl, t);
04f3dc2b
MM
10215 }
10216
c3ee4651 10217 if (any_error)
04f3dc2b 10218 init = NULL_TREE;
c3ee4651
NS
10219 else if (init && !processing_template_decl)
10220 init = check_default_argument (decl, init);
04f3dc2b 10221 }
8d08fdba 10222
5d80a306
DG
10223 if (TREE_CODE (decl) == PARM_DECL
10224 && FUNCTION_PARAMETER_PACK_P (decl)
b344d949
JM
10225 && TREE_CHAIN (parm)
10226 && TREE_CHAIN (parm) != void_list_node)
5d80a306
DG
10227 error ("parameter packs must be at the end of the parameter list");
10228
910ad8de 10229 DECL_CHAIN (decl) = decls;
5cce22b6 10230 decls = decl;
0657c69c 10231 result = tree_cons (init, type, result);
8d08fdba 10232 }
5cce22b6
NS
10233 decls = nreverse (decls);
10234 result = nreverse (result);
b344d949 10235 if (parm)
5cce22b6 10236 result = chainon (result, void_list_node);
4546865e 10237 *parms = decls;
8d08fdba 10238
8d08fdba
MS
10239 return result;
10240}
42976354 10241
8d08fdba 10242\f
271e6f02
NS
10243/* D is a constructor or overloaded `operator='.
10244
10245 Let T be the class in which D is declared. Then, this function
10246 returns:
10247
10248 -1 if D's is an ill-formed constructor or copy assignment operator
10249 whose first parameter is of type `T'.
10250 0 if D is not a copy constructor or copy assignment
10251 operator.
10252 1 if D is a copy constructor or copy assignment operator whose
271e6f02 10253 first parameter is a reference to non-const qualified T.
20f2653e
JM
10254 2 if D is a copy constructor or copy assignment operator whose
10255 first parameter is a reference to const qualified T.
271e6f02
NS
10256
10257 This function can be used as a predicate. Positive values indicate
838dfd8a 10258 a copy constructor and nonzero values indicate a copy assignment
4f1c5b7d
MM
10259 operator. */
10260
c11b6f21 10261int
58f9752a 10262copy_fn_p (const_tree d)
c11b6f21 10263{
271e6f02
NS
10264 tree args;
10265 tree arg_type;
10266 int result = 1;
caf93cb0 10267
398cd199 10268 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
4f1c5b7d 10269
7137605e
MM
10270 if (TREE_CODE (d) == TEMPLATE_DECL
10271 || (DECL_TEMPLATE_INFO (d)
10272 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
271e6f02
NS
10273 /* Instantiations of template member functions are never copy
10274 functions. Note that member functions of templated classes are
10275 represented as template functions internally, and we must
10276 accept those as copy functions. */
10277 return 0;
caf93cb0 10278
271e6f02
NS
10279 args = FUNCTION_FIRST_USER_PARMTYPE (d);
10280 if (!args)
4f1c5b7d
MM
10281 return 0;
10282
271e6f02 10283 arg_type = TREE_VALUE (args);
139a78c7
VR
10284 if (arg_type == error_mark_node)
10285 return 0;
271e6f02
NS
10286
10287 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
10288 {
10289 /* Pass by value copy assignment operator. */
10290 result = -1;
10291 }
10292 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8af2fec4 10293 && !TYPE_REF_IS_RVALUE (arg_type)
271e6f02
NS
10294 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
10295 {
10296 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
10297 result = 2;
10298 }
10299 else
10300 return 0;
caf93cb0 10301
271e6f02
NS
10302 args = TREE_CHAIN (args);
10303
10304 if (args && args != void_list_node && !TREE_PURPOSE (args))
10305 /* There are more non-optional args. */
10306 return 0;
10307
10308 return result;
10309}
10310
8af2fec4
RY
10311/* D is a constructor or overloaded `operator='.
10312
10313 Let T be the class in which D is declared. Then, this function
10314 returns true when D is a move constructor or move assignment
10315 operator, false otherwise. */
10316
10317bool
58f9752a 10318move_fn_p (const_tree d)
8af2fec4
RY
10319{
10320 tree args;
10321 tree arg_type;
10322 bool result = false;
10323
10324 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10325
c1ae8be5
SM
10326 if (cxx_dialect == cxx98)
10327 /* There are no move constructors if we are in C++98 mode. */
8af2fec4
RY
10328 return false;
10329
10330 if (TREE_CODE (d) == TEMPLATE_DECL
10331 || (DECL_TEMPLATE_INFO (d)
10332 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10333 /* Instantiations of template member functions are never copy
10334 functions. Note that member functions of templated classes are
10335 represented as template functions internally, and we must
10336 accept those as copy functions. */
10337 return 0;
10338
10339 args = FUNCTION_FIRST_USER_PARMTYPE (d);
10340 if (!args)
10341 return 0;
10342
10343 arg_type = TREE_VALUE (args);
10344 if (arg_type == error_mark_node)
10345 return 0;
10346
10347 if (TREE_CODE (arg_type) == REFERENCE_TYPE
10348 && TYPE_REF_IS_RVALUE (arg_type)
10349 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
10350 DECL_CONTEXT (d)))
10351 result = true;
10352
10353 args = TREE_CHAIN (args);
10354
10355 if (args && args != void_list_node && !TREE_PURPOSE (args))
10356 /* There are more non-optional args. */
10357 return false;
10358
10359 return result;
10360}
10361
271e6f02
NS
10362/* Remember any special properties of member function DECL. */
10363
0fcedd9c
JM
10364void
10365grok_special_member_properties (tree decl)
271e6f02 10366{
7137605e
MM
10367 tree class_type;
10368
6d69fe27 10369 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
7137605e
MM
10370 return;
10371
10372 class_type = DECL_CONTEXT (decl);
10373 if (DECL_CONSTRUCTOR_P (decl))
271e6f02
NS
10374 {
10375 int ctor = copy_fn_p (decl);
caf93cb0 10376
0fcedd9c
JM
10377 if (!DECL_ARTIFICIAL (decl))
10378 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
7137605e 10379
271e6f02
NS
10380 if (ctor > 0)
10381 {
10382 /* [class.copy]
caf93cb0 10383
0cbd7506
MS
10384 A non-template constructor for class X is a copy
10385 constructor if its first parameter is of type X&, const
10386 X&, volatile X& or const volatile X&, and either there
10387 are no other parameters or else all other parameters have
10388 default arguments. */
066ec0a4 10389 TYPE_HAS_COPY_CTOR (class_type) = 1;
20f2653e 10390 if (user_provided_p (decl))
066ec0a4 10391 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
271e6f02 10392 if (ctor > 1)
066ec0a4 10393 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
271e6f02
NS
10394 }
10395 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
f782c65c
JM
10396 {
10397 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
20f2653e 10398 if (user_provided_p (decl))
f782c65c
JM
10399 TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10400 }
ac177431
JM
10401 else if (move_fn_p (decl) && user_provided_p (decl))
10402 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
09357846
JM
10403 else if (is_list_ctor (decl))
10404 TYPE_HAS_LIST_CTOR (class_type) = 1;
3b49d762
GDR
10405
10406 if (DECL_DECLARED_CONSTEXPR_P (decl)
10407 && !copy_fn_p (decl) && !move_fn_p (decl))
10408 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
271e6f02
NS
10409 }
10410 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10411 {
10412 /* [class.copy]
caf93cb0 10413
0cbd7506
MS
10414 A non-template assignment operator for class X is a copy
10415 assignment operator if its parameter is of type X, X&, const
10416 X&, volatile X& or const volatile X&. */
caf93cb0 10417
271e6f02 10418 int assop = copy_fn_p (decl);
caf93cb0 10419
271e6f02
NS
10420 if (assop)
10421 {
066ec0a4 10422 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
20f2653e 10423 if (user_provided_p (decl))
066ec0a4 10424 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
271e6f02 10425 if (assop != 1)
066ec0a4 10426 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
271e6f02 10427 }
ac177431
JM
10428 else if (move_fn_p (decl) && user_provided_p (decl))
10429 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
271e6f02 10430 }
46408846 10431 /* Destructors are handled in check_methods. */
c11b6f21
MS
10432}
10433
271e6f02
NS
10434/* Check a constructor DECL has the correct form. Complains
10435 if the class has a constructor of the form X(X). */
e92cc029 10436
a0a33927 10437int
58f9752a 10438grok_ctor_properties (const_tree ctype, const_tree decl)
8d08fdba 10439{
271e6f02
NS
10440 int ctor_parm = copy_fn_p (decl);
10441
10442 if (ctor_parm < 0)
10443 {
10444 /* [class.copy]
caf93cb0 10445
0cbd7506
MS
10446 A declaration of a constructor for a class X is ill-formed if
10447 its first parameter is of type (optionally cv-qualified) X
10448 and either there are no other parameters or else all other
10449 parameters have default arguments.
10450
10451 We *don't* complain about member template instantiations that
10452 have this form, though; they can occur as we try to decide
10453 what constructor to use during overload resolution. Since
10454 overload resolution will never prefer such a constructor to
10455 the non-template copy constructor (which is either explicitly
10456 or implicitly defined), there's no need to worry about their
10457 existence. Theoretically, they should never even be
10458 instantiated, but that's hard to forestall. */
2d01edd7 10459 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
0b41abe6 10460 ctype, ctype);
0b41abe6 10461 return 0;
8d08fdba 10462 }
caf93cb0 10463
a0a33927 10464 return 1;
8d08fdba
MS
10465}
10466
596ea4e5 10467/* An operator with this code is unary, but can also be binary. */
e92cc029 10468
a28e3c7f 10469static int
11f6b451 10470ambi_op_p (enum tree_code code)
8d08fdba 10471{
596ea4e5
AS
10472 return (code == INDIRECT_REF
10473 || code == ADDR_EXPR
392e3d51 10474 || code == UNARY_PLUS_EXPR
596ea4e5
AS
10475 || code == NEGATE_EXPR
10476 || code == PREINCREMENT_EXPR
10477 || code == PREDECREMENT_EXPR);
8d08fdba
MS
10478}
10479
10480/* An operator with this name can only be unary. */
e92cc029 10481
a28e3c7f 10482static int
11f6b451 10483unary_op_p (enum tree_code code)
8d08fdba 10484{
596ea4e5
AS
10485 return (code == TRUTH_NOT_EXPR
10486 || code == BIT_NOT_EXPR
10487 || code == COMPONENT_REF
10488 || code == TYPE_EXPR);
8d08fdba
MS
10489}
10490
f2a79152 10491/* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
4b0d3cbe 10492 errors are issued for invalid declarations. */
e92cc029 10493
398cd199 10494bool
7e45bd18 10495grok_op_properties (tree decl, bool complain)
8d08fdba
MS
10496{
10497 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
596ea4e5 10498 tree argtype;
8d08fdba
MS
10499 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10500 tree name = DECL_NAME (decl);
596ea4e5
AS
10501 enum tree_code operator_code;
10502 int arity;
64844139 10503 bool ellipsis_p;
7e45bd18 10504 tree class_type;
596ea4e5 10505
64844139 10506 /* Count the number of arguments and check for ellipsis. */
596ea4e5
AS
10507 for (argtype = argtypes, arity = 0;
10508 argtype && argtype != void_list_node;
10509 argtype = TREE_CHAIN (argtype))
10510 ++arity;
64844139 10511 ellipsis_p = !argtype;
8d08fdba 10512
7e45bd18
MM
10513 class_type = DECL_CONTEXT (decl);
10514 if (class_type && !CLASS_TYPE_P (class_type))
10515 class_type = NULL_TREE;
8d08fdba 10516
596ea4e5
AS
10517 if (DECL_CONV_FN_P (decl))
10518 operator_code = TYPE_EXPR;
10519 else
10520 do
10521 {
0c918ce5
MM
10522#define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
10523 if (ansi_opname (CODE) == name) \
10524 { \
75ac8dec 10525 operator_code = (CODE); \
0c918ce5
MM
10526 break; \
10527 } \
10528 else if (ansi_assopname (CODE) == name) \
10529 { \
75ac8dec 10530 operator_code = (CODE); \
0c918ce5
MM
10531 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
10532 break; \
596ea4e5
AS
10533 }
10534
10535#include "operators.def"
10536#undef DEF_OPERATOR
10537
8dc2b103 10538 gcc_unreachable ();
596ea4e5
AS
10539 }
10540 while (0);
c0ed0531 10541 gcc_assert (operator_code != MAX_TREE_CODES);
596ea4e5
AS
10542 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10543
7e45bd18
MM
10544 if (class_type)
10545 switch (operator_code)
10546 {
10547 case NEW_EXPR:
10548 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
10549 break;
5362b086 10550
7e45bd18
MM
10551 case DELETE_EXPR:
10552 TYPE_GETS_DELETE (class_type) |= 1;
10553 break;
5362b086 10554
7e45bd18
MM
10555 case VEC_NEW_EXPR:
10556 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
10557 break;
5362b086 10558
7e45bd18
MM
10559 case VEC_DELETE_EXPR:
10560 TYPE_GETS_DELETE (class_type) |= 2;
10561 break;
596ea4e5 10562
7e45bd18
MM
10563 default:
10564 break;
10565 }
596ea4e5 10566
3143d517
GB
10567 /* [basic.std.dynamic.allocation]/1:
10568
10569 A program is ill-formed if an allocation function is declared
10570 in a namespace scope other than global scope or declared static
10571 in global scope.
10572
10573 The same also holds true for deallocation functions. */
10574 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
10575 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10576 {
10577 if (DECL_NAMESPACE_SCOPE_P (decl))
10578 {
10579 if (CP_DECL_CONTEXT (decl) != global_namespace)
398cd199
VR
10580 {
10581 error ("%qD may not be declared within a namespace", decl);
10582 return false;
10583 }
3143d517 10584 else if (!TREE_PUBLIC (decl))
398cd199
VR
10585 {
10586 error ("%qD may not be declared as static", decl);
10587 return false;
10588 }
3143d517
GB
10589 }
10590 }
10591
596ea4e5 10592 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
1ea193c2
ILT
10593 {
10594 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10595 DECL_IS_OPERATOR_NEW (decl) = 1;
10596 }
596ea4e5 10597 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
4546865e 10598 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8d08fdba
MS
10599 else
10600 {
10601 /* An operator function must either be a non-static member function
10602 or have at least one parameter of a class, a reference to a class,
10603 an enumeration, or a reference to an enumeration. 13.4.0.6 */
700f8a87 10604 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba 10605 {
596ea4e5
AS
10606 if (operator_code == TYPE_EXPR
10607 || operator_code == CALL_EXPR
10608 || operator_code == COMPONENT_REF
10609 || operator_code == ARRAY_REF
10610 || operator_code == NOP_EXPR)
f2a79152 10611 {
c6be04ad
JM
10612 error ("%qD must be a nonstatic member function", decl);
10613 return false;
f2a79152 10614 }
8d08fdba
MS
10615 else
10616 {
4b0d3cbe 10617 tree p;
8d08fdba 10618
700f8a87 10619 if (DECL_STATIC_FUNCTION_P (decl))
f2a79152
PC
10620 {
10621 error ("%qD must be either a non-static member "
10622 "function or a non-member function", decl);
398cd199 10623 return false;
f2a79152 10624 }
700f8a87 10625
4b0d3cbe
MM
10626 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
10627 {
10628 tree arg = non_reference (TREE_VALUE (p));
85990800 10629 if (arg == error_mark_node)
398cd199 10630 return false;
85990800 10631
9e1e64ec 10632 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
4b0d3cbe
MM
10633 because these checks are performed even on
10634 template functions. */
9e1e64ec
PC
10635 if (MAYBE_CLASS_TYPE_P (arg)
10636 || TREE_CODE (arg) == ENUMERAL_TYPE)
4b0d3cbe
MM
10637 break;
10638 }
10639
10640 if (!p || p == void_list_node)
10641 {
398cd199
VR
10642 if (complain)
10643 error ("%qD must have an argument of class or "
10644 "enumerated type", decl);
10645 return false;
4b0d3cbe 10646 }
8d08fdba
MS
10647 }
10648 }
68642fb6 10649
4b0d3cbe
MM
10650 /* There are no restrictions on the arguments to an overloaded
10651 "operator ()". */
596ea4e5 10652 if (operator_code == CALL_EXPR)
398cd199 10653 return true;
8d08fdba 10654
7e45bd18 10655 /* Warn about conversion operators that will never be used. */
c8094d83 10656 if (IDENTIFIER_TYPENAME_P (name)
7e45bd18
MM
10657 && ! DECL_TEMPLATE_INFO (decl)
10658 && warn_conversion
10659 /* Warn only declaring the function; there is no need to
10660 warn again about out-of-class definitions. */
10661 && class_type == current_class_type)
a0a33927
MS
10662 {
10663 tree t = TREE_TYPE (name);
7e45bd18 10664 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
5362b086 10665
7e45bd18
MM
10666 if (ref)
10667 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
a0a33927 10668
7e45bd18 10669 if (TREE_CODE (t) == VOID_TYPE)
4cd5a50a
PB
10670 warning (OPT_Wconversion,
10671 ref
10672 ? G_("conversion to a reference to void "
10673 "will never use a type conversion operator")
10674 : G_("conversion to void "
10675 "will never use a type conversion operator"));
7e45bd18
MM
10676 else if (class_type)
10677 {
10678 if (t == class_type)
4cd5a50a
PB
10679 warning (OPT_Wconversion,
10680 ref
10681 ? G_("conversion to a reference to the same type "
10682 "will never use a type conversion operator")
10683 : G_("conversion to the same type "
10684 "will never use a type conversion operator"));
9a3b49ac 10685 /* Don't force t to be complete here. */
9e1e64ec 10686 else if (MAYBE_CLASS_TYPE_P (t)
d0f062fb 10687 && COMPLETE_TYPE_P (t)
7e45bd18 10688 && DERIVED_FROM_P (t, class_type))
4cd5a50a
PB
10689 warning (OPT_Wconversion,
10690 ref
10691 ? G_("conversion to a reference to a base class "
10692 "will never use a type conversion operator")
10693 : G_("conversion to a base class "
10694 "will never use a type conversion operator"));
a0a33927 10695 }
7e45bd18 10696
a0a33927 10697 }
64844139 10698
271e6f02 10699 if (operator_code == COND_EXPR)
8d08fdba
MS
10700 {
10701 /* 13.4.0.3 */
33bd39a2 10702 error ("ISO C++ prohibits overloading operator ?:");
398cd199 10703 return false;
68642fb6 10704 }
64844139 10705 else if (ellipsis_p)
398cd199
VR
10706 {
10707 error ("%qD must not have variable number of arguments", decl);
10708 return false;
10709 }
596ea4e5 10710 else if (ambi_op_p (operator_code))
8d08fdba 10711 {
596ea4e5
AS
10712 if (arity == 1)
10713 /* We pick the one-argument operator codes by default, so
10714 we don't have to change anything. */
10715 ;
10716 else if (arity == 2)
8d08fdba 10717 {
596ea4e5
AS
10718 /* If we thought this was a unary operator, we now know
10719 it to be a binary operator. */
10720 switch (operator_code)
10721 {
10722 case INDIRECT_REF:
10723 operator_code = MULT_EXPR;
10724 break;
10725
10726 case ADDR_EXPR:
10727 operator_code = BIT_AND_EXPR;
10728 break;
10729
392e3d51 10730 case UNARY_PLUS_EXPR:
596ea4e5
AS
10731 operator_code = PLUS_EXPR;
10732 break;
10733
10734 case NEGATE_EXPR:
10735 operator_code = MINUS_EXPR;
10736 break;
10737
10738 case PREINCREMENT_EXPR:
10739 operator_code = POSTINCREMENT_EXPR;
10740 break;
10741
10742 case PREDECREMENT_EXPR:
655dc6ee 10743 operator_code = POSTDECREMENT_EXPR;
596ea4e5
AS
10744 break;
10745
10746 default:
8dc2b103 10747 gcc_unreachable ();
596ea4e5
AS
10748 }
10749
10750 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10751
10752 if ((operator_code == POSTINCREMENT_EXPR
10753 || operator_code == POSTDECREMENT_EXPR)
5156628f 10754 && ! processing_template_decl
007e5fea 10755 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8d08fdba
MS
10756 {
10757 if (methodp)
2d01edd7 10758 error ("postfix %qD must take %<int%> as its argument",
398cd199 10759 decl);
8d08fdba 10760 else
398cd199
VR
10761 error ("postfix %qD must take %<int%> as its second "
10762 "argument", decl);
10763 return false;
8d08fdba
MS
10764 }
10765 }
10766 else
10767 {
10768 if (methodp)
2d01edd7 10769 error ("%qD must take either zero or one argument", decl);
8d08fdba 10770 else
2d01edd7 10771 error ("%qD must take either one or two arguments", decl);
398cd199 10772 return false;
8d08fdba 10773 }
824b9a4c
MS
10774
10775 /* More Effective C++ rule 6. */
eb448459 10776 if (warn_ecpp
596ea4e5
AS
10777 && (operator_code == POSTINCREMENT_EXPR
10778 || operator_code == POSTDECREMENT_EXPR
10779 || operator_code == PREINCREMENT_EXPR
10780 || operator_code == PREDECREMENT_EXPR))
824b9a4c
MS
10781 {
10782 tree arg = TREE_VALUE (argtypes);
10783 tree ret = TREE_TYPE (TREE_TYPE (decl));
10784 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10785 arg = TREE_TYPE (arg);
10786 arg = TYPE_MAIN_VARIANT (arg);
596ea4e5
AS
10787 if (operator_code == PREINCREMENT_EXPR
10788 || operator_code == PREDECREMENT_EXPR)
824b9a4c
MS
10789 {
10790 if (TREE_CODE (ret) != REFERENCE_TYPE
3bfdc719
MM
10791 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10792 arg))
b323323f 10793 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
0cbd7506 10794 build_reference_type (arg));
824b9a4c
MS
10795 }
10796 else
10797 {
3bfdc719 10798 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
b323323f 10799 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
824b9a4c
MS
10800 }
10801 }
8d08fdba 10802 }
596ea4e5 10803 else if (unary_op_p (operator_code))
8d08fdba 10804 {
596ea4e5 10805 if (arity != 1)
8d08fdba
MS
10806 {
10807 if (methodp)
2d01edd7 10808 error ("%qD must take %<void%>", decl);
8d08fdba 10809 else
2d01edd7 10810 error ("%qD must take exactly one argument", decl);
398cd199 10811 return false;
8d08fdba
MS
10812 }
10813 }
596ea4e5 10814 else /* if (binary_op_p (operator_code)) */
8d08fdba 10815 {
596ea4e5 10816 if (arity != 2)
8d08fdba
MS
10817 {
10818 if (methodp)
2d01edd7 10819 error ("%qD must take exactly one argument", decl);
8d08fdba 10820 else
2d01edd7 10821 error ("%qD must take exactly two arguments", decl);
398cd199 10822 return false;
8d08fdba 10823 }
824b9a4c
MS
10824
10825 /* More Effective C++ rule 7. */
eb448459 10826 if (warn_ecpp
596ea4e5
AS
10827 && (operator_code == TRUTH_ANDIF_EXPR
10828 || operator_code == TRUTH_ORIF_EXPR
10829 || operator_code == COMPOUND_EXPR))
b323323f 10830 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
0cbd7506 10831 decl);
824b9a4c
MS
10832 }
10833
10834 /* Effective C++ rule 23. */
eb448459 10835 if (warn_ecpp
596ea4e5 10836 && arity == 2
4bd7c270 10837 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
596ea4e5
AS
10838 && (operator_code == PLUS_EXPR
10839 || operator_code == MINUS_EXPR
10840 || operator_code == TRUNC_DIV_EXPR
4bd7c270
NS
10841 || operator_code == MULT_EXPR
10842 || operator_code == TRUNC_MOD_EXPR)
824b9a4c 10843 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
b323323f 10844 warning (OPT_Weffc__, "%qD should return by value", decl);
8d08fdba 10845
271e6f02 10846 /* [over.oper]/8 */
34332678 10847 for (; argtypes && argtypes != void_list_node;
0cbd7506
MS
10848 argtypes = TREE_CHAIN (argtypes))
10849 if (TREE_PURPOSE (argtypes))
10850 {
10851 TREE_PURPOSE (argtypes) = NULL_TREE;
10852 if (operator_code == POSTINCREMENT_EXPR
596ea4e5 10853 || operator_code == POSTDECREMENT_EXPR)
0cbd7506 10854 {
509c9d60 10855 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments",
fcf73884 10856 decl);
0cbd7506
MS
10857 }
10858 else
398cd199
VR
10859 {
10860 error ("%qD cannot have default arguments", decl);
10861 return false;
10862 }
0cbd7506 10863 }
8d08fdba 10864 }
398cd199 10865 return true;
8d08fdba
MS
10866}
10867\f
0c88d886
MM
10868/* Return a string giving the keyword associate with CODE. */
10869
d8e178a0 10870static const char *
11f6b451 10871tag_name (enum tag_types code)
094fe153
JM
10872{
10873 switch (code)
10874 {
10875 case record_type:
10876 return "struct";
10877 case class_type:
10878 return "class";
10879 case union_type:
0c88d886 10880 return "union";
094fe153
JM
10881 case enum_type:
10882 return "enum";
0c88d886
MM
10883 case typename_type:
10884 return "typename";
094fe153 10885 default:
8dc2b103 10886 gcc_unreachable ();
094fe153
JM
10887 }
10888}
10889
befcd99b 10890/* Name lookup in an elaborated-type-specifier (after the keyword
4b0d3cbe 10891 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
befcd99b 10892 elaborated-type-specifier is invalid, issue a diagnostic and return
4b0d3cbe 10893 error_mark_node; otherwise, return the *_TYPE to which it referred.
cbd63935 10894 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
befcd99b 10895
560ad596 10896tree
befcd99b 10897check_elaborated_type_specifier (enum tag_types tag_code,
4b0d3cbe 10898 tree decl,
cbd63935 10899 bool allow_template_p)
befcd99b 10900{
4b0d3cbe 10901 tree type;
befcd99b 10902
4b0d3cbe
MM
10903 /* In the case of:
10904
10905 struct S { struct S *p; };
10906
10907 name lookup will find the TYPE_DECL for the implicit "S::S"
10908 typedef. Adjust for that here. */
10909 if (DECL_SELF_REFERENCE_P (decl))
10910 decl = TYPE_NAME (TREE_TYPE (decl));
10911
10912 type = TREE_TYPE (decl);
10913
461c6fce
KL
10914 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10915 is false for this case as well. */
10916 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10917 {
10918 error ("using template type parameter %qT after %qs",
10919 type, tag_name (tag_code));
10920 return error_mark_node;
10921 }
caf93cb0 10922 /* [dcl.type.elab]
4b0d3cbe
MM
10923
10924 If the identifier resolves to a typedef-name or a template
10925 type-parameter, the elaborated-type-specifier is ill-formed.
10926
10927 In other words, the only legitimate declaration to use in the
10928 elaborated type specifier is the implicit typedef created when
10929 the type is declared. */
0c88d886 10930 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
98fba7f7 10931 && !DECL_SELF_REFERENCE_P (decl)
0c88d886 10932 && tag_code != typename_type)
befcd99b 10933 {
2d01edd7 10934 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
dee15844 10935 error ("%q+D has a previous declaration here", decl);
4b0d3cbe 10936 return error_mark_node;
befcd99b 10937 }
cbd63935
KL
10938 else if (TREE_CODE (type) != RECORD_TYPE
10939 && TREE_CODE (type) != UNION_TYPE
0c88d886
MM
10940 && tag_code != enum_type
10941 && tag_code != typename_type)
cbd63935 10942 {
2d01edd7 10943 error ("%qT referred to as %qs", type, tag_name (tag_code));
dee15844 10944 error ("%q+T has a previous declaration here", type);
4b0d3cbe 10945 return error_mark_node;
cbd63935
KL
10946 }
10947 else if (TREE_CODE (type) != ENUMERAL_TYPE
4fe8db68 10948 && tag_code == enum_type)
cbd63935 10949 {
2d01edd7 10950 error ("%qT referred to as enum", type);
dee15844 10951 error ("%q+T has a previous declaration here", type);
4b0d3cbe 10952 return error_mark_node;
cbd63935
KL
10953 }
10954 else if (!allow_template_p
10955 && TREE_CODE (type) == RECORD_TYPE
10956 && CLASSTYPE_IS_TEMPLATE (type))
10957 {
10958 /* If a class template appears as elaborated type specifier
10959 without a template header such as:
10960
10961 template <class T> class C {};
10962 void f(class C); // No template header here
10963
10964 then the required template argument is missing. */
2d01edd7 10965 error ("template argument required for %<%s %T%>",
cbd63935
KL
10966 tag_name (tag_code),
10967 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
4b0d3cbe 10968 return error_mark_node;
cbd63935 10969 }
befcd99b 10970
4b0d3cbe 10971 return type;
befcd99b
MM
10972}
10973
461c6fce 10974/* Lookup NAME in elaborate type specifier in scope according to
29ef83de 10975 SCOPE and issue diagnostics if necessary.
461c6fce
KL
10976 Return *_TYPE node upon success, NULL_TREE when the NAME is not
10977 found, and ERROR_MARK_NODE for type error. */
10978
10979static tree
10980lookup_and_check_tag (enum tag_types tag_code, tree name,
29ef83de 10981 tag_scope scope, bool template_header_p)
461c6fce
KL
10982{
10983 tree t;
10984 tree decl;
29ef83de 10985 if (scope == ts_global)
bd3d082e
KL
10986 {
10987 /* First try ordinary name lookup, ignoring hidden class name
10988 injected via friend declaration. */
10e6657a 10989 decl = lookup_name_prefer_type (name, 2);
bd3d082e
KL
10990 /* If that fails, the name will be placed in the smallest
10991 non-class, non-function-prototype scope according to 3.3.1/5.
10992 We may already have a hidden name declared as friend in this
105d72c5 10993 scope. So lookup again but not ignoring hidden names.
bd3d082e
KL
10994 If we find one, that name will be made visible rather than
10995 creating a new tag. */
10996 if (!decl)
10997 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10998 }
461c6fce 10999 else
29ef83de 11000 decl = lookup_type_scope (name, scope);
461c6fce
KL
11001
11002 if (decl && DECL_CLASS_TEMPLATE_P (decl))
11003 decl = DECL_TEMPLATE_RESULT (decl);
11004
11005 if (decl && TREE_CODE (decl) == TYPE_DECL)
11006 {
4104f0f4
KL
11007 /* Look for invalid nested type:
11008 class C {
11009 class C {};
11010 }; */
11011 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
11012 {
11013 error ("%qD has the same name as the class in which it is "
11014 "declared",
11015 decl);
11016 return error_mark_node;
11017 }
11018
461c6fce
KL
11019 /* Two cases we need to consider when deciding if a class
11020 template is allowed as an elaborated type specifier:
11021 1. It is a self reference to its own class.
11022 2. It comes with a template header.
11023
11024 For example:
11025
11026 template <class T> class C {
11027 class C *c1; // DECL_SELF_REFERENCE_P is true
11028 class D;
11029 };
11030 template <class U> class C; // template_header_p is true
11031 template <class T> class C<T>::D {
11032 class C *c2; // DECL_SELF_REFERENCE_P is true
11033 }; */
11034
11035 t = check_elaborated_type_specifier (tag_code,
11036 decl,
11037 template_header_p
11038 | DECL_SELF_REFERENCE_P (decl));
11039 return t;
11040 }
af92ab36
OW
11041 else if (decl && TREE_CODE (decl) == TREE_LIST)
11042 {
11043 error ("reference to %qD is ambiguous", name);
11044 print_candidates (decl);
11045 return error_mark_node;
11046 }
461c6fce
KL
11047 else
11048 return NULL_TREE;
11049}
11050
cbd63935 11051/* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
8d08fdba
MS
11052 Define the tag as a forward-reference if it is not defined.
11053
cbd63935 11054 If a declaration is given, process it here, and report an error if
38b305d0 11055 multiple declarations are not identical.
8d08fdba 11056
29ef83de 11057 SCOPE is TS_CURRENT when this is also a definition. Only look in
8d08fdba 11058 the current frame for the name (since C++ allows new names in any
29ef83de
KL
11059 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
11060 declaration. Only look beginning from the current scope outward up
11061 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
cbd63935
KL
11062
11063 TEMPLATE_HEADER_P is true when this declaration is preceded by
11064 a set of template parameters. */
8d08fdba 11065
8d08fdba 11066tree
38b305d0 11067xref_tag (enum tag_types tag_code, tree name,
29ef83de 11068 tag_scope scope, bool template_header_p)
8d08fdba 11069{
8d08fdba 11070 enum tree_code code;
926ce8bd 11071 tree t;
25aab5d0 11072 tree context = NULL_TREE;
dc8263bc 11073
22ffcc6f 11074 timevar_push (TV_NAME_LOOKUP);
cbd63935 11075
50bc768d 11076 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
cbd63935 11077
8d08fdba
MS
11078 switch (tag_code)
11079 {
11080 case record_type:
11081 case class_type:
8d08fdba 11082 code = RECORD_TYPE;
8d08fdba
MS
11083 break;
11084 case union_type:
11085 code = UNION_TYPE;
8d08fdba
MS
11086 break;
11087 case enum_type:
11088 code = ENUMERAL_TYPE;
11089 break;
11090 default:
8dc2b103 11091 gcc_unreachable ();
8d08fdba
MS
11092 }
11093
461c6fce
KL
11094 /* In case of anonymous name, xref_tag is only called to
11095 make type node and push name. Name lookup is not required. */
11096 if (ANON_AGGRNAME_P (name))
11097 t = NULL_TREE;
8d08fdba 11098 else
461c6fce 11099 t = lookup_and_check_tag (tag_code, name,
29ef83de 11100 scope, template_header_p);
cbd63935 11101
461c6fce
KL
11102 if (t == error_mark_node)
11103 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
68642fb6 11104
29ef83de 11105 if (scope != ts_current && t && current_class_type
461c6fce
KL
11106 && template_class_depth (current_class_type)
11107 && template_header_p)
11108 {
29ef83de 11109 /* Since SCOPE is not TS_CURRENT, we are not looking at a
461c6fce
KL
11110 definition of this tag. Since, in addition, we are currently
11111 processing a (member) template declaration of a template
11112 class, we must be very careful; consider:
25aab5d0 11113
461c6fce
KL
11114 template <class X>
11115 struct S1
25aab5d0 11116
461c6fce
KL
11117 template <class U>
11118 struct S2
11119 { template <class V>
11120 friend struct S1; };
25aab5d0 11121
461c6fce
KL
11122 Here, the S2::S1 declaration should not be confused with the
11123 outer declaration. In particular, the inner version should
11124 have a template parameter of level 2, not level 1. This
11125 would be particularly important if the member declaration
11126 were instead:
25aab5d0 11127
461c6fce 11128 template <class V = U> friend struct S1;
25aab5d0 11129
461c6fce
KL
11130 say, when we should tsubst into `U' when instantiating
11131 S2. On the other hand, when presented with:
25aab5d0 11132
461c6fce
KL
11133 template <class T>
11134 struct S1 {
11135 template <class U>
11136 struct S2 {};
11137 template <class U>
11138 friend struct S2;
11139 };
25aab5d0 11140
461c6fce
KL
11141 we must find the inner binding eventually. We
11142 accomplish this by making sure that the new type we
11143 create to represent this declaration has the right
11144 TYPE_CONTEXT. */
11145 context = TYPE_CONTEXT (t);
11146 t = NULL_TREE;
8d08fdba
MS
11147 }
11148
cbd63935 11149 if (! t)
8d08fdba
MS
11150 {
11151 /* If no such tag is yet defined, create a forward-reference node
11152 and record it as the "definition".
11153 When a real declaration of this type is found,
11154 the forward-reference will be altered into a real type. */
8d08fdba
MS
11155 if (code == ENUMERAL_TYPE)
11156 {
2d01edd7 11157 error ("use of enum %q#D without previous declaration", name);
30fc3df7 11158 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
8d08fdba 11159 }
8d08fdba
MS
11160 else
11161 {
9e1e64ec 11162 t = make_class_type (code);
cbd63935 11163 TYPE_CONTEXT (t) = context;
bd3d082e 11164 t = pushtag (name, t, scope);
8d08fdba
MS
11165 }
11166 }
11167 else
11168 {
9e1e64ec 11169 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
60feef2c
LM
11170 {
11171 if (!redeclare_class_template (t, current_template_parms))
11172 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
11173 }
caf93cb0 11174 else if (!processing_template_decl
9ce1594a
MM
11175 && CLASS_TYPE_P (t)
11176 && CLASSTYPE_IS_TEMPLATE (t))
11177 {
2d01edd7 11178 error ("redeclaration of %qT as a non-template", t);
b646edb8
VR
11179 error ("previous declaration %q+D", t);
11180 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9ce1594a 11181 }
bd3d082e
KL
11182
11183 /* Make injected friend class visible. */
11184 if (scope != ts_within_enclosing_non_class
11185 && hidden_name_p (TYPE_NAME (t)))
11186 {
11187 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
11188 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
11189
11190 if (TYPE_TEMPLATE_INFO (t))
11191 {
11192 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
11193 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
11194 }
0cbd7506 11195 }
8d08fdba
MS
11196 }
11197
cbd63935 11198 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
8d08fdba 11199}
8ccc31eb 11200
fc378698 11201tree
29ef83de 11202xref_tag_from_type (tree old, tree id, tag_scope scope)
fc378698 11203{
88e5899c 11204 enum tag_types tag_kind;
fc378698
MS
11205
11206 if (TREE_CODE (old) == RECORD_TYPE)
88e5899c 11207 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
fc378698 11208 else
88e5899c 11209 tag_kind = union_type;
fc378698
MS
11210
11211 if (id == NULL_TREE)
11212 id = TYPE_IDENTIFIER (old);
11213
29ef83de 11214 return xref_tag (tag_kind, id, scope, false);
fc378698
MS
11215}
11216
48b45647
NS
11217/* Create the binfo hierarchy for REF with (possibly NULL) base list
11218 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
11219 access_* node, and the TREE_VALUE is the type of the base-class.
72f8fc59
LM
11220 Non-NULL TREE_TYPE indicates virtual inheritance.
11221
bd6f7848 11222 Returns true if the binfo hierarchy was successfully created,
72f8fc59 11223 false if an error was detected. */
3fd71a52 11224
72f8fc59 11225bool
dbbf88d1 11226xref_basetypes (tree ref, tree base_list)
8ccc31eb 11227{
8fbc5ae7 11228 tree *basep;
fa743e8c 11229 tree binfo, base_binfo;
03fd3f84 11230 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
77880ae4 11231 unsigned max_bases = 0; /* Maximum direct bases. */
8fbc5ae7 11232 int i;
48b45647
NS
11233 tree default_access;
11234 tree igo_prev; /* Track Inheritance Graph Order. */
a5d7c4a3 11235
bef89e9e 11236 if (ref == error_mark_node)
72f8fc59 11237 return false;
bef89e9e 11238
48b45647
NS
11239 /* The base of a derived class is private by default, all others are
11240 public. */
11241 default_access = (TREE_CODE (ref) == RECORD_TYPE
11242 && CLASSTYPE_DECLARED_CLASS (ref)
11243 ? access_private_node : access_public_node);
da15dae6 11244
d6479fe7
MM
11245 /* First, make sure that any templates in base-classes are
11246 instantiated. This ensures that if we call ourselves recursively
11247 we do not get confused about which classes are marked and which
11248 are not. */
caf93cb0
EC
11249 basep = &base_list;
11250 while (*basep)
8fbc5ae7
MM
11251 {
11252 tree basetype = TREE_VALUE (*basep);
caf93cb0 11253
8fbc5ae7
MM
11254 if (!(processing_template_decl && uses_template_parms (basetype))
11255 && !complete_type_or_else (basetype, NULL))
dbbf88d1 11256 /* An incomplete type. Remove it from the list. */
8fbc5ae7
MM
11257 *basep = TREE_CHAIN (*basep);
11258 else
48b45647
NS
11259 {
11260 max_bases++;
11261 if (TREE_TYPE (*basep))
11262 max_vbases++;
11263 if (CLASS_TYPE_P (basetype))
11264 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
11265 basep = &TREE_CHAIN (*basep);
11266 }
8fbc5ae7 11267 }
d6479fe7 11268
3543e114 11269 TYPE_MARKED_P (ref) = 1;
48b45647 11270
cad7e87b
NS
11271 /* The binfo slot should be empty, unless this is an (ill-formed)
11272 redefinition. */
1a494ab5
PC
11273 if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
11274 {
11275 error ("redefinition of %q#T", ref);
11276 return false;
11277 }
11278
50bc768d 11279 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
caf93cb0 11280
fa743e8c 11281 binfo = make_tree_binfo (max_bases);
caf93cb0 11282
48b45647
NS
11283 TYPE_BINFO (ref) = binfo;
11284 BINFO_OFFSET (binfo) = size_zero_node;
11285 BINFO_TYPE (binfo) = ref;
caf93cb0 11286
d0940d56
DS
11287 /* Apply base-class info set up to the variants of this type. */
11288 fixup_type_variants (ref);
11289
48b45647
NS
11290 if (max_bases)
11291 {
d4e6fecb 11292 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
48b45647
NS
11293 /* An aggregate cannot have baseclasses. */
11294 CLASSTYPE_NON_AGGREGATE (ref) = 1;
caf93cb0 11295
48b45647 11296 if (TREE_CODE (ref) == UNION_TYPE)
72f8fc59
LM
11297 {
11298 error ("derived union %qT invalid", ref);
11299 return false;
11300 }
48b45647 11301 }
caf93cb0 11302
48b45647 11303 if (max_bases > 1)
dbbf88d1 11304 {
48b45647 11305 if (TYPE_FOR_JAVA (ref))
72f8fc59
LM
11306 {
11307 error ("Java class %qT cannot have multiple bases", ref);
11308 return false;
11309 }
48b45647 11310 }
caf93cb0 11311
48b45647
NS
11312 if (max_vbases)
11313 {
d4e6fecb 11314 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
caf93cb0 11315
48b45647 11316 if (TYPE_FOR_JAVA (ref))
72f8fc59
LM
11317 {
11318 error ("Java class %qT cannot have virtual bases", ref);
11319 return false;
11320 }
48b45647 11321 }
cad7e87b 11322
48b45647
NS
11323 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
11324 {
11325 tree access = TREE_PURPOSE (base_list);
11326 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
11327 tree basetype = TREE_VALUE (base_list);
caf93cb0 11328
48b45647
NS
11329 if (access == access_default_node)
11330 access = default_access;
caf93cb0 11331
5d80a306
DG
11332 if (PACK_EXPANSION_P (basetype))
11333 basetype = PACK_EXPANSION_PATTERN (basetype);
48b45647
NS
11334 if (TREE_CODE (basetype) == TYPE_DECL)
11335 basetype = TREE_TYPE (basetype);
76871f0f 11336 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
48b45647 11337 {
2d01edd7 11338 error ("base type %qT fails to be a struct or class type",
48b45647 11339 basetype);
72f8fc59 11340 return false;
8ccc31eb 11341 }
caf93cb0 11342
48b45647
NS
11343 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
11344 TYPE_FOR_JAVA (ref) = 1;
11345
fa743e8c 11346 base_binfo = NULL_TREE;
48b45647 11347 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
dbbf88d1 11348 {
48b45647 11349 base_binfo = TYPE_BINFO (basetype);
77880ae4 11350 /* The original basetype could have been a typedef'd type. */
48b45647 11351 basetype = BINFO_TYPE (base_binfo);
caf93cb0 11352
48b45647
NS
11353 /* Inherit flags from the base. */
11354 TYPE_HAS_NEW_OPERATOR (ref)
11355 |= TYPE_HAS_NEW_OPERATOR (basetype);
11356 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
11357 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
11358 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
48b45647 11359 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
3543e114
NS
11360 CLASSTYPE_DIAMOND_SHAPED_P (ref)
11361 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
11362 CLASSTYPE_REPEATED_BASE_P (ref)
11363 |= CLASSTYPE_REPEATED_BASE_P (basetype);
8fbc5ae7 11364 }
c8094d83 11365
98d6e9af
NS
11366 /* We must do this test after we've seen through a typedef
11367 type. */
11368 if (TYPE_MARKED_P (basetype))
11369 {
11370 if (basetype == ref)
2d01edd7 11371 error ("recursive type %qT undefined", basetype);
98d6e9af 11372 else
2d01edd7 11373 error ("duplicate base type %qT invalid", basetype);
72f8fc59 11374 return false;
98d6e9af 11375 }
5d80a306
DG
11376
11377 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
11378 /* Regenerate the pack expansion for the bases. */
11379 basetype = make_pack_expansion (basetype);
11380
98d6e9af 11381 TYPE_MARKED_P (basetype) = 1;
caf93cb0 11382
48b45647
NS
11383 base_binfo = copy_binfo (base_binfo, basetype, ref,
11384 &igo_prev, via_virtual);
11385 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
11386 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
f5c28a15 11387
fa743e8c 11388 BINFO_BASE_APPEND (binfo, base_binfo);
63d1c7b3 11389 BINFO_BASE_ACCESS_APPEND (binfo, access);
cad7e87b
NS
11390 }
11391
3543e114
NS
11392 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
11393 /* If we have space in the vbase vector, we must have shared at
11394 least one of them, and are therefore diamond shaped. */
11395 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
11396
dbbf88d1 11397 /* Unmark all the types. */
fa743e8c 11398 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
3543e114
NS
11399 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11400 TYPE_MARKED_P (ref) = 0;
11401
11402 /* Now see if we have a repeated base type. */
11403 if (!CLASSTYPE_REPEATED_BASE_P (ref))
11404 {
11405 for (base_binfo = binfo; base_binfo;
11406 base_binfo = TREE_CHAIN (base_binfo))
11407 {
11408 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11409 {
11410 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11411 break;
11412 }
11413 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11414 }
11415 for (base_binfo = binfo; base_binfo;
11416 base_binfo = TREE_CHAIN (base_binfo))
11417 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11418 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11419 else
11420 break;
11421 }
72f8fc59
LM
11422
11423 return true;
8ccc31eb 11424}
68642fb6 11425
8d08fdba 11426\f
90ecaf87
RRC
11427/* Copies the enum-related properties from type SRC to type DST.
11428 Used with the underlying type of an enum and the enum itself. */
11429static void
11430copy_type_enum (tree dst, tree src)
11431{
11432 TYPE_MIN_VALUE (dst) = TYPE_MIN_VALUE (src);
11433 TYPE_MAX_VALUE (dst) = TYPE_MAX_VALUE (src);
11434 TYPE_SIZE (dst) = TYPE_SIZE (src);
11435 TYPE_SIZE_UNIT (dst) = TYPE_SIZE_UNIT (src);
11436 SET_TYPE_MODE (dst, TYPE_MODE (src));
11437 TYPE_PRECISION (dst) = TYPE_PRECISION (src);
11438 TYPE_ALIGN (dst) = TYPE_ALIGN (src);
11439 TYPE_USER_ALIGN (dst) = TYPE_USER_ALIGN (src);
11440 TYPE_UNSIGNED (dst) = TYPE_UNSIGNED (src);
11441}
11442
8d08fdba 11443/* Begin compiling the definition of an enumeration type.
adf2edec
DG
11444 NAME is its name,
11445
90ecaf87
RRC
11446 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
11447
adf2edec
DG
11448 UNDERLYING_TYPE is the type that will be used as the storage for
11449 the enumeration type. This should be NULL_TREE if no storage type
11450 was specified.
11451
11452 SCOPED_ENUM_P is true if this is a scoped enumeration type.
11453
90ecaf87
RRC
11454 if IS_NEW is not NULL, gets TRUE iff a new type is created.
11455
8d08fdba
MS
11456 Returns the type object, as yet incomplete.
11457 Also records info about it so that build_enumerator
11458 may be used to declare the individual values as they are read. */
11459
11460tree
90ecaf87
RRC
11461start_enum (tree name, tree enumtype, tree underlying_type,
11462 bool scoped_enum_p, bool *is_new)
8d08fdba 11463{
90ecaf87 11464 tree prevtype = NULL_TREE;
29ef83de 11465 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
8d08fdba 11466
90ecaf87
RRC
11467 if (is_new)
11468 *is_new = false;
11469 /* [C++0x dcl.enum]p5:
11470
11471 If not explicitly specified, the underlying type of a scoped
11472 enumeration type is int. */
11473 if (!underlying_type && scoped_enum_p)
11474 underlying_type = integer_type_node;
11475
11476 if (underlying_type)
11477 underlying_type = cv_unqualified (underlying_type);
11478
8d08fdba
MS
11479 /* If this is the real definition for a previous forward reference,
11480 fill in the contents in the same object that used to be the
11481 forward reference. */
90ecaf87
RRC
11482 if (!enumtype)
11483 enumtype = lookup_and_check_tag (enum_type, name,
11484 /*tag_scope=*/ts_current,
11485 /*template_header_p=*/false);
8d08fdba 11486
90ecaf87
RRC
11487 /* In case of a template_decl, the only check that should be deferred
11488 to instantiation time is the comparison of underlying types. */
11489 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
30ff8252 11490 {
90ecaf87
RRC
11491 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
11492 {
11493 error_at (input_location, "scoped/unscoped mismatch "
11494 "in enum %q#T", enumtype);
11495 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11496 "previous definition here");
11497 enumtype = error_mark_node;
11498 }
11499 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
11500 {
11501 error_at (input_location, "underlying type mismatch "
11502 "in enum %q#T", enumtype);
11503 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11504 "previous definition here");
11505 enumtype = error_mark_node;
11506 }
11507 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
11508 && !dependent_type_p (underlying_type)
11509 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
11510 && !same_type_p (underlying_type,
11511 ENUM_UNDERLYING_TYPE (enumtype)))
11512 {
11513 error_at (input_location, "different underlying type "
11514 "in enum %q#T", enumtype);
11515 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11516 "previous definition here");
11517 underlying_type = NULL_TREE;
11518 }
30ff8252 11519 }
90ecaf87
RRC
11520
11521 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
11522 || processing_template_decl)
8d08fdba 11523 {
29ef83de
KL
11524 /* In case of error, make a dummy enum to allow parsing to
11525 continue. */
11526 if (enumtype == error_mark_node)
90ecaf87
RRC
11527 {
11528 name = make_anon_name ();
11529 enumtype = NULL_TREE;
11530 }
29ef83de 11531
90ecaf87
RRC
11532 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
11533 of an opaque enum, or an opaque enum of an already defined
11534 enumeration (C++0x only).
11535 In any other case, it'll be NULL_TREE. */
11536 if (!enumtype)
11537 {
11538 if (is_new)
11539 *is_new = true;
11540 }
11541 prevtype = enumtype;
7ecbca9d 11542 enumtype = cxx_make_type (ENUMERAL_TYPE);
bd3d082e 11543 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
90ecaf87
RRC
11544 if (enumtype == error_mark_node)
11545 return error_mark_node;
adf2edec 11546
90ecaf87
RRC
11547 /* The enum is considered opaque until the opening '{' of the
11548 enumerator list. */
11549 SET_OPAQUE_ENUM_P (enumtype, true);
11550 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
adf2edec
DG
11551 }
11552
90ecaf87
RRC
11553 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
11554
adf2edec
DG
11555 if (underlying_type)
11556 {
11557 if (CP_INTEGRAL_TYPE_P (underlying_type))
11558 {
90ecaf87 11559 copy_type_enum (enumtype, underlying_type);
adf2edec
DG
11560 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11561 }
90ecaf87
RRC
11562 else if (dependent_type_p (underlying_type))
11563 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11564 else
adf2edec
DG
11565 error ("underlying type %<%T%> of %<%T%> must be an integral type",
11566 underlying_type, enumtype);
11567 }
11568
90ecaf87
RRC
11569 /* If into a template class, the returned enum is always the first
11570 declaration (opaque or not) seen. This way all the references to
11571 this type will be to the same declaration. The following ones are used
11572 only to check for definition errors. */
11573 if (prevtype && processing_template_decl)
11574 return prevtype;
11575 else
11576 return enumtype;
8d08fdba
MS
11577}
11578
11579/* After processing and defining all the values of an enumeration type,
90ecaf87
RRC
11580 install their decls in the enumeration type.
11581 ENUMTYPE is the type object. */
8d08fdba 11582
968b956a 11583void
90ecaf87 11584finish_enum_value_list (tree enumtype)
8d08fdba 11585{
7b6d72fc 11586 tree values;
90ecaf87 11587 tree underlying_type;
7b6d72fc 11588 tree decl;
adf2edec 11589 tree value;
90ecaf87 11590 tree minnode, maxnode;
968b956a 11591 tree t;
90ecaf87 11592
adf2edec
DG
11593 bool fixed_underlying_type_p
11594 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
968b956a
MM
11595
11596 /* We built up the VALUES in reverse order. */
11597 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
11598
f5d70cc0
JM
11599 /* For an enum defined in a template, just set the type of the values;
11600 all further processing is postponed until the template is
11601 instantiated. We need to set the type so that tsubst of a CONST_DECL
11602 works. */
968b956a
MM
11603 if (processing_template_decl)
11604 {
caf93cb0
EC
11605 for (values = TYPE_VALUES (enumtype);
11606 values;
7b6d72fc
MM
11607 values = TREE_CHAIN (values))
11608 TREE_TYPE (TREE_VALUE (values)) = enumtype;
968b956a
MM
11609 return;
11610 }
11611
7b6d72fc 11612 /* Determine the minimum and maximum values of the enumerators. */
968b956a 11613 if (TYPE_VALUES (enumtype))
8d08fdba 11614 {
968b956a 11615 minnode = maxnode = NULL_TREE;
5566b478 11616
caf93cb0 11617 for (values = TYPE_VALUES (enumtype);
90ecaf87
RRC
11618 values;
11619 values = TREE_CHAIN (values))
11620 {
11621 decl = TREE_VALUE (values);
11622
11623 /* [dcl.enum]: Following the closing brace of an enum-specifier,
11624 each enumerator has the type of its enumeration. Prior to the
11625 closing brace, the type of each enumerator is the type of its
11626 initializing value. */
11627 TREE_TYPE (decl) = enumtype;
11628
11629 /* Update the minimum and maximum values, if appropriate. */
11630 value = DECL_INITIAL (decl);
11631 if (value == error_mark_node)
11632 value = integer_zero_node;
11633 /* Figure out what the minimum and maximum values of the
11634 enumerators are. */
11635 if (!minnode)
11636 minnode = maxnode = value;
11637 else if (tree_int_cst_lt (maxnode, value))
11638 maxnode = value;
11639 else if (tree_int_cst_lt (value, minnode))
11640 minnode = value;
11641 }
8d08fdba 11642 }
f376e137 11643 else
7b6d72fc 11644 /* [dcl.enum]
90ecaf87 11645
7b6d72fc
MM
11646 If the enumerator-list is empty, the underlying type is as if
11647 the enumeration had a single enumerator with value 0. */
968b956a
MM
11648 minnode = maxnode = integer_zero_node;
11649
adf2edec
DG
11650 if (!fixed_underlying_type_p)
11651 {
cbb4feb3
JM
11652 /* Compute the number of bits require to represent all values of the
11653 enumeration. We must do this before the type of MINNODE and
11654 MAXNODE are transformed, since tree_int_cst_min_precision relies
11655 on the TREE_TYPE of the value it is passed. */
11656 bool unsignedp = tree_int_cst_sgn (minnode) >= 0;
11657 int lowprec = tree_int_cst_min_precision (minnode, unsignedp);
11658 int highprec = tree_int_cst_min_precision (maxnode, unsignedp);
11659 int precision = MAX (lowprec, highprec);
11660 unsigned int itk;
11661 bool use_short_enum;
11662
adf2edec 11663 /* Determine the underlying type of the enumeration.
7b6d72fc 11664
adf2edec 11665 [dcl.enum]
7b6d72fc 11666
adf2edec
DG
11667 The underlying type of an enumeration is an integral type that
11668 can represent all the enumerator values defined in the
11669 enumeration. It is implementation-defined which integral type is
11670 used as the underlying type for an enumeration except that the
11671 underlying type shall not be larger than int unless the value of
11672 an enumerator cannot fit in an int or unsigned int.
7b6d72fc 11673
adf2edec
DG
11674 We use "int" or an "unsigned int" as the underlying type, even if
11675 a smaller integral type would work, unless the user has
11676 explicitly requested that we use the smallest possible type. The
11677 user can request that for all enumerations with a command line
11678 flag, or for just one enumeration with an attribute. */
f6af9a15 11679
adf2edec
DG
11680 use_short_enum = flag_short_enums
11681 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
f6af9a15 11682
adf2edec
DG
11683 for (itk = (use_short_enum ? itk_char : itk_int);
11684 itk != itk_none;
11685 itk++)
11686 {
11687 underlying_type = integer_types[itk];
64c31785
KT
11688 if (underlying_type != NULL_TREE
11689 && TYPE_PRECISION (underlying_type) >= precision
adf2edec
DG
11690 && TYPE_UNSIGNED (underlying_type) == unsignedp)
11691 break;
11692 }
11693 if (itk == itk_none)
11694 {
11695 /* DR 377
11696
11697 IF no integral type can represent all the enumerator values, the
11698 enumeration is ill-formed. */
11699 error ("no integral type can represent all of the enumerator values "
11700 "for %qT", enumtype);
11701 precision = TYPE_PRECISION (long_long_integer_type_node);
11702 underlying_type = integer_types[itk_unsigned_long_long];
11703 }
7b6d72fc 11704
adf2edec
DG
11705 /* [dcl.enum]
11706
11707 The value of sizeof() applied to an enumeration type, an object
11708 of an enumeration type, or an enumerator, is the value of sizeof()
11709 applied to the underlying type. */
90ecaf87 11710 copy_type_enum (enumtype, underlying_type);
adf2edec 11711
cbb4feb3
JM
11712 /* Compute the minimum and maximum values for the type.
11713
11714 [dcl.enum]
11715
11716 For an enumeration where emin is the smallest enumerator and emax
11717 is the largest, the values of the enumeration are the values of the
11718 underlying type in the range bmin to bmax, where bmin and bmax are,
11719 respectively, the smallest and largest values of the smallest bit-
11720 field that can store emin and emax. */
11721
11722 /* The middle-end currently assumes that types with TYPE_PRECISION
11723 narrower than their underlying type are suitably zero or sign
11724 extended to fill their mode. Similarly, it assumes that the front
11725 end assures that a value of a particular type must be within
11726 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
11727
11728 We used to set these fields based on bmin and bmax, but that led
11729 to invalid assumptions like optimizing away bounds checking. So
11730 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
11731 TYPE_MAX_VALUE to the values for the mode above and only restrict
11732 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
22521c89
RG
11733 ENUM_UNDERLYING_TYPE (enumtype)
11734 = build_distinct_type_copy (underlying_type);
cbb4feb3
JM
11735 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
11736 set_min_and_max_values_for_integral_type
adf2edec 11737 (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
cbb4feb3
JM
11738
11739 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
11740 if (flag_strict_enums)
11741 set_min_and_max_values_for_integral_type (enumtype, precision,
11742 unsignedp);
e455bc27 11743 }
adf2edec
DG
11744 else
11745 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
e455bc27 11746
7b6d72fc
MM
11747 /* Convert each of the enumerators to the type of the underlying
11748 type of the enumeration. */
11749 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
11750 {
3c955a04
MM
11751 location_t saved_location;
11752
7b6d72fc 11753 decl = TREE_VALUE (values);
3c955a04
MM
11754 saved_location = input_location;
11755 input_location = DECL_SOURCE_LOCATION (decl);
adf2edec
DG
11756 if (fixed_underlying_type_p)
11757 /* If the enumeration type has a fixed underlying type, we
11758 already checked all of the enumerator values. */
11759 value = DECL_INITIAL (decl);
11760 else
11761 value = perform_implicit_conversion (underlying_type,
11762 DECL_INITIAL (decl),
11763 tf_warning_or_error);
3c955a04 11764 input_location = saved_location;
89b0433e
NS
11765
11766 /* Do not clobber shared ints. */
11767 value = copy_node (value);
c8094d83 11768
7b6d72fc
MM
11769 TREE_TYPE (value) = enumtype;
11770 DECL_INITIAL (decl) = value;
e455bc27 11771 }
8d08fdba 11772
968b956a
MM
11773 /* Fix up all variant types of this enum type. */
11774 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
90ecaf87 11775 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
adf2edec 11776
968b956a
MM
11777 /* Finish debugging output for this type. */
11778 rest_of_type_compilation (enumtype, namespace_bindings_p ());
8d08fdba
MS
11779}
11780
90ecaf87
RRC
11781/* Finishes the enum type. This is called only the first time an
11782 enumeration is seen, be it opaque or odinary.
11783 ENUMTYPE is the type object. */
11784
11785void
11786finish_enum (tree enumtype)
11787{
11788 if (processing_template_decl)
11789 {
11790 if (at_function_scope_p ())
11791 add_stmt (build_min (TAG_DEFN, enumtype));
11792 return;
11793 }
11794
11795 /* Here there should not be any variants of this type. */
11796 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
11797 && !TYPE_NEXT_VARIANT (enumtype));
11798}
11799
079e1098 11800/* Build and install a CONST_DECL for an enumeration constant of the
58595203 11801 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
4cc2a722 11802 LOC is the location of NAME.
8d08fdba
MS
11803 Assignment of sequential values by default is handled here. */
11804
58595203 11805void
4cc2a722 11806build_enumerator (tree name, tree value, tree enumtype, location_t loc)
8d08fdba 11807{
58595203 11808 tree decl;
e8bd800e 11809 tree context;
58595203 11810 tree type;
8d08fdba 11811
93678513
MM
11812 /* If the VALUE was erroneous, pretend it wasn't there; that will
11813 result in the enum being assigned the next value in sequence. */
11814 if (value == error_mark_node)
11815 value = NULL_TREE;
11816
8d08fdba
MS
11817 /* Remove no-op casts from the value. */
11818 if (value)
11819 STRIP_TYPE_NOPS (value);
11820
58595203
MM
11821 if (! processing_template_decl)
11822 {
11823 /* Validate and default VALUE. */
11824 if (value != NULL_TREE)
11825 {
fa2200cb 11826 value = cxx_constant_value (value);
58595203
MM
11827
11828 if (TREE_CODE (value) == INTEGER_CST)
11829 {
0a72704b 11830 value = perform_integral_promotions (value);
58595203
MM
11831 }
11832 else
11833 {
253e0d15 11834 error ("enumerator value for %qD is not an integer constant", name);
58595203
MM
11835 value = NULL_TREE;
11836 }
11837 }
11838
11839 /* Default based on previous value. */
6a540f3c 11840 if (value == NULL_TREE)
58595203 11841 {
58595203
MM
11842 if (TYPE_VALUES (enumtype))
11843 {
ff4eb0b5
ZW
11844 HOST_WIDE_INT hi;
11845 unsigned HOST_WIDE_INT lo;
11846 tree prev_value;
11847 bool overflowed;
11848
0f7a47dd 11849 /* The next value is the previous value plus one.
ff4eb0b5
ZW
11850 add_double doesn't know the type of the target expression,
11851 so we must check with int_fits_type_p as well. */
58595203 11852 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
0f7a47dd
JJ
11853 if (error_operand_p (prev_value))
11854 value = error_mark_node;
11855 else
3c955a04 11856 {
0f7a47dd
JJ
11857 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
11858 TREE_INT_CST_HIGH (prev_value),
11859 1, 0, &lo, &hi);
11860 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
11861 overflowed
11862 |= !int_fits_type_p (value, TREE_TYPE (prev_value));
11863
11864 if (overflowed)
11865 {
11866 error ("overflow in enumeration values at %qD", name);
11867 value = error_mark_node;
11868 }
3c955a04 11869 }
58595203
MM
11870 }
11871 else
11872 value = integer_zero_node;
11873 }
11874
11875 /* Remove no-op casts from the value. */
f5d70cc0 11876 STRIP_TYPE_NOPS (value);
adf2edec
DG
11877
11878 /* If the underlying type of the enum is fixed, check whether
11879 the enumerator values fits in the underlying type. If it
11880 does not fit, the program is ill-formed [C++0x dcl.enum]. */
11881 if (ENUM_UNDERLYING_TYPE (enumtype)
11882 && value
11883 && TREE_CODE (value) == INTEGER_CST
11884 && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
11885 {
11886 error ("enumerator value %E is too large for underlying type %<%T%>",
11887 value, ENUM_UNDERLYING_TYPE (enumtype));
11888
11889 /* Silently convert the value so that we can continue. */
11890 value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
11891 value, tf_none);
adf2edec 11892 }
58595203 11893 }
8d08fdba 11894
8d08fdba 11895 /* C++ associates enums with global, function, or class declarations. */
58595203
MM
11896 context = current_scope ();
11897
11898 /* Build the actual enumeration constant. Note that the enumeration
adf2edec
DG
11899 constants have the underlying type of the enum (if it is fixed)
11900 or the type of their initializer (if the underlying type of the
11901 enum is not fixed):
11902
11903 [ C++0x dcl.enum ]
11904
11905 If the underlying type is fixed, the type of each enumerator
11906 prior to the closing brace is the underlying type; if the
11907 initializing value of an enumerator cannot be represented by
11908 the underlying type, the program is ill-formed. If the
11909 underlying type is not fixed, the type of each enumerator is
11910 the type of its initializing value.
11911
11912 If the underlying type is not fixed, it will be computed by
11913 finish_enum and we will reset the type of this enumerator. Of
11914 course, if we're processing a template, there may be no value. */
58595203
MM
11915 type = value ? TREE_TYPE (value) : NULL_TREE;
11916
11917 if (context && context == current_class_type)
11918 /* This enum declaration is local to the class. We need the full
8f17b5c5 11919 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
4cc2a722 11920 decl = build_lang_decl_loc (loc, CONST_DECL, name, type);
58595203
MM
11921 else
11922 /* It's a global enum, or it's local to a function. (Note local to
4cc2a722
AC
11923 a function could mean local to a class method. */
11924 decl = build_decl (loc, CONST_DECL, name, type);
11925
58595203 11926 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
6de9cd9a 11927 TREE_CONSTANT (decl) = 1;
6de9cd9a 11928 TREE_READONLY (decl) = 1;
58595203 11929 DECL_INITIAL (decl) = value;
e8bd800e 11930
60662d5f 11931 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
58595203 11932 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
7b6d72fc
MM
11933 on the TYPE_FIELDS list for `S'. (That's so that you can say
11934 things like `S::i' later.) */
58595203
MM
11935 finish_member_declaration (decl);
11936 else
9780c24f 11937 pushdecl (decl);
58595203
MM
11938
11939 /* Add this enumeration constant to the list for this type. */
11940 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
8d08fdba
MS
11941}
11942
adf2edec
DG
11943/* Look for an enumerator with the given NAME within the enumeration
11944 type ENUMTYPE. This routine is used primarily for qualified name
11945 lookup into an enumerator in C++0x, e.g.,
11946
11947 enum class Color { Red, Green, Blue };
11948
11949 Color color = Color::Red;
11950
11951 Returns the value corresponding to the enumerator, or
11952 NULL_TREE if no such enumerator was found. */
11953tree
11954lookup_enumerator (tree enumtype, tree name)
11955{
11956 tree e;
11957 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
11958
11959 e = purpose_member (name, TYPE_VALUES (enumtype));
11960 return e? TREE_VALUE (e) : NULL_TREE;
11961}
11962
8d08fdba 11963\f
3c3905fc 11964/* We're defining DECL. Make sure that its type is OK. */
a8f73d4b
MM
11965
11966static void
11f6b451 11967check_function_type (tree decl, tree current_function_parms)
a8f73d4b
MM
11968{
11969 tree fntype = TREE_TYPE (decl);
d0f062fb 11970 tree return_type = complete_type (TREE_TYPE (fntype));
a8f73d4b
MM
11971
11972 /* In a function definition, arg types must be complete. */
11973 require_complete_types_for_parms (current_function_parms);
11974
c9387915
GB
11975 if (dependent_type_p (return_type))
11976 return;
360f866c 11977 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
9e1e64ec 11978 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
a8f73d4b 11979 {
51b15ede 11980 tree args = TYPE_ARG_TYPES (fntype);
3db45ab5 11981
360f866c
JJ
11982 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
11983 error ("return type %q#T is incomplete", return_type);
11984 else
11985 error ("return type has Java class type %q#T", return_type);
a8f73d4b 11986
51b15ede 11987 /* Make it return void instead. */
a8f73d4b 11988 if (TREE_CODE (fntype) == METHOD_TYPE)
51b15ede
NS
11989 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
11990 void_type_node,
11991 TREE_CHAIN (args));
a8f73d4b 11992 else
51b15ede 11993 fntype = build_function_type (void_type_node, args);
3c3905fc 11994 fntype
a8f73d4b 11995 = build_exception_variant (fntype,
51b15ede 11996 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
3c3905fc
JM
11997 fntype = (cp_build_type_attribute_variant
11998 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
11999 TREE_TYPE (decl) = fntype;
a8f73d4b
MM
12000 }
12001 else
12002 abstract_virtuals_error (decl, TREE_TYPE (fntype));
12003}
12004
8d08fdba
MS
12005/* Create the FUNCTION_DECL for a function definition.
12006 DECLSPECS and DECLARATOR are the parts of the declaration;
12007 they describe the function's name and the type it returns,
12008 but twisted together in a fashion that parallels the syntax of C.
12009
a8f73d4b
MM
12010 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12011 DECLARATOR is really the DECL for the function we are about to
12012 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
f444e36b 12013 indicating that the function is an inline defined in-class.
68642fb6 12014
8d08fdba
MS
12015 This function creates a binding context for the function body
12016 as well as setting up the FUNCTION_DECL in current_function_decl.
12017
8d08fdba
MS
12018 For C++, we must first check whether that datum makes any sense.
12019 For example, "class A local_a(1,2);" means that variable local_a
12020 is an aggregate of type A, which should have a constructor
72c4a4ca
GK
12021 applied to it with the argument list [1, 2].
12022
12023 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
12024 or may be a BLOCK if the function has been defined previously
12025 in this translation unit. On exit, DECL_INITIAL (decl1) will be
12026 error_mark_node if the function has never been defined, or
12027 a BLOCK if the function has been defined somewhere. */
8d08fdba 12028
058b15c1
MM
12029void
12030start_preparsed_function (tree decl1, tree attrs, int flags)
8d08fdba 12031{
8d08fdba
MS
12032 tree ctype = NULL_TREE;
12033 tree fntype;
12034 tree restype;
8d08fdba 12035 int doing_friend = 0;
e2500fed 12036 struct cp_binding_level *bl;
f444e36b 12037 tree current_function_parms;
3e3935a9 12038 struct c_fileinfo *finfo
c533e34d 12039 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
1ef0df47 12040 bool honor_interface;
8d08fdba 12041
8d08fdba 12042 /* Sanity check. */
50bc768d
NS
12043 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
12044 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
8d08fdba 12045
058b15c1
MM
12046 fntype = TREE_TYPE (decl1);
12047 if (TREE_CODE (fntype) == METHOD_TYPE)
12048 ctype = TYPE_METHOD_BASETYPE (fntype);
caf93cb0 12049
058b15c1
MM
12050 /* ISO C++ 11.4/5. A friend function defined in a class is in
12051 the (lexical) scope of the class in which it is defined. */
12052 if (!ctype && DECL_FRIEND_P (decl1))
8d08fdba 12053 {
058b15c1 12054 ctype = DECL_FRIEND_CONTEXT (decl1);
caf93cb0 12055
058b15c1
MM
12056 /* CTYPE could be null here if we're dealing with a template;
12057 for example, `inline friend float foo()' inside a template
12058 will have no CTYPE set. */
12059 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12060 ctype = NULL_TREE;
12061 else
12062 doing_friend = 1;
8d08fdba 12063 }
68642fb6 12064
97055d5c
AO
12065 if (DECL_DECLARED_INLINE_P (decl1)
12066 && lookup_attribute ("noinline", attrs))
dee15844 12067 warning (0, "inline function %q+D given attribute noinline", decl1);
97055d5c 12068
3a47c4e4
AO
12069 /* Handle gnu_inline attribute. */
12070 if (GNU_INLINE_P (decl1))
12071 {
12072 DECL_EXTERNAL (decl1) = 1;
12073 DECL_NOT_REALLY_EXTERN (decl1) = 0;
12074 DECL_INTERFACE_KNOWN (decl1) = 1;
12cdc4fa 12075 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
3a47c4e4
AO
12076 }
12077
5f6eeeb3
NS
12078 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
12079 /* This is a constructor, we must ensure that any default args
12080 introduced by this definition are propagated to the clones
12081 now. The clones are used directly in overload resolution. */
12082 adjust_clone_args (decl1);
12083
b35d4555
MM
12084 /* Sometimes we don't notice that a function is a static member, and
12085 build a METHOD_TYPE for it. Fix that up now. */
12086 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12087 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
12088 {
3afb32a4 12089 revert_static_member_fn (decl1);
b35d4555
MM
12090 ctype = NULL_TREE;
12091 }
8d08fdba 12092
f181d4ae
MM
12093 /* Set up current_class_type, and enter the scope of the class, if
12094 appropriate. */
12095 if (ctype)
14d22dd6 12096 push_nested_class (ctype);
f181d4ae 12097 else if (DECL_STATIC_FUNCTION_P (decl1))
14d22dd6 12098 push_nested_class (DECL_CONTEXT (decl1));
f181d4ae
MM
12099
12100 /* Now that we have entered the scope of the class, we must restore
12101 the bindings for any template parameters surrounding DECL1, if it
12102 is an inline member template. (Order is important; consider the
12103 case where a template parameter has the same name as a field of
12104 the class.) It is not until after this point that
12105 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
a8f73d4b 12106 if (flags & SF_INCLASS_INLINE)
f181d4ae
MM
12107 maybe_begin_member_template_processing (decl1);
12108
56cb9733 12109 /* Effective C++ rule 15. */
9188c363 12110 if (warn_ecpp
596ea4e5 12111 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9188c363 12112 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
b323323f 12113 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
9188c363
MM
12114
12115 /* Make the init_value nonzero so pushdecl knows this is not tentative.
12116 error_mark_node is replaced below (in poplevel) with the BLOCK. */
b35d4555
MM
12117 if (!DECL_INITIAL (decl1))
12118 DECL_INITIAL (decl1) = error_mark_node;
9188c363 12119
9188c363
MM
12120 /* This function exists in static storage.
12121 (This does not mean `static' in the C sense!) */
12122 TREE_STATIC (decl1) = 1;
12123
12124 /* We must call push_template_decl after current_class_type is set
12125 up. (If we are processing inline definitions after exiting a
12126 class scope, current_class_type will be NULL_TREE until set above
12127 by push_nested_class.) */
12128 if (processing_template_decl)
11e97737
VR
12129 {
12130 /* FIXME: Handle error_mark_node more gracefully. */
12131 tree newdecl1 = push_template_decl (decl1);
12132 if (newdecl1 != error_mark_node)
0cbd7506 12133 decl1 = newdecl1;
11e97737 12134 }
9188c363 12135
f181d4ae 12136 /* We are now in the scope of the function being defined. */
8d08fdba 12137 current_function_decl = decl1;
f181d4ae 12138
5566b478
MS
12139 /* Save the parm names or decls from this function's declarator
12140 where store_parm_decls will find them. */
4546865e 12141 current_function_parms = DECL_ARGUMENTS (decl1);
8d08fdba 12142
a8f73d4b
MM
12143 /* Make sure the parameter and return types are reasonable. When
12144 you declare a function, these types can be incomplete, but they
12145 must be complete when you define the function. */
c9387915 12146 check_function_type (decl1, current_function_parms);
f181d4ae 12147
a8f73d4b
MM
12148 /* Build the return declaration for the function. */
12149 restype = TREE_TYPE (fntype);
e89a6075 12150 if (DECL_RESULT (decl1) == NULL_TREE)
a8f73d4b 12151 {
b785f485
RH
12152 tree resdecl;
12153
c2255bc4 12154 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
b785f485
RH
12155 DECL_ARTIFICIAL (resdecl) = 1;
12156 DECL_IGNORED_P (resdecl) = 1;
12157 DECL_RESULT (decl1) = resdecl;
12158
9804209d 12159 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
5566b478 12160 }
a8f73d4b 12161
a8f73d4b 12162 /* Let the user know we're compiling this function. */
ea11ca7e 12163 announce_function (decl1);
b7484fbe 12164
878cd289
MS
12165 /* Record the decl so that the function name is defined.
12166 If we already have a decl for this name, and it is a FUNCTION_DECL,
12167 use the old decl. */
a8f73d4b 12168 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
878cd289 12169 {
75650646 12170 /* A specialization is not used to guide overload resolution. */
18f5be99 12171 if (!DECL_FUNCTION_MEMBER_P (decl1)
caf93cb0 12172 && !(DECL_USE_TEMPLATE (decl1) &&
18f5be99 12173 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
b1a19c7c
MM
12174 {
12175 tree olddecl = pushdecl (decl1);
12176
12177 if (olddecl == error_mark_node)
12178 /* If something went wrong when registering the declaration,
12179 use DECL1; we have to have a FUNCTION_DECL to use when
12180 parsing the body of the function. */
12181 ;
12182 else
dfdec7a7
ILT
12183 {
12184 /* Otherwise, OLDDECL is either a previous declaration
12185 of the same function or DECL1 itself. */
12186
12187 if (warn_missing_declarations
12188 && olddecl == decl1
12189 && !DECL_MAIN_P (decl1)
12190 && TREE_PUBLIC (decl1)
12191 && !DECL_DECLARED_INLINE_P (decl1))
12192 {
12193 tree context;
12194
12195 /* Check whether DECL1 is in an anonymous
12196 namespace. */
12197 for (context = DECL_CONTEXT (decl1);
12198 context;
12199 context = DECL_CONTEXT (context))
12200 {
12201 if (TREE_CODE (context) == NAMESPACE_DECL
12202 && DECL_NAME (context) == NULL_TREE)
12203 break;
12204 }
12205
12206 if (context == NULL)
12207 warning (OPT_Wmissing_declarations,
12208 "no previous declaration for %q+D", decl1);
12209 }
12210
12211 decl1 = olddecl;
12212 }
b1a19c7c 12213 }
2c73f9f5 12214 else
b7698cf0 12215 {
a1c65f9f 12216 /* We need to set the DECL_CONTEXT. */
b7698cf0
JM
12217 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12218 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
b7698cf0 12219 }
878cd289 12220 fntype = TREE_TYPE (decl1);
2ef06beb
MM
12221
12222 /* If #pragma weak applies, mark the decl appropriately now.
12223 The pragma only applies to global functions. Because
12224 determining whether or not the #pragma applies involves
12225 computing the mangled name for the declaration, we cannot
12226 apply the pragma until after we have merged this declaration
12227 with any previous declarations; if the original declaration
12228 has a linkage specification, that specification applies to
12229 the definition as well, and may affect the mangled name. */
725214ac 12230 if (DECL_FILE_SCOPE_P (decl1))
2ef06beb 12231 maybe_apply_pragma_weak (decl1);
878cd289 12232 }
5566b478 12233
91ea6df3
GDR
12234 /* constexpr functions must have literal argument types and
12235 literal return type. */
12236 validate_constexpr_fundecl (decl1);
12237
72c4a4ca 12238 /* Reset this in case the call to pushdecl changed it. */
5566b478 12239 current_function_decl = decl1;
72c4a4ca
GK
12240
12241 gcc_assert (DECL_INITIAL (decl1));
12242
12243 /* This function may already have been parsed, in which case just
12244 return; our caller will skip over the body without parsing. */
12245 if (DECL_INITIAL (decl1) != error_mark_node)
12246 return;
12247
12248 /* Initialize RTL machinery. We cannot do this until
12249 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
12250 even when processing a template; this is how we get
12251 CFUN set up, and our per-function variables initialized.
12252 FIXME factor out the non-RTL stuff. */
12253 bl = current_binding_level;
182e0d71 12254 allocate_struct_function (decl1, processing_template_decl);
e8924938
PB
12255
12256 /* Initialize the language data structures. Whenever we start
12257 a new function, we destroy temporaries in the usual way. */
a9429e29 12258 cfun->language = ggc_alloc_cleared_language_function ();
e8924938 12259 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
72c4a4ca
GK
12260 current_binding_level = bl;
12261
12262 /* Even though we're inside a function body, we still don't want to
12263 call expand_expr to calculate the size of a variable-sized array.
12264 We haven't necessarily assigned RTL to all variables yet, so it's
12265 not safe to try to expand expressions involving them. */
e3b5732b 12266 cfun->dont_save_pending_sizes_p = 1;
72c4a4ca
GK
12267
12268 /* Start the statement-tree, start the tree now. */
12269 DECL_SAVED_TREE (decl1) = push_stmt_list ();
878cd289 12270
78c120b5
MM
12271 /* If we are (erroneously) defining a function that we have already
12272 defined before, wipe out what we knew before. */
e2500fed
GK
12273 if (!DECL_PENDING_INLINE_P (decl1))
12274 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
b35d4555 12275
f444e36b 12276 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
b35d4555
MM
12277 {
12278 /* We know that this was set up by `grokclassfn'. We do not
12279 wait until `store_parm_decls', since evil parse errors may
12280 never get us to that point. Here we keep the consistency
12281 between `current_class_type' and `current_class_ptr'. */
12282 tree t = DECL_ARGUMENTS (decl1);
68642fb6 12283
50bc768d
NS
12284 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
12285 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
68642fb6
UD
12286
12287 cp_function_chain->x_current_class_ref
dd865ef6 12288 = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
b35d4555
MM
12289 cp_function_chain->x_current_class_ptr = t;
12290
018fc244
MM
12291 /* Constructors and destructors need to know whether they're "in
12292 charge" of initializing virtual base classes. */
910ad8de 12293 t = DECL_CHAIN (t);
454fa7a7 12294 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
e0fff4b3
JM
12295 {
12296 current_in_charge_parm = t;
910ad8de 12297 t = DECL_CHAIN (t);
e0fff4b3
JM
12298 }
12299 if (DECL_HAS_VTT_PARM_P (decl1))
12300 {
8dc2b103 12301 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
e0fff4b3
JM
12302 current_vtt_parm = t;
12303 }
b35d4555
MM
12304 }
12305
1ef0df47
MM
12306 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
12307 /* Implicitly-defined methods (like the
12308 destructor for a class in which no destructor
12309 is explicitly declared) must not be defined
12310 until their definition is needed. So, we
12311 ignore interface specifications for
12312 compiler-generated functions. */
12313 && !DECL_ARTIFICIAL (decl1));
3db45ab5 12314
db5ae43f 12315 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 12316 {
4f1c5b7d 12317 tree ctx = decl_function_context (decl1);
86052cc3 12318
faae18ab
MS
12319 if (DECL_NOT_REALLY_EXTERN (decl1))
12320 DECL_EXTERNAL (decl1) = 0;
86052cc3 12321
79065db2 12322 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
86052cc3
JM
12323 && TREE_PUBLIC (ctx))
12324 /* This is a function in a local class in an extern inline
12325 function. */
12326 comdat_linkage (decl1);
faae18ab 12327 }
8d08fdba
MS
12328 /* If this function belongs to an interface, it is public.
12329 If it belongs to someone else's interface, it is also external.
1f901793 12330 This only affects inlines and template instantiations. */
1ef0df47 12331 else if (!finfo->interface_unknown && honor_interface)
8d08fdba 12332 {
caf93cb0 12333 if (DECL_DECLARED_INLINE_P (decl1)
79065db2 12334 || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 12335 || processing_template_decl)
1f901793
JM
12336 {
12337 DECL_EXTERNAL (decl1)
5d709b00 12338 = (finfo->interface_only
caf93cb0 12339 || (DECL_DECLARED_INLINE_P (decl1)
79065db2 12340 && ! flag_implement_inlines
9c73ec84 12341 && !DECL_VINDEX (decl1)));
1f901793
JM
12342
12343 /* For WIN32 we also want to put these in linkonce sections. */
12344 maybe_make_one_only (decl1);
12345 }
db5ae43f 12346 else
893de33c 12347 DECL_EXTERNAL (decl1) = 0;
db5ae43f 12348 DECL_INTERFACE_KNOWN (decl1) = 1;
4684cd27 12349 /* If this function is in an interface implemented in this file,
3b426391 12350 make sure that the back end knows to emit this function
4684cd27
MM
12351 here. */
12352 if (!DECL_EXTERNAL (decl1))
12353 mark_needed (decl1);
8d08fdba 12354 }
5d709b00 12355 else if (finfo->interface_unknown && finfo->interface_only
1ef0df47 12356 && honor_interface)
c16c47fb
JM
12357 {
12358 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
5d709b00
ZW
12359 interface, we will have both finfo->interface_unknown and
12360 finfo->interface_only set. In that case, we don't want to
12361 use the normal heuristics because someone will supply a
12362 #pragma implementation elsewhere, and deducing it here would
12363 produce a conflict. */
c16c47fb
JM
12364 comdat_linkage (decl1);
12365 DECL_EXTERNAL (decl1) = 0;
12366 DECL_INTERFACE_KNOWN (decl1) = 1;
12367 DECL_DEFER_OUTPUT (decl1) = 1;
12368 }
8d08fdba 12369 else
a0a33927
MS
12370 {
12371 /* This is a definition, not a reference.
3a47c4e4
AO
12372 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
12373 if (!GNU_INLINE_P (decl1))
12374 DECL_EXTERNAL (decl1) = 0;
faae18ab 12375
caf93cb0 12376 if ((DECL_DECLARED_INLINE_P (decl1)
79065db2 12377 || DECL_TEMPLATE_INSTANTIATION (decl1))
fb4117f8 12378 && ! DECL_INTERFACE_KNOWN (decl1))
878cd289
MS
12379 DECL_DEFER_OUTPUT (decl1) = 1;
12380 else
893de33c 12381 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 12382 }
a9aedbc2 12383
0ed5edac
JM
12384 /* Determine the ELF visibility attribute for the function. We must not
12385 do this before calling "pushdecl", as we must allow "duplicate_decls"
12386 to merge any attributes appropriately. We also need to wait until
12387 linkage is set. */
12388 if (!DECL_CLONED_FUNCTION_P (decl1))
12389 determine_visibility (decl1);
12390
ac20c67a 12391 begin_scope (sk_function_parms, decl1);
8d08fdba 12392
5566b478
MS
12393 ++function_depth;
12394
44d10c10
PB
12395 if (DECL_DESTRUCTOR_P (decl1)
12396 || (DECL_CONSTRUCTOR_P (decl1)
12397 && targetm.cxx.cdtor_returns_this ()))
46e8c075 12398 {
c2255bc4
AH
12399 cdtor_label = build_decl (input_location,
12400 LABEL_DECL, NULL_TREE, NULL_TREE);
44d10c10 12401 DECL_CONTEXT (cdtor_label) = current_function_decl;
46e8c075 12402 }
8d08fdba 12403
0ba8a114 12404 start_fname_decls ();
caf93cb0 12405
f444e36b 12406 store_parm_decls (current_function_parms);
058b15c1
MM
12407}
12408
12409
12410/* Like start_preparsed_function, except that instead of a
12411 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
12412
12413 Returns 1 on success. If the DECLARATOR is not suitable for a function
12414 (it defines a datum instead), we return 0, which tells
12415 yyparse to report a parse error. */
12416
12417int
caf93cb0 12418start_function (cp_decl_specifier_seq *declspecs,
62d1db17 12419 const cp_declarator *declarator,
058b15c1
MM
12420 tree attrs)
12421{
12422 tree decl1;
12423
058b15c1 12424 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
49f098f2
JJ
12425 if (decl1 == error_mark_node)
12426 return 0;
058b15c1
MM
12427 /* If the declarator is not suitable for a function definition,
12428 cause a syntax error. */
12429 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
49f098f2
JJ
12430 {
12431 error ("invalid function declaration");
12432 return 0;
12433 }
caf93cb0 12434
058b15c1 12435 if (DECL_MAIN_P (decl1))
2cfe82fe
ZW
12436 /* main must return int. grokfndecl should have corrected it
12437 (and issued a diagnostic) if the user got it wrong. */
12438 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
12439 integer_type_node));
058b15c1
MM
12440
12441 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
f444e36b 12442
8d08fdba
MS
12443 return 1;
12444}
12445\f
68d04c67
MM
12446/* Returns true iff an EH_SPEC_BLOCK should be created in the body of
12447 FN. */
12448
12449static bool
12450use_eh_spec_block (tree fn)
12451{
12452 return (flag_exceptions && flag_enforce_eh_specs
12453 && !processing_template_decl
3a55fb4c 12454 && !type_throw_all_p (TREE_TYPE (fn))
68d04c67
MM
12455 /* We insert the EH_SPEC_BLOCK only in the original
12456 function; then, it is copied automatically to the
12457 clones. */
12458 && !DECL_CLONED_FUNCTION_P (fn)
12459 /* Implicitly-generated constructors and destructors have
12460 exception specifications. However, those specifications
12461 are the union of the possible exceptions specified by the
12462 constructors/destructors for bases and members, so no
12463 unallowed exception will ever reach this function. By
12464 not creating the EH_SPEC_BLOCK we save a little memory,
12465 and we avoid spurious warnings about unreachable
12466 code. */
12467 && !DECL_ARTIFICIAL (fn));
12468}
12469
8d08fdba
MS
12470/* Store the parameter declarations into the current function declaration.
12471 This is called after parsing the parameter declarations, before
12472 digesting the body of the function.
12473
12474 Also install to binding contour return value identifier, if any. */
12475
f444e36b 12476static void
11f6b451 12477store_parm_decls (tree current_function_parms)
8d08fdba 12478{
926ce8bd
KH
12479 tree fndecl = current_function_decl;
12480 tree parm;
8d08fdba 12481
8d08fdba
MS
12482 /* This is a chain of any other decls that came in among the parm
12483 declarations. If a parm is declared with enum {foo, bar} x;
12484 then CONST_DECLs for foo and bar are put here. */
12485 tree nonparms = NULL_TREE;
12486
b35d4555 12487 if (current_function_parms)
8d08fdba
MS
12488 {
12489 /* This case is when the function was defined with an ANSI prototype.
12490 The parms already have decls, so we need not do anything here
12491 except record them as in effect
12492 and complain if any redundant old-style parm decls were written. */
12493
b35d4555
MM
12494 tree specparms = current_function_parms;
12495 tree next;
12496
f444e36b 12497 /* Must clear this because it might contain TYPE_DECLs declared
b35d4555 12498 at class level. */
00e8de68 12499 current_binding_level->names = NULL;
8d08fdba 12500
f444e36b 12501 /* If we're doing semantic analysis, then we'll call pushdecl
b35d4555
MM
12502 for each of these. We must do them in reverse order so that
12503 they end in the correct forward order. */
f444e36b 12504 specparms = nreverse (specparms);
5566b478 12505
b35d4555 12506 for (parm = specparms; parm; parm = next)
8d08fdba 12507 {
910ad8de 12508 next = DECL_CHAIN (parm);
8d08fdba
MS
12509 if (TREE_CODE (parm) == PARM_DECL)
12510 {
f444e36b
MM
12511 if (DECL_NAME (parm) == NULL_TREE
12512 || TREE_CODE (parm) != VOID_TYPE)
12513 pushdecl (parm);
12514 else
2d01edd7 12515 error ("parameter %qD declared void", parm);
8d08fdba
MS
12516 }
12517 else
12518 {
12519 /* If we find an enum constant or a type tag,
12520 put it aside for the moment. */
12521 TREE_CHAIN (parm) = NULL_TREE;
12522 nonparms = chainon (nonparms, parm);
12523 }
12524 }
12525
f444e36b
MM
12526 /* Get the decls in their original chain order and record in the
12527 function. This is all and only the PARM_DECLs that were
12528 pushed into scope by the loop above. */
12529 DECL_ARGUMENTS (fndecl) = getdecls ();
8d08fdba
MS
12530 }
12531 else
12532 DECL_ARGUMENTS (fndecl) = NULL_TREE;
12533
12534 /* Now store the final chain of decls for the arguments
12535 as the decl-chain of the current lexical scope.
12536 Put the enumerators in as well, at the front so that
12537 DECL_ARGUMENTS is not modified. */
00e8de68 12538 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
eb448459 12539
68d04c67
MM
12540 if (use_eh_spec_block (current_function_decl))
12541 current_eh_spec_block = begin_eh_spec_block ();
8d08fdba
MS
12542}
12543
8d08fdba 12544\f
59026e79
MM
12545/* We have finished doing semantic analysis on DECL, but have not yet
12546 generated RTL for its body. Save away our current state, so that
12547 when we want to generate RTL later we know what to do. */
12548
12549static void
11f6b451 12550save_function_data (tree decl)
59026e79 12551{
e2500fed 12552 struct language_function *f;
59026e79
MM
12553
12554 /* Save the language-specific per-function data so that we can
12555 get it back when we really expand this function. */
50bc768d 12556 gcc_assert (!DECL_PENDING_INLINE_P (decl));
68642fb6 12557
59026e79 12558 /* Make a copy. */
a9429e29 12559 f = ggc_alloc_language_function ();
e2500fed 12560 memcpy (f, cp_function_chain, sizeof (struct language_function));
59026e79
MM
12561 DECL_SAVED_FUNCTION_DATA (decl) = f;
12562
12563 /* Clear out the bits we don't need. */
325c3691 12564 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
59026e79 12565 f->bindings = NULL;
8e4ce833 12566 f->x_local_names = NULL;
59026e79
MM
12567}
12568
cdd2559c 12569
44d10c10 12570/* Set the return value of the constructor (if present). */
efee38a9
MM
12571
12572static void
11f6b451 12573finish_constructor_body (void)
efee38a9 12574{
44d10c10
PB
12575 tree val;
12576 tree exprstmt;
12577
298b7d2b
AH
12578 if (targetm.cxx.cdtor_returns_this ()
12579 && (! TYPE_FOR_JAVA (current_class_type)))
44d10c10
PB
12580 {
12581 /* Any return from a constructor will end up here. */
c2255bc4 12582 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
44d10c10
PB
12583
12584 val = DECL_ARGUMENTS (current_function_decl);
f293ce4b
RS
12585 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12586 DECL_RESULT (current_function_decl), val);
44d10c10 12587 /* Return the address of the object. */
c2255bc4 12588 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
44d10c10
PB
12589 add_stmt (exprstmt);
12590 }
efee38a9
MM
12591}
12592
cdd2559c
JM
12593/* Do all the processing for the beginning of a destructor; set up the
12594 vtable pointers and cleanups for bases and members. */
12595
12596static void
11f6b451 12597begin_destructor_body (void)
cdd2559c 12598{
cdd2559c
JM
12599 tree compound_stmt;
12600
0e686aa6
MM
12601 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
12602 issued an error message. We still want to try to process the
12603 body of the function, but initialize_vtbl_ptrs will crash if
12604 TYPE_BINFO is NULL. */
12605 if (COMPLETE_TYPE_P (current_class_type))
12606 {
12607 compound_stmt = begin_compound_stmt (0);
12608 /* Make all virtual function table pointers in non-virtual base
12609 classes point to CURRENT_CLASS_TYPE's virtual function
12610 tables. */
12611 initialize_vtbl_ptrs (current_class_ptr);
12612 finish_compound_stmt (compound_stmt);
3db45ab5 12613
0e686aa6
MM
12614 /* And insert cleanups for our bases and members so that they
12615 will be properly destroyed if we throw. */
12616 push_base_cleanups ();
12617 }
cdd2559c
JM
12618}
12619
ade3dc07
JM
12620/* At the end of every destructor we generate code to delete the object if
12621 necessary. Do that now. */
9bfadf57
MM
12622
12623static void
11f6b451 12624finish_destructor_body (void)
9bfadf57 12625{
9bfadf57
MM
12626 tree exprstmt;
12627
5633b37c
MM
12628 /* Any return from a destructor will end up here; that way all base
12629 and member cleanups will be run when the function returns. */
c2255bc4 12630 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
5633b37c 12631
52682a1b
MM
12632 /* In a virtual destructor, we must call delete. */
12633 if (DECL_VIRTUAL_P (current_function_decl))
12634 {
12635 tree if_stmt;
fa72b064 12636 tree virtual_size = cxx_sizeof (current_class_type);
68642fb6 12637
52682a1b 12638 /* [class.dtor]
68642fb6 12639
ade3dc07
JM
12640 At the point of definition of a virtual destructor (including
12641 an implicit definition), non-placement operator delete shall
12642 be looked up in the scope of the destructor's class and if
12643 found shall be accessible and unambiguous. */
3db45ab5 12644 exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
63c9a190 12645 virtual_size,
3db45ab5
MS
12646 /*global_p=*/false,
12647 /*placement=*/NULL_TREE,
63c9a190 12648 /*alloc_fn=*/NULL_TREE);
298d6f60 12649
52682a1b 12650 if_stmt = begin_if_stmt ();
f293ce4b
RS
12651 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
12652 current_in_charge_parm,
12653 integer_one_node),
52682a1b
MM
12654 if_stmt);
12655 finish_expr_stmt (exprstmt);
12656 finish_then_clause (if_stmt);
325c3691 12657 finish_if_stmt (if_stmt);
52682a1b 12658 }
44d10c10
PB
12659
12660 if (targetm.cxx.cdtor_returns_this ())
12661 {
12662 tree val;
12663
12664 val = DECL_ARGUMENTS (current_function_decl);
f293ce4b
RS
12665 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12666 DECL_RESULT (current_function_decl), val);
44d10c10 12667 /* Return the address of the object. */
c2255bc4 12668 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
44d10c10
PB
12669 add_stmt (exprstmt);
12670 }
ade3dc07 12671}
9bfadf57 12672
ade3dc07
JM
12673/* Do the necessary processing for the beginning of a function body, which
12674 in this case includes member-initializers, but not the catch clauses of
12675 a function-try-block. Currently, this means opening a binding level
86ad3aa9 12676 for the member-initializers (in a ctor) and member cleanups (in a dtor). */
ade3dc07
JM
12677
12678tree
11f6b451 12679begin_function_body (void)
ade3dc07 12680{
cdd2559c
JM
12681 tree stmt;
12682
86ad3aa9
JM
12683 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12684 return NULL_TREE;
12685
b5856475
JM
12686 if (processing_template_decl)
12687 /* Do nothing now. */;
12688 else
12689 /* Always keep the BLOCK node associated with the outermost pair of
12690 curly braces of a function. These are needed for correct
12691 operation of dwarfout.c. */
ac20c67a 12692 keep_next_level (true);
b5856475 12693
325c3691 12694 stmt = begin_compound_stmt (BCS_FN_BODY);
cdd2559c
JM
12695
12696 if (processing_template_decl)
12697 /* Do nothing now. */;
cdd2559c
JM
12698 else if (DECL_DESTRUCTOR_P (current_function_decl))
12699 begin_destructor_body ();
12700
ade3dc07 12701 return stmt;
9bfadf57
MM
12702}
12703
ade3dc07
JM
12704/* Do the processing for the end of a function body. Currently, this means
12705 closing out the cleanups for fully-constructed bases and members, and in
12706 the case of the destructor, deleting the object if desired. Again, this
12707 is only meaningful for [cd]tors, since they are the only functions where
12708 there is a significant distinction between the main body and any
12709 function catch clauses. Handling, say, main() return semantics here
12710 would be wrong, as flowing off the end of a function catch clause for
12711 main() would also need to return 0. */
12712
12713void
11f6b451 12714finish_function_body (tree compstmt)
ade3dc07 12715{
86ad3aa9
JM
12716 if (compstmt == NULL_TREE)
12717 return;
3db45ab5 12718
5633b37c 12719 /* Close the block. */
7a3397c7 12720 finish_compound_stmt (compstmt);
ade3dc07
JM
12721
12722 if (processing_template_decl)
12723 /* Do nothing now. */;
12724 else if (DECL_CONSTRUCTOR_P (current_function_decl))
12725 finish_constructor_body ();
12726 else if (DECL_DESTRUCTOR_P (current_function_decl))
12727 finish_destructor_body ();
caf93cb0 12728}
ade3dc07 12729
86ad3aa9
JM
12730/* Given a function, returns the BLOCK corresponding to the outermost level
12731 of curly braces, skipping the artificial block created for constructor
12732 initializers. */
12733
a68ab351 12734tree
86ad3aa9
JM
12735outer_curly_brace_block (tree fndecl)
12736{
12737 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
12738 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12739 /* Skip the artificial function body block. */
12740 block = BLOCK_SUBBLOCKS (block);
12741 return block;
12742}
12743
3bb1ed66
NS
12744/* If FNDECL is a class's key method, add the class to the list of
12745 keyed classes that should be emitted. */
12746
12747static void
12748record_key_method_defined (tree fndecl)
12749{
12750 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
12751 && DECL_VIRTUAL_P (fndecl)
12752 && !processing_template_decl)
12753 {
12754 tree fnclass = DECL_CONTEXT (fndecl);
12755 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
12756 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
12757 }
12758}
12759
66e61a34
JM
12760/* Subroutine of finish_function.
12761 Save the body of constexpr functions for possible
12762 future compile time evaluation. */
12763
12764static void
12765maybe_save_function_definition (tree fun)
12766{
12767 if (!processing_template_decl
12768 && DECL_DECLARED_CONSTEXPR_P (fun)
12769 && !DECL_CLONED_FUNCTION_P (fun))
12770 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
12771}
12772
8d08fdba
MS
12773/* Finish up a function declaration and compile that function
12774 all the way to assembler language output. The free the storage
12775 for the function definition.
12776
68642fb6 12777 FLAGS is a bitwise or of the following values:
f181d4ae
MM
12778 2 - INCLASS_INLINE
12779 We just finished processing the body of an in-class inline
12780 function definition. (This processing will have taken place
87e3dbc9 12781 after the class definition is complete.) */
8d08fdba 12782
4d6abc1c 12783tree
11f6b451 12784finish_function (int flags)
8d08fdba 12785{
926ce8bd 12786 tree fndecl = current_function_decl;
8d08fdba 12787 tree fntype, ctype = NULL_TREE;
f181d4ae 12788 int inclass_inline = (flags & 2) != 0;
8d08fdba
MS
12789
12790 /* When we get some parse errors, we can end up without a
12791 current_function_decl, so cope. */
12792 if (fndecl == NULL_TREE)
4d6abc1c 12793 return error_mark_node;
8d08fdba 12794
3368cdd3
JJ
12795 gcc_assert (!defer_mark_used_calls);
12796 defer_mark_used_calls = true;
12797
3bb1ed66 12798 record_key_method_defined (fndecl);
9aad8f83 12799
8d08fdba
MS
12800 fntype = TREE_TYPE (fndecl);
12801
9bfadf57
MM
12802 /* TREE_READONLY (fndecl) = 1;
12803 This caused &foo to be of type ptr-to-const-function
12804 which then got a warning when stored in a ptr-to-function variable. */
8d08fdba 12805
50bc768d 12806 gcc_assert (building_stmt_tree ());
72c4a4ca
GK
12807 /* The current function is being defined, so its DECL_INITIAL should
12808 be set, and unless there's a multiple definition, it should be
12809 error_mark_node. */
12810 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
caf93cb0 12811
db9b2174
MM
12812 /* For a cloned function, we've already got all the code we need;
12813 there's no need to add any extra bits. */
f444e36b 12814 if (!DECL_CLONED_FUNCTION_P (fndecl))
8d08fdba 12815 {
ade3dc07 12816 if (DECL_MAIN_P (current_function_decl))
efee38a9 12817 {
43e05e45
SB
12818 tree stmt;
12819
12820 /* Make it so that `main' always returns 0 by default (or
12821 1 for VMS). */
08c7ae5a 12822#if VMS_TARGET
43e05e45 12823 stmt = finish_return_stmt (integer_one_node);
efee38a9 12824#else
43e05e45 12825 stmt = finish_return_stmt (integer_zero_node);
efee38a9 12826#endif
43e05e45
SB
12827 /* Hack. We don't want the middle-end to warn that this
12828 return is unreachable, so put the statement on the
12829 special line 0. */
5ffeb913
TT
12830 {
12831 location_t linezero = linemap_line_start (line_table, 0, 1);
12832 SET_EXPR_LOCATION (stmt, linezero);
12833 }
efee38a9 12834 }
87e3dbc9 12835
68d04c67 12836 if (use_eh_spec_block (current_function_decl))
52a11cbf
RH
12837 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
12838 (TREE_TYPE (current_function_decl)),
12839 current_eh_spec_block);
5566b478 12840 }
68642fb6 12841
558475f0 12842 /* If we're saving up tree structure, tie off the function now. */
325c3691
RH
12843 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
12844
12845 finish_fname_decls ();
8d2733ca 12846
b2dd096b
MM
12847 /* If this function can't throw any exceptions, remember that. */
12848 if (!processing_template_decl
12849 && !cp_function_chain->can_throw
be0436d7 12850 && !flag_non_call_exceptions
051f8cc6 12851 && !decl_replaceable_p (fndecl))
b2dd096b
MM
12852 TREE_NOTHROW (fndecl) = 1;
12853
8d08fdba
MS
12854 /* This must come after expand_function_end because cleanups might
12855 have declarations (from inline functions) that need to go into
12856 this function's blocks. */
caf93cb0 12857
7437519c
ZW
12858 /* If the current binding level isn't the outermost binding level
12859 for this function, either there is a bug, or we have experienced
12860 syntax errors and the statement tree is malformed. */
a7e8c268 12861 if (current_binding_level->kind != sk_function_parms)
7437519c
ZW
12862 {
12863 /* Make sure we have already experienced errors. */
8dc2b103 12864 gcc_assert (errorcount);
7437519c
ZW
12865
12866 /* Throw away the broken statement tree and extra binding
0cbd7506 12867 levels. */
5882f0f3 12868 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
7437519c 12869
a7e8c268 12870 while (current_binding_level->kind != sk_function_parms)
7437519c 12871 {
a7e8c268 12872 if (current_binding_level->kind == sk_class)
7437519c
ZW
12873 pop_nested_class ();
12874 else
12875 poplevel (0, 0, 0);
12876 }
12877 }
f444e36b 12878 poplevel (1, 0, 1);
8d08fdba 12879
4985cde3
RH
12880 /* Statements should always be full-expressions at the outermost set
12881 of curly braces for a function. */
50bc768d 12882 gcc_assert (stmts_are_full_exprs_p ());
4985cde3 12883
66e61a34
JM
12884 /* Save constexpr function body before it gets munged by
12885 the NRV transformation. */
12886 maybe_save_function_definition (fndecl);
12887
6de9cd9a 12888 /* Set up the named return value optimization, if we can. Candidate
59fe9274 12889 variables are selected in check_return_expr. */
07b2f2fd
JM
12890 if (current_function_return_value)
12891 {
12892 tree r = current_function_return_value;
35e939ae
JM
12893 tree outer;
12894
07b2f2fd 12895 if (r != error_mark_node
35e939ae
JM
12896 /* This is only worth doing for fns that return in memory--and
12897 simpler, since we don't have to worry about promoted modes. */
61f71b34 12898 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
35e939ae
JM
12899 /* Only allow this for variables declared in the outer scope of
12900 the function so we know that their lifetime always ends with a
12901 return; see g++.dg/opt/nrv6.C. We could be more flexible if
12902 we were to do this optimization in tree-ssa. */
86ad3aa9 12903 && (outer = outer_curly_brace_block (fndecl))
325c3691 12904 && chain_member (r, BLOCK_VARS (outer)))
6de9cd9a
DN
12905 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
12906
12907 current_function_return_value = NULL_TREE;
07b2f2fd
JM
12908 }
12909
a8f73d4b 12910 /* Remember that we were in class scope. */
db5ae43f 12911 if (current_class_name)
a8f73d4b 12912 ctype = current_class_type;
db5ae43f 12913
1caa11d3
MM
12914 /* Must mark the RESULT_DECL as being in this function. */
12915 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12916
12917 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12918 to the FUNCTION_DECL node itself. */
12919 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12920
59026e79 12921 /* Save away current state, if appropriate. */
f444e36b 12922 if (!processing_template_decl)
59026e79
MM
12923 save_function_data (fndecl);
12924
efe49da0 12925 /* Complain if there's just no return statement. */
46cfb101 12926 if (warn_return_type
efe49da0 12927 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
c1b83cc9 12928 && !dependent_type_p (TREE_TYPE (fntype))
57d5032b 12929 && !current_function_returns_value && !current_function_returns_null
efe49da0
JM
12930 /* Don't complain if we abort or throw. */
12931 && !current_function_returns_abnormally
ef5d1181
JJ
12932 /* Don't complain if we are declared noreturn. */
12933 && !TREE_THIS_VOLATILE (fndecl)
55e99d52 12934 && !DECL_NAME (DECL_RESULT (fndecl))
4847609e 12935 && !TREE_NO_WARNING (fndecl)
44d10c10
PB
12936 /* Structor return values (if any) are set by the compiler. */
12937 && !DECL_CONSTRUCTOR_P (fndecl)
12938 && !DECL_DESTRUCTOR_P (fndecl))
4847609e
JH
12939 {
12940 warning (OPT_Wreturn_type,
12941 "no return statement in function returning non-void");
12942 TREE_NO_WARNING (fndecl) = 1;
12943 }
4985cde3 12944
6de9cd9a
DN
12945 /* Store the end of the function, so that we get good line number
12946 info for the epilogue. */
12947 cfun->function_end_locus = input_location;
12948
03a904b5
JJ
12949 /* Complain about parameters that are only set, but never otherwise used. */
12950 if (warn_unused_but_set_parameter
12951 && !processing_template_decl
12952 && errorcount == unused_but_set_errorcount
12953 && !DECL_CLONED_FUNCTION_P (fndecl))
12954 {
12955 tree decl;
12956
12957 for (decl = DECL_ARGUMENTS (fndecl);
12958 decl;
910ad8de 12959 decl = DECL_CHAIN (decl))
03a904b5
JJ
12960 if (TREE_USED (decl)
12961 && TREE_CODE (decl) == PARM_DECL
12962 && !DECL_READ_P (decl)
12963 && DECL_NAME (decl)
12964 && !DECL_ARTIFICIAL (decl)
12965 && !TREE_NO_WARNING (decl)
12966 && !DECL_IN_SYSTEM_HEADER (decl)
12967 && TREE_TYPE (decl) != error_mark_node
12968 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
12969 && (!CLASS_TYPE_P (TREE_TYPE (decl))
12970 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
12971 warning (OPT_Wunused_but_set_parameter,
12972 "parameter %q+D set but not used", decl);
12973 unused_but_set_errorcount = errorcount;
12974 }
12975
6de9cd9a
DN
12976 /* Genericize before inlining. */
12977 if (!processing_template_decl)
12978 {
37e6d6fe 12979 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
1c701f96 12980 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
5a508662 12981 cp_genericize (fndecl);
37e6d6fe
JH
12982 /* Clear out the bits we don't need. */
12983 f->x_current_class_ptr = NULL;
12984 f->x_current_class_ref = NULL;
12985 f->x_eh_spec_block = NULL;
12986 f->x_in_charge_parm = NULL;
12987 f->x_vtt_parm = NULL;
12988 f->x_return_value = NULL;
12989 f->bindings = NULL;
10827cd8 12990 f->extern_decl_map = NULL;
6de9cd9a 12991 }
37e6d6fe
JH
12992 /* Clear out the bits we don't need. */
12993 local_names = NULL;
6de9cd9a
DN
12994
12995 /* We're leaving the context of this function, so zap cfun. It's still in
12996 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
db2960f4 12997 set_cfun (NULL);
c1f927e8 12998 current_function_decl = NULL;
a8f73d4b 12999
27631dae 13000 /* If this is an in-class inline definition, we may have to pop the
a8f73d4b
MM
13001 bindings for the template parameters that we added in
13002 maybe_begin_member_template_processing when start_function was
13003 called. */
13004 if (inclass_inline)
13005 maybe_end_member_template_processing ();
13006
13007 /* Leave the scope of the class. */
13008 if (ctype)
13009 pop_nested_class ();
5566b478
MS
13010
13011 --function_depth;
8d08fdba 13012
4d6abc1c 13013 /* Clean up. */
d70a5179 13014 current_function_decl = NULL_TREE;
4d6abc1c 13015
3368cdd3
JJ
13016 defer_mark_used_calls = false;
13017 if (deferred_mark_used_calls)
13018 {
13019 unsigned int i;
13020 tree decl;
13021
ac47786e 13022 FOR_EACH_VEC_ELT (tree, deferred_mark_used_calls, i, decl)
3368cdd3
JJ
13023 mark_used (decl);
13024 VEC_free (tree, gc, deferred_mark_used_calls);
13025 }
13026
4d6abc1c 13027 return fndecl;
8d08fdba
MS
13028}
13029\f
13030/* Create the FUNCTION_DECL for a function definition.
8d08fdba
MS
13031 DECLSPECS and DECLARATOR are the parts of the declaration;
13032 they describe the return type and the name of the function,
13033 but twisted together in a fashion that parallels the syntax of C.
13034
13035 This function creates a binding context for the function body
13036 as well as setting up the FUNCTION_DECL in current_function_decl.
13037
13038 Returns a FUNCTION_DECL on success.
13039
13040 If the DECLARATOR is not suitable for a function (it defines a datum
13041 instead), we return 0, which tells yyparse to report a parse error.
13042
13043 May return void_type_node indicating that this method is actually
13044 a friend. See grokfield for more details.
13045
13046 Came here with a `.pushlevel' .
13047
13048 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13049 CHANGES TO CODE IN `grokfield'. */
e92cc029 13050
8d08fdba 13051tree
02c5ff73
JM
13052grokmethod (cp_decl_specifier_seq *declspecs,
13053 const cp_declarator *declarator, tree attrlist)
8d08fdba 13054{
c11b6f21 13055 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
91d231cb 13056 &attrlist);
8d08fdba 13057
a723baf1
MM
13058 if (fndecl == error_mark_node)
13059 return error_mark_node;
13060
13061 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
13062 {
13063 error ("invalid member function declaration");
13064 return error_mark_node;
13065 }
8d08fdba 13066
195a5def
IR
13067 if (attrlist)
13068 cplus_decl_attributes (&fndecl, attrlist, 0);
13069
8d08fdba 13070 /* Pass friends other than inline friend functions back. */
a1774733 13071 if (fndecl == void_type_node)
8d08fdba
MS
13072 return fndecl;
13073
8d08fdba
MS
13074 if (DECL_IN_AGGR_P (fndecl))
13075 {
58ec3cc5 13076 if (DECL_CONTEXT (fndecl)
6d69fe27 13077 && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
2d01edd7 13078 error ("%qD is already defined in class %qT", fndecl,
58ec3cc5 13079 DECL_CONTEXT (fndecl));
8ca4bf25 13080 return error_mark_node;
8d08fdba
MS
13081 }
13082
f3400fe2
JM
13083 check_template_shadow (fndecl);
13084
79065db2 13085 DECL_DECLARED_INLINE_P (fndecl) = 1;
0494626a 13086 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
8d08fdba 13087
36a117a5
MM
13088 /* We process method specializations in finish_struct_1. */
13089 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
4b0d3cbe
MM
13090 {
13091 fndecl = push_template_decl (fndecl);
13092 if (fndecl == error_mark_node)
13093 return fndecl;
13094 }
a0a33927 13095
8d08fdba
MS
13096 if (! DECL_FRIEND_P (fndecl))
13097 {
910ad8de 13098 if (DECL_CHAIN (fndecl))
8d08fdba
MS
13099 {
13100 fndecl = copy_node (fndecl);
13101 TREE_CHAIN (fndecl) = NULL_TREE;
13102 }
8d08fdba
MS
13103 }
13104
3600f678 13105 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
8d08fdba 13106
8d08fdba
MS
13107 DECL_IN_AGGR_P (fndecl) = 1;
13108 return fndecl;
13109}
8d08fdba 13110\f
0154eaa8
MM
13111
13112/* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
13113 we can lay it out later, when and if its type becomes complete. */
8d08fdba
MS
13114
13115void
11f6b451 13116maybe_register_incomplete_var (tree var)
8d08fdba 13117{
50bc768d 13118 gcc_assert (TREE_CODE (var) == VAR_DECL);
8d08fdba 13119
0154eaa8 13120 /* Keep track of variables with incomplete types. */
caf93cb0 13121 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
0154eaa8 13122 && DECL_EXTERNAL (var))
70adf8a9 13123 {
0154eaa8 13124 tree inner_type = TREE_TYPE (var);
caf93cb0 13125
0154eaa8
MM
13126 while (TREE_CODE (inner_type) == ARRAY_TYPE)
13127 inner_type = TREE_TYPE (inner_type);
13128 inner_type = TYPE_MAIN_VARIANT (inner_type);
caf93cb0 13129
0154eaa8
MM
13130 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
13131 /* RTTI TD entries are created while defining the type_info. */
13132 || (TYPE_LANG_SPECIFIC (inner_type)
13133 && TYPE_BEING_DEFINED (inner_type)))
0622223a
NF
13134 {
13135 incomplete_var *iv
13136 = VEC_safe_push (incomplete_var, gc, incomplete_vars, NULL);
13137 iv->decl = var;
13138 iv->incomplete_type = inner_type;
13139 }
70adf8a9 13140 }
0154eaa8 13141}
70adf8a9 13142
0154eaa8 13143/* Called when a class type (given by TYPE) is defined. If there are
39a13be5 13144 any existing VAR_DECLs whose type has been completed by this
0154eaa8 13145 declaration, update them now. */
70adf8a9 13146
0154eaa8 13147void
11f6b451 13148complete_vars (tree type)
0154eaa8 13149{
0622223a
NF
13150 unsigned ix;
13151 incomplete_var *iv;
0154eaa8 13152
0622223a 13153 for (ix = 0; VEC_iterate (incomplete_var, incomplete_vars, ix, iv); )
0154eaa8 13154 {
0622223a 13155 if (same_type_p (type, iv->incomplete_type))
70adf8a9 13156 {
0622223a 13157 tree var = iv->decl;
67935995 13158 tree type = TREE_TYPE (var);
c740732f
MM
13159 /* Complete the type of the variable. The VAR_DECL itself
13160 will be laid out in expand_expr. */
67935995
MM
13161 complete_type (type);
13162 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
0154eaa8 13163 /* Remove this entry from the list. */
0622223a 13164 VEC_unordered_remove (incomplete_var, incomplete_vars, ix);
f30432d7
MS
13165 }
13166 else
0622223a 13167 ix++;
f30432d7 13168 }
7fb213d8
GB
13169
13170 /* Check for pending declarations which may have abstract type. */
13171 complete_type_check_abstract (type);
8d08fdba
MS
13172}
13173
5c113154
MM
13174/* If DECL is of a type which needs a cleanup, build and return an
13175 expression to perform that cleanup here. Return NULL_TREE if no
13176 cleanup need be done. */
e92cc029 13177
86f45d2c 13178tree
11f6b451 13179cxx_maybe_build_cleanup (tree decl)
8d08fdba 13180{
5c113154
MM
13181 tree type;
13182 tree attr;
13183 tree cleanup;
13184
13185 /* Assume no cleanup is required. */
13186 cleanup = NULL_TREE;
86f45d2c 13187
5c113154
MM
13188 if (error_operand_p (decl))
13189 return cleanup;
13190
13191 /* Handle "__attribute__((cleanup))". We run the cleanup function
13192 before the destructor since the destructor is what actually
13193 terminates the lifetime of the object. */
13194 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
13195 if (attr)
13196 {
13197 tree id;
13198 tree fn;
13199 tree arg;
13200
13201 /* Get the name specified by the user for the cleanup function. */
13202 id = TREE_VALUE (TREE_VALUE (attr));
13203 /* Look up the name to find the cleanup function to call. It is
13204 important to use lookup_name here because that is what is
13205 used in c-common.c:handle_cleanup_attribute when performing
13206 initial checks on the attribute. Note that those checks
13207 include ensuring that the function found is not an overloaded
13208 function, or an object with an overloaded call operator,
39a13be5 13209 etc.; we can rely on the fact that the function found is an
5c113154
MM
13210 ordinary FUNCTION_DECL. */
13211 fn = lookup_name (id);
13212 arg = build_address (decl);
13213 mark_used (decl);
450f4293
NF
13214 cleanup = cp_build_function_call_nary (fn, tf_warning_or_error,
13215 arg, NULL_TREE);
5c113154
MM
13216 }
13217 /* Handle ordinary C++ destructors. */
13218 type = TREE_TYPE (decl);
13219 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8d08fdba 13220 {
80048418 13221 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
5775a06a
NS
13222 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
13223 && CLASSTYPE_VBASECLASSES (type));
5c113154
MM
13224 tree addr;
13225 tree call;
8d08fdba 13226
8d08fdba 13227 if (TREE_CODE (type) == ARRAY_TYPE)
5c113154 13228 addr = decl;
8d08fdba 13229 else
5818c8e4 13230 addr = build_address (decl);
8d08fdba
MS
13231
13232 /* Optimize for space over speed here. */
5775a06a 13233 if (!has_vbases || flag_expensive_optimizations)
8d08fdba
MS
13234 flags |= LOOKUP_NONVIRTUAL;
13235
5c113154 13236 call = build_delete (TREE_TYPE (addr), addr,
86f45d2c 13237 sfk_complete_destructor, flags, 0);
5c113154 13238 if (cleanup)
c2255bc4 13239 cleanup = build_compound_expr (input_location, cleanup, call);
5c113154
MM
13240 else
13241 cleanup = call;
8d08fdba 13242 }
5c113154
MM
13243
13244 return cleanup;
8d08fdba
MS
13245}
13246\f
558475f0 13247/* When a stmt has been parsed, this function is called. */
8d08fdba
MS
13248
13249void
11f6b451 13250finish_stmt (void)
8d08fdba 13251{
8d08fdba
MS
13252}
13253
7bead48f
JM
13254/* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
13255 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
13256 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
13257
13258tree
13259static_fn_type (tree memfntype)
13260{
13261 tree fntype;
13262 tree args;
7bead48f
JM
13263
13264 if (TYPE_PTRMEMFUNC_P (memfntype))
13265 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
13266 if (POINTER_TYPE_P (memfntype)
13267 || TREE_CODE (memfntype) == FUNCTION_DECL)
13268 memfntype = TREE_TYPE (memfntype);
13269 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
13270 return memfntype;
13271 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
13272 args = TYPE_ARG_TYPES (memfntype);
13273 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
2872152c 13274 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
7bead48f
JM
13275 fntype = (cp_build_type_attribute_variant
13276 (fntype, TYPE_ATTRIBUTES (memfntype)));
13277 fntype = (build_exception_variant
13278 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
13279 return fntype;
13280}
13281
3afb32a4
MM
13282/* DECL was originally constructed as a non-static member function,
13283 but turned out to be static. Update it accordingly. */
700f8a87 13284
8857f91e 13285void
11f6b451 13286revert_static_member_fn (tree decl)
8d08fdba 13287{
7bead48f 13288 TREE_TYPE (decl) = static_fn_type (decl);
8d08fdba 13289
7bead48f 13290 if (cp_type_quals (TREE_TYPE (decl)) != TYPE_UNQUALIFIED)
c4f73174 13291 error ("static member function %q#D declared with type qualifiers", decl);
f30432d7 13292
3afb32a4 13293 if (DECL_ARGUMENTS (decl))
910ad8de 13294 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
3afb32a4 13295 DECL_STATIC_FUNCTION_P (decl) = 1;
8d08fdba 13296}
a4443a08 13297
e2500fed
GK
13298/* Return which tree structure is used by T, or TS_CP_GENERIC if T is
13299 one of the language-independent trees. */
4519c0a8 13300
e2500fed 13301enum cp_tree_node_structure_enum
11f6b451 13302cp_tree_node_structure (union lang_tree_node * t)
4519c0a8 13303{
e2500fed 13304 switch (TREE_CODE (&t->generic))
4519c0a8 13305 {
a723baf1 13306 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
e2500fed 13307 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
e2500fed
GK
13308 case OVERLOAD: return TS_CP_OVERLOAD;
13309 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
13310 case PTRMEM_CST: return TS_CP_PTRMEM;
0cbd7506 13311 case BASELINK: return TS_CP_BASELINK;
54e67af0 13312 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
5d80a306 13313 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
cb68ec50 13314 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
d5f4eddd 13315 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
aa373032 13316 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
e2500fed 13317 default: return TS_CP_GENERIC;
4519c0a8
MM
13318 }
13319}
5fd8e536 13320
eaa7c03f
JM
13321/* Build the void_list_node (void_type_node having been created). */
13322tree
11f6b451 13323build_void_list_node (void)
eaa7c03f
JM
13324{
13325 tree t = build_tree_list (NULL_TREE, void_type_node);
eaa7c03f
JM
13326 return t;
13327}
13328
6de9cd9a 13329bool
11f6b451 13330cp_missing_noreturn_ok_p (tree decl)
d363e7bf
AJ
13331{
13332 /* A missing noreturn is ok for the `main' function. */
92643fea 13333 return DECL_MAIN_P (decl);
d363e7bf 13334}
e2500fed 13335
c18a5b6c
MM
13336/* Return the COMDAT group into which DECL should be placed. */
13337
fc26fae3 13338tree
c18a5b6c
MM
13339cxx_comdat_group (tree decl)
13340{
13341 tree name;
13342
13343 /* Virtual tables, construction virtual tables, and virtual table
13344 tables all go in a single COMDAT group, named after the primary
13345 virtual table. */
13346 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
13347 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
13348 /* For all other DECLs, the COMDAT group is the mangled name of the
13349 declaration itself. */
13350 else
5591e5f9
JJ
13351 {
13352 while (DECL_THUNK_P (decl))
13353 {
13354 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
13355 into the same section as the target function. In that case
13356 we must return target's name. */
13357 tree target = THUNK_TARGET (decl);
13358 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
13359 && DECL_SECTION_NAME (target) != NULL
13360 && DECL_ONE_ONLY (target))
13361 decl = target;
13362 else
13363 break;
13364 }
13365 name = DECL_ASSEMBLER_NAME (decl);
13366 }
c18a5b6c 13367
fc26fae3 13368 return name;
c18a5b6c
MM
13369}
13370
e2500fed 13371#include "gt-cp-decl.h"
This page took 9.529994 seconds and 5 git commands to generate.